capibara 1.3.21 → 1.3.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +4 -4
- package/package.json +1 -1
- package/src/lib/capibara.js +26 -9
- package/src/scss/components/_input_nav.scss +6 -2
- package/src/util/tableElements.js +112 -68
- package/src/util/utils.js +2 -2
package/dist/index.js
CHANGED
|
@@ -103,7 +103,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|
|
103
103
|
/*! no static exports found */
|
|
104
104
|
/***/ (function(module, exports, __webpack_require__) {
|
|
105
105
|
|
|
106
|
-
eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.push([module.i, \"@import url(https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,700;0,900;1,300;1,400;1,500;1,700;1,900&display=swap);\"]);\n// Module\nexports.push([module.i, \":root{--header-top-height:40px;--header-height:98px;--header-labels-height:50px;--header-day-height:24px;--ex-header-height:120px;--header-input-height:20px;--nav-width:200px;--nav-item-col-width:60px;--initial-nav-width:0px;--ex-nav-width:0px;--btn-nav-width:117px;--nav-right-width:300px;--item-min-width:100px;--item-height:45px;--day-width:45px;--font-size:16px}@-webkit-keyframes pulseMessage{0%{border-color:rgba(211,47,47,.3) rgba(211,47,47,.3) transparent transparent}to{border-color:#d32f2f #d32f2f transparent transparent}}@keyframes pulseMessage{0%{border-color:rgba(211,47,47,.3) rgba(211,47,47,.3) transparent transparent}to{border-color:#d32f2f #d32f2f transparent transparent}}@-webkit-keyframes pulseBackground{0%{background:rgba(211,47,47,.3)}to{background:#d32f2f}}@keyframes pulseBackground{0%{background:rgba(211,47,47,.3)}to{background:#d32f2f}}@-webkit-keyframes loading-fast1{0%{transform:translateX(-100%)}40%{transform:translateX(-100%)}to{transform:translateX(200%)}}@keyframes loading-fast1{0%{transform:translateX(-100%)}40%{transform:translateX(-100%)}to{transform:translateX(200%)}}@-webkit-keyframes loading-fast2{0%{transform:translateX(-100%)}15%{transform:translateX(-100%)}to{transform:translateX(200%)}}@keyframes loading-fast2{0%{transform:translateX(-100%)}15%{transform:translateX(-100%)}to{transform:translateX(200%)}}.capibara.c-red:not(.dark-theme){scrollbar-color:#df554b transparent}.capibara.c-red:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#df554b}.capibara.c-red:not(.dark-theme) .header-top{background:#fdfaf9}.capibara.c-red:not(.dark-theme) .corner{background:#fdfaf9;border-color:#f99d97}.capibara.c-red:not(.dark-theme) .container-tl header{background:#fdfaf9;border-bottom-color:#f99d97}.capibara.c-red:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#fdfaf9)!important}.capibara.c-red:not(.dark-theme) nav.right{border-color:#f99d97}.capibara.c-red.dark-theme .header-top,.capibara.c-red.dark-theme nav.right{border-color:#ba160a}.capibara.c-red.dark-theme .container-tl header,.capibara.c-red.dark-theme .corner{border-bottom-color:#ba160a}.capibara.c-red.dark-theme ::-moz-selection,.capibara.c-red ::-moz-selection{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme ::selection,.capibara.c-red ::selection{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme .progress-bar,.capibara.c-red .progress-bar{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme .progress-bar:after,.capibara.c-red.dark-theme .progress-bar:before,.capibara.c-red .progress-bar:after,.capibara.c-red .progress-bar:before{background-color:#f44336!important}.capibara.c-red.dark-theme select.tabs-select,.capibara.c-red select.tabs-select{background-color:rgba(244,67,54,.7)!important;border-color:#f44336!important}.capibara.c-red.dark-theme .time,.capibara.c-red .time{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .time .symbol,.capibara.c-red .time .symbol{color:#f44336}.capibara.c-red.dark-theme .time input:active,.capibara.c-red.dark-theme .time input:focus,.capibara.c-red .time input:active,.capibara.c-red .time input:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-box,.capibara.c-red.dark-theme .input-section select.input-select,.capibara.c-red .input-box,.capibara.c-red .input-section select.input-select{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .input-section select.input-select:active,.capibara.c-red.dark-theme .input-section select.input-select:focus,.capibara.c-red .input-section select.input-select:active,.capibara.c-red .input-section select.input-select:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-section .nav-input-file,.capibara.c-red.dark-theme .input-section input.nav-input,.capibara.c-red .input-section .nav-input-file,.capibara.c-red .input-section input.nav-input{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .input-section .nav-input-file:active,.capibara.c-red.dark-theme .input-section .nav-input-file:focus,.capibara.c-red.dark-theme .input-section input.nav-input:active,.capibara.c-red.dark-theme .input-section input.nav-input:focus,.capibara.c-red .input-section .nav-input-file:active,.capibara.c-red .input-section .nav-input-file:focus,.capibara.c-red .input-section input.nav-input:active,.capibara.c-red .input-section input.nav-input:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-red .input-section.msj-input-container textarea.msj{border:2px solid #f44336}.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-red .input-section.msj-input-container textarea.msj:active,.capibara.c-red .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red .cap-btn-raised,.capibara.c-red.dark-theme .cap-btn-raised{border-color:#f44336;background:rgba(244,67,54,.8)}.capibara.c-red .cap-btn-outline,.capibara.c-red.dark-theme .cap-btn-outline{border-color:#f44336;color:#f44336}.capibara.c-red .cap-btn-outline.selected,.capibara.c-red.dark-theme .cap-btn-outline.selected{background:rgba(244,67,54,.8)}.capibara.c-red.dark-theme .select-container .selected-day,.capibara.c-red .select-container .selected-day{background:rgba(244,67,54,.3);box-shadow:inset 0 0 10px rgba(244,67,54,.5)}.capibara .c-red--background{background:#f44336!important}.capibara .c-red-d--background{background:#d2190b!important}.capibara .c-red-l--background{background:#f8877f!important}.capibara .c-red--text{color:#f44336!important}.capibara .c-red-d--text{color:#d2190b!important}.capibara .c-red-l--text{color:#f8877f!important}.capibara .detail-day .list-detail .item-detail.c-red{background:rgba(244,67,54,.2);border:1px solid #f44336}.capibara .detail-day .list-detail .item-detail.c-red .left-icon{background:#f44336}.capibara .detail-day .list-detail .item-detail.c-red .left-icon.outlined{border:1px solid #f44336;box-shadow:inset 0 0 0 1px rgba(244,67,54,.7)}.capibara .detail-day .list-detail .item-detail.c-red .name{color:#f44336}.capibara .float-box-container .float-box span.data.c-red{--local-color:#f44336;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-red,.capibara .float-box-container .float-box .dot.c-red,.capibara .float-box-container .float-box .rowdot--row.c-red .rowdot--dot{--local-color:#f44336}.capibara .header-top .tabs-container .tab:not(.disabled).c-red.active{background:rgba(244,67,54,.7);border-color:rgba(244,67,54,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-red.active:hover{background:rgba(244,67,54,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-red:hover{background:rgba(244,67,54,.2);border-color:rgba(244,67,54,.9)}.capibara .input-box .mini-input-section--icon.c-red{background:#f44336}.capibara.c-pink:not(.dark-theme){scrollbar-color:#d0376b transparent}.capibara.c-pink:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#d0376b}.capibara.c-pink:not(.dark-theme) .header-top{background:#f0e3e7}.capibara.c-pink:not(.dark-theme) .corner{background:#f0e3e7;border-color:#f27ba3}.capibara.c-pink:not(.dark-theme) .container-tl header{background:#f0e3e7;border-bottom-color:#f27ba3}.capibara.c-pink:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f0e3e7)!important}.capibara.c-pink:not(.dark-theme) nav.right{border-color:#f27ba3}.capibara.c-pink.dark-theme .header-top,.capibara.c-pink.dark-theme nav.right{border-color:#930e3b}.capibara.c-pink.dark-theme .container-tl header,.capibara.c-pink.dark-theme .corner{border-bottom-color:#930e3b}.capibara.c-pink.dark-theme ::-moz-selection,.capibara.c-pink ::-moz-selection{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme ::selection,.capibara.c-pink ::selection{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme .progress-bar,.capibara.c-pink .progress-bar{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme .progress-bar:after,.capibara.c-pink.dark-theme .progress-bar:before,.capibara.c-pink .progress-bar:after,.capibara.c-pink .progress-bar:before{background-color:#e91e63!important}.capibara.c-pink.dark-theme select.tabs-select,.capibara.c-pink select.tabs-select{background-color:rgba(233,30,99,.7)!important;border-color:#e91e63!important}.capibara.c-pink.dark-theme .time,.capibara.c-pink .time{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .time .symbol,.capibara.c-pink .time .symbol{color:#e91e63}.capibara.c-pink.dark-theme .time input:active,.capibara.c-pink.dark-theme .time input:focus,.capibara.c-pink .time input:active,.capibara.c-pink .time input:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-box,.capibara.c-pink.dark-theme .input-section select.input-select,.capibara.c-pink .input-box,.capibara.c-pink .input-section select.input-select{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .input-section select.input-select:active,.capibara.c-pink.dark-theme .input-section select.input-select:focus,.capibara.c-pink .input-section select.input-select:active,.capibara.c-pink .input-section select.input-select:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-section .nav-input-file,.capibara.c-pink.dark-theme .input-section input.nav-input,.capibara.c-pink .input-section .nav-input-file,.capibara.c-pink .input-section input.nav-input{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .input-section .nav-input-file:active,.capibara.c-pink.dark-theme .input-section .nav-input-file:focus,.capibara.c-pink.dark-theme .input-section input.nav-input:active,.capibara.c-pink.dark-theme .input-section input.nav-input:focus,.capibara.c-pink .input-section .nav-input-file:active,.capibara.c-pink .input-section .nav-input-file:focus,.capibara.c-pink .input-section input.nav-input:active,.capibara.c-pink .input-section input.nav-input:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-pink .input-section.msj-input-container textarea.msj{border:2px solid #e91e63}.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-pink .input-section.msj-input-container textarea.msj:active,.capibara.c-pink .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink .cap-btn-raised,.capibara.c-pink.dark-theme .cap-btn-raised{border-color:#e91e63;background:rgba(233,30,99,.8)}.capibara.c-pink .cap-btn-outline,.capibara.c-pink.dark-theme .cap-btn-outline{border-color:#e91e63;color:#e91e63}.capibara.c-pink .cap-btn-outline.selected,.capibara.c-pink.dark-theme .cap-btn-outline.selected{background:rgba(233,30,99,.8)}.capibara.c-pink.dark-theme .select-container .selected-day,.capibara.c-pink .select-container .selected-day{background:rgba(233,30,99,.3);box-shadow:inset 0 0 10px rgba(233,30,99,.5)}.capibara .c-pink--background{background:#e91e63!important}.capibara .c-pink-d--background{background:#aa1145!important}.capibara .c-pink-l--background{background:#f06493!important}.capibara .c-pink--text{color:#e91e63!important}.capibara .c-pink-d--text{color:#aa1145!important}.capibara .c-pink-l--text{color:#f06493!important}.capibara .detail-day .list-detail .item-detail.c-pink{background:rgba(233,30,99,.2);border:1px solid #e91e63}.capibara .detail-day .list-detail .item-detail.c-pink .left-icon{background:#e91e63}.capibara .detail-day .list-detail .item-detail.c-pink .left-icon.outlined{border:1px solid #e91e63;box-shadow:inset 0 0 0 1px rgba(233,30,99,.7)}.capibara .detail-day .list-detail .item-detail.c-pink .name{color:#e91e63}.capibara .float-box-container .float-box span.data.c-pink{--local-color:#e91e63;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-pink,.capibara .float-box-container .float-box .dot.c-pink,.capibara .float-box-container .float-box .rowdot--row.c-pink .rowdot--dot{--local-color:#e91e63}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink.active{background:rgba(233,30,99,.7);border-color:rgba(233,30,99,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink.active:hover{background:rgba(233,30,99,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink:hover{background:rgba(233,30,99,.2);border-color:rgba(233,30,99,.9)}.capibara .input-box .mini-input-section--icon.c-pink{background:#e91e63}.capibara.c-purple:not(.dark-theme){scrollbar-color:#8d3d9b transparent}.capibara.c-purple:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#8d3d9b}.capibara.c-purple:not(.dark-theme) .header-top{background:#d6cbd8}.capibara.c-purple:not(.dark-theme) .corner{background:#d6cbd8;border-color:#ca61dc}.capibara.c-purple:not(.dark-theme) .container-tl header{background:#d6cbd8;border-bottom-color:#ca61dc}.capibara.c-purple:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d6cbd8)!important}.capibara.c-purple:not(.dark-theme) nav.right{border-color:#ca61dc}.capibara.c-purple.dark-theme .header-top,.capibara.c-purple.dark-theme nav.right{border-color:#52145d}.capibara.c-purple.dark-theme .container-tl header,.capibara.c-purple.dark-theme .corner{border-bottom-color:#52145d}.capibara.c-purple.dark-theme ::-moz-selection,.capibara.c-purple ::-moz-selection{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme ::selection,.capibara.c-purple ::selection{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme .progress-bar,.capibara.c-purple .progress-bar{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme .progress-bar:after,.capibara.c-purple.dark-theme .progress-bar:before,.capibara.c-purple .progress-bar:after,.capibara.c-purple .progress-bar:before{background-color:#9c27b0!important}.capibara.c-purple.dark-theme select.tabs-select,.capibara.c-purple select.tabs-select{background-color:rgba(156,39,176,.7)!important;border-color:#9c27b0!important}.capibara.c-purple.dark-theme .time,.capibara.c-purple .time{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .time .symbol,.capibara.c-purple .time .symbol{color:#9c27b0}.capibara.c-purple.dark-theme .time input:active,.capibara.c-purple.dark-theme .time input:focus,.capibara.c-purple .time input:active,.capibara.c-purple .time input:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-box,.capibara.c-purple.dark-theme .input-section select.input-select,.capibara.c-purple .input-box,.capibara.c-purple .input-section select.input-select{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .input-section select.input-select:active,.capibara.c-purple.dark-theme .input-section select.input-select:focus,.capibara.c-purple .input-section select.input-select:active,.capibara.c-purple .input-section select.input-select:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-section .nav-input-file,.capibara.c-purple.dark-theme .input-section input.nav-input,.capibara.c-purple .input-section .nav-input-file,.capibara.c-purple .input-section input.nav-input{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .input-section .nav-input-file:active,.capibara.c-purple.dark-theme .input-section .nav-input-file:focus,.capibara.c-purple.dark-theme .input-section input.nav-input:active,.capibara.c-purple.dark-theme .input-section input.nav-input:focus,.capibara.c-purple .input-section .nav-input-file:active,.capibara.c-purple .input-section .nav-input-file:focus,.capibara.c-purple .input-section input.nav-input:active,.capibara.c-purple .input-section input.nav-input:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-purple .input-section.msj-input-container textarea.msj{border:2px solid #9c27b0}.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-purple .input-section.msj-input-container textarea.msj:active,.capibara.c-purple .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple .cap-btn-raised,.capibara.c-purple.dark-theme .cap-btn-raised{border-color:#9c27b0;background:rgba(156,39,176,.8)}.capibara.c-purple .cap-btn-outline,.capibara.c-purple.dark-theme .cap-btn-outline{border-color:#9c27b0;color:#9c27b0}.capibara.c-purple .cap-btn-outline.selected,.capibara.c-purple.dark-theme .cap-btn-outline.selected{background:rgba(156,39,176,.8)}.capibara.c-purple.dark-theme .select-container .selected-day,.capibara.c-purple .select-container .selected-day{background:rgba(156,39,176,.3);box-shadow:inset 0 0 10px rgba(156,39,176,.5)}.capibara .c-purple--background{background:#9c27b0!important}.capibara .c-purple-d--background{background:#641971!important}.capibara .c-purple-l--background{background:#c34cd7!important}.capibara .c-purple--text{color:#9c27b0!important}.capibara .c-purple-d--text{color:#641971!important}.capibara .c-purple-l--text{color:#c34cd7!important}.capibara .detail-day .list-detail .item-detail.c-purple{background:rgba(156,39,176,.2);border:1px solid #9c27b0}.capibara .detail-day .list-detail .item-detail.c-purple .left-icon{background:#9c27b0}.capibara .detail-day .list-detail .item-detail.c-purple .left-icon.outlined{border:1px solid #9c27b0;box-shadow:inset 0 0 0 1px rgba(156,39,176,.7)}.capibara .detail-day .list-detail .item-detail.c-purple .name{color:#9c27b0}.capibara .float-box-container .float-box span.data.c-purple{--local-color:#9c27b0;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-purple,.capibara .float-box-container .float-box .dot.c-purple,.capibara .float-box-container .float-box .rowdot--row.c-purple .rowdot--dot{--local-color:#9c27b0}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple.active{background:rgba(156,39,176,.7);border-color:rgba(156,39,176,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple.active:hover{background:rgba(156,39,176,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple:hover{background:rgba(156,39,176,.2);border-color:rgba(156,39,176,.9)}.capibara .input-box .mini-input-section--icon.c-purple{background:#9c27b0}.capibara.c-deep-purple:not(.dark-theme){scrollbar-color:#6e529f transparent}.capibara.c-deep-purple:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#6e529f}.capibara.c-deep-purple:not(.dark-theme) .header-top{background:#dededf}.capibara.c-deep-purple:not(.dark-theme) .corner{background:#dededf;border-color:#9f80d7}.capibara.c-deep-purple:not(.dark-theme) .container-tl header{background:#dededf;border-bottom-color:#9f80d7}.capibara.c-deep-purple:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#dededf)!important}.capibara.c-deep-purple:not(.dark-theme) nav.right{border-color:#9f80d7}.capibara.c-deep-purple.dark-theme .header-top,.capibara.c-deep-purple.dark-theme nav.right{border-color:#3b216a}.capibara.c-deep-purple.dark-theme .container-tl header,.capibara.c-deep-purple.dark-theme .corner{border-bottom-color:#3b216a}.capibara.c-deep-purple.dark-theme ::-moz-selection,.capibara.c-deep-purple ::-moz-selection{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme ::selection,.capibara.c-deep-purple ::selection{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme .progress-bar,.capibara.c-deep-purple .progress-bar{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme .progress-bar:after,.capibara.c-deep-purple.dark-theme .progress-bar:before,.capibara.c-deep-purple .progress-bar:after,.capibara.c-deep-purple .progress-bar:before{background-color:#673ab7!important}.capibara.c-deep-purple.dark-theme select.tabs-select,.capibara.c-deep-purple select.tabs-select{background-color:rgba(103,58,183,.7)!important;border-color:#673ab7!important}.capibara.c-deep-purple.dark-theme .time,.capibara.c-deep-purple .time{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .time .symbol,.capibara.c-deep-purple .time .symbol{color:#673ab7}.capibara.c-deep-purple.dark-theme .time input:active,.capibara.c-deep-purple.dark-theme .time input:focus,.capibara.c-deep-purple .time input:active,.capibara.c-deep-purple .time input:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-box,.capibara.c-deep-purple.dark-theme .input-section select.input-select,.capibara.c-deep-purple .input-box,.capibara.c-deep-purple .input-section select.input-select{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .input-section select.input-select:active,.capibara.c-deep-purple.dark-theme .input-section select.input-select:focus,.capibara.c-deep-purple .input-section select.input-select:active,.capibara.c-deep-purple .input-section select.input-select:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-section .nav-input-file,.capibara.c-deep-purple.dark-theme .input-section input.nav-input,.capibara.c-deep-purple .input-section .nav-input-file,.capibara.c-deep-purple .input-section input.nav-input{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .input-section .nav-input-file:active,.capibara.c-deep-purple.dark-theme .input-section .nav-input-file:focus,.capibara.c-deep-purple.dark-theme .input-section input.nav-input:active,.capibara.c-deep-purple.dark-theme .input-section input.nav-input:focus,.capibara.c-deep-purple .input-section .nav-input-file:active,.capibara.c-deep-purple .input-section .nav-input-file:focus,.capibara.c-deep-purple .input-section input.nav-input:active,.capibara.c-deep-purple .input-section input.nav-input:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj{border:2px solid #673ab7}.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple .cap-btn-raised,.capibara.c-deep-purple.dark-theme .cap-btn-raised{border-color:#673ab7;background:rgba(103,58,183,.8)}.capibara.c-deep-purple .cap-btn-outline,.capibara.c-deep-purple.dark-theme .cap-btn-outline{border-color:#673ab7;color:#673ab7}.capibara.c-deep-purple .cap-btn-outline.selected,.capibara.c-deep-purple.dark-theme .cap-btn-outline.selected{background:rgba(103,58,183,.8)}.capibara.c-deep-purple.dark-theme .select-container .selected-day,.capibara.c-deep-purple .select-container .selected-day{background:rgba(103,58,183,.3);box-shadow:inset 0 0 10px rgba(103,58,183,.5)}.capibara .c-deep-purple--background{background:#673ab7!important}.capibara .c-deep-purple-d--background{background:#46287d!important}.capibara .c-deep-purple-l--background{background:#916dd1!important}.capibara .c-deep-purple--text{color:#673ab7!important}.capibara .c-deep-purple-d--text{color:#46287d!important}.capibara .c-deep-purple-l--text{color:#916dd1!important}.capibara .detail-day .list-detail .item-detail.c-deep-purple{background:rgba(103,58,183,.2);border:1px solid #673ab7}.capibara .detail-day .list-detail .item-detail.c-deep-purple .left-icon{background:#673ab7}.capibara .detail-day .list-detail .item-detail.c-deep-purple .left-icon.outlined{border:1px solid #673ab7;box-shadow:inset 0 0 0 1px rgba(103,58,183,.7)}.capibara .detail-day .list-detail .item-detail.c-deep-purple .name{color:#673ab7}.capibara .float-box-container .float-box span.data.c-deep-purple{--local-color:#673ab7;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-deep-purple,.capibara .float-box-container .float-box .dot.c-deep-purple,.capibara .float-box-container .float-box .rowdot--row.c-deep-purple .rowdot--dot{--local-color:#673ab7}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple.active{background:rgba(103,58,183,.7);border-color:rgba(103,58,183,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple.active:hover{background:rgba(103,58,183,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple:hover{background:rgba(103,58,183,.2);border-color:rgba(103,58,183,.9)}.capibara .input-box .mini-input-section--icon.c-deep-purple{background:#673ab7}.capibara.c-indigo:not(.dark-theme){scrollbar-color:#57629d transparent}.capibara.c-indigo:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#57629d}.capibara.c-indigo:not(.dark-theme) .header-top{background:#e0e0e0}.capibara.c-indigo:not(.dark-theme) .corner{background:#e0e0e0;border-color:#8591d5}.capibara.c-indigo:not(.dark-theme) .container-tl header{background:#e0e0e0;border-bottom-color:#8591d5}.capibara.c-indigo:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#e0e0e0)!important}.capibara.c-indigo:not(.dark-theme) nav.right{border-color:#8591d5}.capibara.c-indigo.dark-theme .header-top,.capibara.c-indigo.dark-theme nav.right{border-color:#252f69}.capibara.c-indigo.dark-theme .container-tl header,.capibara.c-indigo.dark-theme .corner{border-bottom-color:#252f69}.capibara.c-indigo.dark-theme ::-moz-selection,.capibara.c-indigo ::-moz-selection{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme ::selection,.capibara.c-indigo ::selection{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme .progress-bar,.capibara.c-indigo .progress-bar{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme .progress-bar:after,.capibara.c-indigo.dark-theme .progress-bar:before,.capibara.c-indigo .progress-bar:after,.capibara.c-indigo .progress-bar:before{background-color:#3f51b5!important}.capibara.c-indigo.dark-theme select.tabs-select,.capibara.c-indigo select.tabs-select{background-color:rgba(63,81,181,.7)!important;border-color:#3f51b5!important}.capibara.c-indigo.dark-theme .time,.capibara.c-indigo .time{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .time .symbol,.capibara.c-indigo .time .symbol{color:#3f51b5}.capibara.c-indigo.dark-theme .time input:active,.capibara.c-indigo.dark-theme .time input:focus,.capibara.c-indigo .time input:active,.capibara.c-indigo .time input:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-box,.capibara.c-indigo.dark-theme .input-section select.input-select,.capibara.c-indigo .input-box,.capibara.c-indigo .input-section select.input-select{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .input-section select.input-select:active,.capibara.c-indigo.dark-theme .input-section select.input-select:focus,.capibara.c-indigo .input-section select.input-select:active,.capibara.c-indigo .input-section select.input-select:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-section .nav-input-file,.capibara.c-indigo.dark-theme .input-section input.nav-input,.capibara.c-indigo .input-section .nav-input-file,.capibara.c-indigo .input-section input.nav-input{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .input-section .nav-input-file:active,.capibara.c-indigo.dark-theme .input-section .nav-input-file:focus,.capibara.c-indigo.dark-theme .input-section input.nav-input:active,.capibara.c-indigo.dark-theme .input-section input.nav-input:focus,.capibara.c-indigo .input-section .nav-input-file:active,.capibara.c-indigo .input-section .nav-input-file:focus,.capibara.c-indigo .input-section input.nav-input:active,.capibara.c-indigo .input-section input.nav-input:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-indigo .input-section.msj-input-container textarea.msj{border:2px solid #3f51b5}.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-indigo .input-section.msj-input-container textarea.msj:active,.capibara.c-indigo .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo .cap-btn-raised,.capibara.c-indigo.dark-theme .cap-btn-raised{border-color:#3f51b5;background:rgba(63,81,181,.8)}.capibara.c-indigo .cap-btn-outline,.capibara.c-indigo.dark-theme .cap-btn-outline{border-color:#3f51b5;color:#3f51b5}.capibara.c-indigo .cap-btn-outline.selected,.capibara.c-indigo.dark-theme .cap-btn-outline.selected{background:rgba(63,81,181,.8)}.capibara.c-indigo.dark-theme .select-container .selected-day,.capibara.c-indigo .select-container .selected-day{background:rgba(63,81,181,.3);box-shadow:inset 0 0 10px rgba(63,81,181,.5)}.capibara .c-indigo--background{background:#3f51b5!important}.capibara .c-indigo-d--background{background:#2b387c!important}.capibara .c-indigo-l--background{background:#7280ce!important}.capibara .c-indigo--text{color:#3f51b5!important}.capibara .c-indigo-d--text{color:#2b387c!important}.capibara .c-indigo-l--text{color:#7280ce!important}.capibara .detail-day .list-detail .item-detail.c-indigo{background:rgba(63,81,181,.2);border:1px solid #3f51b5}.capibara .detail-day .list-detail .item-detail.c-indigo .left-icon{background:#3f51b5}.capibara .detail-day .list-detail .item-detail.c-indigo .left-icon.outlined{border:1px solid #3f51b5;box-shadow:inset 0 0 0 1px rgba(63,81,181,.7)}.capibara .detail-day .list-detail .item-detail.c-indigo .name{color:#3f51b5}.capibara .float-box-container .float-box span.data.c-indigo{--local-color:#3f51b5;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-indigo,.capibara .float-box-container .float-box .dot.c-indigo,.capibara .float-box-container .float-box .rowdot--row.c-indigo .rowdot--dot{--local-color:#3f51b5}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo.active{background:rgba(63,81,181,.7);border-color:rgba(63,81,181,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo.active:hover{background:rgba(63,81,181,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo:hover{background:rgba(63,81,181,.2);border-color:rgba(63,81,181,.9)}.capibara .input-box .mini-input-section--icon.c-indigo{background:#3f51b5}.capibara.c-blue:not(.dark-theme){scrollbar-color:#3176bb transparent}.capibara.c-blue:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#3176bb}.capibara.c-blue:not(.dark-theme) .header-top{background:#d1dce6}.capibara.c-blue:not(.dark-theme) .corner{background:#d1dce6;border-color:#64a9ed}.capibara.c-blue:not(.dark-theme) .container-tl header{background:#d1dce6;border-bottom-color:#64a9ed}.capibara.c-blue:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d1dce6)!important}.capibara.c-blue:not(.dark-theme) nav.right{border-color:#64a9ed}.capibara.c-blue.dark-theme .header-top,.capibara.c-blue.dark-theme nav.right{border-color:#0e4377}.capibara.c-blue.dark-theme .container-tl header,.capibara.c-blue.dark-theme .corner{border-bottom-color:#0e4377}.capibara.c-blue.dark-theme ::-moz-selection,.capibara.c-blue ::-moz-selection{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme ::selection,.capibara.c-blue ::selection{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme .progress-bar,.capibara.c-blue .progress-bar{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme .progress-bar:after,.capibara.c-blue.dark-theme .progress-bar:before,.capibara.c-blue .progress-bar:after,.capibara.c-blue .progress-bar:before{background-color:#1976d2!important}.capibara.c-blue.dark-theme select.tabs-select,.capibara.c-blue select.tabs-select{background-color:rgba(25,118,210,.7)!important;border-color:#1976d2!important}.capibara.c-blue.dark-theme .time,.capibara.c-blue .time{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .time .symbol,.capibara.c-blue .time .symbol{color:#1976d2}.capibara.c-blue.dark-theme .time input:active,.capibara.c-blue.dark-theme .time input:focus,.capibara.c-blue .time input:active,.capibara.c-blue .time input:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-box,.capibara.c-blue.dark-theme .input-section select.input-select,.capibara.c-blue .input-box,.capibara.c-blue .input-section select.input-select{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .input-section select.input-select:active,.capibara.c-blue.dark-theme .input-section select.input-select:focus,.capibara.c-blue .input-section select.input-select:active,.capibara.c-blue .input-section select.input-select:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-section .nav-input-file,.capibara.c-blue.dark-theme .input-section input.nav-input,.capibara.c-blue .input-section .nav-input-file,.capibara.c-blue .input-section input.nav-input{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .input-section .nav-input-file:active,.capibara.c-blue.dark-theme .input-section .nav-input-file:focus,.capibara.c-blue.dark-theme .input-section input.nav-input:active,.capibara.c-blue.dark-theme .input-section input.nav-input:focus,.capibara.c-blue .input-section .nav-input-file:active,.capibara.c-blue .input-section .nav-input-file:focus,.capibara.c-blue .input-section input.nav-input:active,.capibara.c-blue .input-section input.nav-input:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-blue .input-section.msj-input-container textarea.msj{border:2px solid #1976d2}.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-blue .input-section.msj-input-container textarea.msj:active,.capibara.c-blue .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue .cap-btn-raised,.capibara.c-blue.dark-theme .cap-btn-raised{border-color:#1976d2;background:rgba(25,118,210,.8)}.capibara.c-blue .cap-btn-outline,.capibara.c-blue.dark-theme .cap-btn-outline{border-color:#1976d2;color:#1976d2}.capibara.c-blue .cap-btn-outline.selected,.capibara.c-blue.dark-theme .cap-btn-outline.selected{background:rgba(25,118,210,.8)}.capibara.c-blue.dark-theme .select-container .selected-day,.capibara.c-blue .select-container .selected-day{background:rgba(25,118,210,.3);box-shadow:inset 0 0 10px rgba(25,118,210,.5)}.capibara .c-blue--background{background:#1976d2!important}.capibara .c-blue-d--background{background:#11508e!important}.capibara .c-blue-l--background{background:#4e9cea!important}.capibara .c-blue--text{color:#1976d2!important}.capibara .c-blue-d--text{color:#11508e!important}.capibara .c-blue-l--text{color:#4e9cea!important}.capibara .detail-day .list-detail .item-detail.c-blue{background:rgba(25,118,210,.2);border:1px solid #1976d2}.capibara .detail-day .list-detail .item-detail.c-blue .left-icon{background:#1976d2}.capibara .detail-day .list-detail .item-detail.c-blue .left-icon.outlined{border:1px solid #1976d2;box-shadow:inset 0 0 0 1px rgba(25,118,210,.7)}.capibara .detail-day .list-detail .item-detail.c-blue .name{color:#1976d2}.capibara .float-box-container .float-box span.data.c-blue{--local-color:#1976d2;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-blue,.capibara .float-box-container .float-box .dot.c-blue,.capibara .float-box-container .float-box .rowdot--row.c-blue .rowdot--dot{--local-color:#1976d2}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue.active{background:rgba(25,118,210,.7);border-color:rgba(25,118,210,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue.active:hover{background:rgba(25,118,210,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue:hover{background:rgba(25,118,210,.2);border-color:rgba(25,118,210,.9)}.capibara .input-box .mini-input-section--icon.c-blue{background:#1976d2}.capibara.c-light-blue:not(.dark-theme){scrollbar-color:#1ca0db transparent}.capibara.c-light-blue:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#1ca0db}.capibara.c-light-blue:not(.dark-theme) .header-top{background:#d3e7f0}.capibara.c-light-blue:not(.dark-theme) .corner{background:#d3e7f0;border-color:#60ccfd}.capibara.c-light-blue:not(.dark-theme) .container-tl header{background:#d3e7f0;border-bottom-color:#60ccfd}.capibara.c-light-blue:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d3e7f0)!important}.capibara.c-light-blue:not(.dark-theme) nav.right{border-color:#60ccfd}.capibara.c-light-blue.dark-theme .header-top,.capibara.c-light-blue.dark-theme nav.right{border-color:#02638f}.capibara.c-light-blue.dark-theme .container-tl header,.capibara.c-light-blue.dark-theme .corner{border-bottom-color:#02638f}.capibara.c-light-blue.dark-theme ::-moz-selection,.capibara.c-light-blue ::-moz-selection{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme ::selection,.capibara.c-light-blue ::selection{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme .progress-bar,.capibara.c-light-blue .progress-bar{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme .progress-bar:after,.capibara.c-light-blue.dark-theme .progress-bar:before,.capibara.c-light-blue .progress-bar:after,.capibara.c-light-blue .progress-bar:before{background-color:#03a9f4!important}.capibara.c-light-blue.dark-theme select.tabs-select,.capibara.c-light-blue select.tabs-select{background-color:rgba(3,169,244,.7)!important;border-color:#03a9f4!important}.capibara.c-light-blue.dark-theme .time,.capibara.c-light-blue .time{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .time .symbol,.capibara.c-light-blue .time .symbol{color:#03a9f4}.capibara.c-light-blue.dark-theme .time input:active,.capibara.c-light-blue.dark-theme .time input:focus,.capibara.c-light-blue .time input:active,.capibara.c-light-blue .time input:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-box,.capibara.c-light-blue.dark-theme .input-section select.input-select,.capibara.c-light-blue .input-box,.capibara.c-light-blue .input-section select.input-select{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .input-section select.input-select:active,.capibara.c-light-blue.dark-theme .input-section select.input-select:focus,.capibara.c-light-blue .input-section select.input-select:active,.capibara.c-light-blue .input-section select.input-select:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-section .nav-input-file,.capibara.c-light-blue.dark-theme .input-section input.nav-input,.capibara.c-light-blue .input-section .nav-input-file,.capibara.c-light-blue .input-section input.nav-input{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .input-section .nav-input-file:active,.capibara.c-light-blue.dark-theme .input-section .nav-input-file:focus,.capibara.c-light-blue.dark-theme .input-section input.nav-input:active,.capibara.c-light-blue.dark-theme .input-section input.nav-input:focus,.capibara.c-light-blue .input-section .nav-input-file:active,.capibara.c-light-blue .input-section .nav-input-file:focus,.capibara.c-light-blue .input-section input.nav-input:active,.capibara.c-light-blue .input-section input.nav-input:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-light-blue .input-section.msj-input-container textarea.msj{border:2px solid #03a9f4}.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-light-blue .input-section.msj-input-container textarea.msj:active,.capibara.c-light-blue .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue .cap-btn-raised,.capibara.c-light-blue.dark-theme .cap-btn-raised{border-color:#03a9f4;background:rgba(3,169,244,.8)}.capibara.c-light-blue .cap-btn-outline,.capibara.c-light-blue.dark-theme .cap-btn-outline{border-color:#03a9f4;color:#03a9f4}.capibara.c-light-blue .cap-btn-outline.selected,.capibara.c-light-blue.dark-theme .cap-btn-outline.selected{background:rgba(3,169,244,.8)}.capibara.c-light-blue.dark-theme .select-container .selected-day,.capibara.c-light-blue .select-container .selected-day{background:rgba(3,169,244,.3);box-shadow:inset 0 0 10px rgba(3,169,244,.5)}.capibara .c-light-blue--background{background:#03a9f4!important}.capibara .c-light-blue-d--background{background:#0275a8!important}.capibara .c-light-blue-l--background{background:#47c4fd!important}.capibara .c-light-blue--text{color:#03a9f4!important}.capibara .c-light-blue-d--text{color:#0275a8!important}.capibara .c-light-blue-l--text{color:#47c4fd!important}.capibara .detail-day .list-detail .item-detail.c-light-blue{background:rgba(3,169,244,.2);border:1px solid #03a9f4}.capibara .detail-day .list-detail .item-detail.c-light-blue .left-icon{background:#03a9f4}.capibara .detail-day .list-detail .item-detail.c-light-blue .left-icon.outlined{border:1px solid #03a9f4;box-shadow:inset 0 0 0 1px rgba(3,169,244,.7)}.capibara .detail-day .list-detail .item-detail.c-light-blue .name{color:#03a9f4}.capibara .float-box-container .float-box span.data.c-light-blue{--local-color:#03a9f4;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-light-blue,.capibara .float-box-container .float-box .dot.c-light-blue,.capibara .float-box-container .float-box .rowdot--row.c-light-blue .rowdot--dot{--local-color:#03a9f4}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue.active{background:rgba(3,169,244,.7);border-color:rgba(3,169,244,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue.active:hover{background:rgba(3,169,244,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue:hover{background:rgba(3,169,244,.2);border-color:rgba(3,169,244,.9)}.capibara .input-box .mini-input-section--icon.c-light-blue{background:#03a9f4}.capibara.c-cyan:not(.dark-theme){scrollbar-color:#15acbf transparent}.capibara.c-cyan:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#15acbf}.capibara.c-cyan:not(.dark-theme) .header-top{background:#b9e2e8}.capibara.c-cyan:not(.dark-theme) .corner{background:#b9e2e8;border-color:#3be9ff}.capibara.c-cyan:not(.dark-theme) .container-tl header{background:#b9e2e8;border-bottom-color:#3be9ff}.capibara.c-cyan:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#b9e2e8)!important}.capibara.c-cyan:not(.dark-theme) nav.right{border-color:#3be9ff}.capibara.c-cyan.dark-theme .header-top,.capibara.c-cyan.dark-theme nav.right{border-color:#00626e}.capibara.c-cyan.dark-theme .container-tl header,.capibara.c-cyan.dark-theme .corner{border-bottom-color:#00626e}.capibara.c-cyan.dark-theme ::-moz-selection,.capibara.c-cyan ::-moz-selection{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme ::selection,.capibara.c-cyan ::selection{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme .progress-bar,.capibara.c-cyan .progress-bar{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme .progress-bar:after,.capibara.c-cyan.dark-theme .progress-bar:before,.capibara.c-cyan .progress-bar:after,.capibara.c-cyan .progress-bar:before{background-color:#00bcd4!important}.capibara.c-cyan.dark-theme select.tabs-select,.capibara.c-cyan select.tabs-select{background-color:rgba(0,188,212,.7)!important;border-color:#00bcd4!important}.capibara.c-cyan.dark-theme .time,.capibara.c-cyan .time{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .time .symbol,.capibara.c-cyan .time .symbol{color:#00bcd4}.capibara.c-cyan.dark-theme .time input:active,.capibara.c-cyan.dark-theme .time input:focus,.capibara.c-cyan .time input:active,.capibara.c-cyan .time input:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-box,.capibara.c-cyan.dark-theme .input-section select.input-select,.capibara.c-cyan .input-box,.capibara.c-cyan .input-section select.input-select{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .input-section select.input-select:active,.capibara.c-cyan.dark-theme .input-section select.input-select:focus,.capibara.c-cyan .input-section select.input-select:active,.capibara.c-cyan .input-section select.input-select:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-section .nav-input-file,.capibara.c-cyan.dark-theme .input-section input.nav-input,.capibara.c-cyan .input-section .nav-input-file,.capibara.c-cyan .input-section input.nav-input{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .input-section .nav-input-file:active,.capibara.c-cyan.dark-theme .input-section .nav-input-file:focus,.capibara.c-cyan.dark-theme .input-section input.nav-input:active,.capibara.c-cyan.dark-theme .input-section input.nav-input:focus,.capibara.c-cyan .input-section .nav-input-file:active,.capibara.c-cyan .input-section .nav-input-file:focus,.capibara.c-cyan .input-section input.nav-input:active,.capibara.c-cyan .input-section input.nav-input:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-cyan .input-section.msj-input-container textarea.msj{border:2px solid #00bcd4}.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-cyan .input-section.msj-input-container textarea.msj:active,.capibara.c-cyan .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan .cap-btn-raised,.capibara.c-cyan.dark-theme .cap-btn-raised{border-color:#00bcd4;background:rgba(0,188,212,.8)}.capibara.c-cyan .cap-btn-outline,.capibara.c-cyan.dark-theme .cap-btn-outline{border-color:#00bcd4;color:#00bcd4}.capibara.c-cyan .cap-btn-outline.selected,.capibara.c-cyan.dark-theme .cap-btn-outline.selected{background:rgba(0,188,212,.8)}.capibara.c-cyan.dark-theme .select-container .selected-day,.capibara.c-cyan .select-container .selected-day{background:rgba(0,188,212,.3);box-shadow:inset 0 0 10px rgba(0,188,212,.5)}.capibara .c-cyan--background{background:#00bcd4!important}.capibara .c-cyan-d--background{background:#007888!important}.capibara .c-cyan-l--background{background:#22e6ff!important}.capibara .c-cyan--text{color:#00bcd4!important}.capibara .c-cyan-d--text{color:#007888!important}.capibara .c-cyan-l--text{color:#22e6ff!important}.capibara .detail-day .list-detail .item-detail.c-cyan{background:rgba(0,188,212,.2);border:1px solid #00bcd4}.capibara .detail-day .list-detail .item-detail.c-cyan .left-icon{background:#00bcd4}.capibara .detail-day .list-detail .item-detail.c-cyan .left-icon.outlined{border:1px solid #00bcd4;box-shadow:inset 0 0 0 1px rgba(0,188,212,.7)}.capibara .detail-day .list-detail .item-detail.c-cyan .name{color:#00bcd4}.capibara .float-box-container .float-box span.data.c-cyan{--local-color:#00bcd4;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-cyan,.capibara .float-box-container .float-box .dot.c-cyan,.capibara .float-box-container .float-box .rowdot--row.c-cyan .rowdot--dot{--local-color:#00bcd4}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan.active{background:rgba(0,188,212,.7);border-color:rgba(0,188,212,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan.active:hover{background:rgba(0,188,212,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan:hover{background:rgba(0,188,212,.2);border-color:rgba(0,188,212,.9)}.capibara .input-box .mini-input-section--icon.c-cyan{background:#00bcd4}.capibara.c-teal:not(.dark-theme){scrollbar-color:#0f877c transparent}.capibara.c-teal:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#0f877c}.capibara.c-teal:not(.dark-theme) .header-top{background:#8ad8d1}.capibara.c-teal:not(.dark-theme) .corner{background:#8ad8d1;border-color:#00fce4}.capibara.c-teal:not(.dark-theme) .container-tl header{background:#8ad8d1;border-bottom-color:#00fce4}.capibara.c-teal:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#8ad8d1)!important}.capibara.c-teal:not(.dark-theme) nav.right{border-color:#00fce4}.capibara.c-teal.dark-theme .header-top,.capibara.c-teal.dark-theme nav.right{border-color:#00302c}.capibara.c-teal.dark-theme .container-tl header,.capibara.c-teal.dark-theme .corner{border-bottom-color:#00302c}.capibara.c-teal.dark-theme ::-moz-selection,.capibara.c-teal ::-moz-selection{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme ::selection,.capibara.c-teal ::selection{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme .progress-bar,.capibara.c-teal .progress-bar{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme .progress-bar:after,.capibara.c-teal.dark-theme .progress-bar:before,.capibara.c-teal .progress-bar:after,.capibara.c-teal .progress-bar:before{background-color:#009688!important}.capibara.c-teal.dark-theme select.tabs-select,.capibara.c-teal select.tabs-select{background-color:rgba(0,150,136,.7)!important;border-color:#009688!important}.capibara.c-teal.dark-theme .time,.capibara.c-teal .time{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .time .symbol,.capibara.c-teal .time .symbol{color:#009688}.capibara.c-teal.dark-theme .time input:active,.capibara.c-teal.dark-theme .time input:focus,.capibara.c-teal .time input:active,.capibara.c-teal .time input:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-box,.capibara.c-teal.dark-theme .input-section select.input-select,.capibara.c-teal .input-box,.capibara.c-teal .input-section select.input-select{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .input-section select.input-select:active,.capibara.c-teal.dark-theme .input-section select.input-select:focus,.capibara.c-teal .input-section select.input-select:active,.capibara.c-teal .input-section select.input-select:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-section .nav-input-file,.capibara.c-teal.dark-theme .input-section input.nav-input,.capibara.c-teal .input-section .nav-input-file,.capibara.c-teal .input-section input.nav-input{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .input-section .nav-input-file:active,.capibara.c-teal.dark-theme .input-section .nav-input-file:focus,.capibara.c-teal.dark-theme .input-section input.nav-input:active,.capibara.c-teal.dark-theme .input-section input.nav-input:focus,.capibara.c-teal .input-section .nav-input-file:active,.capibara.c-teal .input-section .nav-input-file:focus,.capibara.c-teal .input-section input.nav-input:active,.capibara.c-teal .input-section input.nav-input:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-teal .input-section.msj-input-container textarea.msj{border:2px solid #009688}.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-teal .input-section.msj-input-container textarea.msj:active,.capibara.c-teal .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal .cap-btn-raised,.capibara.c-teal.dark-theme .cap-btn-raised{border-color:#009688;background:rgba(0,150,136,.8)}.capibara.c-teal .cap-btn-outline,.capibara.c-teal.dark-theme .cap-btn-outline{border-color:#009688;color:#009688}.capibara.c-teal .cap-btn-outline.selected,.capibara.c-teal.dark-theme .cap-btn-outline.selected{background:rgba(0,150,136,.8)}.capibara.c-teal.dark-theme .select-container .selected-day,.capibara.c-teal .select-container .selected-day{background:rgba(0,150,136,.3);box-shadow:inset 0 0 10px rgba(0,150,136,.5)}.capibara .c-teal--background{background:#009688!important}.capibara .c-teal-d--background{background:#004a43!important}.capibara .c-teal-l--background{background:#00e3cd!important}.capibara .c-teal--text{color:#009688!important}.capibara .c-teal-d--text{color:#004a43!important}.capibara .c-teal-l--text{color:#00e3cd!important}.capibara .detail-day .list-detail .item-detail.c-teal{background:rgba(0,150,136,.2);border:1px solid #009688}.capibara .detail-day .list-detail .item-detail.c-teal .left-icon{background:#009688}.capibara .detail-day .list-detail .item-detail.c-teal .left-icon.outlined{border:1px solid #009688;box-shadow:inset 0 0 0 1px rgba(0,150,136,.7)}.capibara .detail-day .list-detail .item-detail.c-teal .name{color:#009688}.capibara .float-box-container .float-box span.data.c-teal{--local-color:#009688;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-teal,.capibara .float-box-container .float-box .dot.c-teal,.capibara .float-box-container .float-box .rowdot--row.c-teal .rowdot--dot{--local-color:#009688}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal.active{background:rgba(0,150,136,.7);border-color:rgba(0,150,136,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal.active:hover{background:rgba(0,150,136,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal:hover{background:rgba(0,150,136,.2);border-color:rgba(0,150,136,.9)}.capibara .input-box .mini-input-section--icon.c-teal{background:#009688}.capibara.c-green:not(.dark-theme){scrollbar-color:#3f6c41 transparent}.capibara.c-green:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#3f6c41}.capibara.c-green:not(.dark-theme) .header-top{background:#bcbcbc}.capibara.c-green:not(.dark-theme) .corner{background:#bcbcbc;border-color:#52bf57}.capibara.c-green:not(.dark-theme) .container-tl header{background:#bcbcbc;border-bottom-color:#52bf57}.capibara.c-green:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#bcbcbc)!important}.capibara.c-green:not(.dark-theme) nav.right{border-color:#52bf57}.capibara.c-green.dark-theme .header-top,.capibara.c-green.dark-theme nav.right{border-color:#133214}.capibara.c-green.dark-theme .container-tl header,.capibara.c-green.dark-theme .corner{border-bottom-color:#133214}.capibara.c-green.dark-theme ::-moz-selection,.capibara.c-green ::-moz-selection{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme ::selection,.capibara.c-green ::selection{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme .progress-bar,.capibara.c-green .progress-bar{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme .progress-bar:after,.capibara.c-green.dark-theme .progress-bar:before,.capibara.c-green .progress-bar:after,.capibara.c-green .progress-bar:before{background-color:#2e7d32!important}.capibara.c-green.dark-theme select.tabs-select,.capibara.c-green select.tabs-select{background-color:rgba(46,125,50,.7)!important;border-color:#2e7d32!important}.capibara.c-green.dark-theme .time,.capibara.c-green .time{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .time .symbol,.capibara.c-green .time .symbol{color:#2e7d32}.capibara.c-green.dark-theme .time input:active,.capibara.c-green.dark-theme .time input:focus,.capibara.c-green .time input:active,.capibara.c-green .time input:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-box,.capibara.c-green.dark-theme .input-section select.input-select,.capibara.c-green .input-box,.capibara.c-green .input-section select.input-select{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .input-section select.input-select:active,.capibara.c-green.dark-theme .input-section select.input-select:focus,.capibara.c-green .input-section select.input-select:active,.capibara.c-green .input-section select.input-select:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-section .nav-input-file,.capibara.c-green.dark-theme .input-section input.nav-input,.capibara.c-green .input-section .nav-input-file,.capibara.c-green .input-section input.nav-input{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .input-section .nav-input-file:active,.capibara.c-green.dark-theme .input-section .nav-input-file:focus,.capibara.c-green.dark-theme .input-section input.nav-input:active,.capibara.c-green.dark-theme .input-section input.nav-input:focus,.capibara.c-green .input-section .nav-input-file:active,.capibara.c-green .input-section .nav-input-file:focus,.capibara.c-green .input-section input.nav-input:active,.capibara.c-green .input-section input.nav-input:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-green .input-section.msj-input-container textarea.msj{border:2px solid #2e7d32}.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-green .input-section.msj-input-container textarea.msj:active,.capibara.c-green .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green .cap-btn-raised,.capibara.c-green.dark-theme .cap-btn-raised{border-color:#2e7d32;background:rgba(46,125,50,.8)}.capibara.c-green .cap-btn-outline,.capibara.c-green.dark-theme .cap-btn-outline{border-color:#2e7d32;color:#2e7d32}.capibara.c-green .cap-btn-outline.selected,.capibara.c-green.dark-theme .cap-btn-outline.selected{background:rgba(46,125,50,.8)}.capibara.c-green.dark-theme .select-container .selected-day,.capibara.c-green .select-container .selected-day{background:rgba(46,125,50,.3);box-shadow:inset 0 0 10px rgba(46,125,50,.5)}.capibara .c-green--background{background:#2e7d32!important}.capibara .c-green-d--background{background:#19451c!important}.capibara .c-green-l--background{background:#43b548!important}.capibara .c-green--text{color:#2e7d32!important}.capibara .c-green-d--text{color:#19451c!important}.capibara .c-green-l--text{color:#43b548!important}.capibara .detail-day .list-detail .item-detail.c-green{background:rgba(46,125,50,.2);border:1px solid #2e7d32}.capibara .detail-day .list-detail .item-detail.c-green .left-icon{background:#2e7d32}.capibara .detail-day .list-detail .item-detail.c-green .left-icon.outlined{border:1px solid #2e7d32;box-shadow:inset 0 0 0 1px rgba(46,125,50,.7)}.capibara .detail-day .list-detail .item-detail.c-green .name{color:#2e7d32}.capibara .float-box-container .float-box span.data.c-green{--local-color:#2e7d32;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-green,.capibara .float-box-container .float-box .dot.c-green,.capibara .float-box-container .float-box .rowdot--row.c-green .rowdot--dot{--local-color:#2e7d32}.capibara .header-top .tabs-container .tab:not(.disabled).c-green.active{background:rgba(46,125,50,.7);border-color:rgba(46,125,50,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-green.active:hover{background:rgba(46,125,50,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-green:hover{background:rgba(46,125,50,.2);border-color:rgba(46,125,50,.9)}.capibara .input-box .mini-input-section--icon.c-green{background:#2e7d32}.capibara.c-light-green:not(.dark-theme){scrollbar-color:#89ab62 transparent}.capibara.c-light-green:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#89ab62}.capibara.c-light-green:not(.dark-theme) .header-top{background:#ededec}.capibara.c-light-green:not(.dark-theme) .corner{background:#ededec;border-color:#bcdc97}.capibara.c-light-green:not(.dark-theme) .container-tl header{background:#ededec;border-bottom-color:#bcdc97}.capibara.c-light-green:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#ededec)!important}.capibara.c-light-green:not(.dark-theme) nav.right{border-color:#bcdc97}.capibara.c-light-green.dark-theme .header-top,.capibara.c-light-green.dark-theme nav.right{border-color:#577d2a}.capibara.c-light-green.dark-theme .container-tl header,.capibara.c-light-green.dark-theme .corner{border-bottom-color:#577d2a}.capibara.c-light-green.dark-theme ::-moz-selection,.capibara.c-light-green ::-moz-selection{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme ::selection,.capibara.c-light-green ::selection{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme .progress-bar,.capibara.c-light-green .progress-bar{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme .progress-bar:after,.capibara.c-light-green.dark-theme .progress-bar:before,.capibara.c-light-green .progress-bar:after,.capibara.c-light-green .progress-bar:before{background-color:#8bc34a!important}.capibara.c-light-green.dark-theme select.tabs-select,.capibara.c-light-green select.tabs-select{background-color:rgba(139,195,74,.7)!important;border-color:#8bc34a!important}.capibara.c-light-green.dark-theme .time,.capibara.c-light-green .time{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .time .symbol,.capibara.c-light-green .time .symbol{color:#8bc34a}.capibara.c-light-green.dark-theme .time input:active,.capibara.c-light-green.dark-theme .time input:focus,.capibara.c-light-green .time input:active,.capibara.c-light-green .time input:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-box,.capibara.c-light-green.dark-theme .input-section select.input-select,.capibara.c-light-green .input-box,.capibara.c-light-green .input-section select.input-select{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .input-section select.input-select:active,.capibara.c-light-green.dark-theme .input-section select.input-select:focus,.capibara.c-light-green .input-section select.input-select:active,.capibara.c-light-green .input-section select.input-select:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-section .nav-input-file,.capibara.c-light-green.dark-theme .input-section input.nav-input,.capibara.c-light-green .input-section .nav-input-file,.capibara.c-light-green .input-section input.nav-input{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .input-section .nav-input-file:active,.capibara.c-light-green.dark-theme .input-section .nav-input-file:focus,.capibara.c-light-green.dark-theme .input-section input.nav-input:active,.capibara.c-light-green.dark-theme .input-section input.nav-input:focus,.capibara.c-light-green .input-section .nav-input-file:active,.capibara.c-light-green .input-section .nav-input-file:focus,.capibara.c-light-green .input-section input.nav-input:active,.capibara.c-light-green .input-section input.nav-input:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-light-green .input-section.msj-input-container textarea.msj{border:2px solid #8bc34a}.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-light-green .input-section.msj-input-container textarea.msj:active,.capibara.c-light-green .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green .cap-btn-raised,.capibara.c-light-green.dark-theme .cap-btn-raised{border-color:#8bc34a;background:rgba(139,195,74,.8)}.capibara.c-light-green .cap-btn-outline,.capibara.c-light-green.dark-theme .cap-btn-outline{border-color:#8bc34a;color:#8bc34a}.capibara.c-light-green .cap-btn-outline.selected,.capibara.c-light-green.dark-theme .cap-btn-outline.selected{background:rgba(139,195,74,.8)}.capibara.c-light-green.dark-theme .select-container .selected-day,.capibara.c-light-green .select-container .selected-day{background:rgba(139,195,74,.3);box-shadow:inset 0 0 10px rgba(139,195,74,.5)}.capibara .c-light-green--background{background:#8bc34a!important}.capibara .c-light-green-d--background{background:#649130!important}.capibara .c-light-green-l--background{background:#b0d683!important}.capibara .c-light-green--text{color:#8bc34a!important}.capibara .c-light-green-d--text{color:#649130!important}.capibara .c-light-green-l--text{color:#b0d683!important}.capibara .detail-day .list-detail .item-detail.c-light-green{background:rgba(139,195,74,.2);border:1px solid #8bc34a}.capibara .detail-day .list-detail .item-detail.c-light-green .left-icon{background:#8bc34a}.capibara .detail-day .list-detail .item-detail.c-light-green .left-icon.outlined{border:1px solid #8bc34a;box-shadow:inset 0 0 0 1px rgba(139,195,74,.7)}.capibara .detail-day .list-detail .item-detail.c-light-green .name{color:#8bc34a}.capibara .float-box-container .float-box span.data.c-light-green{--local-color:#8bc34a;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-light-green,.capibara .float-box-container .float-box .dot.c-light-green,.capibara .float-box-container .float-box .rowdot--row.c-light-green .rowdot--dot{--local-color:#8bc34a}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green.active{background:rgba(139,195,74,.7);border-color:rgba(139,195,74,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green.active:hover{background:rgba(139,195,74,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green:hover{background:rgba(139,195,74,.2);border-color:rgba(139,195,74,.9)}.capibara .input-box .mini-input-section--icon.c-light-green{background:#8bc34a}.capibara.c-lime:not(.dark-theme){scrollbar-color:#bac550 transparent}.capibara.c-lime:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#bac550}.capibara.c-lime:not(.dark-theme) .header-top{background:#f3f3ee}.capibara.c-lime:not(.dark-theme) .corner{background:#f3f3ee;border-color:#e3eb90}.capibara.c-lime:not(.dark-theme) .container-tl header{background:#f3f3ee;border-bottom-color:#e3eb90}.capibara.c-lime:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f3f3ee)!important}.capibara.c-lime:not(.dark-theme) nav.right{border-color:#e3eb90}.capibara.c-lime.dark-theme .header-top,.capibara.c-lime.dark-theme nav.right{border-color:#89951a}.capibara.c-lime.dark-theme .container-tl header,.capibara.c-lime.dark-theme .corner{border-bottom-color:#89951a}.capibara.c-lime.dark-theme ::-moz-selection,.capibara.c-lime ::-moz-selection{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme ::selection,.capibara.c-lime ::selection{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme .progress-bar,.capibara.c-lime .progress-bar{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme .progress-bar:after,.capibara.c-lime.dark-theme .progress-bar:before,.capibara.c-lime .progress-bar:after,.capibara.c-lime .progress-bar:before{background-color:#cddc39!important}.capibara.c-lime.dark-theme select.tabs-select,.capibara.c-lime select.tabs-select{background-color:rgba(205,220,57,.7)!important;border-color:#cddc39!important}.capibara.c-lime.dark-theme .time,.capibara.c-lime .time{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .time .symbol,.capibara.c-lime .time .symbol{color:#cddc39}.capibara.c-lime.dark-theme .time input:active,.capibara.c-lime.dark-theme .time input:focus,.capibara.c-lime .time input:active,.capibara.c-lime .time input:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-box,.capibara.c-lime.dark-theme .input-section select.input-select,.capibara.c-lime .input-box,.capibara.c-lime .input-section select.input-select{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .input-section select.input-select:active,.capibara.c-lime.dark-theme .input-section select.input-select:focus,.capibara.c-lime .input-section select.input-select:active,.capibara.c-lime .input-section select.input-select:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-section .nav-input-file,.capibara.c-lime.dark-theme .input-section input.nav-input,.capibara.c-lime .input-section .nav-input-file,.capibara.c-lime .input-section input.nav-input{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .input-section .nav-input-file:active,.capibara.c-lime.dark-theme .input-section .nav-input-file:focus,.capibara.c-lime.dark-theme .input-section input.nav-input:active,.capibara.c-lime.dark-theme .input-section input.nav-input:focus,.capibara.c-lime .input-section .nav-input-file:active,.capibara.c-lime .input-section .nav-input-file:focus,.capibara.c-lime .input-section input.nav-input:active,.capibara.c-lime .input-section input.nav-input:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-lime .input-section.msj-input-container textarea.msj{border:2px solid #cddc39}.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-lime .input-section.msj-input-container textarea.msj:active,.capibara.c-lime .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime .cap-btn-raised,.capibara.c-lime.dark-theme .cap-btn-raised{border-color:#cddc39;background:rgba(205,220,57,.8)}.capibara.c-lime .cap-btn-outline,.capibara.c-lime.dark-theme .cap-btn-outline{border-color:#cddc39;color:#cddc39}.capibara.c-lime .cap-btn-outline.selected,.capibara.c-lime.dark-theme .cap-btn-outline.selected{background:rgba(205,220,57,.8)}.capibara.c-lime.dark-theme .select-container .selected-day,.capibara.c-lime .select-container .selected-day{background:rgba(205,220,57,.3);box-shadow:inset 0 0 10px rgba(205,220,57,.5)}.capibara .c-lime--background{background:#cddc39!important}.capibara .c-lime-d--background{background:#9daa1e!important}.capibara .c-lime-l--background{background:#dde77a!important}.capibara .c-lime--text{color:#cddc39!important}.capibara .c-lime-d--text{color:#9daa1e!important}.capibara .c-lime-l--text{color:#dde77a!important}.capibara .detail-day .list-detail .item-detail.c-lime{background:rgba(205,220,57,.2);border:1px solid #cddc39}.capibara .detail-day .list-detail .item-detail.c-lime .left-icon{background:#cddc39}.capibara .detail-day .list-detail .item-detail.c-lime .left-icon.outlined{border:1px solid #cddc39;box-shadow:inset 0 0 0 1px rgba(205,220,57,.7)}.capibara .detail-day .list-detail .item-detail.c-lime .name{color:#cddc39}.capibara .float-box-container .float-box span.data.c-lime{--local-color:#cddc39;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-lime,.capibara .float-box-container .float-box .dot.c-lime,.capibara .float-box-container .float-box .rowdot--row.c-lime .rowdot--dot{--local-color:#cddc39}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime.active{background:rgba(205,220,57,.7);border-color:rgba(205,220,57,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime.active:hover{background:rgba(205,220,57,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime:hover{background:rgba(205,220,57,.2);border-color:rgba(205,220,57,.9)}.capibara .input-box .mini-input-section--icon.c-lime{background:#cddc39}.capibara.c-yellow:not(.dark-theme){scrollbar-color:#ebdb4f transparent}.capibara.c-yellow:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#ebdb4f}.capibara.c-yellow:not(.dark-theme) .header-top{background:#fff}.capibara.c-yellow:not(.dark-theme) .corner{background:#fff;border-color:#fff5a1}.capibara.c-yellow:not(.dark-theme) .container-tl header{background:#fff;border-bottom-color:#fff5a1}.capibara.c-yellow:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#fff)!important}.capibara.c-yellow:not(.dark-theme) nav.right{border-color:#fff5a1}.capibara.c-yellow.dark-theme .header-top,.capibara.c-yellow.dark-theme nav.right{border-color:#d4be00}.capibara.c-yellow.dark-theme .container-tl header,.capibara.c-yellow.dark-theme .corner{border-bottom-color:#d4be00}.capibara.c-yellow.dark-theme ::-moz-selection,.capibara.c-yellow ::-moz-selection{background-color:rgba(255,235,59,.2)!important}.capibara.c-yellow.dark-theme ::selection,.capibara.c-yellow ::selection{background-color:rgba(255,235,59,.2)!important}.capibara.c-yellow.dark-theme .progress-bar,.capibara.c-yellow .progress-bar{background-color:rgba(255,235,59,.2)!important}.capibara.c-yellow.dark-theme .progress-bar:after,.capibara.c-yellow.dark-theme .progress-bar:before,.capibara.c-yellow .progress-bar:after,.capibara.c-yellow .progress-bar:before{background-color:#ffeb3b!important}.capibara.c-yellow.dark-theme select.tabs-select,.capibara.c-yellow select.tabs-select{background-color:rgba(255,235,59,.7)!important;border-color:#ffeb3b!important}.capibara.c-yellow.dark-theme .time,.capibara.c-yellow .time{border-color:rgba(255,235,59,.6)}.capibara.c-yellow.dark-theme .time .symbol,.capibara.c-yellow .time .symbol{color:#ffeb3b}.capibara.c-yellow.dark-theme .time input:active,.capibara.c-yellow.dark-theme .time input:focus,.capibara.c-yellow .time input:active,.capibara.c-yellow .time input:focus{border-color:#ffeb3b;box-shadow:0 4px 6px rgba(255,235,59,.2)}.capibara.c-yellow.dark-theme .input-box,.capibara.c-yellow.dark-theme .input-section select.input-select,.capibara.c-yellow .input-box,.capibara.c-yellow .input-section select.input-select{border-color:rgba(255,235,59,.6)}.capibara.c-yellow.dark-theme .input-section select.input-select:active,.capibara.c-yellow.dark-theme .input-section select.input-select:focus,.capibara.c-yellow .input-section select.input-select:active,.capibara.c-yellow .input-section select.input-select:focus{border-color:#ffeb3b;box-shadow:0 4px 6px rgba(255,235,59,.2)}.capibara.c-yellow.dark-theme .input-section .nav-input-file,.capibara.c-yellow.dark-theme .input-section input.nav-input,.capibara.c-yellow .input-section .nav-input-file,.capibara.c-yellow .input-section input.nav-input{border-color:rgba(255,235,59,.6)}.capibara.c-yellow.dark-theme .input-section .nav-input-file:active,.capibara.c-yellow.dark-theme .input-section .nav-input-file:focus,.capibara.c-yellow.dark-theme .input-section input.nav-input:active,.capibara.c-yellow.dark-theme .input-section input.nav-input:focus,.capibara.c-yellow .input-section .nav-input-file:active,.capibara.c-yellow .input-section .nav-input-file:focus,.capibara.c-yellow .input-section input.nav-input:active,.capibara.c-yellow .input-section input.nav-input:focus{border-color:#ffeb3b;box-shadow:0 4px 6px rgba(255,235,59,.2)}.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-yellow .input-section.msj-input-container textarea.msj{border:2px solid #ffeb3b}.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-yellow .input-section.msj-input-container textarea.msj:active,.capibara.c-yellow .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,235,59,.2)}.capibara.c-yellow .cap-btn-raised,.capibara.c-yellow.dark-theme .cap-btn-raised{border-color:#ffeb3b;background:rgba(255,235,59,.8)}.capibara.c-yellow .cap-btn-outline,.capibara.c-yellow.dark-theme .cap-btn-outline{border-color:#ffeb3b;color:#ffeb3b}.capibara.c-yellow .cap-btn-outline.selected,.capibara.c-yellow.dark-theme .cap-btn-outline.selected{background:rgba(255,235,59,.8)}.capibara.c-yellow.dark-theme .select-container .selected-day,.capibara.c-yellow .select-container .selected-day{background:rgba(255,235,59,.3);box-shadow:inset 0 0 10px rgba(255,235,59,.5)}.capibara .c-yellow--background{background:#ffeb3b!important}.capibara .c-yellow-d--background{background:#eed500!important}.capibara .c-yellow-l--background{background:#fff388!important}.capibara .c-yellow--text{color:#ffeb3b!important}.capibara .c-yellow-d--text{color:#eed500!important}.capibara .c-yellow-l--text{color:#fff388!important}.capibara .detail-day .list-detail .item-detail.c-yellow{background:rgba(255,235,59,.2);border:1px solid #ffeb3b}.capibara .detail-day .list-detail .item-detail.c-yellow .left-icon{background:#ffeb3b}.capibara .detail-day .list-detail .item-detail.c-yellow .left-icon.outlined{border:1px solid #ffeb3b;box-shadow:inset 0 0 0 1px rgba(255,235,59,.7)}.capibara .detail-day .list-detail .item-detail.c-yellow .name{color:#ffeb3b}.capibara .float-box-container .float-box span.data.c-yellow{--local-color:#ffeb3b;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-yellow,.capibara .float-box-container .float-box .dot.c-yellow,.capibara .float-box-container .float-box .rowdot--row.c-yellow .rowdot--dot{--local-color:#ffeb3b}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow.active{background:rgba(255,235,59,.7);border-color:rgba(255,235,59,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow.active:hover{background:rgba(255,235,59,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow:hover{background:rgba(255,235,59,.2);border-color:rgba(255,235,59,.9)}.capibara .input-box .mini-input-section--icon.c-yellow{background:#ffeb3b}.capibara.c-amber:not(.dark-theme){scrollbar-color:#e6b520 transparent}.capibara.c-amber:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#e6b520}.capibara.c-amber:not(.dark-theme) .header-top{background:#f4efde}.capibara.c-amber:not(.dark-theme) .corner{background:#f4efde;border-color:#ffdb6d}.capibara.c-amber:not(.dark-theme) .container-tl header{background:#f4efde;border-bottom-color:#ffdb6d}.capibara.c-amber:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f4efde)!important}.capibara.c-amber:not(.dark-theme) nav.right{border-color:#ffdb6d}.capibara.c-amber.dark-theme .header-top,.capibara.c-amber.dark-theme nav.right{border-color:#a07800}.capibara.c-amber.dark-theme .container-tl header,.capibara.c-amber.dark-theme .corner{border-bottom-color:#a07800}.capibara.c-amber.dark-theme ::-moz-selection,.capibara.c-amber ::-moz-selection{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme ::selection,.capibara.c-amber ::selection{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme .progress-bar,.capibara.c-amber .progress-bar{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme .progress-bar:after,.capibara.c-amber.dark-theme .progress-bar:before,.capibara.c-amber .progress-bar:after,.capibara.c-amber .progress-bar:before{background-color:#ffc107!important}.capibara.c-amber.dark-theme select.tabs-select,.capibara.c-amber select.tabs-select{background-color:rgba(255,193,7,.7)!important;border-color:#ffc107!important}.capibara.c-amber.dark-theme .time,.capibara.c-amber .time{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .time .symbol,.capibara.c-amber .time .symbol{color:#ffc107}.capibara.c-amber.dark-theme .time input:active,.capibara.c-amber.dark-theme .time input:focus,.capibara.c-amber .time input:active,.capibara.c-amber .time input:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-box,.capibara.c-amber.dark-theme .input-section select.input-select,.capibara.c-amber .input-box,.capibara.c-amber .input-section select.input-select{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .input-section select.input-select:active,.capibara.c-amber.dark-theme .input-section select.input-select:focus,.capibara.c-amber .input-section select.input-select:active,.capibara.c-amber .input-section select.input-select:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-section .nav-input-file,.capibara.c-amber.dark-theme .input-section input.nav-input,.capibara.c-amber .input-section .nav-input-file,.capibara.c-amber .input-section input.nav-input{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .input-section .nav-input-file:active,.capibara.c-amber.dark-theme .input-section .nav-input-file:focus,.capibara.c-amber.dark-theme .input-section input.nav-input:active,.capibara.c-amber.dark-theme .input-section input.nav-input:focus,.capibara.c-amber .input-section .nav-input-file:active,.capibara.c-amber .input-section .nav-input-file:focus,.capibara.c-amber .input-section input.nav-input:active,.capibara.c-amber .input-section input.nav-input:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-amber .input-section.msj-input-container textarea.msj{border:2px solid #ffc107}.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-amber .input-section.msj-input-container textarea.msj:active,.capibara.c-amber .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber .cap-btn-raised,.capibara.c-amber.dark-theme .cap-btn-raised{border-color:#ffc107;background:rgba(255,193,7,.8)}.capibara.c-amber .cap-btn-outline,.capibara.c-amber.dark-theme .cap-btn-outline{border-color:#ffc107;color:#ffc107}.capibara.c-amber .cap-btn-outline.selected,.capibara.c-amber.dark-theme .cap-btn-outline.selected{background:rgba(255,193,7,.8)}.capibara.c-amber.dark-theme .select-container .selected-day,.capibara.c-amber .select-container .selected-day{background:rgba(255,193,7,.3);box-shadow:inset 0 0 10px rgba(255,193,7,.5)}.capibara .c-amber--background{background:#ffc107!important}.capibara .c-amber-d--background{background:#ba8b00!important}.capibara .c-amber-l--background{background:#ffd454!important}.capibara .c-amber--text{color:#ffc107!important}.capibara .c-amber-d--text{color:#ba8b00!important}.capibara .c-amber-l--text{color:#ffd454!important}.capibara .detail-day .list-detail .item-detail.c-amber{background:rgba(255,193,7,.2);border:1px solid #ffc107}.capibara .detail-day .list-detail .item-detail.c-amber .left-icon{background:#ffc107}.capibara .detail-day .list-detail .item-detail.c-amber .left-icon.outlined{border:1px solid #ffc107;box-shadow:inset 0 0 0 1px rgba(255,193,7,.7)}.capibara .detail-day .list-detail .item-detail.c-amber .name{color:#ffc107}.capibara .float-box-container .float-box span.data.c-amber{--local-color:#ffc107;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-amber,.capibara .float-box-container .float-box .dot.c-amber,.capibara .float-box-container .float-box .rowdot--row.c-amber .rowdot--dot{--local-color:#ffc107}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber.active{background:rgba(255,193,7,.7);border-color:rgba(255,193,7,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber.active:hover{background:rgba(255,193,7,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber:hover{background:rgba(255,193,7,.2);border-color:rgba(255,193,7,.9)}.capibara .input-box .mini-input-section--icon.c-amber{background:#ffc107}.capibara.c-orange:not(.dark-theme){scrollbar-color:#e6931a transparent}.capibara.c-orange:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#e6931a}.capibara.c-orange:not(.dark-theme) .header-top{background:#f2e8d9}.capibara.c-orange:not(.dark-theme) .corner{background:#f2e8d9;border-color:#ffc166}.capibara.c-orange:not(.dark-theme) .container-tl header{background:#f2e8d9;border-bottom-color:#ffc166}.capibara.c-orange:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f2e8d9)!important}.capibara.c-orange:not(.dark-theme) nav.right{border-color:#ffc166}.capibara.c-orange.dark-theme .header-top,.capibara.c-orange.dark-theme nav.right{border-color:#995b00}.capibara.c-orange.dark-theme .container-tl header,.capibara.c-orange.dark-theme .corner{border-bottom-color:#995b00}.capibara.c-orange.dark-theme ::-moz-selection,.capibara.c-orange ::-moz-selection{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme ::selection,.capibara.c-orange ::selection{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme .progress-bar,.capibara.c-orange .progress-bar{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme .progress-bar:after,.capibara.c-orange.dark-theme .progress-bar:before,.capibara.c-orange .progress-bar:after,.capibara.c-orange .progress-bar:before{background-color:#ff9800!important}.capibara.c-orange.dark-theme select.tabs-select,.capibara.c-orange select.tabs-select{background-color:rgba(255,152,0,.7)!important;border-color:#ff9800!important}.capibara.c-orange.dark-theme .time,.capibara.c-orange .time{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .time .symbol,.capibara.c-orange .time .symbol{color:#ff9800}.capibara.c-orange.dark-theme .time input:active,.capibara.c-orange.dark-theme .time input:focus,.capibara.c-orange .time input:active,.capibara.c-orange .time input:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-box,.capibara.c-orange.dark-theme .input-section select.input-select,.capibara.c-orange .input-box,.capibara.c-orange .input-section select.input-select{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .input-section select.input-select:active,.capibara.c-orange.dark-theme .input-section select.input-select:focus,.capibara.c-orange .input-section select.input-select:active,.capibara.c-orange .input-section select.input-select:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-section .nav-input-file,.capibara.c-orange.dark-theme .input-section input.nav-input,.capibara.c-orange .input-section .nav-input-file,.capibara.c-orange .input-section input.nav-input{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .input-section .nav-input-file:active,.capibara.c-orange.dark-theme .input-section .nav-input-file:focus,.capibara.c-orange.dark-theme .input-section input.nav-input:active,.capibara.c-orange.dark-theme .input-section input.nav-input:focus,.capibara.c-orange .input-section .nav-input-file:active,.capibara.c-orange .input-section .nav-input-file:focus,.capibara.c-orange .input-section input.nav-input:active,.capibara.c-orange .input-section input.nav-input:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-orange .input-section.msj-input-container textarea.msj{border:2px solid #ff9800}.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-orange .input-section.msj-input-container textarea.msj:active,.capibara.c-orange .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange .cap-btn-raised,.capibara.c-orange.dark-theme .cap-btn-raised{border-color:#ff9800;background:rgba(255,152,0,.8)}.capibara.c-orange .cap-btn-outline,.capibara.c-orange.dark-theme .cap-btn-outline{border-color:#ff9800;color:#ff9800}.capibara.c-orange .cap-btn-outline.selected,.capibara.c-orange.dark-theme .cap-btn-outline.selected{background:rgba(255,152,0,.8)}.capibara.c-orange.dark-theme .select-container .selected-day,.capibara.c-orange .select-container .selected-day{background:rgba(255,152,0,.3);box-shadow:inset 0 0 10px rgba(255,152,0,.5)}.capibara .c-orange--background{background:#ff9800!important}.capibara .c-orange-d--background{background:#b36a00!important}.capibara .c-orange-l--background{background:#ffb74d!important}.capibara .c-orange--text{color:#ff9800!important}.capibara .c-orange-d--text{color:#b36a00!important}.capibara .c-orange-l--text{color:#ffb74d!important}.capibara .detail-day .list-detail .item-detail.c-orange{background:rgba(255,152,0,.2);border:1px solid #ff9800}.capibara .detail-day .list-detail .item-detail.c-orange .left-icon{background:#ff9800}.capibara .detail-day .list-detail .item-detail.c-orange .left-icon.outlined{border:1px solid #ff9800;box-shadow:inset 0 0 0 1px rgba(255,152,0,.7)}.capibara .detail-day .list-detail .item-detail.c-orange .name{color:#ff9800}.capibara .float-box-container .float-box span.data.c-orange{--local-color:#ff9800;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-orange,.capibara .float-box-container .float-box .dot.c-orange,.capibara .float-box-container .float-box .rowdot--row.c-orange .rowdot--dot{--local-color:#ff9800}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange.active{background:rgba(255,152,0,.7);border-color:rgba(255,152,0,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange.active:hover{background:rgba(255,152,0,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange:hover{background:rgba(255,152,0,.2);border-color:rgba(255,152,0,.9)}.capibara .input-box .mini-input-section--icon.c-orange{background:#ff9800}.capibara.c-deep-orange:not(.dark-theme){scrollbar-color:#cd5733 transparent}.capibara.c-deep-orange:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#cd5733}.capibara.c-deep-orange:not(.dark-theme) .header-top{background:#ede1de}.capibara.c-deep-orange:not(.dark-theme) .corner{background:#ede1de;border-color:#f09275}.capibara.c-deep-orange:not(.dark-theme) .container-tl header{background:#ede1de;border-bottom-color:#f09275}.capibara.c-deep-orange:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#ede1de)!important}.capibara.c-deep-orange:not(.dark-theme) nav.right{border-color:#f09275}.capibara.c-deep-orange.dark-theme .header-top,.capibara.c-deep-orange.dark-theme nav.right{border-color:#8a2c0f}.capibara.c-deep-orange.dark-theme .container-tl header,.capibara.c-deep-orange.dark-theme .corner{border-bottom-color:#8a2c0f}.capibara.c-deep-orange.dark-theme ::-moz-selection,.capibara.c-deep-orange ::-moz-selection{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme ::selection,.capibara.c-deep-orange ::selection{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme .progress-bar,.capibara.c-deep-orange .progress-bar{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme .progress-bar:after,.capibara.c-deep-orange.dark-theme .progress-bar:before,.capibara.c-deep-orange .progress-bar:after,.capibara.c-deep-orange .progress-bar:before{background-color:#e64a19!important}.capibara.c-deep-orange.dark-theme select.tabs-select,.capibara.c-deep-orange select.tabs-select{background-color:rgba(230,74,25,.7)!important;border-color:#e64a19!important}.capibara.c-deep-orange.dark-theme .time,.capibara.c-deep-orange .time{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .time .symbol,.capibara.c-deep-orange .time .symbol{color:#e64a19}.capibara.c-deep-orange.dark-theme .time input:active,.capibara.c-deep-orange.dark-theme .time input:focus,.capibara.c-deep-orange .time input:active,.capibara.c-deep-orange .time input:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-box,.capibara.c-deep-orange.dark-theme .input-section select.input-select,.capibara.c-deep-orange .input-box,.capibara.c-deep-orange .input-section select.input-select{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .input-section select.input-select:active,.capibara.c-deep-orange.dark-theme .input-section select.input-select:focus,.capibara.c-deep-orange .input-section select.input-select:active,.capibara.c-deep-orange .input-section select.input-select:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-section .nav-input-file,.capibara.c-deep-orange.dark-theme .input-section input.nav-input,.capibara.c-deep-orange .input-section .nav-input-file,.capibara.c-deep-orange .input-section input.nav-input{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .input-section .nav-input-file:active,.capibara.c-deep-orange.dark-theme .input-section .nav-input-file:focus,.capibara.c-deep-orange.dark-theme .input-section input.nav-input:active,.capibara.c-deep-orange.dark-theme .input-section input.nav-input:focus,.capibara.c-deep-orange .input-section .nav-input-file:active,.capibara.c-deep-orange .input-section .nav-input-file:focus,.capibara.c-deep-orange .input-section input.nav-input:active,.capibara.c-deep-orange .input-section input.nav-input:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj{border:2px solid #e64a19}.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange .cap-btn-raised,.capibara.c-deep-orange.dark-theme .cap-btn-raised{border-color:#e64a19;background:rgba(230,74,25,.8)}.capibara.c-deep-orange .cap-btn-outline,.capibara.c-deep-orange.dark-theme .cap-btn-outline{border-color:#e64a19;color:#e64a19}.capibara.c-deep-orange .cap-btn-outline.selected,.capibara.c-deep-orange.dark-theme .cap-btn-outline.selected{background:rgba(230,74,25,.8)}.capibara.c-deep-orange.dark-theme .select-container .selected-day,.capibara.c-deep-orange .select-container .selected-day{background:rgba(230,74,25,.3);box-shadow:inset 0 0 10px rgba(230,74,25,.5)}.capibara .c-deep-orange--background{background:#e64a19!important}.capibara .c-deep-orange-d--background{background:#a13412!important}.capibara .c-deep-orange-l--background{background:#ee805e!important}.capibara .c-deep-orange--text{color:#e64a19!important}.capibara .c-deep-orange-d--text{color:#a13412!important}.capibara .c-deep-orange-l--text{color:#ee805e!important}.capibara .detail-day .list-detail .item-detail.c-deep-orange{background:rgba(230,74,25,.2);border:1px solid #e64a19}.capibara .detail-day .list-detail .item-detail.c-deep-orange .left-icon{background:#e64a19}.capibara .detail-day .list-detail .item-detail.c-deep-orange .left-icon.outlined{border:1px solid #e64a19;box-shadow:inset 0 0 0 1px rgba(230,74,25,.7)}.capibara .detail-day .list-detail .item-detail.c-deep-orange .name{color:#e64a19}.capibara .float-box-container .float-box span.data.c-deep-orange{--local-color:#e64a19;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-deep-orange,.capibara .float-box-container .float-box .dot.c-deep-orange,.capibara .float-box-container .float-box .rowdot--row.c-deep-orange .rowdot--dot{--local-color:#e64a19}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange.active{background:rgba(230,74,25,.7);border-color:rgba(230,74,25,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange.active:hover{background:rgba(230,74,25,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange:hover{background:rgba(230,74,25,.2);border-color:rgba(230,74,25,.9)}.capibara .input-box .mini-input-section--icon.c-deep-orange{background:#e64a19}.capibara.c-brown:not(.dark-theme){scrollbar-color:#665e5b transparent}.capibara.c-brown:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#665e5b}.capibara.c-brown:not(.dark-theme) .header-top{background:#c7c7c7}.capibara.c-brown:not(.dark-theme) .corner{background:#c7c7c7;border-color:#af8778}.capibara.c-brown:not(.dark-theme) .container-tl header{background:#c7c7c7;border-bottom-color:#af8778}.capibara.c-brown:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#c7c7c7)!important}.capibara.c-brown:not(.dark-theme) nav.right{border-color:#af8778}.capibara.c-brown.dark-theme .header-top,.capibara.c-brown.dark-theme nav.right{border-color:#392822}.capibara.c-brown.dark-theme .container-tl header,.capibara.c-brown.dark-theme .corner{border-bottom-color:#392822}.capibara.c-brown.dark-theme ::-moz-selection,.capibara.c-brown ::-moz-selection{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme ::selection,.capibara.c-brown ::selection{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme .progress-bar,.capibara.c-brown .progress-bar{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme .progress-bar:after,.capibara.c-brown.dark-theme .progress-bar:before,.capibara.c-brown .progress-bar:after,.capibara.c-brown .progress-bar:before{background-color:#795548!important}.capibara.c-brown.dark-theme select.tabs-select,.capibara.c-brown select.tabs-select{background-color:rgba(121,85,72,.7)!important;border-color:#795548!important}.capibara.c-brown.dark-theme .time,.capibara.c-brown .time{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .time .symbol,.capibara.c-brown .time .symbol{color:#795548}.capibara.c-brown.dark-theme .time input:active,.capibara.c-brown.dark-theme .time input:focus,.capibara.c-brown .time input:active,.capibara.c-brown .time input:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-box,.capibara.c-brown.dark-theme .input-section select.input-select,.capibara.c-brown .input-box,.capibara.c-brown .input-section select.input-select{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .input-section select.input-select:active,.capibara.c-brown.dark-theme .input-section select.input-select:focus,.capibara.c-brown .input-section select.input-select:active,.capibara.c-brown .input-section select.input-select:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-section .nav-input-file,.capibara.c-brown.dark-theme .input-section input.nav-input,.capibara.c-brown .input-section .nav-input-file,.capibara.c-brown .input-section input.nav-input{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .input-section .nav-input-file:active,.capibara.c-brown.dark-theme .input-section .nav-input-file:focus,.capibara.c-brown.dark-theme .input-section input.nav-input:active,.capibara.c-brown.dark-theme .input-section input.nav-input:focus,.capibara.c-brown .input-section .nav-input-file:active,.capibara.c-brown .input-section .nav-input-file:focus,.capibara.c-brown .input-section input.nav-input:active,.capibara.c-brown .input-section input.nav-input:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-brown .input-section.msj-input-container textarea.msj{border:2px solid #795548}.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-brown .input-section.msj-input-container textarea.msj:active,.capibara.c-brown .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown .cap-btn-raised,.capibara.c-brown.dark-theme .cap-btn-raised{border-color:#795548;background:rgba(121,85,72,.8)}.capibara.c-brown .cap-btn-outline,.capibara.c-brown.dark-theme .cap-btn-outline{border-color:#795548;color:#795548}.capibara.c-brown .cap-btn-outline.selected,.capibara.c-brown.dark-theme .cap-btn-outline.selected{background:rgba(121,85,72,.8)}.capibara.c-brown.dark-theme .select-container .selected-day,.capibara.c-brown .select-container .selected-day{background:rgba(121,85,72,.3);box-shadow:inset 0 0 10px rgba(121,85,72,.5)}.capibara .c-brown--background{background:#795548!important}.capibara .c-brown-d--background{background:#49332b!important}.capibara .c-brown-l--background{background:#a57868!important}.capibara .c-brown--text{color:#795548!important}.capibara .c-brown-d--text{color:#49332b!important}.capibara .c-brown-l--text{color:#a57868!important}.capibara .detail-day .list-detail .item-detail.c-brown{background:rgba(121,85,72,.2);border:1px solid #795548}.capibara .detail-day .list-detail .item-detail.c-brown .left-icon{background:#795548}.capibara .detail-day .list-detail .item-detail.c-brown .left-icon.outlined{border:1px solid #795548;box-shadow:inset 0 0 0 1px rgba(121,85,72,.7)}.capibara .detail-day .list-detail .item-detail.c-brown .name{color:#795548}.capibara .float-box-container .float-box span.data.c-brown{--local-color:#795548;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-brown,.capibara .float-box-container .float-box .dot.c-brown,.capibara .float-box-container .float-box .rowdot--row.c-brown .rowdot--dot{--local-color:#795548}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown.active{background:rgba(121,85,72,.7);border-color:rgba(121,85,72,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown.active:hover{background:rgba(121,85,72,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown:hover{background:rgba(121,85,72,.2);border-color:rgba(121,85,72,.9)}.capibara .input-box .mini-input-section--icon.c-brown{background:#795548}.capibara.c-blue_grey:not(.dark-theme){scrollbar-color:#767676 transparent}.capibara.c-blue_grey:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#767676}.capibara.c-blue_grey:not(.dark-theme) .header-top{background:#dcdcdc}.capibara.c-blue_grey:not(.dark-theme) .corner{background:#dcdcdc;border-color:#99aeb8}.capibara.c-blue_grey:not(.dark-theme) .container-tl header{background:#dcdcdc;border-bottom-color:#99aeb8}.capibara.c-blue_grey:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#dcdcdc)!important}.capibara.c-blue_grey:not(.dark-theme) nav.right{border-color:#99aeb8}.capibara.c-blue_grey.dark-theme .header-top,.capibara.c-blue_grey.dark-theme nav.right{border-color:#36474f}.capibara.c-blue_grey.dark-theme .container-tl header,.capibara.c-blue_grey.dark-theme .corner{border-bottom-color:#36474f}.capibara.c-blue_grey.dark-theme ::-moz-selection,.capibara.c-blue_grey ::-moz-selection{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme ::selection,.capibara.c-blue_grey ::selection{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme .progress-bar,.capibara.c-blue_grey .progress-bar{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme .progress-bar:after,.capibara.c-blue_grey.dark-theme .progress-bar:before,.capibara.c-blue_grey .progress-bar:after,.capibara.c-blue_grey .progress-bar:before{background-color:#607d8b!important}.capibara.c-blue_grey.dark-theme select.tabs-select,.capibara.c-blue_grey select.tabs-select{background-color:rgba(96,125,139,.7)!important;border-color:#607d8b!important}.capibara.c-blue_grey.dark-theme .time,.capibara.c-blue_grey .time{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .time .symbol,.capibara.c-blue_grey .time .symbol{color:#607d8b}.capibara.c-blue_grey.dark-theme .time input:active,.capibara.c-blue_grey.dark-theme .time input:focus,.capibara.c-blue_grey .time input:active,.capibara.c-blue_grey .time input:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-box,.capibara.c-blue_grey.dark-theme .input-section select.input-select,.capibara.c-blue_grey .input-box,.capibara.c-blue_grey .input-section select.input-select{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .input-section select.input-select:active,.capibara.c-blue_grey.dark-theme .input-section select.input-select:focus,.capibara.c-blue_grey .input-section select.input-select:active,.capibara.c-blue_grey .input-section select.input-select:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-section .nav-input-file,.capibara.c-blue_grey.dark-theme .input-section input.nav-input,.capibara.c-blue_grey .input-section .nav-input-file,.capibara.c-blue_grey .input-section input.nav-input{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .input-section .nav-input-file:active,.capibara.c-blue_grey.dark-theme .input-section .nav-input-file:focus,.capibara.c-blue_grey.dark-theme .input-section input.nav-input:active,.capibara.c-blue_grey.dark-theme .input-section input.nav-input:focus,.capibara.c-blue_grey .input-section .nav-input-file:active,.capibara.c-blue_grey .input-section .nav-input-file:focus,.capibara.c-blue_grey .input-section input.nav-input:active,.capibara.c-blue_grey .input-section input.nav-input:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj{border:2px solid #607d8b}.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj:active,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey .cap-btn-raised,.capibara.c-blue_grey.dark-theme .cap-btn-raised{border-color:#607d8b;background:rgba(96,125,139,.8)}.capibara.c-blue_grey .cap-btn-outline,.capibara.c-blue_grey.dark-theme .cap-btn-outline{border-color:#607d8b;color:#607d8b}.capibara.c-blue_grey .cap-btn-outline.selected,.capibara.c-blue_grey.dark-theme .cap-btn-outline.selected{background:rgba(96,125,139,.8)}.capibara.c-blue_grey.dark-theme .select-container .selected-day,.capibara.c-blue_grey .select-container .selected-day{background:rgba(96,125,139,.3);box-shadow:inset 0 0 10px rgba(96,125,139,.5)}.capibara .c-blue_grey--background{background:#607d8b!important}.capibara .c-blue_grey-d--background{background:#41545e!important}.capibara .c-blue_grey-l--background{background:#8aa2ae!important}.capibara .c-blue_grey--text{color:#607d8b!important}.capibara .c-blue_grey-d--text{color:#41545e!important}.capibara .c-blue_grey-l--text{color:#8aa2ae!important}.capibara .detail-day .list-detail .item-detail.c-blue_grey{background:rgba(96,125,139,.2);border:1px solid #607d8b}.capibara .detail-day .list-detail .item-detail.c-blue_grey .left-icon{background:#607d8b}.capibara .detail-day .list-detail .item-detail.c-blue_grey .left-icon.outlined{border:1px solid #607d8b;box-shadow:inset 0 0 0 1px rgba(96,125,139,.7)}.capibara .detail-day .list-detail .item-detail.c-blue_grey .name{color:#607d8b}.capibara .float-box-container .float-box span.data.c-blue_grey{--local-color:#607d8b;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-blue_grey,.capibara .float-box-container .float-box .dot.c-blue_grey,.capibara .float-box-container .float-box .rowdot--row.c-blue_grey .rowdot--dot{--local-color:#607d8b}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey.active{background:rgba(96,125,139,.7);border-color:rgba(96,125,139,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey.active:hover{background:rgba(96,125,139,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey:hover{background:rgba(96,125,139,.2);border-color:rgba(96,125,139,.9)}.capibara .input-box .mini-input-section--icon.c-blue_grey{background:#607d8b}.capibara *,.capibara :after,.capibara :before{box-sizing:border-box}.capibara input{outline:none}.capibara input[type=number]{-moz-appearance:textfield}.capibara input[type=number]::-webkit-inner-spin-button,.capibara input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.capibara input[type=number]::-moz-placeholder{opacity:1}.capibara input[type=number]:-ms-input-placeholder{opacity:1}.capibara input[type=number]::placeholder{opacity:1}.capibara.dark-theme .hide-dark,.capibara:not(.dark-theme) .hide-light{display:none!important}.capibara .truncate{width:100%;display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.capibara .hide{display:none!important}.capibara .text-title{font-size:1.25em;font-weight:700;margin:.5em .3em}.capibara .text-subtitle{font-size:.875em;font-weight:700;margin:.5em .3em;flex:0 0 auto}.capibara .text-hint{font-size:.75em;margin:.3em;text-align:left;align-self:flex-start}.capibara .text-subtitle-2{font-size:.75em;margin:.5em .3em;flex:0 0 auto}.capibara .d-inline-block{display:inline-block}.capibara .d-block{display:block}.capibara .d-flex{display:flex;flex-direction:column;align-items:center}@media screen and (min-width:960px){.capibara .c-d-desktop-none{display:none!important}.capibara .c-d-desktop-inline-block{display:inline-block!important}.capibara .c-d-desktop-block{display:block!important}.capibara .c-d-desktop-flex{display:flex!important}}@media screen and (max-width:959px){.capibara .c-d-mobile-none{display:none!important}.capibara .c-d-mobile-block{display:block!important}.capibara .c-d-mobile-inline-block{display:inline-block!important}.capibara .c-d-mobile-flex{display:flex!important}}.capibara{scrollbar-width:auto}.capibara ::-webkit-scrollbar{width:12px;height:12px;opacity:.5}.capibara ::-webkit-scrollbar-corner,.capibara ::-webkit-scrollbar-track{background:transparent}.capibara ::-webkit-scrollbar-thumb{border-radius:5px;background:grey}.capibara.dark-theme ::-webkit-scrollbar-corner,.capibara.dark-theme ::-webkit-scrollbar-track{background:transparent}.capibara.dark-theme ::-webkit-scrollbar-thumb{background:#bdbdbd}.capibara{position:relative;font-family:Roboto,sans-serif;height:inherit;max-height:inherit;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal;font-size:var(--font-size)}.capibara pre{font-family:Roboto,sans-serif!important}.capibara{color:#37474f;background:#f5f5f5}.capibara.dark-theme{color:#f0f0f0;background:#222837}.capibara .container-tl{width:100%;height:calc(100% - var(--header-top-height));max-height:calc(100% - var(--header-top-height));position:relative;overflow:scroll;margin:0;will-change:scroll-position}.capibara.extended-right .container-tl{width:calc(100% - var(--nav-right-width))}.capibara .container-tl{background:#f5f5f5}.capibara.dark-theme .container-tl{background:#222837}.capibara .container-tl .today-line{width:0;position:absolute}.capibara .container-tl .today-line.disable-line,.capibara .container-tl .today-line.disable-line:after{display:none!important}.capibara .container-tl .today-line:after{margin-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width) + 1px);position:absolute;display:block;left:0;top:0;content:\\\"\\\";width:2px;height:100%;background:rgba(183,28,28,.4)}.capibara .container-tl.header-extended .container-tl .today-line:after{height:calc(100vh - var(--header-height) + var(--ex-header-height) + var(--header-top-height))}.capibara .corner{position:absolute;top:var(--header-top-height);z-index:4;height:var(--header-height);border:solid rgba(0,0,0,.4);border-width:0 0 2px;padding-left:8px}.capibara .corner:not(.right){left:0;border-right-width:1px;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .corner.right{right:0;width:var(--nav-right-width);display:none}.capibara .corner>div:not([class]){width:inherit;height:inherit}.capibara .corner .btn-container{padding-top:.5em}.capibara .corner .btn-container .corner-btn{font-size:.825em;margin:0 4px;padding:4px 8px}.capibara .corner .corner-title{height:inherit;display:block;text-align:left;position:relative}.capibara .corner .corner-title span.bottom-text{position:absolute;left:0;bottom:8px}@media screen and (max-width:959px){.capibara .corner .corner-title{font-size:.75em}}.capibara .corner .initial-corner{position:absolute;left:var(--nav-width);top:0;width:var(--initial-nav-width);height:var(--header-height);overflow:hidden;display:block}.capibara .corner .initial-corner .initial-corner-title{height:inherit;width:inherit;display:inline-block;margin-right:-1px;box-sizing:border-box;vertical-align:top;position:relative}.capibara .corner .initial-corner .initial-corner-title .bottom-container{position:absolute;left:0;bottom:8px;width:100%;box-sizing:border-box;display:flex;align-items:center}.capibara .corner .initial-corner .initial-corner-title .bottom-container .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;display:inline-block;font-size:.75em}.capibara .corner .extend-corner{position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width));top:0;width:var(--ex-nav-width);height:var(--header-height);overflow:hidden;display:block}.capibara .corner .extend-corner .ex-corner-title{height:inherit;width:inherit;display:inline-block;margin-right:-1px;box-sizing:border-box;vertical-align:top;position:relative}.capibara .corner .extend-corner .ex-corner-title .bottom-container{position:absolute;left:0;bottom:8px;width:100%;box-sizing:border-box;display:flex;align-items:center}.capibara .corner .extend-corner .ex-corner-title .bottom-container .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;display:inline-block;font-size:.75em}.capibara .corner .cap-btn-nav-corner{position:absolute;right:0;top:0;width:var(--btn-nav-width);height:var(--header-height);min-width:100px;padding-top:var(--header-labels-height)}.capibara .corner .cap-btn-nav-corner .input-titles{text-align:right;display:flex;flex-direction:column;position:absolute;right:0;top:var(--header-labels-height)}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container{position:relative;border-radius:3px}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent){display:none}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container.input-title--accent .input-title{color:#fff;background:grey}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container span.average{font-weight:700;margin-right:4px;padding:3px}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container .input-title{height:calc(var(--header-input-height) + 3px);line-height:calc(var(--header-input-height) + 2px);padding-right:8px;display:inline-block;font-size:.75em}.capibara.extended-right .corner.right{display:block}.capibara.header-extended .corner,.capibara.header-extended .corner .cap-btn-nav-corner,.capibara.header-extended .corner .extend-corner,.capibara.header-extended .corner .initial-corner{height:calc(var(--header-height) + var(--ex-header-height))}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent){display:unset}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent) .average-box{visibility:visible}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent) .input-title{visibility:visible;height:auto}.capibara .corner{background:#f1fffe}.capibara.dark-theme .corner{background:#313b50;border-color:rgba(64,78,105,.6)}.capibara.dark-theme .corner .input-titles .input-title-container .input-title{color:hsla(0,0%,100%,.8)!important}.capibara .header-top{position:relative;width:100%;height:var(--header-top-height);padding:0 .5em;display:flex;flex-flow:row wrap;z-index:5}.capibara .header-top .spacer{flex:1 0 auto}.capibara .header-top .tabs-container{display:flex;border-right:1px solid hsla(0,0%,43.5%,.3);margin-right:.5em}.capibara .header-top .tabs-container:not(:empty){padding:0}.capibara .header-top .tabs-container button.tab{cursor:pointer;padding:.25em 1em;font-weight:700;border:1px solid transparent;margin:.5em .5em 0 0;border-radius:30px;transition:background .2s ease;background:transparent}.capibara .header-top .tabs-container button.tab:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara .header-top .tabs-container button.tab.disabled{color:grey}.capibara .header-top .tabs-container button.tab:hover{border-color:grey}.capibara .header-top .legends-container{display:flex}.capibara .header-top .legends-container .legend{display:flex;flex-direction:row;margin-right:1em;cursor:pointer;padding:.8em .5em .5em 0}.capibara .header-top .legends-container .legend:not(.active){opacity:.5}.capibara .header-top .legends-container .legend:not(.active) .icon-legend{background:grey!important}.capibara .header-top .legends-container .legend .icon-legend{width:.825em;height:.825em;margin:2px .5em 2px 0;background:grey;box-shadow:0 1px 2px rgba(0,0,0,.4);display:inline-block;border-radius:1px;border:1px solid rgba(0,0,0,.4)}.capibara .header-top .legends-container .legend .icon-legend.circle{border-radius:50%}.capibara .header-top .legends-container .legend:hover span{text-decoration:underline}.capibara .header-top .legends-container.force-mobile-style{position:absolute;left:2em;top:2em;background:inherit;color:inherit;flex-direction:column;z-index:6;border:1px solid rgba(0,0,0,.4);border-radius:3px;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)!important}.capibara .header-top .legends-container.force-mobile-style .legend{font-size:16px;padding:.5em}@media screen and (max-width:959px){.capibara .header-top .legends-container{position:absolute;left:2em;top:2em;background:inherit;color:inherit;flex-direction:column;z-index:6;border:1px solid rgba(0,0,0,.4);border-radius:3px;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)!important}.capibara .header-top .legends-container .legend{font-size:16px;padding:.5em}}.capibara .header-top{background:#f1fffe}.capibara .header-top .tabs-container .tab{color:#313b50}.capibara .header-top .tabs-container .tab.disabled{color:rgba(49,59,80,.5)}.capibara.dark-theme .header-top{background:#313b50}.capibara.dark-theme .header-top .tabs-container .tab{color:hsla(0,0%,100%,.8)}.capibara.dark-theme .header-top .tabs-container .tab.disabled{color:hsla(0,0%,100%,.4)}.capibara .corner-footer{position:-webkit-sticky;position:sticky;left:0;bottom:0;z-index:3;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));height:var(--item-height);margin-bottom:calc(var(--item-height)*-1);box-sizing:border-box}.capibara .corner-footer .corner-title{line-height:30px;height:inherit;display:block;text-align:left;box-sizing:border-box;position:relative;font-weight:700;padding:4px 8px}.capibara .corner-footer{background:#78909c;color:#fff}.capibara.dark-theme .corner-footer{background:#313b50;color:#f0f0f0}.capibara nav.right{position:absolute;right:0;top:calc(var(--header-height) + var(--header-top-height));height:calc(100% - var(--header-height) - var(--header-top-height));overflow-y:scroll;overflow-x:hidden;z-index:5;display:none;border-left:1px solid red}.capibara nav.right,.capibara nav.right .child-nav-item,.capibara nav.right .nav-item{width:var(--nav-right-width)}.capibara nav.right .nav-input-container{text-align:center}.capibara nav.right .nav-input-container .button-section{padding-bottom:.75em;padding-top:.75em;position:-webkit-sticky;position:sticky;bottom:0}.capibara nav.left{min-height:calc(100% - var(--header-height));position:-webkit-sticky;position:sticky;left:0;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));height:auto;z-index:2;border-right:1px solid #b0bec5;overflow:visible;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.capibara nav.left .child-nav-item,.capibara nav.left .nav-item{width:var(--nav-width)}.capibara nav.left .detail-nav-item{min-width:250px;max-width:500px;width:-webkit-max-content;width:-moz-max-content;width:max-content;min-height:70px;position:absolute;left:3rem;top:0;border:1px solid grey;z-index:2;border-radius:5px;padding:16px;transition:all .3s ease;flex-flow:column nowrap;box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12);transform:translateY(calc(.5rem + var(--item-height)))}.capibara nav.left .detail-nav-item.to-bottom{transform:translateY(calc(-100% - .5rem))}.capibara nav.left .detail-nav-item .header-detail .detail-title{font-size:1.125em;font-weight:700;margin-bottom:8px;max-width:100%;width:100%;padding-right:80px}.capibara nav.left .detail-nav-item .header-detail .detail-subtitle{font-size:.875;margin-bottom:8px}.capibara nav.left .detail-nav-item .header-detail .header-chip{position:absolute;right:16px;top:16px;padding:2px 8px;border:3px solid grey;border-radius:5px}.capibara nav.left .detail-nav-item .detail-container>div{margin:6px 0}.capibara nav.left .initial-nav-list{width:var(--initial-nav-width);position:absolute;left:var(--nav-width);top:0;overflow:hidden;display:block}.capibara nav.left .initial-nav-list .child-initial-nav-item,.capibara nav.left .initial-nav-list .initial-nav-item{border-bottom:1px solid #b0bec5;height:var(--item-height);box-sizing:border-box;display:flex;line-height:34px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-title,.capibara nav.left .initial-nav-list .initial-nav-item .item-title{flex:1 0 auto;padding:4px 8px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col,.capibara nav.left .initial-nav-list .initial-nav-item .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;padding:4px 8px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input{padding:0}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>.hour-input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>.hour-input{font-size:.875em;width:calc(100% - 8px);border:1px solid grey;border-radius:3px;height:24px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input{text-align:center;font-size:.875em;width:calc(100% - 8px);display:block;border:1px solid grey;border-radius:3px;height:24px;margin:8px 4px 4px;background:hsla(0,0%,100%,.2)}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input:active,.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input:focus,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input:active,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input:focus{background:hsla(0,0%,100%,.8)}.capibara nav.left .extend-nav-list{width:var(--ex-nav-width);position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width));top:0;overflow:hidden;display:block}.capibara nav.left .extend-nav-list .child-ex-nav-item,.capibara nav.left .extend-nav-list .ex-nav-item{border-bottom:1px solid #b0bec5;height:var(--item-height);box-sizing:border-box;display:flex;line-height:1.75rem}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-title,.capibara nav.left .extend-nav-list .ex-nav-item .item-title{flex:1 0 auto;padding:4px 8px}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col,.capibara nav.left .extend-nav-list .ex-nav-item .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;padding:4px 8px}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input{padding:0}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input{text-align:center;font-size:.875em;width:calc(100% - 8px);display:block;border:1px solid grey;border-radius:3px;height:24px;margin:8px 4px 4px;background:hsla(0,0%,100%,.2)}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input:active,.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input:focus,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input:active,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input:focus{background:hsla(0,0%,100%,.8)}.capibara nav.left .cap-btn-nav-list{left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width));width:var(--btn-nav-width);position:absolute;top:0;overflow:hidden}.capibara nav.left .cap-btn-nav-list .cap-btn-child-nav-item .cap-btn-nav-item-content,.capibara nav.left .cap-btn-nav-list .cap-btn-nav-item .cap-btn-nav-item-content{height:var(--item-height);width:inherit;padding:4px 6px;border-bottom:1px solid #b0bec5;text-align:right}.capibara nav.left .nav-item-total-footer{padding-top:3px}.capibara nav .cap-btn-nav-item.parent,.capibara nav .ex-nav-item.parent,.capibara nav .initial-nav-item.parent,.capibara nav .nav-item-container.parent{background:rgba(25,118,210,.1)}.capibara nav .cap-btn-nav-item.parent>.item-title,.capibara nav .ex-nav-item.parent>.item-title,.capibara nav .initial-nav-item.parent>.item-title,.capibara nav .nav-item-container.parent>.item-title{max-width:calc(var(--nav-width) + var(--ex-nav-width) + var(--initial-nav-width) + var(--btn-nav-width) - 60px);width:auto}.capibara nav .nav-item-list .child-nav-item,.capibara nav .nav-item-list .nav-item{min-height:var(--item-height);box-sizing:border-box;position:relative}.capibara nav .nav-item-list .child-nav-item .nav-item-container,.capibara nav .nav-item-list .nav-item .nav-item-container{display:flex;border-bottom:1px solid #b0bec5;height:var(--item-height)}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon{transition:all .5s ease;background:transparent;border:none;width:34px;flex:0 0 34px;font-size:1.5em;text-align:center;cursor:pointer}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon:focus,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{flex:0 0 34px;font-size:1.125em;vertical-align:middle;text-align:center;line-height:40px;margin-top:12px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon path,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon path{width:20px;height:20px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title{flex:1 1 auto;display:grid;font-size:1em;line-height:34px;padding:4px 8px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.full-width,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.full-width{flex:1 0 auto;display:inline-block}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.clickeable,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.clickeable{cursor:pointer}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.clickeable:hover,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.clickeable:hover{background:hsla(0,0%,39.2%,.2)!important;text-decoration:underline}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.hoverable:hover,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.hoverable:hover{background:hsla(0,0%,39.2%,.2)!important}.capibara nav .multibuttons-btn{background:transparent;border:none;color:#999;font-size:1.5em;cursor:pointer;min-width:38px;max-height:38px;display:flex;flex-direction:row;align-items:center;justify-content:center}.capibara nav .multibuttons-btn:hover{background:hsla(0,0%,39.2%,.2)}.capibara.extended-right nav.right{display:block}.capibara.header-extended nav.left{min-height:calc(100% - var(--header-height) + var(--ex-header-height))}.capibara.header-extended nav.right{top:calc(var(--header-height) + var(--header-top-height) + var(--ex-header-height));height:calc(100% - var(--header-height) - var(--header-top-height) - var(--ex-header-height))}.capibara nav.left,.capibara nav.right,.capibara nav.right .button-section{background:#fafafa}.capibara nav.left .detail-nav-item{border-color:rgba(0,0,0,.2);background:#fff}.capibara nav.left .detail-nav-item .header-chip.red-light{border-color:#f84747}.capibara nav.left .detail-nav-item .header-chip.yellow-light{border-color:#fdd835}.capibara nav.left .detail-nav-item .header-chip.green-light{border-color:#38993d}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon{color:#37474f}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{color:rgba(55,71,79,.2)}.capibara.dark-theme nav.right,.capibara.dark-theme nav.right .button-section{background:#222837}.capibara.dark-theme nav.left{background:#222837;border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav.left .detail-nav-item{border-color:#404e69;background:#222837}.capibara.dark-theme nav.left .detail-nav-item .header-chip{color:#f0f0f0}.capibara.dark-theme nav.left .detail-nav-item .header-chip.red-light{border-color:#aa1a1a}.capibara.dark-theme nav.left .detail-nav-item .header-chip.yellow-light{border-color:#fbcd00}.capibara.dark-theme nav.left .detail-nav-item .header-chip.green-light{border-color:#388e3c}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item{border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input{background:#404e69;color:#f0f0f0}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input:focus{background:hsla(0,0%,100%,.2)}.capibara.dark-theme nav.left .cap-btn-nav-list .cap-btn-child-nav-item .cap-btn-nav-item-content,.capibara.dark-theme nav.left .cap-btn-nav-list .cap-btn-nav-item .cap-btn-nav-item-content,.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container{border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container .tree-icon{color:#f0f0f0}.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{color:hsla(0,0%,94.1%,.2)}.capibara .container-tl header{height:var(--header-height);width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;top:0;min-width:100%;position:-webkit-sticky;position:sticky;z-index:3;border-bottom:2px solid grey;box-sizing:border-box;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.capibara .container-tl header .header-container-extended{height:auto;position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));width:100%;box-sizing:border-box;display:flex;flex-direction:column}.capibara .container-tl header .header-container-extended .input-list{padding:1px 0;flex:0 0 auto;display:flex;flex-direction:row}.capibara .container-tl header .header-container-extended .input-list:not(.persistent){display:none}.capibara .container-tl header .header-container-extended .input-list>div{width:var(--day-width)}.capibara .container-tl header .header-container-extended .input-list>div>span{display:block;width:inherit;line-height:var(--header-input-height);height:var(--header-input-height);text-align:center;font-size:.875em}.capibara .container-tl header .header-container-extended .input-list .dia-input input{width:inherit;height:var(--header-input-height);border:1px solid grey;border-left-width:0;border-radius:0;background:hsla(0,0%,100%,.5);text-align:center;font-size:.875em}.capibara .container-tl header .header-container-extended .input-list .dia-input input:active,.capibara .container-tl header .header-container-extended .input-list .dia-input input:focus{background:hsla(0,0%,100%,.8)}.capibara .container-tl header .header-container{position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));width:100%;display:flex;height:var(--header-labels-height)}.capibara .container-tl header .header-container .header-item{padding:6px 8px;min-width:var(--item-min-width);height:var(--header-height);text-align:center;box-sizing:border-box;position:relative;border-left:1px solid rgba(0,0,0,.1)}.capibara .container-tl header .header-container .header-item span.bottom-text{position:absolute;left:0;bottom:8px;width:100%}.capibara .container-tl header .agno-calendario{display:inline-block;width:-webkit-max-content;width:-moz-max-content;width:max-content}.capibara .container-tl header .agno-calendario .agno{position:-webkit-sticky;position:sticky;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));display:inline-block;padding-left:8px;padding-right:32px;font-size:.75em;margin-top:4px}.capibara .container-tl header .agno-calendario .meses{display:block;display:flex}.capibara .container-tl header .agno-calendario .mes-calendario{display:inline-block;min-width:var(--day-width)}.capibara .container-tl header .agno-calendario .mes-calendario .mes{display:inline-block;position:-webkit-sticky;position:sticky;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--btn-nav-width));padding-left:.5em;padding-right:2em;font-size:.875em;margin-top:6px}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced{width:var(--day-width);max-width:var(--day-width);overflow:hidden}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-2{width:calc(var(--day-width)*2);max-width:calc(var(--day-width)*2)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-3{width:calc(var(--day-width)*3);max-width:calc(var(--day-width)*3)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-4{width:calc(var(--day-width)*4);max-width:calc(var(--day-width)*4)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced .mes-label{width:-webkit-max-content;width:-moz-max-content;width:max-content}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{content:\\\"\\\";background:linear-gradient(90deg,transparent,red);position:absolute;right:0;top:0;height:100%;width:calc(var(--day-width)/2)}.capibara .container-tl header .agno-calendario .mes-calendario .dias{display:flex;margin-top:5px}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario{width:var(--day-width);height:var(--header-day-height);vertical-align:bottom;font-size:.875em;border-right:1px solid rgba(0,0,0,.1);box-sizing:border-box;padding:4px 6px;text-align:center;position:relative}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable{cursor:pointer}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.has-alert:after{content:\\\"\\\";display:block;position:absolute;width:0;height:0;right:0;top:0;border-color:red red transparent transparent;border-style:solid;border-width:6px;z-index:1}.capibara.header-extended .container-tl header{height:calc(var(--header-height) + var(--ex-header-height))}.capibara.header-extended .container-tl header .header-container-extended .input-list:not(.persistent){display:flex}.capibara .container-tl header{background:#f1fffe;color:#37474f}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f1fffe)}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.weekend{background:rgba(0,0,0,.1);color:#263238}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.today{background:rgba(229,57,53,.9);color:#fff}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.active{background:green;color:#fff}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:hover{background:hsla(0,0%,39.2%,.4)}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:active{background:hsla(0,0%,39.2%,.6)}.capibara .container-tl header .header-container-extended .input-list .dia-input input,.capibara .container-tl header .header-container-extended .input-list div>span{color:#313b50}.capibara.dark-theme .container-tl header{background:#313b50;color:#f0f0f0;border-color:rgba(64,78,105,.6)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#313b50)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario{border-color:rgba(64,78,105,.6)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.weekend{background:#222837;color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.today{background:rgba(183,28,28,.6);color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.active{background:rgba(56,142,60,.6);color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:hover{background:hsla(0,0%,39.2%,.4)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:active{background:hsla(0,0%,39.2%,.6)}.capibara.dark-theme .container-tl header .header-container-extended .input-list div>span{color:hsla(0,0%,100%,.8)!important}.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input{background:rgba(64,78,105,.6);color:hsla(0,0%,100%,.8)!important;border-color:#313b50}.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input:active,.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input:focus{background:hsla(0,0%,100%,.2)}.capibara .container-tl .plot-vertical-container{height:0;width:0;position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .container-tl .plot-vertical-container .plot-vertical{background:rgba(0,0,0,.3);width:var(--day-width);height:calc(100vh - var(--header-height) - var(--header-top-height));position:absolute;top:0;left:0}.capibara .container-tl .plot-vertical-container .plot-vertical.rain{background:repeating-linear-gradient(53deg,rgba(3,155,229,.2),rgba(3,155,229,.2) 5px,transparent 0,transparent 12px)}.capibara .container-tl .plot-horizontal-container{height:0;width:0;position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .container-tl .plot-horizontal-container .plot-horizontal{background:rgba(0,0,0,.3);width:100vw;height:var(--item-height);position:absolute;top:0;left:0}.capibara .container-tl .plot-horizontal-container .plot-horizontal.plot-parent{background:rgba(25,118,210,.1)}.capibara .container-tl.extended-right .container-tl .plot-container .plot-vertical{height:calc(100vh - var(--header-height) + var(--ex-header-height) + var(--header-top-height))}.capibara .container-tl footer{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;bottom:0;min-width:100%;height:var(--item-height);position:-webkit-sticky;position:sticky;z-index:2;box-sizing:border-box}.capibara .container-tl footer .footer-container{position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));box-sizing:border-box;min-width:100%;display:flex}.capibara .container-tl footer .footer-container .footer-item{padding:10px 2px;width:var(--day-width);cursor:default;border-left:1px solid rgba(0,0,0,.1);box-sizing:border-box;height:var(--item-height);text-align:center}.capibara .container-tl footer{background:#78909c;color:#fff}.capibara .container-tl.dark-theme footer{background:#313b50;color:#f0f0f0}.capibara .container-tl .table{position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));top:var(--header-height);width:calc(100% - var(--nav-width) - var(--initial-nav-width) - var(--ex-nav-width) - var(--btn-nav-width));max-height:calc(100% - var(--header-height));height:calc(100% - var(--header-height));margin-top:-1px}.capibara .container-tl .table .day-mouse-over{position:absolute;left:0;top:0;width:var(--day-width);height:var(--item-height);border:3px solid rgba(245,124,0,.5);box-shadow:0 0 2px #f57c00,inset 0 0 3px #f57c00;transition:transform .1s ease;overflow:visible;will-change:transform}.capibara .container-tl .table .day-mouse-over:after,.capibara .container-tl .table .day-mouse-over:before{position:absolute;background:rgba(245,124,0,.1);content:\\\"\\\";display:block}.capibara .container-tl .table .day-mouse-over:after{width:var(--day-width);height:100vh;right:-4px;bottom:calc(var(--item-height) - 2px)}.capibara .container-tl .table .day-mouse-over:before{height:var(--item-height);width:100vw;right:calc(var(--day-width) - 2px);bottom:-4px}.capibara .container-tl .table .background-grid{width:calc(var(--day-width)*20);height:calc(var(--item-height)*20);position:absolute;left:0;top:1px;background-repeat:repeat;background-size:var(--day-width) var(--item-height),calc(var(--day-width)*7) var(--item-height),calc(var(--day-width)*7) var(--item-height);background-image:linear-gradient(90deg,rgba(80,80,80,.3) 1px,transparent 0),linear-gradient(0deg,rgba(80,80,80,.3) 1px,transparent 0),linear-gradient(90deg,transparent calc(var(--day-width)*5),rgba(80,80,80,.1) 0);background-position:0 0,0 0,0 0}.capibara .container-tl .table .draw-box{position:relative}.capibara .container-tl .table .draw-box canvas{position:absolute;left:0;top:0}.capibara.header-extended .container-tl .table{top:calc(var(--header-height) + var(--ex-header-height))}.capibara .select-container{overflow:visible;position:absolute;left:0;top:0;width:0;height:0}.capibara .select-container .selected-day{width:var(--day-width);height:var(--item-height);position:absolute;background:hsla(0,0%,74.1%,.4);box-shadow:inset 0 0 5px hsla(0,0%,74.1%,.8)}.capibara .select-container .selected-day[cap-badge]:after{content:attr(cap-badge);display:block;position:absolute;right:-3px;top:-3px;background:#1565c0;font-size:.75em;color:#fff;width:1.5em;height:1.5em;border-radius:50%;z-index:2;text-align:center;font-weight:700;padding:2px;box-shadow:0 1px 3px rgba(0,0,0,.3)}.capibara .detail-day{min-height:50px;min-width:250px;max-width:400px;border:1px solid grey;padding:.75em;display:flex;flex-flow:column nowrap;margin:0 0 0 1em;box-sizing:border-box;box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12);position:absolute;border-radius:5px;transition:all .3s ease;will-change:transform,left,top;transform:translateY(calc(var(--item-height)/2*-1));z-index:4;opacity:1}.capibara .detail-day:after{content:\\\"\\\";background:inherit;width:20px;height:20px;display:block;position:absolute;left:-11px;top:calc(var(--item-height)/2 + 7px);transform:rotate(45deg);border-color:grey;border-style:solid;border-width:0 0 1px 1px}.capibara .detail-day.dd-hide{display:none}.capibara .detail-day.has-right-arrow{margin:0 16px 0 0;transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(var(--item-height)/2*-1))}.capibara .detail-day.has-right-arrow:after{border-width:1px 1px 0 0;left:unset;right:-11px}.capibara .detail-day.has-ceil-arrow{transform:translateY(-7px)}.capibara .detail-day.has-ceil-arrow:after{top:6px}.capibara .detail-day.has-ceil-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(-7px)}.capibara .detail-day.has-ceil-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day.has-middle-arrow{transform:translateY(calc(-50% + var(--item-height)/2))}.capibara .detail-day.has-middle-arrow:after{top:calc(50% - 10px)}.capibara .detail-day.has-middle-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(-50% + var(--item-height)/2))}.capibara .detail-day.has-middle-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day.has-bottom-arrow{transform:translateY(calc(-100% + var(--item-height)))}.capibara .detail-day.has-bottom-arrow:after{top:unset;bottom:4px}.capibara .detail-day.has-bottom-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(-100% + var(--item-height)))}.capibara .detail-day.has-bottom-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day .header-detail .title{font-size:1.25em;font-weight:700;margin-bottom:.25em;min-width:10em;max-width:20em;line-height:unset}.capibara .detail-day .header-detail .subtitle{font-size:.875em;margin-bottom:8px;min-width:10em}.capibara .detail-day .list-detail{margin:0;flex:0 0 auto}.capibara .detail-day .list-detail.list .item-detail{margin:0;font-size:.875em;position:relative;padding:.5em .5em .5em 1em;border-radius:0;box-sizing:border-box;overflow:hidden;background:transparent;border:unset;border-top:1px solid rgba(0,0,0,.1);display:flex;flex-direction:row}.capibara .detail-day .list-detail.list .item-detail .left-icon{width:8px;height:8px;min-height:unset!important;left:1px;top:10px;border-radius:50%}.capibara .detail-day .list-detail.list .item-detail .left-icon.diamond{border-radius:0;transform:rotate(45deg) skew(10deg,10deg)}.capibara .detail-day .list-detail.list .item-detail .left-icon.outlined{background:transparent}.capibara .detail-day .list-detail.list .item-detail .left-icon.triangle{border-radius:0;transform:rotate(45deg) skew(10deg,10deg) translate(3px,3px);width:0;height:0;border-width:5px;border-style:solid;background-color:transparent}.capibara .detail-day .list-detail.list .item-detail .left-icon.shield{width:10px;height:10px;border-radius:0 0 50% 50%}.capibara .detail-day .list-detail.list .item-detail .name{flex:0 1 40%;font-weight:700;margin-bottom:0;padding-right:1em}.capibara .detail-day .list-detail.list .item-detail .item-description{flex:1 1 auto;display:flex;flex-direction:column;align-items:start}.capibara .detail-day .list-detail.list .item-detail .item-description .desc{display:flex;margin-bottom:3px;align-items:baseline}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column{flex-direction:column;align-items:start;width:100%;border-bottom-width:1px;border-bottom-style:solid;margin-bottom:0;padding-bottom:0}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column:last-child{border-color:transparent}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column .label{margin-right:0}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .label{display:inline-block;flex:1 1 65%;font-weight:700;margin-right:.5em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .val{display:flex;align-items:baseline;margin-left:1em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .prefix,.capibara .detail-day .list-detail.list .item-detail .item-description .desc .suffix{font-size:.85em;flex:0 0 auto}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .value:not(empty){margin-right:.2em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc sup{top:-1em!important}.capibara .detail-day .list-detail.flex{display:flex;flex-flow:row wrap;align-content:flex-start;display:inline-flex;flex-flow:wrap;-ms-writing-mode:tb-lr;writing-mode:vertical-lr;max-height:25%}.capibara .detail-day .list-detail.flex .item-detail{flex:0 0 auto;min-width:8em;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb}.capibara .detail-day .list-detail.column{-moz-columns:7em 3;columns:7em 3;min-width:30em}.capibara .detail-day .list-detail.column .item-detail{display:inline-block;width:100%}.capibara .detail-day .list-detail .item-detail{margin:4px;position:relative;padding:.5em 1em;border-radius:6px;box-sizing:border-box;overflow:hidden}.capibara .detail-day .list-detail .item-detail .name{font-weight:700;margin-bottom:.5em;color:var(--local-color-font,inherit)}.capibara .detail-day .list-detail .item-detail .item-description .desc .label{display:inline-block;font-weight:700}.capibara .detail-day .list-detail .item-detail .left-icon{min-height:10px;height:100%;position:absolute;left:0;top:0;background:var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.outlined{border:1px solid var(--local-color,inherit);box-shadow:inset 0 0 0 1px var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.triangle{background:transparent;border-color:var(--local-color,inherit) transparent transparent var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.shield{background:var(--local-color,grey)}.capibara .detail-day .elements-detail{padding:.5em 0 .25em;display:flex;flex-wrap:wrap}.capibara .detail-day .elements-detail .name{flex:1 0 100%;font-weight:700}.capibara .detail-day .elements-detail .elements-list{margin:4px -4px}.capibara .detail-day .elements-detail .elements-list .element-detail{display:inline-block;padding:.25em .875em;border-radius:3px;color:#fff;margin:.25em}.capibara .detail-day .alert{padding:.5em 0 .25em 2em;position:relative;min-width:15em;min-width:10em;max-width:30em}.capibara .detail-day .alert .alert-icon{max-width:2em;font-size:1.75em;position:absolute;left:0;top:.5em;color:grey}.capibara .detail-day .alert .red{color:#f44336}.capibara .detail-day .msj-container{margin:0 -.78em -.75em;border:1px solid grey;z-index:2}.capibara .detail-day .msj-container pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.capibara .detail-day .msj-container .msj{min-width:10em;max-width:30em;margin:0 0 .5em;padding:.75em;font-size:.875em}.capibara .detail-day .msj-container .msj-detail{display:flex;flex-direction:column;padding:.25em .5em}.capibara .detail-day .msj-container .msj-detail .email{font-size:.875em;font-style:italic;opacity:.5}.capibara .detail-day .msj-container .msj-detail .date{font-size:.725em}.capibara .detail-day{color:#37474f;background:#fff}.capibara .detail-day,.capibara .detail-day .list-detail.list .item-detail,.capibara .detail-day .list-detail.list .item-detail .desc-column,.capibara .detail-day:after{border-color:rgba(0,0,0,.2)}.capibara .detail-day .elements-detail .elements-list .element-detail{background:rgba(55,71,79,.8)}.capibara .detail-day .msj-container{background:#ffecb3;border-color:#ffca28}.capibara .detail-day .msj-container .msj-detail{background:#ffe082;border-color:#ffca28}.capibara.dark-theme .detail-day{color:#f0f0f0;border-color:#404e69;background:#222837}.capibara.dark-theme .detail-day:after{border-color:#404e69}.capibara.dark-theme .detail-day .list-detail .item-detail{background:transparent!important}.capibara.dark-theme .detail-day .list-detail.list .item-detail,.capibara.dark-theme .detail-day .list-detail.list .item-detail .desc-column{border-color:#404e69}.capibara.dark-theme .detail-day .elements-detail .elements-list .element-detail{background:#293243}.capibara.dark-theme .detail-day .msj-container{background:#293243;border-color:rgba(251,192,45,.4)}.capibara.dark-theme .detail-day .msj-container .msj-detail{background:rgba(251,192,45,.1)}.capibara .cap-context-menu-container{position:absolute;left:0;top:0;z-index:10;will-change:transform,left,top}.capibara .cap-context-menu-container.cm-hide .cap-context-menu{visibility:hidden;opacity:0}.capibara .cap-context-menu-container .cap-context-menu{position:absolute;min-width:250px;z-index:2;border-radius:5px;border:1px solid grey;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);font-size:.75em;transition:all .1s linear;visibility:visible;opacity:1;padding:.4em 0;vertical-align:middle}.capibara .cap-context-menu-container .cap-context-menu_item{padding:.5em 1em;flex:0 0 auto;display:flex;flex-direction:row;align-items:center;cursor:pointer}.capibara .cap-context-menu-container .cap-context-menu_item:hover{background:rgba(20,20,20,.2)}.capibara .cap-context-menu-container .cap-context-menu_item.is-disabled{opacity:.5;cursor:unset}.capibara .cap-context-menu-container .cap-context-menu_item.is-disabled:hover{background:none}.capibara .cap-context-menu-container .cap-context-menu_item.is-divider{cursor:unset;height:0;border-bottom:1px solid rgba(20,20,20,.2);padding:0;margin:.3em 1em}.capibara .cap-context-menu-container .cap-context-menu_item_icon{display:inline-block;flex:0 0 auto;padding-right:.5em}.capibara .cap-context-menu-container .cap-context-menu_item_icon svg{width:16px;height:16px}.capibara .cap-context-menu-container .cap-context-menu{color:#37474f;border-color:rgba(0,0,0,.2);background:#fff}.capibara .cap-context-menu-container .cap-context-menu svg path{fill:#37474f}.capibara.dark-theme .cap-context-menu-container .cap-context-menu{color:#f0f0f0;border-color:#404e69;background:#222837}.capibara.dark-theme .cap-context-menu-container .cap-context-menu svg path{fill:#f0f0f0}.capibara .hour-input{border:1px solid grey;border-radius:3px;display:flex;justify-content:center;align-items:center;height:24px;margin:8px 4px;overflow:hidden}.capibara .hour-input input{width:50%;height:inherit;border:1px solid transparent;background:transparent;font-size:.875em}.capibara .hour-input input:active,.capibara .hour-input input:focus{border:1px solid rgba(0,0,0,.1)}.capibara .hour-input span{width:8px;text-align:center}.capibara .hour-input .hh{text-align:right}.capibara .time{border-radius:6px;display:inline-block;font-size:0}.capibara .time .symbol{display:inline-block;height:auto;width:20px;font-size:2rem;text-align:center;vertical-align:center}.capibara .time input{border-radius:6px;border:2px solid transparent;width:62px;text-align:center;font-size:2rem;position:relative;transition:all .1s ease;outline:none;background:transparent;padding:6px}.capibara .time input:active,.capibara .time input:focus{transform:scale(1.06)}.capibara .time input:invalid{border:2px solid red}.capibara .buttons-group{display:flex;flex-direction:row}.capibara .buttons-group button.cap-btn-outline{border-radius:0;margin:0 -2px 0 0}.capibara .buttons-group button.cap-btn-outline:first-of-type{border-radius:6px 0 0 6px;margin-left:4px}.capibara .buttons-group button.cap-btn-outline:last-of-type{border-radius:0 6px 6px 0;margin-right:4px}.capibara .input-box-tab-container{display:flex;width:100%;flex-wrap:nowrap;border-radius:6px 6px 0 0;border:solid grey;border-width:2px 2px 0}.capibara .input-box-tab-container .input-box-tab{flex:1 1 auto;padding:.3em 1em;font-size:.9em;border-right:1px solid grey;cursor:pointer}.capibara .input-box-tab-container .input-box-tab.active{background:hsla(0,0%,58.8%,.3)}.capibara .input-box-tab-container .input-box-tab:last-child{border-right:none}.capibara .input-box-tab-container+.input-box{border-radius:0 0 6px 6px}.capibara .input-box{margin:0 16px;min-height:180px;border:2px solid grey;border-radius:6px;overflow-y:scroll;padding-bottom:60px;width:100%;max-height:300px}.capibara .input-box .search-input-container{padding:.3em;max-width:100%;text-align:center;border-bottom:1px solid hsla(0,0%,39.2%,.3);position:relative}.capibara .input-box .search-input-container .search-input{border:1px solid #646464;border-radius:13px;height:26px;padding:.5em 1em;max-width:100%;width:100%;font-size:.8em;color:inherit}.capibara .input-box .search-input-container .search-input:-moz-placeholder-shown+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input:-ms-input-placeholder+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input:placeholder-shown+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input-clear{position:absolute;right:1em;top:.4em;color:hsla(0,0%,39.2%,.6);background-color:transparent;border-style:none}.capibara .input-box .mini-input-section{padding:.5em 2em .5em .5em;text-align:left;width:100%;position:relative;border-bottom:1px solid hsla(0,0%,39.2%,.3)}.capibara .input-box .mini-input-section.has-icon{padding:.5em 2em .5em 1.5em}.capibara .input-box .mini-input-section.clickeable{cursor:pointer}.capibara .input-box .mini-input-section.clickeable:hover label{cursor:pointer;text-decoration:underline}.capibara .input-box .mini-input-section.is-title{background:hsla(0,0%,39.2%,.1)}.capibara .input-box .mini-input-section.is-title .mini-input-section--title{opacity:.6}.capibara .input-box .mini-input-section--tooltip{position:absolute;right:0;top:1.5em;display:none;padding:.5em;margin:1em;color:#000;border-radius:3px;z-index:2;box-shadow:0 2px 5px rgba(0,0,0,.3)}.capibara .input-box .mini-input-section label{display:flex;flex-direction:row;flex-wrap:nowrap;font-size:.875em;align-items:baseline}.capibara .input-box .mini-input-section--titles{display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:start;max-width:100%;flex:0 1 auto}.capibara .input-box .mini-input-section--content{display:flex;flex-direction:row;justify-content:end;flex:1 0 auto;font-size:1em;padding:0 .5em}.capibara .input-box .mini-input-section--subtitle,.capibara .input-box .mini-input-section--title{position:relative;width:unset;max-width:100%;flex-grow:1}.capibara .input-box .mini-input-section--subtitle{font-size:.875em}.capibara .input-box .mini-input-section--suffix{flex:0 0 auto;font-size:.875em;display:flex;flex-direction:column}.capibara .input-box .mini-input-section--icon{display:inline-block;position:absolute;left:.5em;top:.75em;width:.75em;height:.75em;border-radius:50%;background:var(--local-color,grey);box-shadow:0 1px 3px rgba(0,0,0,.3)}.capibara .input-box .mini-input-section--link{opacity:.6;color:#2196f3;display:inline-block;position:absolute;right:.5em;top:.75em}.capibara .input-box .mini-input-section--link svg{width:18px!important;height:18px!important}.capibara .input-box .mini-input-section:hover .mini-input-section--tooltip{display:block}.capibara .input-box .mini-input-section input{text-align:center;width:4em;margin-right:.5em;border:1px solid grey;border-radius:3px;background:hsla(0,0%,100%,.2);font-size:1em;flex:0 0 4em}.capibara .input-box .mini-input-section input:active,.capibara .input-box .mini-input-section input:focus{background:hsla(0,0%,100%,.8)}.capibara .input-box .mini-input-section--footer{margin-top:.25em;display:flex;justify-content:space-between}.capibara select.input-select{padding:.3em 1em;width:100%;flex:1 0 100%;border:1px solid grey;border-radius:6px;background:inherit;cursor:pointer;-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}.capibara select.input-select option{padding:.3em;color:inherit;background:inherit}.capibara .input-section-list{margin:16px 0}.capibara .input-section-list .input-section-title{margin-bottom:8px}.capibara .input-section-list .input-section{margin:0 16px 8px}.capibara .input-section{margin:16px;display:flex;flex-direction:column;flex-wrap:nowrap;align-items:center;position:relative}.capibara .input-section.to-right{align-items:end}.capibara .input-section .small-close{position:absolute;right:-10px;top:-10px;width:1.2em;height:1.2em;font-size:.9em;border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);text-align:center;color:#fff;background:red;border-radius:50%;vertical-align:middle}.capibara .input-section .text-subtitle{text-align:center;align-self:center}.capibara .input-section .input-section-title{flex:1 1 100%;width:100%;margin:0 auto;display:flex;flex-direction:row;justify-content:center;align-items:center}.capibara .input-section .input-section-title button{margin-left:auto;flex:0 0 auto;display:flex;flex-wrap:nowrap}.capibara .input-section .input-section-link{flex:1 1 100%;display:flex;flex-direction:row;justify-content:center;align-items:baseline;padding-top:.25em}.capibara .input-section .input-section-link a{color:#2196f3;margin-top:.75rem}.capibara .input-section.is-invalid .input-box,.capibara .input-section.is-invalid input.nav-input{border:2px solid red!important;box-shadow:0 0 3px red!important}.capibara .input-section.dense input.nav-input{width:50%;font-size:1em;padding:3px 6px}.capibara .input-section input.nav-input{border:2px solid hsla(0,0%,50.2%,.7);border-radius:6px;width:100%;min-width:130px;max-width:170px;font-size:2em;text-align:center;padding:3px 6px;background:transparent;outline:none;transition:all .1s ease;margin-bottom:8px}.capibara .input-section input.nav-input:active,.capibara .input-section input.nav-input:focus{border:2px solid grey;box-shadow:0 4px 6px hsla(0,0%,50.2%,.2)}.capibara .input-section input.nav-input.small{font-size:1.3em}.capibara .input-section .nav-input-file{border:2px solid hsla(0,0%,50.2%,.7);border-radius:6px;width:70%;min-width:130px;padding:3px 6px;text-align:center;background:transparent;outline:none;transition:all .1s ease;position:relative}.capibara .input-section .nav-input-file:active,.capibara .input-section .nav-input-file:focus{border:2px solid grey;box-shadow:0 4px 6px hsla(0,0%,50.2%,.2)}.capibara .input-section .nav-input-file label{flex:1 1 auto}.capibara .input-section .nav-input-file input[type=file]{display:none}.capibara .input-section .input-section-col{width:auto;position:relative;flex:1 1 10%}.capibara .input-section .input-section-col input.nav-input{min-width:unset;width:calc(100% - 1rem);max-width:7rem}.capibara .input-section.msj-input-container textarea.msj{outline:none;border-radius:6px;border:2px solid grey;width:100%;min-width:100%;max-width:100%;min-height:100px;transition:all .1s ease;padding:8px;box-sizing:border-box}.capibara .input-section.msj-input-container textarea.msj:active,.capibara .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,160,0,.2)}.capibara .input-section input[type=checkbox]{width:18px;height:18px;vertical-align:middle}.capibara .time{border:2px solid rgba(0,128,0,.7);color:green}.capibara .time .symbol,.capibara .time input{color:#37474f}.capibara .time input:active,.capibara .time input:focus{border-color:green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-box-tab-container,.capibara .input-box-tab-container .input-box-tab{border-color:green}.capibara .input-box{color:#37474f;border:2px solid green}.capibara .input-box .mini-input-section input:active,.capibara .input-box .mini-input-section input:focus{background:#fafafa}.capibara .input-box .mini-input-section--tooltip{background:#fafafa;color:#37474f;border:1px solid #37474f}.capibara .input-section select.input-select{color:#37474f;border:2px solid rgba(0,128,0,.7)}.capibara .input-section select.input-select:active,.capibara .input-section select.input-select:focus{border:2px solid green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-section select.input-select option{background:#fafafa;color:#37474f}.capibara .input-section .nav-input-file,.capibara .input-section input.nav-input{color:#37474f;border:2px solid rgba(0,128,0,.7)}.capibara .input-section .nav-input-file:active,.capibara .input-section .nav-input-file:focus,.capibara .input-section input.nav-input:active,.capibara .input-section input.nav-input:focus{border:2px solid green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-section.msj-input-container textarea.msj{background:rgba(255,249,196,.6);border:2px solid rgba(0,0,0,.4)}.capibara .input-section.msj-input-container textarea.msj:active,.capibara .input-section.msj-input-container textarea.msj:focus{background:rgba(255,249,196,.8);box-shadow:0 4px 6px transparent}.capibara.dark-theme .time{border:2px solid rgba(64,78,105,.7);color:#404e69}.capibara.dark-theme .time .symbol,.capibara.dark-theme .time input{color:#f0f0f0}.capibara.dark-theme .time input:active,.capibara.dark-theme .time input:focus{border-color:#404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-box-tab-container,.capibara.dark-theme .input-box-tab-container .input-box-tab{border-color:#404e69}.capibara.dark-theme .input-box{color:#f0f0f0;border:2px solid #404e69}.capibara.dark-theme .input-box .mini-input-section input{background:#404e69;color:#f0f0f0}.capibara.dark-theme .input-box .mini-input-section input:active,.capibara.dark-theme .input-box .mini-input-section input:focus{background:#222837}.capibara.dark-theme .input-box .mini-input-section--tooltip{background:#222837;color:#f0f0f0;border:1px solid #f0f0f0}.capibara.dark-theme .input-section select.input-select{color:#f0f0f0;border:2px solid rgba(64,78,105,.7)}.capibara.dark-theme .input-section select.input-select:active,.capibara.dark-theme .input-section select.input-select:focus{border:2px solid #404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-section select.input-select option{background:#222837;color:#f0f0f0}.capibara.dark-theme .input-section .nav-input-file,.capibara.dark-theme .input-section input.nav-input{color:#f0f0f0;border:2px solid rgba(64,78,105,.7)}.capibara.dark-theme .input-section .nav-input-file:active,.capibara.dark-theme .input-section .nav-input-file:focus,.capibara.dark-theme .input-section input.nav-input:active,.capibara.dark-theme .input-section input.nav-input:focus{border:2px solid #404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-section.msj-input-container textarea.msj{background:rgba(251,192,45,.1);border:2px solid #9e9e9e;color:#f0f0f0}.capibara.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.dark-theme .input-section.msj-input-container textarea.msj:focus{background:rgba(251,192,45,.3);box-shadow:0 4px 6px hsla(0,0%,62%,.2)}.capibara button{outline:none;cursor:pointer}.capibara button.cap-rotate .mdi:before,.capibara button.cap-rotate svg{transform:rotate(180deg)}.capibara .cap-btn-icon:focus,.capibara .cap-btn-outline:focus,.capibara .cap-btn-raised:focus,.capibara .cap-btn-shape:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara .cap-btn-icon:disabled,.capibara .cap-btn-outline:disabled,.capibara .cap-btn-raised:disabled,.capibara .cap-btn-shape:disabled{opacity:.6}.capibara button.cap-btn-sm{font-size:.75em;margin:4px;padding:4px 8px}.capibara .cap-btn-outline{cursor:pointer;color:grey;border:2px solid grey;padding:8px 16px;margin:0 8px;border-radius:6px;font-weight:700}.capibara .cap-btn-outline.selected{background:grey}.capibara .cap-btn-raised{cursor:pointer;padding:8px 16px;margin:0 8px;border-radius:6px;background:grey;border:2px solid grey;font-weight:700}.capibara .cap-btn-icon{display:inline-block;height:32px;width:32px;outline:none;cursor:pointer;vertical-align:middle;margin-right:16px;margin-top:4px;background:transparent;border:none;padding:4px;font-size:18px;color:grey;border-radius:50%;position:relative}.capibara .cap-btn-icon svg{fill:grey}.capibara .cap-btn-icon.cap-btn-has-badge:after{content:\\\"\\\";display:block;position:absolute;right:-.2em;top:-.2em;width:.8em;height:.8em;background:grey;border-radius:50%}.capibara .cap-btn-icon.cap-btn-icon-raised{background:#fff;border:none}.capibara .cap-btn-icon.cap-btn-icon-outline{border:1px solid grey}.capibara .cap-btn-icon.cap-btn-toggle-sidebar{position:absolute;right:10px;top:10px;z-index:2;margin:0}.capibara .cap-btn-icon .mdi{font-size:24px}.capibara .cap-btn-icon .loading-icon{display:none;position:absolute;left:0;top:0}.capibara .cap-btn-icon.loading>:not(.loading-icon){display:none}.capibara .cap-btn-icon.loading .loading-icon{display:unset}.capibara .cap-btn-shape{display:inline-block;width:24px;height:24px;outline:none;cursor:pointer;vertical-align:middle;margin:4px;background:transparent;border:none;padding:0;font-size:14px}.capibara .cap-btn-shape .mdi{font-size:24px}.capibara .cap-btn-shape.cap-btn-circle{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-circle:before{content:\\\"\\\";display:block;position:absolute;left:2px;top:2px;border-radius:50%;background:grey;width:22px;height:22px}.capibara .cap-btn-shape.cap-btn-circle span{position:absolute;left:1px;top:6px;width:100%;display:inline-block;color:#fff;text-align:center}.capibara .cap-btn-shape.cap-btn-circle-outline{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-circle-outline:before{content:\\\"\\\";display:block;position:absolute;left:2px;top:3px;border-radius:50%;border:2px solid grey;width:22px;height:22px}.capibara .cap-btn-shape.cap-btn-circle-outline span{position:absolute;left:1px;top:6px;width:100%;display:inline-block;color:grey;text-align:center}.capibara .cap-btn-shape.cap-btn-drop{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-drop:before{content:\\\"\\\";display:block;position:absolute;left:4px;top:0;border-radius:0 50% 50% 50%;background:grey;width:20px;height:20px;transform:translate(-2px,4px) rotate(45deg)}.capibara .cap-btn-shape.cap-btn-drop span{position:absolute;left:0;top:6px;width:100%;display:inline-block;color:#fff;text-align:center}.capibara.extended-right [toggle-sidebar-right] svg,.capibara.header-extended [toggle-header] svg{transform:rotate(180deg)}.capibara .cap-btn-raised{background:#00f;border:2px solid #00f;color:#fff}.capibara .cap-btn-outline{background:transparent;border:2px solid #00f;color:#00f}.capibara .cap-btn-outline.selected{background:#00f;color:#fff}.capibara .cap-btn-shape{color:#37474f}.capibara .cap-btn-shape.cap-btn-circle,.capibara .cap-btn-shape.cap-btn-drop{color:#fff}.capibara .cap-btn-shape.cap-btn-circle:before,.capibara .cap-btn-shape.cap-btn-drop:before{background:#388e3c}.capibara .cap-btn-shape.cap-btn-circle.is-empty:before,.capibara .cap-btn-shape.cap-btn-drop.is-empty:before{background:#616161}.capibara .cap-btn-shape.cap-btn-circle-outline:before{border-color:#388e3c}.capibara .cap-btn-icon,.capibara .cap-btn-shape.cap-btn-circle-outline span{color:#37474f}.capibara .cap-btn-icon.cap-btn-has-badge:after{background:rgba(245,124,0,.8)}.capibara .cap-btn-icon.cap-btn-icon-raised{background:rgba(84,110,122,.1);border-color:#546e7a;color:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-raised:active{background:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-raised:focus,.capibara .cap-btn-icon.cap-btn-icon-raised:hover{background:rgba(84,110,122,.3)}.capibara .cap-btn-icon.cap-btn-icon-outline{background:transparent;border-color:#546e7a;color:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-outline:active{background:rgba(84,110,122,.3)}.capibara .cap-btn-icon.cap-btn-icon-outline:focus,.capibara .cap-btn-icon.cap-btn-icon-outline:hover{background:rgba(84,110,122,.1)}.capibara.dark-theme .cap-btn-raised{background:#404e69;border:2px solid #f0f0f0;color:#f0f0f0}.capibara.dark-theme .cap-btn-outline{background:transparent;border:2px solid #f0f0f0;color:#f0f0f0}.capibara.dark-theme .cap-btn-outline.selected{background:#404e69;color:#f0f0f0}.capibara.dark-theme .cap-btn-shape,.capibara.dark-theme .cap-btn-shape.cap-btn-circle,.capibara.dark-theme .cap-btn-shape.cap-btn-drop{color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-shape.cap-btn-circle:before,.capibara.dark-theme .cap-btn-shape.cap-btn-drop:before{background:#2e7d32}.capibara.dark-theme .cap-btn-shape.cap-btn-circle.is-empty:before,.capibara.dark-theme .cap-btn-shape.cap-btn-drop.is-empty:before{background:#616161}.capibara.dark-theme .cap-btn-shape.cap-btn-circle-outline:before{border-color:#2e7d32}.capibara.dark-theme .cap-btn-icon,.capibara.dark-theme .cap-btn-shape.cap-btn-circle-outline span{color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-has-badge:after{background:rgba(56,142,60,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised{background:hsla(0,0%,94.1%,.1);border-color:hsla(0,0%,94.1%,.8);color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:active{background:#f0f0f0}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:focus,.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:hover{background:hsla(0,0%,94.1%,.3)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline{background:transparent;border-color:hsla(0,0%,94.1%,.8);color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:active{background:hsla(0,0%,94.1%,.1)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:focus,.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:hover{background:hsla(0,0%,94.1%,0)}.capibara [cap-tooltip]{position:relative;display:inline-block}.capibara [cap-tooltip]:hover:before{padding:8px;opacity:1;border-width:1px;height:auto}.capibara [cap-tooltip]:before{opacity:.3;height:0;padding:0 8px;text-align:left;overflow:hidden;font-size:14px;font-weight:400;position:absolute;top:calc(100% + 18px);left:50%;transform:translatex(-50%);background-color:rgba(0,0,0,.7);border:0 solid #000;border-radius:5px;color:#fff;content:attr(cap-tooltip);text-transform:none;min-width:100px;z-index:5}.capibara .float-box-container{overflow:visible;position:absolute;left:0;top:0;width:0;height:0}.capibara .float-box-container:hover .float-box-ext .long-bar-container .long-bar{opacity:.3}.capibara .float-box-container .float-box{width:var(--day-width);max-width:var(--day-width);min-width:var(--day-width);height:var(--item-height);max-height:var(--item-height);min-height:var(--item-height);position:absolute;overflow:hidden;cursor:default;transition:box-shadow .2s ease;display:flex;flex-direction:column;will-change:display}.capibara .float-box-container .float-box[data-is-visible=false]{display:none!important}.capibara .float-box-container .float-box:hover{z-index:2}.capibara .float-box-container .float-box:hover+.float-box-ext .long-bar{z-index:2;opacity:1}.capibara .float-box-container .float-box.has-message:after{content:\\\"\\\";display:block;position:absolute;width:0;height:0;right:0;top:0;border-color:red red transparent transparent;border-style:solid;border-width:6px;z-index:1}.capibara .float-box-container .float-box.has-errors:before{content:\\\"\\\";display:block;position:absolute;width:7px;height:7px;left:1px;top:1px;border-radius:50%;background:#d32f2f;z-index:1}.capibara .float-box-container .float-box .dot-container-bottom,.capibara .float-box-container .float-box .dot-container-middle,.capibara .float-box-container .float-box .dot-container-top{position:absolute;left:0;width:100%;overflow:visible;height:0;display:flex;justify-content:center}.capibara .float-box-container .float-box .dot-container-top{top:1px}.capibara .float-box-container .float-box .dot-container-top .dot{border-radius:0 0 50% 50%}.capibara .float-box-container .float-box .dot-container-middle{top:calc(50% - 4px)}.capibara .float-box-container .float-box .dot-container-bottom{bottom:5px}.capibara .float-box-container .float-box .dot-container-bottom .dot{border-radius:0 0 50% 50%}.capibara .float-box-container .float-box .dot{width:8px;min-width:8px;height:8px;border-radius:50%;margin:1px;vertical-align:middle;border:1px solid var(--local-color,hsla(0,0%,100%,.8));background:var(--local-color,hsla(0,0%,39.2%,.5))}.capibara .float-box-container .float-box .dot.diamond{border-radius:0;transform:rotate(45deg) skew(10deg,10deg)}.capibara .float-box-container .float-box .dot.outlined{background-color:transparent}.capibara .float-box-container .float-box .dot.triangle{width:0;height:0;transform:rotate(45deg) skew(10deg,10deg) translate(1px,1px);border-left:5px solid var(--local-color,hsla(0,0%,39.2%,.8));border-bottom:5px solid transparent;border-right:5px solid transparent;border-top:5px solid var(--local-color,hsla(0,0%,39.2%,.8));border-radius:0;background-color:transparent}.capibara .float-box-container .float-box span.data{width:100%;display:block;position:relative;font-size:.875em;text-align:center;box-sizing:border-box;height:calc(var(--item-height)/2);line-height:calc(var(--item-height)/2);margin-bottom:2px;font-weight:700;box-shadow:inset 0 0 10px hsla(0,0%,100%,.2);border-radius:3px;color:var(--local-color-font,#fff);-webkit-backdrop-filter:opacity(20%);backdrop-filter:opacity(20%);background:var(--local-color,rgba(0,0,0,.4));border:2px solid var(--local-color,rgba(0,0,0,.2))}.capibara .float-box-container .float-box span.data.shape-outlined{background-color:transparent!important}.capibara .float-box-container .float-box span.data.shape-outlined:before{content:\\\"\\\";opacity:.3;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block;z-index:-1}.capibara .float-box-container .float-box span.data.shape-bar{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px}.capibara .float-box-container .float-box span.data.shape-bar:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-outlined{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px;background-color:transparent!important}.capibara .float-box-container .float-box span.data.shape-bar-outlined:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-outlined:before{content:\\\"\\\";opacity:.3;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block}.capibara .float-box-container .float-box span.data.shape-bar-dashed{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px;background-color:transparent!important}.capibara .float-box-container .float-box span.data.shape-bar-dashed:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-dashed:before{content:\\\"\\\";background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block;background-color:transparent;background-size:10px 10px;background-image:repeating-linear-gradient(45deg,var(--local-color,inherit),var(--local-color,inherit) 3px,transparent 0,transparent 50%)}.capibara .float-box-container .float-box span.rowdot--row{display:flex;max-height:calc(var(--item-height)/4 - 1px);height:calc(var(--item-height)/4 - 1px);width:calc(var(--day-width) - 2px);line-height:0;color:transparent;margin:1px;border-color:var(--local-color,rgba(0,0,0,.2))}.capibara .float-box-container .float-box span.rowdot--row:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.rowdot--row:empty{display:none!important}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot{width:calc(var(--day-width)/4 - 2px);height:calc(var(--item-height)/4 - 2px);margin-right:1px;vertical-align:middle;border:3px solid var(--local-color,hsla(0,0%,100%,.8));background:var(--local-color,hsla(0,0%,39.2%,.8));box-shadow:0 0 1px 1px rgba(0,0,0,.2)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-outlined{background-color:hsla(0,0%,39.2%,.2)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-rounded{border-radius:50%;width:calc(var(--item-height)/4 - .5px)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-outlined-rounded{border-radius:50%;background-color:transparent;width:calc(var(--item-height)/4 - .5px)}.capibara .float-box-container .float-box .plot-floatbox-container{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--local-color,rgba(0,0,0,.4));transition:opacity .2s ease}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox.stripe{background:repeating-linear-gradient(53deg,var(--local-color,rgba(0,0,0,.4)),var(--local-color,rgba(0,0,0,.4)) 5px,transparent 0,transparent 12px)}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox.stripe-inverse{background:repeating-linear-gradient(127deg,var(--local-color,rgba(0,0,0,.4)),var(--local-color,rgba(0,0,0,.4)) 5px,transparent 0,transparent 12px)}.capibara .float-box-container .icon-floatbox{width:calc(var(--day-width) - 16px);margin:6px;position:absolute;left:0;top:0;opacity:.8}.capibara .float-box-container .icon-floatbox svg path{fill:var(--local-color,rgba(0,0,0,.4));filter:drop-shadow(0 0 1px rgba(0,0,0,.2))}.capibara .float-box-container .icon-floatbox:hover{opacity:1}.capibara .float-box-container .float-box-ext{position:absolute;overflow:visible;cursor:default;transition:box-shadow .2s ease;will-change:display;pointer-events:none}.capibara .float-box-container .float-box-ext .long-bar-container{position:absolute;left:var(--day-width);top:0;display:flex;flex-direction:column;justify-content:start;align-items:start}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar{width:calc(var(--day-width, 0)*var(--long, 0) - var(--day-width, 0)*0.5);min-width:calc(var(--day-width, 0)*var(--long, 0) - var(--day-width, 0)*0.5);height:calc(var(--item-height)/4 - 3.5px);line-height:0;color:transparent;background:var(--local-color,rgba(0,0,0,.4));border-radius:0 3px 3px 0;margin-left:-3px;margin-top:1px;margin-bottom:1px;opacity:var(--local-opacity,1);border:2px solid rgba(0,0,0,.2);border-left-width:0;transition:opacity .2s ease}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar.solid{opacity:1}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar:first-of-type{margin-top:4px}.capibara .float-box-container .float-box:hover{box-shadow:0 0 2px 7px rgba(113,189,255,.4)}.capibara .float-box-container .float-box:hover+.float-box-ext .long-bar{box-shadow:0 0 2px 4px rgba(113,189,255,.4)}.capibara .float-box-container .float-box+.float-box-ext .long-bar.red-light{background:#f84747}.capibara .float-box-container .float-box+.float-box-ext .long-bar.yellow-light{background:#fdd835}.capibara .float-box-container .float-box+.float-box-ext .long-bar.green-light{background:#38993d}.capibara .float-box-container .float-box span.data.shape-bar{border-color:rgba(0,0,0,.2)}.capibara.dark-theme .float-box-container .float-box:hover{box-shadow:0 0 2px 7px hsla(0,0%,47.8%,.6)}.capibara.dark-theme .float-box-container .float-box:hover+.float-box-ext .long-bar{box-shadow:0 0 2px 4px hsla(0,0%,47.8%,.6)}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.red-light{background:#aa1a1a}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.yellow-light{background:#fbcd00}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.green-light{background:#388e3c}.capibara.dark-theme .float-box-container .float-box span.data.shape-bar{border-color:rgba(0,0,0,.3)}.capibara .progress-bar{width:100%;height:4px;background-color:hsla(0,0%,86.7%,.2);overflow:hidden;position:absolute;left:0;bottom:0;transition:height 1s ease}.capibara .progress-bar.hide-progress{height:0}.capibara .progress-bar:before{-webkit-animation-name:loading-fast1;animation-name:loading-fast1;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.capibara .progress-bar:after,.capibara .progress-bar:before{content:\\\"\\\";position:absolute;transform:translateX(-100%);width:62.5%;height:100%;background-color:#292929;-webkit-animation-duration:2s;animation-duration:2s}.capibara .progress-bar:after{-webkit-animation-name:loading-fast2;animation-name:loading-fast2;-webkit-animation-delay:1.3s;animation-delay:1.3s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}span.mdi{min-width:14px;min-height:14px;display:inline-block}span.mdi.mdi-subdirectory-arrow-right{color:rgba(0,0,0,.2)}.capibara .light{display:block;width:18px;height:18px;flex:0 0 18px;border-radius:50%;margin:12px 8px;border:2px solid rgba(0,0,0,.3);background:var(--light-color,unset);border-color:hsla(0,0%,100%,.8)}.capibara .light.red-light{background:#f84747}.capibara .light.yellow-light{background:#fdd835}.capibara .light.green-light{background:#38993d}.capibara .light.disabled-light{background:#737373}.capibara .light.blue-light{background:#0277bd}.capibara.dark-theme .light{border-color:#404e69}.capibara.dark-theme .light.red-light{background:#aa1a1a}.capibara.dark-theme .light.yellow-light{background:#fbcd00}.capibara.dark-theme .light.green-light{background:#388e3c}.capibara select.tabs-select{background:grey;color:#fff;font-size:16px;outline:none;width:100px;padding:3px 18px;font-weight:700;border:1px solid transparent;margin:8px;border-radius:30px;transition:background .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none}.capibara select.tabs-select option{color:grey;background:#fff;padding:15px}.capibara select.tabs-select:after{content:\\\"\\\";display:block;position:absolute;right:10px;top:4px;border-width:4px;border-color:#fff;z-index:2}.capibara select.tabs-select.disabled{color:grey}.capibara select.tabs-select:hover{border-color:grey}\", \"\"]);\n// Exports\nmodule.exports = exports;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvc2Nzcy9zdHlsZS5zY3NzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvc2Nzcy9zdHlsZS5zY3NzPzQxM2YiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xudmFyIF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpO1xuZXhwb3J0cyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhmYWxzZSk7XG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJAaW1wb3J0IHVybChodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVJvYm90bzppdGFsLHdnaHRAMCwzMDA7MCw0MDA7MCw1MDA7MCw3MDA7MCw5MDA7MSwzMDA7MSw0MDA7MSw1MDA7MSw3MDA7MSw5MDAmZGlzcGxheT1zd2FwKTtcIl0pO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCI6cm9vdHstLWhlYWRlci10b3AtaGVpZ2h0OjQwcHg7LS1oZWFkZXItaGVpZ2h0Ojk4cHg7LS1oZWFkZXItbGFiZWxzLWhlaWdodDo1MHB4Oy0taGVhZGVyLWRheS1oZWlnaHQ6MjRweDstLWV4LWhlYWRlci1oZWlnaHQ6MTIwcHg7LS1oZWFkZXItaW5wdXQtaGVpZ2h0OjIwcHg7LS1uYXYtd2lkdGg6MjAwcHg7LS1uYXYtaXRlbS1jb2wtd2lkdGg6NjBweDstLWluaXRpYWwtbmF2LXdpZHRoOjBweDstLWV4LW5hdi13aWR0aDowcHg7LS1idG4tbmF2LXdpZHRoOjExN3B4Oy0tbmF2LXJpZ2h0LXdpZHRoOjMwMHB4Oy0taXRlbS1taW4td2lkdGg6MTAwcHg7LS1pdGVtLWhlaWdodDo0NXB4Oy0tZGF5LXdpZHRoOjQ1cHg7LS1mb250LXNpemU6MTZweH1ALXdlYmtpdC1rZXlmcmFtZXMgcHVsc2VNZXNzYWdlezAle2JvcmRlci1jb2xvcjpyZ2JhKDIxMSw0Nyw0NywuMykgcmdiYSgyMTEsNDcsNDcsLjMpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50fXRve2JvcmRlci1jb2xvcjojZDMyZjJmICNkMzJmMmYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnR9fUBrZXlmcmFtZXMgcHVsc2VNZXNzYWdlezAle2JvcmRlci1jb2xvcjpyZ2JhKDIxMSw0Nyw0NywuMykgcmdiYSgyMTEsNDcsNDcsLjMpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50fXRve2JvcmRlci1jb2xvcjojZDMyZjJmICNkMzJmMmYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnR9fUAtd2Via2l0LWtleWZyYW1lcyBwdWxzZUJhY2tncm91bmR7MCV7YmFja2dyb3VuZDpyZ2JhKDIxMSw0Nyw0NywuMyl9dG97YmFja2dyb3VuZDojZDMyZjJmfX1Aa2V5ZnJhbWVzIHB1bHNlQmFja2dyb3VuZHswJXtiYWNrZ3JvdW5kOnJnYmEoMjExLDQ3LDQ3LC4zKX10b3tiYWNrZ3JvdW5kOiNkMzJmMmZ9fUAtd2Via2l0LWtleWZyYW1lcyBsb2FkaW5nLWZhc3QxezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX00MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDIwMCUpfX1Aa2V5ZnJhbWVzIGxvYWRpbmctZmFzdDF7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfTQwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMjAwJSl9fUAtd2Via2l0LWtleWZyYW1lcyBsb2FkaW5nLWZhc3QyezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX0xNSV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDIwMCUpfX1Aa2V5ZnJhbWVzIGxvYWRpbmctZmFzdDJ7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfTE1JXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMjAwJSl9fS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojZGY1NTRiIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojZGY1NTRifS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2ZkZmFmOX0uY2FwaWJhcmEuYy1yZWQ6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2ZkZmFmOTtib3JkZXItY29sb3I6I2Y5OWQ5N30uY2FwaWJhcmEuYy1yZWQ6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNmZGZhZjk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZjk5ZDk3fS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2ZkZmFmOSkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2Y5OWQ5N30uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNiYTE2MGF9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiNiYTE2MGF9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1yZWQgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtcmVkIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLXJlZCAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLXJlZCAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXJlZCAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzYhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1yZWQgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6I2Y0NDMzNiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtcmVkIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNil9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1yZWQgLnRpbWUgLnN5bWJvbHtjb2xvcjojZjQ0MzM2fS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1yZWQgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZCAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2Y0NDMzNjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI0NCw2Nyw1NCwuMil9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNil9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmNDQzMzY7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNDQsNjcsNTQsLjIpfS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNil9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZjQ0MzM2O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjQ0LDY3LDU0LC4yKX0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjZjQ0MzM2fS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI0NCw2Nyw1NCwuMil9LmNhcGliYXJhLmMtcmVkIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiNmNDQzMzY7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuOCl9LmNhcGliYXJhLmMtcmVkIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6I2Y0NDMzNjtjb2xvcjojZjQ0MzM2fS5jYXBpYmFyYS5jLXJlZCAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuOCl9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1yZWQgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMjQ0LDY3LDU0LC41KX0uY2FwaWJhcmEgLmMtcmVkLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2Y0NDMzNiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXJlZC1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2QyMTkwYiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXJlZC1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2Y4ODc3ZiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXJlZC0tdGV4dHtjb2xvcjojZjQ0MzM2IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcmVkLWQtLXRleHR7Y29sb3I6I2QyMTkwYiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXJlZC1sLS10ZXh0e2NvbG9yOiNmODg3N2YhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcmVke2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpO2JvcmRlcjoxcHggc29saWQgI2Y0NDMzNn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXJlZCAubGVmdC1pY29ue2JhY2tncm91bmQ6I2Y0NDMzNn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXJlZCAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgI2Y0NDMzNjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDI0NCw2Nyw1NCwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1yZWQgLm5hbWV7Y29sb3I6I2Y0NDMzNn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1yZWR7LS1sb2NhbC1jb2xvcjojZjQ0MzM2Oy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1yZWQsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLXJlZCwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1yZWQgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6I2Y0NDMzNn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1yZWQuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1yZWQuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXJlZDpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKTtib3JkZXItY29sb3I6cmdiYSgyNDQsNjcsNTQsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1yZWR7YmFja2dyb3VuZDojZjQ0MzM2fS5jYXBpYmFyYS5jLXBpbms6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6I2QwMzc2YiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1waW5rOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiNkMDM3NmJ9LmNhcGliYXJhLmMtcGluazpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2YwZTNlN30uY2FwaWJhcmEuYy1waW5rOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNmMGUzZTc7Ym9yZGVyLWNvbG9yOiNmMjdiYTN9LmNhcGliYXJhLmMtcGluazpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2YwZTNlNztib3JkZXItYm90dG9tLWNvbG9yOiNmMjdiYTN9LmNhcGliYXJhLmMtcGluazpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2YwZTNlNykhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXBpbms6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNmMjdiYTN9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM5MzBlM2J9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzkzMGUzYn0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1waW5rIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1waW5rIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzMsMzAsOTksLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1waW5rIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1waW5rIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtcGluayAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNlOTFlNjMhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtcGluayBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojZTkxZTYzIWltcG9ydGFudH0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtcGluayAudGltZXtib3JkZXItY29sb3I6cmdiYSgyMzMsMzAsOTksLjYpfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLXBpbmsgLnRpbWUgLnN5bWJvbHtjb2xvcjojZTkxZTYzfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXBpbmsgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlOTFlNjM7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMzMsMzAsOTksLjIpfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC42KX0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlOTFlNjM7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMzMsMzAsOTksLjIpfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgyMzMsMzAsOTksLjYpfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZTkxZTYzO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjMzLDMwLDk5LC4yKX0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICNlOTFlNjN9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIzMywzMCw5OSwuMil9LmNhcGliYXJhLmMtcGluayAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6I2U5MWU2MztiYWNrZ3JvdW5kOnJnYmEoMjMzLDMwLDk5LC44KX0uY2FwaWJhcmEuYy1waW5rIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiNlOTFlNjM7Y29sb3I6I2U5MWU2M30uY2FwaWJhcmEuYy1waW5rIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDIzMywzMCw5OSwuOCl9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtcGluayAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyMzMsMzAsOTksLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgyMzMsMzAsOTksLjUpfS5jYXBpYmFyYSAuYy1waW5rLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2U5MWU2MyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXBpbmstZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNhYTExNDUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1waW5rLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZjA2NDkzIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcGluay0tdGV4dHtjb2xvcjojZTkxZTYzIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcGluay1kLS10ZXh0e2NvbG9yOiNhYTExNDUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1waW5rLWwtLXRleHR7Y29sb3I6I2YwNjQ5MyFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1waW5re2JhY2tncm91bmQ6cmdiYSgyMzMsMzAsOTksLjIpO2JvcmRlcjoxcHggc29saWQgI2U5MWU2M30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXBpbmsgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiNlOTFlNjN9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1waW5rIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjZTkxZTYzO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjMzLDMwLDk5LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXBpbmsgLm5hbWV7Y29sb3I6I2U5MWU2M30uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1waW5rey0tbG9jYWwtY29sb3I6I2U5MWU2MzstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtcGluaywuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtcGluaywuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1waW5rIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiNlOTFlNjN9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtcGluay5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDIzMywzMCw5OSwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXBpbmsuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyMzMsMzAsOTksLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXBpbms6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDIzMywzMCw5OSwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtcGlua3tiYWNrZ3JvdW5kOiNlOTFlNjN9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiM4ZDNkOWIgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiM4ZDNkOWJ9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZDZjYmQ4fS5jYXBpYmFyYS5jLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZDZjYmQ4O2JvcmRlci1jb2xvcjojY2E2MWRjfS5jYXBpYmFyYS5jLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2Q2Y2JkODtib3JkZXItYm90dG9tLWNvbG9yOiNjYTYxZGN9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZDZjYmQ4KSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojY2E2MWRjfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzUyMTQ1ZH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzUyMTQ1ZH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLXB1cnBsZSA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTYsMzksMTc2LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtcHVycGxlIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTYsMzksMTc2LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1wdXJwbGUgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtcHVycGxlIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtcHVycGxlIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzljMjdiMCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLXB1cnBsZSBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzljMjdiMCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtcHVycGxlIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjYpfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtcHVycGxlIC50aW1lIC5zeW1ib2x7Y29sb3I6IzljMjdiMH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtcHVycGxlIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM5YzI3YjA7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxNTYsMzksMTc2LC4yKX0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuNil9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM5YzI3YjA7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxNTYsMzksMTc2LC4yKX0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgxNTYsMzksMTc2LC42KX0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM5YzI3YjA7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxNTYsMzksMTc2LC4yKX0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjOWMyN2IwfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDE1NiwzOSwxNzYsLjIpfS5jYXBpYmFyYS5jLXB1cnBsZSAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojOWMyN2IwO2JhY2tncm91bmQ6cmdiYSgxNTYsMzksMTc2LC44KX0uY2FwaWJhcmEuYy1wdXJwbGUgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojOWMyN2IwO2NvbG9yOiM5YzI3YjB9LmNhcGliYXJhLmMtcHVycGxlIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMTU2LDM5LDE3NiwuOCl9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1wdXJwbGUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMTU2LDM5LDE3NiwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDE1NiwzOSwxNzYsLjUpfS5jYXBpYmFyYSAuYy1wdXJwbGUtLWJhY2tncm91bmR7YmFja2dyb3VuZDojOWMyN2IwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcHVycGxlLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNjQxOTcxIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcHVycGxlLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojYzM0Y2Q3IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcHVycGxlLS10ZXh0e2NvbG9yOiM5YzI3YjAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1wdXJwbGUtZC0tdGV4dHtjb2xvcjojNjQxOTcxIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcHVycGxlLWwtLXRleHR7Y29sb3I6I2MzNGNkNyFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1wdXJwbGV7YmFja2dyb3VuZDpyZ2JhKDE1NiwzOSwxNzYsLjIpO2JvcmRlcjoxcHggc29saWQgIzljMjdiMH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXB1cnBsZSAubGVmdC1pY29ue2JhY2tncm91bmQ6IzljMjdiMH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXB1cnBsZSAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzljMjdiMDtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDE1NiwzOSwxNzYsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcHVycGxlIC5uYW1le2NvbG9yOiM5YzI3YjB9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtcHVycGxley0tbG9jYWwtY29sb3I6IzljMjdiMDstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtcHVycGxlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1wdXJwbGUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtcHVycGxlIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiM5YzI3YjB9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtcHVycGxlLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMTU2LDM5LDE3NiwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1wdXJwbGUuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgxNTYsMzksMTc2LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1wdXJwbGU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDE1NiwzOSwxNzYsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1wdXJwbGV7YmFja2dyb3VuZDojOWMyN2IwfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiM2ZTUyOWYgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzZlNTI5Zn0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2RlZGVkZn0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZGVkZWRmO2JvcmRlci1jb2xvcjojOWY4MGQ3fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZGVkZWRmO2JvcmRlci1ib3R0b20tY29sb3I6IzlmODBkN30uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2RlZGVkZikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojOWY4MGQ3fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMzYjIxNmF9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojM2IyMTZhfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxMDMsNTgsMTgzLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxMDMsNTgsMTgzLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiM2NzNhYjchaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojNjczYWI3IWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDEwMyw1OCwxODMsLjYpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAudGltZSAuc3ltYm9se2NvbG9yOiM2NzNhYjd9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM2NzNhYjc7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMDMsNTgsMTgzLC4yKX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgxMDMsNTgsMTgzLC42KX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojNjczYWI3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTAzLDU4LDE4MywuMil9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgxMDMsNTgsMTgzLC42KX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojNjczYWI3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTAzLDU4LDE4MywuMil9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICM2NzNhYjd9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMDMsNTgsMTgzLC4yKX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiM2NzNhYjc7YmFja2dyb3VuZDpyZ2JhKDEwMyw1OCwxODMsLjgpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojNjczYWI3O2NvbG9yOiM2NzNhYjd9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDEwMyw1OCwxODMsLjgpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgxMDMsNTgsMTgzLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMTAzLDU4LDE4MywuNSl9LmNhcGliYXJhIC5jLWRlZXAtcHVycGxlLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzY3M2FiNyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtcHVycGxlLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNDYyODdkIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1wdXJwbGUtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM5MTZkZDEhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLXB1cnBsZS0tdGV4dHtjb2xvcjojNjczYWI3IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1wdXJwbGUtZC0tdGV4dHtjb2xvcjojNDYyODdkIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1wdXJwbGUtbC0tdGV4dHtjb2xvcjojOTE2ZGQxIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtcHVycGxle2JhY2tncm91bmQ6cmdiYSgxMDMsNTgsMTgzLC4yKTtib3JkZXI6MXB4IHNvbGlkICM2NzNhYjd9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLXB1cnBsZSAubGVmdC1pY29ue2JhY2tncm91bmQ6IzY3M2FiN30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtcHVycGxlIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjNjczYWI3O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMTAzLDU4LDE4MywuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLXB1cnBsZSAubmFtZXtjb2xvcjojNjczYWI3fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWRlZXAtcHVycGxley0tbG9jYWwtY29sb3I6IzY3M2FiNzstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtZGVlcC1wdXJwbGUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWRlZXAtcHVycGxlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWRlZXAtcHVycGxlIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiM2NzNhYjd9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZGVlcC1wdXJwbGUuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgxMDMsNTgsMTgzLC43KTtib3JkZXItY29sb3I6cmdiYSgxMDMsNTgsMTgzLC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWRlZXAtcHVycGxlLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMTAzLDU4LDE4MywuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZGVlcC1wdXJwbGU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDEwMyw1OCwxODMsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDEwMyw1OCwxODMsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1kZWVwLXB1cnBsZXtiYWNrZ3JvdW5kOiM2NzNhYjd9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiM1NzYyOWQgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiM1NzYyOWR9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZTBlMGUwfS5jYXBpYmFyYS5jLWluZGlnbzpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZTBlMGUwO2JvcmRlci1jb2xvcjojODU5MWQ1fS5jYXBpYmFyYS5jLWluZGlnbzpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2UwZTBlMDtib3JkZXItYm90dG9tLWNvbG9yOiM4NTkxZDV9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZTBlMGUwKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojODU5MWQ1fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzI1MmY2OX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzI1MmY2OX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWluZGlnbyA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSg2Myw4MSwxODEsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1pbmRpZ28gOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtaW5kaWdvIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtaW5kaWdvIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtaW5kaWdvIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzNmNTFiNSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWluZGlnbyBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojM2Y1MWI1IWltcG9ydGFudH0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1pbmRpZ28gLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoNjMsODEsMTgxLC42KX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWluZGlnbyAudGltZSAuc3ltYm9se2NvbG9yOiMzZjUxYjV9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWluZGlnbyAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojM2Y1MWI1O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNjMsODEsMTgxLC4yKX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoNjMsODEsMTgxLC42KX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzNmNTFiNTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDYzLDgxLDE4MSwuMil9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoNjMsODEsMTgxLC42KX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMzZjUxYjU7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg2Myw4MSwxODEsLjIpfS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICMzZjUxYjV9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNjMsODEsMTgxLC4yKX0uY2FwaWJhcmEuYy1pbmRpZ28gLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzNmNTFiNTtiYWNrZ3JvdW5kOnJnYmEoNjMsODEsMTgxLC44KX0uY2FwaWJhcmEuYy1pbmRpZ28gLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojM2Y1MWI1O2NvbG9yOiMzZjUxYjV9LmNhcGliYXJhLmMtaW5kaWdvIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoNjMsODEsMTgxLC44KX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWluZGlnbyAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSg2Myw4MSwxODEsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSg2Myw4MSwxODEsLjUpfS5jYXBpYmFyYSAuYy1pbmRpZ28tLWJhY2tncm91bmR7YmFja2dyb3VuZDojM2Y1MWI1IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtaW5kaWdvLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMmIzODdjIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtaW5kaWdvLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNzI4MGNlIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtaW5kaWdvLS10ZXh0e2NvbG9yOiMzZjUxYjUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1pbmRpZ28tZC0tdGV4dHtjb2xvcjojMmIzODdjIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtaW5kaWdvLWwtLXRleHR7Y29sb3I6IzcyODBjZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1pbmRpZ297YmFja2dyb3VuZDpyZ2JhKDYzLDgxLDE4MSwuMik7Ym9yZGVyOjFweCBzb2xpZCAjM2Y1MWI1fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtaW5kaWdvIC5sZWZ0LWljb257YmFja2dyb3VuZDojM2Y1MWI1fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtaW5kaWdvIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjM2Y1MWI1O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoNjMsODEsMTgxLC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWluZGlnbyAubmFtZXtjb2xvcjojM2Y1MWI1fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWluZGlnb3stLWxvY2FsLWNvbG9yOiMzZjUxYjU7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWluZGlnbywuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtaW5kaWdvLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWluZGlnbyAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojM2Y1MWI1fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWluZGlnby5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDYzLDgxLDE4MSwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoNjMsODEsMTgxLC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWluZGlnby5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDYzLDgxLDE4MSwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtaW5kaWdvOmhvdmVye2JhY2tncm91bmQ6cmdiYSg2Myw4MSwxODEsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWluZGlnb3tiYWNrZ3JvdW5kOiMzZjUxYjV9LmNhcGliYXJhLmMtYmx1ZTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojMzE3NmJiIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWJsdWU6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzMxNzZiYn0uY2FwaWJhcmEuYy1ibHVlOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZDFkY2U2fS5jYXBpYmFyYS5jLWJsdWU6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2QxZGNlNjtib3JkZXItY29sb3I6IzY0YTllZH0uY2FwaWJhcmEuYy1ibHVlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZDFkY2U2O2JvcmRlci1ib3R0b20tY29sb3I6IzY0YTllZH0uY2FwaWJhcmEuYy1ibHVlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZDFkY2U2KSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzY0YTllZH0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzBlNDM3N30uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMGU0Mzc3fS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWJsdWUgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1ibHVlIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNSwxMTgsMjEwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtYmx1ZSAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNSwxMTgsMjEwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWJsdWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1ibHVlIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzE5NzZkMiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1ibHVlIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojMTk3NmQyIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtYmx1ZSAudGltZXtib3JkZXItY29sb3I6cmdiYSgyNSwxMTgsMjEwLC42KX0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1ibHVlIC50aW1lIC5zeW1ib2x7Y29sb3I6IzE5NzZkMn0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1ibHVlIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMTk3NmQyO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjUsMTE4LDIxMCwuMil9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyNSwxMTgsMjEwLC42KX0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMxOTc2ZDI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNSwxMTgsMjEwLC4yKX0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuNil9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMxOTc2ZDI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNSwxMTgsMjEwLC4yKX0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICMxOTc2ZDJ9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1LDExOCwyMTAsLjIpfS5jYXBpYmFyYS5jLWJsdWUgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiMxOTc2ZDI7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjgpfS5jYXBpYmFyYS5jLWJsdWUgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzE5NzZkMjtjb2xvcjojMTk3NmQyfS5jYXBpYmFyYS5jLWJsdWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMjUsMTE4LDIxMCwuOCl9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtYmx1ZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMjUsMTE4LDIxMCwuNSl9LmNhcGliYXJhIC5jLWJsdWUtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMTk3NmQyIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzExNTA4ZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWUtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM0ZTljZWEhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlLS10ZXh0e2NvbG9yOiMxOTc2ZDIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlLWQtLXRleHR7Y29sb3I6IzExNTA4ZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWUtbC0tdGV4dHtjb2xvcjojNGU5Y2VhIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJsdWV7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjIpO2JvcmRlcjoxcHggc29saWQgIzE5NzZkMn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJsdWUgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiMxOTc2ZDJ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVlIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjMTk3NmQyO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjUsMTE4LDIxMCwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVlIC5uYW1le2NvbG9yOiMxOTc2ZDJ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtYmx1ZXstLWxvY2FsLWNvbG9yOiMxOTc2ZDI7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWJsdWUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWJsdWUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtYmx1ZSAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojMTk3NmQyfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJsdWUuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC43KTtib3JkZXItY29sb3I6cmdiYSgyNSwxMTgsMjEwLC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJsdWUuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1ibHVlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC4yKTtib3JkZXItY29sb3I6cmdiYSgyNSwxMTgsMjEwLC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtYmx1ZXtiYWNrZ3JvdW5kOiMxOTc2ZDJ9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojMWNhMGRiIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWU6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzFjYTBkYn0uY2FwaWJhcmEuYy1saWdodC1ibHVlOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZDNlN2YwfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWU6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2QzZTdmMDtib3JkZXItY29sb3I6IzYwY2NmZH0uY2FwaWJhcmEuYy1saWdodC1ibHVlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZDNlN2YwO2JvcmRlci1ib3R0b20tY29sb3I6IzYwY2NmZH0uY2FwaWJhcmEuYy1saWdodC1ibHVlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZDNlN2YwKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzYwY2NmZH0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzAyNjM4Zn0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDI2MzhmfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMywxNjksMjQ0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMywxNjksMjQ0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzAzYTlmNCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1saWdodC1ibHVlIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMywxNjksMjQ0LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiMwM2E5ZjQhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuNil9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAudGltZSAuc3ltYm9se2NvbG9yOiMwM2E5ZjR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzAzYTlmNDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDMsMTY5LDI0NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgzLDE2OSwyNDQsLjYpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzAzYTlmNDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDMsMTY5LDI0NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuNil9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwM2E5ZjQ7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgzLDE2OSwyNDQsLjIpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzAzYTlmNH0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMywxNjksMjQ0LC4yKX0uY2FwaWJhcmEuYy1saWdodC1ibHVlIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojMDNhOWY0O2JhY2tncm91bmQ6cmdiYSgzLDE2OSwyNDQsLjgpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzAzYTlmNDtjb2xvcjojMDNhOWY0fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMywxNjksMjQ0LC44KX0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDMsMTY5LDI0NCwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDMsMTY5LDI0NCwuNSl9LmNhcGliYXJhIC5jLWxpZ2h0LWJsdWUtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMDNhOWY0IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtYmx1ZS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzAyNzVhOCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWJsdWUtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM0N2M0ZmQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ibHVlLS10ZXh0e2NvbG9yOiMwM2E5ZjQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ibHVlLWQtLXRleHR7Y29sb3I6IzAyNzVhOCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWJsdWUtbC0tdGV4dHtjb2xvcjojNDdjNGZkIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWJsdWV7YmFja2dyb3VuZDpyZ2JhKDMsMTY5LDI0NCwuMik7Ym9yZGVyOjFweCBzb2xpZCAjMDNhOWY0fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGlnaHQtYmx1ZSAubGVmdC1pY29ue2JhY2tncm91bmQ6IzAzYTlmNH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWJsdWUgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICMwM2E5ZjQ7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgzLDE2OSwyNDQsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGlnaHQtYmx1ZSAubmFtZXtjb2xvcjojMDNhOWY0fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWxpZ2h0LWJsdWV7LS1sb2NhbC1jb2xvcjojMDNhOWY0Oy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1saWdodC1ibHVlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1saWdodC1ibHVlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWxpZ2h0LWJsdWUgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6IzAzYTlmNH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1saWdodC1ibHVlLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMywxNjksMjQ0LC43KTtib3JkZXItY29sb3I6cmdiYSgzLDE2OSwyNDQsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGlnaHQtYmx1ZS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDMsMTY5LDI0NCwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGlnaHQtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMywxNjksMjQ0LC4yKTtib3JkZXItY29sb3I6cmdiYSgzLDE2OSwyNDQsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1saWdodC1ibHVle2JhY2tncm91bmQ6IzAzYTlmNH0uY2FwaWJhcmEuYy1jeWFuOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiMxNWFjYmYgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtY3lhbjpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojMTVhY2JmfS5jYXBpYmFyYS5jLWN5YW46bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNiOWUyZTh9LmNhcGliYXJhLmMtY3lhbjpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojYjllMmU4O2JvcmRlci1jb2xvcjojM2JlOWZmfS5jYXBpYmFyYS5jLWN5YW46bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNiOWUyZTg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojM2JlOWZmfS5jYXBpYmFyYS5jLWN5YW46bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNiOWUyZTgpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1jeWFuOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojM2JlOWZmfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojMDA2MjZlfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMwMDYyNmV9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtY3lhbiA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE4OCwyMTIsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtY3lhbiA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwxODgsMjEyLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtY3lhbiAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE4OCwyMTIsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtY3lhbiAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWN5YW4gLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojMDBiY2Q0IWltcG9ydGFudH0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWN5YW4gc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE4OCwyMTIsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzAwYmNkNCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWN5YW4gLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxODgsMjEyLC42KX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1jeWFuIC50aW1lIC5zeW1ib2x7Y29sb3I6IzAwYmNkNH0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1jeWFuIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMDBiY2Q0O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxODgsMjEyLC4yKX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuNil9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojMDBiY2Q0O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxODgsMjEyLC4yKX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxODgsMjEyLC42KX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzAwYmNkNDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTg4LDIxMiwuMil9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjMDBiY2Q0fS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDE4OCwyMTIsLjIpfS5jYXBpYmFyYS5jLWN5YW4gLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiMwMGJjZDQ7YmFja2dyb3VuZDpyZ2JhKDAsMTg4LDIxMiwuOCl9LmNhcGliYXJhLmMtY3lhbiAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojMDBiY2Q0O2NvbG9yOiMwMGJjZDR9LmNhcGliYXJhLmMtY3lhbiAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgwLDE4OCwyMTIsLjgpfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWN5YW4gLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMCwxODgsMjEyLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMCwxODgsMjEyLC41KX0uY2FwaWJhcmEgLmMtY3lhbi0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMwMGJjZDQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1jeWFuLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMDA3ODg4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtY3lhbi1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzIyZTZmZiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWN5YW4tLXRleHR7Y29sb3I6IzAwYmNkNCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWN5YW4tZC0tdGV4dHtjb2xvcjojMDA3ODg4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtY3lhbi1sLS10ZXh0e2NvbG9yOiMyMmU2ZmYhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtY3lhbntiYWNrZ3JvdW5kOnJnYmEoMCwxODgsMjEyLC4yKTtib3JkZXI6MXB4IHNvbGlkICMwMGJjZDR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1jeWFuIC5sZWZ0LWljb257YmFja2dyb3VuZDojMDBiY2Q0fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtY3lhbiAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzAwYmNkNDtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDAsMTg4LDIxMiwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1jeWFuIC5uYW1le2NvbG9yOiMwMGJjZDR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtY3lhbnstLWxvY2FsLWNvbG9yOiMwMGJjZDQ7LS1sb2NhbC1jb2xvci1mb250OiMyNjMyMzh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWN5YW4sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWN5YW4sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtY3lhbiAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojMDBiY2Q0fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWN5YW4uYWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDE4OCwyMTIsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1jeWFuLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxODgsMjEyLC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1jeWFuOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDE4OCwyMTIsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWN5YW57YmFja2dyb3VuZDojMDBiY2Q0fS5jYXBpYmFyYS5jLXRlYWw6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzBmODc3YyB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy10ZWFsOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiMwZjg3N2N9LmNhcGliYXJhLmMtdGVhbDpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6IzhhZDhkMX0uY2FwaWJhcmEuYy10ZWFsOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiM4YWQ4ZDE7Ym9yZGVyLWNvbG9yOiMwMGZjZTR9LmNhcGliYXJhLmMtdGVhbDpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6IzhhZDhkMTtib3JkZXItYm90dG9tLWNvbG9yOiMwMGZjZTR9LmNhcGliYXJhLmMtdGVhbDpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsIzhhZDhkMSkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXRlYWw6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMwMGZjZTR9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMwMDMwMmN9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzAwMzAyY30uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy10ZWFsIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy10ZWFsIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE1MCwxMzYsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy10ZWFsIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy10ZWFsIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtdGVhbCAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDk2ODghaW1wb3J0YW50fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtdGVhbCBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojMDA5Njg4IWltcG9ydGFudH0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtdGVhbCAudGltZXtib3JkZXItY29sb3I6cmdiYSgwLDE1MCwxMzYsLjYpfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLXRlYWwgLnRpbWUgLnN5bWJvbHtjb2xvcjojMDA5Njg4fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXRlYWwgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDk2ODg7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDE1MCwxMzYsLjIpfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LWJveCwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC42KX0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDk2ODg7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDE1MCwxMzYsLjIpfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgwLDE1MCwxMzYsLjYpfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA5Njg4O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxNTAsMTM2LC4yKX0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICMwMDk2ODh9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTUwLDEzNiwuMil9LmNhcGliYXJhLmMtdGVhbCAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzAwOTY4ODtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMTM2LC44KX0uY2FwaWJhcmEuYy10ZWFsIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMwMDk2ODg7Y29sb3I6IzAwOTY4OH0uY2FwaWJhcmEuYy10ZWFsIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDAsMTUwLDEzNiwuOCl9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtdGVhbCAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgwLDE1MCwxMzYsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgwLDE1MCwxMzYsLjUpfS5jYXBpYmFyYSAuYy10ZWFsLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzAwOTY4OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXRlYWwtZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMwMDRhNDMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy10ZWFsLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMDBlM2NkIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtdGVhbC0tdGV4dHtjb2xvcjojMDA5Njg4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtdGVhbC1kLS10ZXh0e2NvbG9yOiMwMDRhNDMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy10ZWFsLWwtLXRleHR7Y29sb3I6IzAwZTNjZCFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy10ZWFse2JhY2tncm91bmQ6cmdiYSgwLDE1MCwxMzYsLjIpO2JvcmRlcjoxcHggc29saWQgIzAwOTY4OH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXRlYWwgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiMwMDk2ODh9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy10ZWFsIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjMDA5Njg4O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMCwxNTAsMTM2LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXRlYWwgLm5hbWV7Y29sb3I6IzAwOTY4OH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy10ZWFsey0tbG9jYWwtY29sb3I6IzAwOTY4ODstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtdGVhbCwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtdGVhbCwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy10ZWFsIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiMwMDk2ODh9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtdGVhbC5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDAsMTUwLDEzNiwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXRlYWwuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDE1MCwxMzYsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXRlYWw6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMTUwLDEzNiwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtdGVhbHtiYWNrZ3JvdW5kOiMwMDk2ODh9LmNhcGliYXJhLmMtZ3JlZW46bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzNmNmM0MSB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1ncmVlbjpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojM2Y2YzQxfS5jYXBpYmFyYS5jLWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojYmNiY2JjfS5jYXBpYmFyYS5jLWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNiY2JjYmM7Ym9yZGVyLWNvbG9yOiM1MmJmNTd9LmNhcGliYXJhLmMtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNiY2JjYmM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNTJiZjU3fS5jYXBpYmFyYS5jLWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjYmNiY2JjKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM1MmJmNTd9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzEzMzIxNH0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMxMzMyMTR9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWdyZWVuIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtZ3JlZW4gOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1ncmVlbiAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSg0NiwxMjUsNTAsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1ncmVlbiAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWdyZWVuIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzJlN2QzMiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtZ3JlZW4gc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSg0NiwxMjUsNTAsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzJlN2QzMiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1ncmVlbiAudGltZXtib3JkZXItY29sb3I6cmdiYSg0NiwxMjUsNTAsLjYpfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1ncmVlbiAudGltZSAuc3ltYm9se2NvbG9yOiMyZTdkMzJ9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1ncmVlbiAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4gLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMyZTdkMzI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg0NiwxMjUsNTAsLjIpfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LWJveCwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuNil9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzJlN2QzMjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDQ2LDEyNSw1MCwuMil9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSg0NiwxMjUsNTAsLjYpfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMyZTdkMzI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg0NiwxMjUsNTAsLjIpfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjMmU3ZDMyfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNDYsMTI1LDUwLC4yKX0uY2FwaWJhcmEuYy1ncmVlbiAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiMyZTdkMzI7YmFja2dyb3VuZDpyZ2JhKDQ2LDEyNSw1MCwuOCl9LmNhcGliYXJhLmMtZ3JlZW4gLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMyZTdkMzI7Y29sb3I6IzJlN2QzMn0uY2FwaWJhcmEuYy1ncmVlbiAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoNDYsMTI1LDUwLC44KX0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtZ3JlZW4gLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoNDYsMTI1LDUwLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoNDYsMTI1LDUwLC41KX0uY2FwaWJhcmEgLmMtZ3JlZW4tLWJhY2tncm91bmR7YmFja2dyb3VuZDojMmU3ZDMyIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZ3JlZW4tZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMxOTQ1MWMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ncmVlbi1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzQzYjU0OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWdyZWVuLS10ZXh0e2NvbG9yOiMyZTdkMzIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ncmVlbi1kLS10ZXh0e2NvbG9yOiMxOTQ1MWMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ncmVlbi1sLS10ZXh0e2NvbG9yOiM0M2I1NDghaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZ3JlZW57YmFja2dyb3VuZDpyZ2JhKDQ2LDEyNSw1MCwuMik7Ym9yZGVyOjFweCBzb2xpZCAjMmU3ZDMyfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZ3JlZW4gLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiMyZTdkMzJ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ncmVlbiAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzJlN2QzMjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDQ2LDEyNSw1MCwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ncmVlbiAubmFtZXtjb2xvcjojMmU3ZDMyfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWdyZWVuey0tbG9jYWwtY29sb3I6IzJlN2QzMjstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtZ3JlZW4sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWdyZWVuLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWdyZWVuIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiMyZTdkMzJ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZ3JlZW4uYWN0aXZle2JhY2tncm91bmQ6cmdiYSg0NiwxMjUsNTAsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1ncmVlbi5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDQ2LDEyNSw1MCwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDQ2LDEyNSw1MCwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoNDYsMTI1LDUwLC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtZ3JlZW57YmFja2dyb3VuZDojMmU3ZDMyfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiM4OWFiNjIgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6Izg5YWI2Mn0uY2FwaWJhcmEuYy1saWdodC1ncmVlbjpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2VkZWRlY30uY2FwaWJhcmEuYy1saWdodC1ncmVlbjpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZWRlZGVjO2JvcmRlci1jb2xvcjojYmNkYzk3fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZWRlZGVjO2JvcmRlci1ib3R0b20tY29sb3I6I2JjZGM5N30uY2FwaWJhcmEuYy1saWdodC1ncmVlbjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2VkZWRlYykhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojYmNkYzk3fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM1NzdkMmF9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNTc3ZDJhfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxMzksMTk1LDc0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTM5LDE5NSw3NCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxMzksMTk1LDc0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiM4YmMzNGEhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTM5LDE5NSw3NCwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojOGJjMzRhIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDEzOSwxOTUsNzQsLjYpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAudGltZSAuc3ltYm9se2NvbG9yOiM4YmMzNGF9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM4YmMzNGE7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMzksMTk1LDc0LC4yKX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgxMzksMTk1LDc0LC42KX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojOGJjMzRhO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTM5LDE5NSw3NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgxMzksMTk1LDc0LC42KX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojOGJjMzRhO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTM5LDE5NSw3NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICM4YmMzNGF9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMzksMTk1LDc0LC4yKX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiM4YmMzNGE7YmFja2dyb3VuZDpyZ2JhKDEzOSwxOTUsNzQsLjgpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojOGJjMzRhO2NvbG9yOiM4YmMzNGF9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDEzOSwxOTUsNzQsLjgpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgxMzksMTk1LDc0LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMTM5LDE5NSw3NCwuNSl9LmNhcGliYXJhIC5jLWxpZ2h0LWdyZWVuLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzhiYzM0YSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWdyZWVuLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNjQ5MTMwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtZ3JlZW4tbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNiMGQ2ODMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ncmVlbi0tdGV4dHtjb2xvcjojOGJjMzRhIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtZ3JlZW4tZC0tdGV4dHtjb2xvcjojNjQ5MTMwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtZ3JlZW4tbC0tdGV4dHtjb2xvcjojYjBkNjgzIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWdyZWVue2JhY2tncm91bmQ6cmdiYSgxMzksMTk1LDc0LC4yKTtib3JkZXI6MXB4IHNvbGlkICM4YmMzNGF9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saWdodC1ncmVlbiAubGVmdC1pY29ue2JhY2tncm91bmQ6IzhiYzM0YX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWdyZWVuIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjOGJjMzRhO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMTM5LDE5NSw3NCwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saWdodC1ncmVlbiAubmFtZXtjb2xvcjojOGJjMzRhfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWxpZ2h0LWdyZWVuey0tbG9jYWwtY29sb3I6IzhiYzM0YTstLWxvY2FsLWNvbG9yLWZvbnQ6IzI2MzIzOH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtbGlnaHQtZ3JlZW4sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWxpZ2h0LWdyZWVuLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWxpZ2h0LWdyZWVuIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiM4YmMzNGF9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGlnaHQtZ3JlZW4uYWN0aXZle2JhY2tncm91bmQ6cmdiYSgxMzksMTk1LDc0LC43KTtib3JkZXItY29sb3I6cmdiYSgxMzksMTk1LDc0LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpZ2h0LWdyZWVuLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMTM5LDE5NSw3NCwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGlnaHQtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDEzOSwxOTUsNzQsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDEzOSwxOTUsNzQsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1saWdodC1ncmVlbntiYWNrZ3JvdW5kOiM4YmMzNGF9LmNhcGliYXJhLmMtbGltZTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojYmFjNTUwIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWxpbWU6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6I2JhYzU1MH0uY2FwaWJhcmEuYy1saW1lOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZjNmM2VlfS5jYXBpYmFyYS5jLWxpbWU6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2YzZjNlZTtib3JkZXItY29sb3I6I2UzZWI5MH0uY2FwaWJhcmEuYy1saW1lOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZjNmM2VlO2JvcmRlci1ib3R0b20tY29sb3I6I2UzZWI5MH0uY2FwaWJhcmEuYy1saW1lOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZjNmM2VlKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGltZTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2UzZWI5MH0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6Izg5OTUxYX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojODk5NTFhfS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWxpbWUgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1saW1lIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDUsMjIwLDU3LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtbGltZSAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDUsMjIwLDU3LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWxpbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1saW1lIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2NkZGMzOSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1saW1lIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojY2RkYzM5IWltcG9ydGFudH0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtbGltZSAudGltZXtib3JkZXItY29sb3I6cmdiYSgyMDUsMjIwLDU3LC42KX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1saW1lIC50aW1lIC5zeW1ib2x7Y29sb3I6I2NkZGMzOX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1saW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojY2RkYzM5O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjA1LDIyMCw1NywuMil9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyMDUsMjIwLDU3LC42KX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNjZGRjMzk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMDUsMjIwLDU3LC4yKX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuNil9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNjZGRjMzk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMDUsMjIwLDU3LC4yKX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICNjZGRjMzl9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIwNSwyMjAsNTcsLjIpfS5jYXBpYmFyYS5jLWxpbWUgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiNjZGRjMzk7YmFja2dyb3VuZDpyZ2JhKDIwNSwyMjAsNTcsLjgpfS5jYXBpYmFyYS5jLWxpbWUgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6I2NkZGMzOTtjb2xvcjojY2RkYzM5fS5jYXBpYmFyYS5jLWxpbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMjA1LDIyMCw1NywuOCl9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtbGltZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyMDUsMjIwLDU3LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMjA1LDIyMCw1NywuNSl9LmNhcGliYXJhIC5jLWxpbWUtLWJhY2tncm91bmR7YmFja2dyb3VuZDojY2RkYzM5IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGltZS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzlkYWExZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpbWUtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNkZGU3N2EhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saW1lLS10ZXh0e2NvbG9yOiNjZGRjMzkhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saW1lLWQtLXRleHR7Y29sb3I6IzlkYWExZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpbWUtbC0tdGV4dHtjb2xvcjojZGRlNzdhIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpbWV7YmFja2dyb3VuZDpyZ2JhKDIwNSwyMjAsNTcsLjIpO2JvcmRlcjoxcHggc29saWQgI2NkZGMzOX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpbWUgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiNjZGRjMzl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saW1lIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjY2RkYzM5O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjA1LDIyMCw1NywuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saW1lIC5uYW1le2NvbG9yOiNjZGRjMzl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtbGltZXstLWxvY2FsLWNvbG9yOiNjZGRjMzk7LS1sb2NhbC1jb2xvci1mb250OiMyNjMyMzh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWxpbWUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWxpbWUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtbGltZSAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojY2RkYzM5fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpbWUuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyMDUsMjIwLDU3LC43KTtib3JkZXItY29sb3I6cmdiYSgyMDUsMjIwLDU3LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpbWUuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyMDUsMjIwLDU3LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1saW1lOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyMDUsMjIwLDU3LC4yKTtib3JkZXItY29sb3I6cmdiYSgyMDUsMjIwLDU3LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtbGltZXtiYWNrZ3JvdW5kOiNjZGRjMzl9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiNlYmRiNGYgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiNlYmRiNGZ9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZmZmfS5jYXBpYmFyYS5jLXllbGxvdzpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZmZmO2JvcmRlci1jb2xvcjojZmZmNWExfS5jYXBpYmFyYS5jLXllbGxvdzpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY1YTF9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZmZmKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojZmZmNWExfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2Q0YmUwMH0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6I2Q0YmUwMH0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLXllbGxvdyA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjM1LDU5LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMteWVsbG93IDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjM1LDU5LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy15ZWxsb3cgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIzNSw1OSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMteWVsbG93IC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMteWVsbG93IC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2ZmZWIzYiFpbXBvcnRhbnR9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLXllbGxvdyBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMzUsNTksLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6I2ZmZWIzYiFpbXBvcnRhbnR9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMteWVsbG93IC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyMzUsNTksLjYpfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMteWVsbG93IC50aW1lIC5zeW1ib2x7Y29sb3I6I2ZmZWIzYn0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMteWVsbG93IC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmViM2I7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMjM1LDU5LC4yKX0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1ib3gsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDIzNSw1OSwuNil9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmViM2I7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMjM1LDU5LC4yKX0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgyNTUsMjM1LDU5LC42KX0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmViM2I7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMjM1LDU5LC4yKX0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjZmZlYjNifS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwyMzUsNTksLjIpfS5jYXBpYmFyYS5jLXllbGxvdyAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojZmZlYjNiO2JhY2tncm91bmQ6cmdiYSgyNTUsMjM1LDU5LC44KX0uY2FwaWJhcmEuYy15ZWxsb3cgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojZmZlYjNiO2NvbG9yOiNmZmViM2J9LmNhcGliYXJhLmMteWVsbG93IC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMjU1LDIzNSw1OSwuOCl9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy15ZWxsb3cgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDIzNSw1OSwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDI1NSwyMzUsNTksLjUpfS5jYXBpYmFyYSAuYy15ZWxsb3ctLWJhY2tncm91bmR7YmFja2dyb3VuZDojZmZlYjNiIWltcG9ydGFudH0uY2FwaWJhcmEgLmMteWVsbG93LWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZWVkNTAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMteWVsbG93LWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZmZmMzg4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMteWVsbG93LS10ZXh0e2NvbG9yOiNmZmViM2IhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy15ZWxsb3ctZC0tdGV4dHtjb2xvcjojZWVkNTAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMteWVsbG93LWwtLXRleHR7Y29sb3I6I2ZmZjM4OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy15ZWxsb3d7YmFja2dyb3VuZDpyZ2JhKDI1NSwyMzUsNTksLjIpO2JvcmRlcjoxcHggc29saWQgI2ZmZWIzYn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXllbGxvdyAubGVmdC1pY29ue2JhY2tncm91bmQ6I2ZmZWIzYn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXllbGxvdyAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgI2ZmZWIzYjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwyMzUsNTksLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMteWVsbG93IC5uYW1le2NvbG9yOiNmZmViM2J9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMteWVsbG93ey0tbG9jYWwtY29sb3I6I2ZmZWIzYjstLWxvY2FsLWNvbG9yLWZvbnQ6IzI2MzIzOH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMteWVsbG93LC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy15ZWxsb3csLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMteWVsbG93IC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiNmZmViM2J9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMteWVsbG93LmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDIzNSw1OSwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDIzNSw1OSwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy15ZWxsb3cuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMjM1LDU5LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy15ZWxsb3c6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyMzUsNTksLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyMzUsNTksLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy15ZWxsb3d7YmFja2dyb3VuZDojZmZlYjNifS5jYXBpYmFyYS5jLWFtYmVyOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiNlNmI1MjAgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtYW1iZXI6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6I2U2YjUyMH0uY2FwaWJhcmEuYy1hbWJlcjpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2Y0ZWZkZX0uY2FwaWJhcmEuYy1hbWJlcjpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZjRlZmRlO2JvcmRlci1jb2xvcjojZmZkYjZkfS5jYXBpYmFyYS5jLWFtYmVyOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZjRlZmRlO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZGI2ZH0uY2FwaWJhcmEuYy1hbWJlcjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2Y0ZWZkZSkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWFtYmVyOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojZmZkYjZkfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNhMDc4MDB9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYTA3ODAwfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1hbWJlciA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTkzLDcsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWFtYmVyIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTkzLDcsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtYW1iZXIgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtYW1iZXIgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1hbWJlciAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmMxMDchaW1wb3J0YW50fS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWFtYmVyIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiNmZmMxMDchaW1wb3J0YW50fS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtYW1iZXIgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC42KX0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtYW1iZXIgLnRpbWUgLnN5bWJvbHtjb2xvcjojZmZjMTA3fS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtYW1iZXIgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZmZjMTA3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE5Myw3LC4yKX0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyNTUsMTkzLDcsLjYpfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmMxMDc7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTkzLDcsLjIpfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC42KX0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZmZjMTA3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE5Myw3LC4yKX0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgI2ZmYzEwN30uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxOTMsNywuMil9LmNhcGliYXJhLmMtYW1iZXIgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojZmZjMTA3O2JhY2tncm91bmQ6cmdiYSgyNTUsMTkzLDcsLjgpfS5jYXBpYmFyYS5jLWFtYmVyIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojZmZjMTA3O2NvbG9yOiNmZmMxMDd9LmNhcGliYXJhLmMtYW1iZXIgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDI1NSwxOTMsNywuOCl9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWFtYmVyIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDI1NSwxOTMsNywuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDI1NSwxOTMsNywuNSl9LmNhcGliYXJhIC5jLWFtYmVyLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2ZmYzEwNyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWFtYmVyLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojYmE4YjAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYW1iZXItbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNmZmQ0NTQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1hbWJlci0tdGV4dHtjb2xvcjojZmZjMTA3IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYW1iZXItZC0tdGV4dHtjb2xvcjojYmE4YjAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYW1iZXItbC0tdGV4dHtjb2xvcjojZmZkNDU0IWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWFtYmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMTkzLDcsLjIpO2JvcmRlcjoxcHggc29saWQgI2ZmYzEwN30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWFtYmVyIC5sZWZ0LWljb257YmFja2dyb3VuZDojZmZjMTA3fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYW1iZXIgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICNmZmMxMDc7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsMTkzLDcsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYW1iZXIgLm5hbWV7Y29sb3I6I2ZmYzEwN30uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1hbWJlcnstLWxvY2FsLWNvbG9yOiNmZmMxMDc7LS1sb2NhbC1jb2xvci1mb250OiMyNjMyMzh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWFtYmVyLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1hbWJlciwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1hbWJlciAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojZmZjMTA3fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWFtYmVyLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE5Myw3LC43KTtib3JkZXItY29sb3I6cmdiYSgyNTUsMTkzLDcsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYW1iZXIuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMTkzLDcsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWFtYmVyOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMTkzLDcsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwxOTMsNywuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWFtYmVye2JhY2tncm91bmQ6I2ZmYzEwN30uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6I2U2OTMxYSB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6I2U2OTMxYX0uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNmMmU4ZDl9LmNhcGliYXJhLmMtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNmMmU4ZDk7Ym9yZGVyLWNvbG9yOiNmZmMxNjZ9LmNhcGliYXJhLmMtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZjJlOGQ5O2JvcmRlci1ib3R0b20tY29sb3I6I2ZmYzE2Nn0uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNmMmU4ZDkpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNmZmMxNjZ9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojOTk1YjAwfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojOTk1YjAwfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtb3JhbmdlIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLW9yYW5nZSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1vcmFuZ2UgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1vcmFuZ2UgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1vcmFuZ2UgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwIWltcG9ydGFudH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtb3JhbmdlIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiNmZjk4MDAhaW1wb3J0YW50fS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLW9yYW5nZSAudGltZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMTUyLDAsLjYpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtb3JhbmdlIC50aW1lIC5zeW1ib2x7Y29sb3I6I2ZmOTgwMH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtb3JhbmdlIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZjk4MDA7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTUyLDAsLjIpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyNTUsMTUyLDAsLjYpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojZmY5ODAwO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE1MiwwLC4yKX0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgyNTUsMTUyLDAsLjYpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2ZmOTgwMDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxNTIsMCwuMil9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgI2ZmOTgwMH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTUyLDAsLjIpfS5jYXBpYmFyYS5jLW9yYW5nZSAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojZmY5ODAwO2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjgpfS5jYXBpYmFyYS5jLW9yYW5nZSAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmOTgwMH0uY2FwaWJhcmEuYy1vcmFuZ2UgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjgpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtb3JhbmdlIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDI1NSwxNTIsMCwuNSl9LmNhcGliYXJhIC5jLW9yYW5nZS0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNmZjk4MDAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1vcmFuZ2UtZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNiMzZhMDAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1vcmFuZ2UtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNmZmI3NGQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1vcmFuZ2UtLXRleHR7Y29sb3I6I2ZmOTgwMCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLW9yYW5nZS1kLS10ZXh0e2NvbG9yOiNiMzZhMDAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1vcmFuZ2UtbC0tdGV4dHtjb2xvcjojZmZiNzRkIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLW9yYW5nZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKTtib3JkZXI6MXB4IHNvbGlkICNmZjk4MDB9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1vcmFuZ2UgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiNmZjk4MDB9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1vcmFuZ2UgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICNmZjk4MDA7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsMTUyLDAsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtb3JhbmdlIC5uYW1le2NvbG9yOiNmZjk4MDB9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtb3Jhbmdley0tbG9jYWwtY29sb3I6I2ZmOTgwMDstLWxvY2FsLWNvbG9yLWZvbnQ6IzI2MzIzOH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtb3JhbmdlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1vcmFuZ2UsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtb3JhbmdlIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiNmZjk4MDB9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtb3JhbmdlLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC43KTtib3JkZXItY29sb3I6cmdiYSgyNTUsMTUyLDAsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtb3JhbmdlLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1vcmFuZ2U6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtb3Jhbmdle2JhY2tncm91bmQ6I2ZmOTgwMH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojY2Q1NzMzIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiNjZDU3MzN9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNlZGUxZGV9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2VkZTFkZTtib3JkZXItY29sb3I6I2YwOTI3NX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2VkZTFkZTtib3JkZXItYm90dG9tLWNvbG9yOiNmMDkyNzV9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNlZGUxZGUpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2YwOTI3NX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojOGEyYzBmfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzhhMmMwZn0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojZTY0YTE5IWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojZTY0YTE5IWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuNil9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC50aW1lIC5zeW1ib2x7Y29sb3I6I2U2NGExOX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2U2NGExOTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIzMCw3NCwyNSwuMil9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC42KX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojZTY0YTE5O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjMwLDc0LDI1LC4yKX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuNil9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2U2NGExOTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIzMCw3NCwyNSwuMil9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICNlNjRhMTl9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMzAsNzQsMjUsLjIpfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6I2U2NGExOTtiYWNrZ3JvdW5kOnJnYmEoMjMwLDc0LDI1LC44KX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6I2U2NGExOTtjb2xvcjojZTY0YTE5fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgyMzAsNzQsMjUsLjgpfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyMzAsNzQsMjUsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgyMzAsNzQsMjUsLjUpfS5jYXBpYmFyYSAuYy1kZWVwLW9yYW5nZS0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNlNjRhMTkhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLW9yYW5nZS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2ExMzQxMiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtb3JhbmdlLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZWU4MDVlIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1vcmFuZ2UtLXRleHR7Y29sb3I6I2U2NGExOSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtb3JhbmdlLWQtLXRleHR7Y29sb3I6I2ExMzQxMiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtb3JhbmdlLWwtLXRleHR7Y29sb3I6I2VlODA1ZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLW9yYW5nZXtiYWNrZ3JvdW5kOnJnYmEoMjMwLDc0LDI1LC4yKTtib3JkZXI6MXB4IHNvbGlkICNlNjRhMTl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLW9yYW5nZSAubGVmdC1pY29ue2JhY2tncm91bmQ6I2U2NGExOX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtb3JhbmdlIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjZTY0YTE5O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjMwLDc0LDI1LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtb3JhbmdlIC5uYW1le2NvbG9yOiNlNjRhMTl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtZGVlcC1vcmFuZ2V7LS1sb2NhbC1jb2xvcjojZTY0YTE5Oy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1kZWVwLW9yYW5nZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtZGVlcC1vcmFuZ2UsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtZGVlcC1vcmFuZ2UgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6I2U2NGExOX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1kZWVwLW9yYW5nZS5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDIzMCw3NCwyNSwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWRlZXAtb3JhbmdlLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjMwLDc0LDI1LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1kZWVwLW9yYW5nZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjMwLDc0LDI1LC4yKTtib3JkZXItY29sb3I6cmdiYSgyMzAsNzQsMjUsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1kZWVwLW9yYW5nZXtiYWNrZ3JvdW5kOiNlNjRhMTl9LmNhcGliYXJhLmMtYnJvd246bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzY2NWU1YiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1icm93bjpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojNjY1ZTVifS5jYXBpYmFyYS5jLWJyb3duOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojYzdjN2M3fS5jYXBpYmFyYS5jLWJyb3duOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNjN2M3Yzc7Ym9yZGVyLWNvbG9yOiNhZjg3Nzh9LmNhcGliYXJhLmMtYnJvd246bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNjN2M3Yzc7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYWY4Nzc4fS5jYXBpYmFyYS5jLWJyb3duOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjYzdjN2M3KSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYnJvd246bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNhZjg3Nzh9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzM5MjgyMn0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMzOTI4MjJ9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWJyb3duIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtYnJvd24gOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1icm93biAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxMjEsODUsNzIsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1icm93biAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWJyb3duIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6Izc5NTU0OCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtYnJvd24gc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgxMjEsODUsNzIsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6Izc5NTU0OCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1icm93biAudGltZXtib3JkZXItY29sb3I6cmdiYSgxMjEsODUsNzIsLjYpfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1icm93biAudGltZSAuc3ltYm9se2NvbG9yOiM3OTU1NDh9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1icm93biAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24gLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM3OTU1NDg7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMjEsODUsNzIsLjIpfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LWJveCwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuNil9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6Izc5NTU0ODtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEyMSw4NSw3MiwuMil9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgxMjEsODUsNzIsLjYpfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM3OTU1NDg7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMjEsODUsNzIsLjIpfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjNzk1NTQ4fS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTIxLDg1LDcyLC4yKX0uY2FwaWJhcmEuYy1icm93biAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiM3OTU1NDg7YmFja2dyb3VuZDpyZ2JhKDEyMSw4NSw3MiwuOCl9LmNhcGliYXJhLmMtYnJvd24gLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiM3OTU1NDg7Y29sb3I6Izc5NTU0OH0uY2FwaWJhcmEuYy1icm93biAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMTIxLDg1LDcyLC44KX0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtYnJvd24gLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMTIxLDg1LDcyLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMTIxLDg1LDcyLC41KX0uY2FwaWJhcmEgLmMtYnJvd24tLWJhY2tncm91bmR7YmFja2dyb3VuZDojNzk1NTQ4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYnJvd24tZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM0OTMzMmIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1icm93bi1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2E1Nzg2OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJyb3duLS10ZXh0e2NvbG9yOiM3OTU1NDghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1icm93bi1kLS10ZXh0e2NvbG9yOiM0OTMzMmIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1icm93bi1sLS10ZXh0e2NvbG9yOiNhNTc4NjghaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYnJvd257YmFja2dyb3VuZDpyZ2JhKDEyMSw4NSw3MiwuMik7Ym9yZGVyOjFweCBzb2xpZCAjNzk1NTQ4fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYnJvd24gLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiM3OTU1NDh9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1icm93biAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzc5NTU0ODtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDEyMSw4NSw3MiwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1icm93biAubmFtZXtjb2xvcjojNzk1NTQ4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWJyb3duey0tbG9jYWwtY29sb3I6Izc5NTU0ODstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtYnJvd24sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWJyb3duLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWJyb3duIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiM3OTU1NDh9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYnJvd24uYWN0aXZle2JhY2tncm91bmQ6cmdiYSgxMjEsODUsNzIsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1icm93bi5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDEyMSw4NSw3MiwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYnJvd246aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDEyMSw4NSw3MiwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMTIxLDg1LDcyLC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtYnJvd257YmFja2dyb3VuZDojNzk1NTQ4fS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojNzY3Njc2IHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojNzY3Njc2fS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2RjZGNkY30uY2FwaWJhcmEuYy1ibHVlX2dyZXk6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2RjZGNkYztib3JkZXItY29sb3I6Izk5YWViOH0uY2FwaWJhcmEuYy1ibHVlX2dyZXk6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNkY2RjZGM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojOTlhZWI4fS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2RjZGNkYykhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6Izk5YWViOH0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMzNjQ3NGZ9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMzNjQ3NGZ9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiM2MDdkOGIhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSg5NiwxMjUsMTM5LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiM2MDdkOGIhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAudGltZXtib3JkZXItY29sb3I6cmdiYSg5NiwxMjUsMTM5LC42KX0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAudGltZSAuc3ltYm9se2NvbG9yOiM2MDdkOGJ9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojNjA3ZDhiO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoOTYsMTI1LDEzOSwuMil9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjYpfS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojNjA3ZDhiO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoOTYsMTI1LDEzOSwuMil9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuNil9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojNjA3ZDhiO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoOTYsMTI1LDEzOSwuMil9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzYwN2Q4Yn0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg5NiwxMjUsMTM5LC4yKX0uY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzYwN2Q4YjtiYWNrZ3JvdW5kOnJnYmEoOTYsMTI1LDEzOSwuOCl9LmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzYwN2Q4Yjtjb2xvcjojNjA3ZDhifS5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDk2LDEyNSwxMzksLjgpfS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDk2LDEyNSwxMzksLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSg5NiwxMjUsMTM5LC41KX0uY2FwaWJhcmEgLmMtYmx1ZV9ncmV5LS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzYwN2Q4YiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWVfZ3JleS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzQxNTQ1ZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWVfZ3JleS1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzhhYTJhZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWVfZ3JleS0tdGV4dHtjb2xvcjojNjA3ZDhiIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZV9ncmV5LWQtLXRleHR7Y29sb3I6IzQxNTQ1ZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWVfZ3JleS1sLS10ZXh0e2NvbG9yOiM4YWEyYWUhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYmx1ZV9ncmV5e2JhY2tncm91bmQ6cmdiYSg5NiwxMjUsMTM5LC4yKTtib3JkZXI6MXB4IHNvbGlkICM2MDdkOGJ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVlX2dyZXkgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiM2MDdkOGJ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVlX2dyZXkgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICM2MDdkOGI7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSg5NiwxMjUsMTM5LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJsdWVfZ3JleSAubmFtZXtjb2xvcjojNjA3ZDhifS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWJsdWVfZ3JleXstLWxvY2FsLWNvbG9yOiM2MDdkOGI7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWJsdWVfZ3JleSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtYmx1ZV9ncmV5LC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWJsdWVfZ3JleSAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojNjA3ZDhifS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJsdWVfZ3JleS5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDk2LDEyNSwxMzksLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYmx1ZV9ncmV5LmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoOTYsMTI1LDEzOSwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYmx1ZV9ncmV5OmhvdmVye2JhY2tncm91bmQ6cmdiYSg5NiwxMjUsMTM5LC4yKTtib3JkZXItY29sb3I6cmdiYSg5NiwxMjUsMTM5LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtYmx1ZV9ncmV5e2JhY2tncm91bmQ6IzYwN2Q4Yn0uY2FwaWJhcmEgKiwuY2FwaWJhcmEgOmFmdGVyLC5jYXBpYmFyYSA6YmVmb3Jle2JveC1zaXppbmc6Ym9yZGVyLWJveH0uY2FwaWJhcmEgaW5wdXR7b3V0bGluZTpub25lfS5jYXBpYmFyYSBpbnB1dFt0eXBlPW51bWJlcl17LW1vei1hcHBlYXJhbmNlOnRleHRmaWVsZH0uY2FwaWJhcmEgaW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5jYXBpYmFyYSBpbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LmNhcGliYXJhIGlucHV0W3R5cGU9bnVtYmVyXTo6LW1vei1wbGFjZWhvbGRlcntvcGFjaXR5OjF9LmNhcGliYXJhIGlucHV0W3R5cGU9bnVtYmVyXTotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eToxfS5jYXBpYmFyYSBpbnB1dFt0eXBlPW51bWJlcl06OnBsYWNlaG9sZGVye29wYWNpdHk6MX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaGlkZS1kYXJrLC5jYXBpYmFyYTpub3QoLmRhcmstdGhlbWUpIC5oaWRlLWxpZ2h0e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmNhcGliYXJhIC50cnVuY2F0ZXt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uY2FwaWJhcmEgLmhpZGV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLnRleHQtdGl0bGV7Zm9udC1zaXplOjEuMjVlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luOi41ZW0gLjNlbX0uY2FwaWJhcmEgLnRleHQtc3VidGl0bGV7Zm9udC1zaXplOi44NzVlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luOi41ZW0gLjNlbTtmbGV4OjAgMCBhdXRvfS5jYXBpYmFyYSAudGV4dC1oaW50e2ZvbnQtc2l6ZTouNzVlbTttYXJnaW46LjNlbTt0ZXh0LWFsaWduOmxlZnQ7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jYXBpYmFyYSAudGV4dC1zdWJ0aXRsZS0ye2ZvbnQtc2l6ZTouNzVlbTttYXJnaW46LjVlbSAuM2VtO2ZsZXg6MCAwIGF1dG99LmNhcGliYXJhIC5kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uY2FwaWJhcmEgLmQtYmxvY2t7ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgLmQtZmxleHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjk2MHB4KXsuY2FwaWJhcmEgLmMtZC1kZXNrdG9wLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZC1kZXNrdG9wLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWQtZGVza3RvcC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZC1kZXNrdG9wLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NTlweCl7LmNhcGliYXJhIC5jLWQtbW9iaWxlLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZC1tb2JpbGUtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWQtbW9iaWxlLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWQtbW9iaWxlLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH19LmNhcGliYXJhe3Njcm9sbGJhci13aWR0aDphdXRvfS5jYXBpYmFyYSA6Oi13ZWJraXQtc2Nyb2xsYmFye3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7b3BhY2l0eTouNX0uY2FwaWJhcmEgOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsLmNhcGliYXJhIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2t7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uY2FwaWJhcmEgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntib3JkZXItcmFkaXVzOjVweDtiYWNrZ3JvdW5kOmdyZXl9LmNhcGliYXJhLmRhcmstdGhlbWUgOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsLmNhcGliYXJhLmRhcmstdGhlbWUgOjotd2Via2l0LXNjcm9sbGJhci10cmFja3tiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jYXBpYmFyYS5kYXJrLXRoZW1lIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojYmRiZGJkfS5jYXBpYmFyYXtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZjtoZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXQ7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1zaXplOnZhcigtLWZvbnQtc2l6ZSl9LmNhcGliYXJhIHByZXtmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZiFpbXBvcnRhbnR9LmNhcGliYXJhe2NvbG9yOiMzNzQ3NGY7YmFja2dyb3VuZDojZjVmNWY1fS5jYXBpYmFyYS5kYXJrLXRoZW1le2NvbG9yOiNmMGYwZjA7YmFja2dyb3VuZDojMjIyODM3fS5jYXBpYmFyYSAuY29udGFpbmVyLXRse3dpZHRoOjEwMCU7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSk7bWF4LWhlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1oZWFkZXItdG9wLWhlaWdodCkpO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnNjcm9sbDttYXJnaW46MDt3aWxsLWNoYW5nZTpzY3JvbGwtcG9zaXRpb259LmNhcGliYXJhLmV4dGVuZGVkLXJpZ2h0IC5jb250YWluZXItdGx7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbmF2LXJpZ2h0LXdpZHRoKSl9LmNhcGliYXJhIC5jb250YWluZXItdGx7YmFja2dyb3VuZDojZjVmNWY1fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGx7YmFja2dyb3VuZDojMjIyODM3fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50b2RheS1saW5le3dpZHRoOjA7cG9zaXRpb246YWJzb2x1dGV9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRvZGF5LWxpbmUuZGlzYWJsZS1saW5lLC5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50b2RheS1saW5lLmRpc2FibGUtbGluZTphZnRlcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50b2RheS1saW5lOmFmdGVye21hcmdpbi1sZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSArIDFweCk7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztsZWZ0OjA7dG9wOjA7Y29udGVudDpcXFwiXFxcIjt3aWR0aDoycHg7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpyZ2JhKDE4MywyOCwyOCwuNCl9LmNhcGliYXJhIC5jb250YWluZXItdGwuaGVhZGVyLWV4dGVuZGVkIC5jb250YWluZXItdGwgLnRvZGF5LWxpbmU6YWZ0ZXJ7aGVpZ2h0OmNhbGMoMTAwdmggLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWV4LWhlYWRlci1oZWlnaHQpICsgdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpKX0uY2FwaWJhcmEgLmNvcm5lcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6dmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpO3otaW5kZXg6NDtoZWlnaHQ6dmFyKC0taGVhZGVyLWhlaWdodCk7Ym9yZGVyOnNvbGlkIHJnYmEoMCwwLDAsLjQpO2JvcmRlci13aWR0aDowIDAgMnB4O3BhZGRpbmctbGVmdDo4cHh9LmNhcGliYXJhIC5jb3JuZXI6bm90KC5yaWdodCl7bGVmdDowO2JvcmRlci1yaWdodC13aWR0aDoxcHg7d2lkdGg6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKX0uY2FwaWJhcmEgLmNvcm5lci5yaWdodHtyaWdodDowO3dpZHRoOnZhcigtLW5hdi1yaWdodC13aWR0aCk7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuY29ybmVyPmRpdjpub3QoW2NsYXNzXSl7d2lkdGg6aW5oZXJpdDtoZWlnaHQ6aW5oZXJpdH0uY2FwaWJhcmEgLmNvcm5lciAuYnRuLWNvbnRhaW5lcntwYWRkaW5nLXRvcDouNWVtfS5jYXBpYmFyYSAuY29ybmVyIC5idG4tY29udGFpbmVyIC5jb3JuZXItYnRue2ZvbnQtc2l6ZTouODI1ZW07bWFyZ2luOjAgNHB4O3BhZGRpbmc6NHB4IDhweH0uY2FwaWJhcmEgLmNvcm5lciAuY29ybmVyLXRpdGxle2hlaWdodDppbmhlcml0O2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpsZWZ0O3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuY29ybmVyIC5jb3JuZXItdGl0bGUgc3Bhbi5ib3R0b20tdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjhweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk1OXB4KXsuY2FwaWJhcmEgLmNvcm5lciAuY29ybmVyLXRpdGxle2ZvbnQtc2l6ZTouNzVlbX19LmNhcGliYXJhIC5jb3JuZXIgLmluaXRpYWwtY29ybmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tbmF2LXdpZHRoKTt0b3A6MDt3aWR0aDp2YXIoLS1pbml0aWFsLW5hdi13aWR0aCk7aGVpZ2h0OnZhcigtLWhlYWRlci1oZWlnaHQpO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrfS5jYXBpYmFyYSAuY29ybmVyIC5pbml0aWFsLWNvcm5lciAuaW5pdGlhbC1jb3JuZXItdGl0bGV7aGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6LTFweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7dmVydGljYWwtYWxpZ246dG9wO3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuY29ybmVyIC5pbml0aWFsLWNvcm5lciAuaW5pdGlhbC1jb3JuZXItdGl0bGUgLmJvdHRvbS1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTo4cHg7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2FwaWJhcmEgLmNvcm5lciAuaW5pdGlhbC1jb3JuZXIgLmluaXRpYWwtY29ybmVyLXRpdGxlIC5ib3R0b20tY29udGFpbmVyIC5pdGVtLWNvbHtmbGV4OjAgMCB2YXIoLS1uYXYtaXRlbS1jb2wtd2lkdGgpO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTouNzVlbX0uY2FwaWJhcmEgLmNvcm5lciAuZXh0ZW5kLWNvcm5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSk7dG9wOjA7d2lkdGg6dmFyKC0tZXgtbmF2LXdpZHRoKTtoZWlnaHQ6dmFyKC0taGVhZGVyLWhlaWdodCk7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIC5jb3JuZXIgLmV4dGVuZC1jb3JuZXIgLmV4LWNvcm5lci10aXRsZXtoZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDotMXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt2ZXJ0aWNhbC1hbGlnbjp0b3A7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5jb3JuZXIgLmV4dGVuZC1jb3JuZXIgLmV4LWNvcm5lci10aXRsZSAuYm90dG9tLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjhweDt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jYXBpYmFyYSAuY29ybmVyIC5leHRlbmQtY29ybmVyIC5leC1jb3JuZXItdGl0bGUgLmJvdHRvbS1jb250YWluZXIgLml0ZW0tY29se2ZsZXg6MCAwIHZhcigtLW5hdi1pdGVtLWNvbC13aWR0aCk7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOi43NWVtfS5jYXBpYmFyYSAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDp2YXIoLS1idG4tbmF2LXdpZHRoKTtoZWlnaHQ6dmFyKC0taGVhZGVyLWhlaWdodCk7bWluLXdpZHRoOjEwMHB4O3BhZGRpbmctdG9wOnZhcigtLWhlYWRlci1sYWJlbHMtaGVpZ2h0KX0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXN7dGV4dC1hbGlnbjpyaWdodDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOnZhcigtLWhlYWRlci1sYWJlbHMtaGVpZ2h0KX0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjNweH0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lcjpub3QoLnBlcnNpc3RlbnQpe2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lci5pbnB1dC10aXRsZS0tYWNjZW50IC5pbnB1dC10aXRsZXtjb2xvcjojZmZmO2JhY2tncm91bmQ6Z3JleX0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lciBzcGFuLmF2ZXJhZ2V7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1yaWdodDo0cHg7cGFkZGluZzozcHh9LmNhcGliYXJhIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXIgLmlucHV0LXRpdGxle2hlaWdodDpjYWxjKHZhcigtLWhlYWRlci1pbnB1dC1oZWlnaHQpICsgM3B4KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWhlYWRlci1pbnB1dC1oZWlnaHQpICsgMnB4KTtwYWRkaW5nLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6Ljc1ZW19LmNhcGliYXJhLmV4dGVuZGVkLXJpZ2h0IC5jb3JuZXIucmlnaHR7ZGlzcGxheTpibG9ja30uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb3JuZXIsLmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIsLmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29ybmVyIC5leHRlbmQtY29ybmVyLC5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvcm5lciAuaW5pdGlhbC1jb3JuZXJ7aGVpZ2h0OmNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSl9LmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIgLmlucHV0LXRpdGxlcyAuaW5wdXQtdGl0bGUtY29udGFpbmVyOm5vdCgucGVyc2lzdGVudCl7ZGlzcGxheTp1bnNldH0uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXI6bm90KC5wZXJzaXN0ZW50KSAuYXZlcmFnZS1ib3h7dmlzaWJpbGl0eTp2aXNpYmxlfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lcjpub3QoLnBlcnNpc3RlbnQpIC5pbnB1dC10aXRsZXt2aXNpYmlsaXR5OnZpc2libGU7aGVpZ2h0OmF1dG99LmNhcGliYXJhIC5jb3JuZXJ7YmFja2dyb3VuZDojZjFmZmZlfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb3JuZXJ7YmFja2dyb3VuZDojMzEzYjUwO2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXIgLmlucHV0LXRpdGxle2NvbG9yOmhzbGEoMCwwJSwxMDAlLC44KSFpbXBvcnRhbnR9LmNhcGliYXJhIC5oZWFkZXItdG9we3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OnZhcigtLWhlYWRlci10b3AtaGVpZ2h0KTtwYWRkaW5nOjAgLjVlbTtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO3otaW5kZXg6NX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnNwYWNlcntmbGV4OjEgMCBhdXRvfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2JvcmRlci1yaWdodDoxcHggc29saWQgaHNsYSgwLDAlLDQzLjUlLC4zKTttYXJnaW4tcmlnaHQ6LjVlbX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyOm5vdCg6ZW1wdHkpe3BhZGRpbmc6MH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIGJ1dHRvbi50YWJ7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzouMjVlbSAxZW07Zm9udC13ZWlnaHQ6NzAwO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7bWFyZ2luOi41ZW0gLjVlbSAwIDA7Ym9yZGVyLXJhZGl1czozMHB4O3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMgZWFzZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgYnV0dG9uLnRhYjpmb2N1c3tib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIGJ1dHRvbi50YWIuZGlzYWJsZWR7Y29sb3I6Z3JleX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIGJ1dHRvbi50YWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOmdyZXl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lcntkaXNwbGF5OmZsZXh9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5ke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7bWFyZ2luLXJpZ2h0OjFlbTtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOi44ZW0gLjVlbSAuNWVtIDB9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5kOm5vdCguYWN0aXZlKXtvcGFjaXR5Oi41fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXIgLmxlZ2VuZDpub3QoLmFjdGl2ZSkgLmljb24tbGVnZW5ke2JhY2tncm91bmQ6Z3JleSFpbXBvcnRhbnR9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5kIC5pY29uLWxlZ2VuZHt3aWR0aDouODI1ZW07aGVpZ2h0Oi44MjVlbTttYXJnaW46MnB4IC41ZW0gMnB4IDA7YmFja2dyb3VuZDpncmV5O2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6MXB4O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuNCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5kIC5pY29uLWxlZ2VuZC5jaXJjbGV7Ym9yZGVyLXJhZGl1czo1MCV9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5kOmhvdmVyIHNwYW57dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVyLmZvcmNlLW1vYmlsZS1zdHlsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjJlbTt0b3A6MmVtO2JhY2tncm91bmQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjY7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC40KTtib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDRweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNHB4IDVweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTIpIWltcG9ydGFudH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVyLmZvcmNlLW1vYmlsZS1zdHlsZSAubGVnZW5ke2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6LjVlbX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk1OXB4KXsuY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MmVtO3RvcDoyZW07YmFja2dyb3VuZDppbmhlcml0O2NvbG9yOmluaGVyaXQ7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3otaW5kZXg6Njtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjQpO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA0cHggNXB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDEwcHggMCByZ2JhKDAsMCwwLC4xMikhaW1wb3J0YW50fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXIgLmxlZ2VuZHtmb250LXNpemU6MTZweDtwYWRkaW5nOi41ZW19fS5jYXBpYmFyYSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNmMWZmZmV9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFie2NvbG9yOiMzMTNiNTB9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiLmRpc2FibGVke2NvbG9yOnJnYmEoNDksNTksODAsLjUpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5oZWFkZXItdG9we2JhY2tncm91bmQ6IzMxM2I1MH0uY2FwaWJhcmEuZGFyay10aGVtZSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYntjb2xvcjpoc2xhKDAsMCUsMTAwJSwuOCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWIuZGlzYWJsZWR7Y29sb3I6aHNsYSgwLDAlLDEwMCUsLjQpfS5jYXBpYmFyYSAuY29ybmVyLWZvb3Rlcntwb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7bGVmdDowO2JvdHRvbTowO3otaW5kZXg6Mzt3aWR0aDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkpO2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KSotMSk7Ym94LXNpemluZzpib3JkZXItYm94fS5jYXBpYmFyYSAuY29ybmVyLWZvb3RlciAuY29ybmVyLXRpdGxle2xpbmUtaGVpZ2h0OjMwcHg7aGVpZ2h0OmluaGVyaXQ7ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmxlZnQ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIC5jb3JuZXItZm9vdGVye2JhY2tncm91bmQ6Izc4OTA5Yztjb2xvcjojZmZmfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb3JuZXItZm9vdGVye2JhY2tncm91bmQ6IzMxM2I1MDtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYSBuYXYucmlnaHR7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6Y2FsYyh2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSk7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpIC0gdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpKTtvdmVyZmxvdy15OnNjcm9sbDtvdmVyZmxvdy14OmhpZGRlbjt6LWluZGV4OjU7ZGlzcGxheTpub25lO2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZWR9LmNhcGliYXJhIG5hdi5yaWdodCwuY2FwaWJhcmEgbmF2LnJpZ2h0IC5jaGlsZC1uYXYtaXRlbSwuY2FwaWJhcmEgbmF2LnJpZ2h0IC5uYXYtaXRlbXt3aWR0aDp2YXIoLS1uYXYtcmlnaHQtd2lkdGgpfS5jYXBpYmFyYSBuYXYucmlnaHQgLm5hdi1pbnB1dC1jb250YWluZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhIG5hdi5yaWdodCAubmF2LWlucHV0LWNvbnRhaW5lciAuYnV0dG9uLXNlY3Rpb257cGFkZGluZy1ib3R0b206Ljc1ZW07cGFkZGluZy10b3A6Ljc1ZW07cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O2JvdHRvbTowfS5jYXBpYmFyYSBuYXYubGVmdHttaW4taGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpKTtwb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7bGVmdDowO3dpZHRoOmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSk7aGVpZ2h0OmF1dG87ei1pbmRleDoyO2JvcmRlci1yaWdodDoxcHggc29saWQgI2IwYmVjNTtvdmVyZmxvdzp2aXNpYmxlO2JveC1zaGFkb3c6MCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA0cHggNXB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDEwcHggMCByZ2JhKDAsMCwwLC4xMil9LmNhcGliYXJhIG5hdi5sZWZ0IC5jaGlsZC1uYXYtaXRlbSwuY2FwaWJhcmEgbmF2LmxlZnQgLm5hdi1pdGVte3dpZHRoOnZhcigtLW5hdi13aWR0aCl9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW17bWluLXdpZHRoOjI1MHB4O21heC13aWR0aDo1MDBweDt3aWR0aDotd2Via2l0LW1heC1jb250ZW50O3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7bWluLWhlaWdodDo3MHB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6M3JlbTt0b3A6MDtib3JkZXI6MXB4IHNvbGlkIGdyZXk7ei1pbmRleDoyO2JvcmRlci1yYWRpdXM6NXB4O3BhZGRpbmc6MTZweDt0cmFuc2l0aW9uOmFsbCAuM3MgZWFzZTtmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoLjVyZW0gKyB2YXIoLS1pdGVtLWhlaWdodCkpKX0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbS50by1ib3R0b217dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYygtMTAwJSAtIC41cmVtKSl9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1kZXRhaWwgLmRldGFpbC10aXRsZXtmb250LXNpemU6MS4xMjVlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbTo4cHg7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjgwcHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1kZXRhaWwgLmRldGFpbC1zdWJ0aXRsZXtmb250LXNpemU6Ljg3NTttYXJnaW4tYm90dG9tOjhweH0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWRldGFpbCAuaGVhZGVyLWNoaXB7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTZweDt0b3A6MTZweDtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyOjNweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6NXB4fS5jYXBpYmFyYSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5kZXRhaWwtY29udGFpbmVyPmRpdnttYXJnaW46NnB4IDB9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0e3dpZHRoOnZhcigtLWluaXRpYWwtbmF2LXdpZHRoKTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLW5hdi13aWR0aCk7dG9wOjA7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjBiZWM1O2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtsaW5lLWhlaWdodDozNHB4fS5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS10aXRsZSwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tdGl0bGV7ZmxleDoxIDAgYXV0bztwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbCwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29se2ZsZXg6MCAwIHZhcigtLW5hdi1pdGVtLWNvbC13aWR0aCk7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0cHggOHB4fS5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0LC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0e3BhZGRpbmc6MH0uY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD4uaG91ci1pbnB1dCwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD4uaG91ci1pbnB1dHtmb250LXNpemU6Ljg3NWVtO3dpZHRoOmNhbGMoMTAwJSAtIDhweCk7Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6M3B4O2hlaWdodDoyNHB4fS5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0LC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0e3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTouODc1ZW07d2lkdGg6Y2FsYygxMDAlIC0gOHB4KTtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxcHggc29saWQgZ3JleTtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MjRweDttYXJnaW46OHB4IDRweCA0cHg7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuMil9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmZvY3VzLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD5pbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC44KX0uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdHt3aWR0aDp2YXIoLS1leC1uYXYtd2lkdGgpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpKTt0b3A6MDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0sLmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVte2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNiMGJlYzU7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2xpbmUtaGVpZ2h0OjEuNzVyZW19LmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLXRpdGxlLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS10aXRsZXtmbGV4OjEgMCBhdXRvO3BhZGRpbmc6NHB4IDhweH0uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2x7ZmxleDowIDAgdmFyKC0tbmF2LWl0ZW0tY29sLXdpZHRoKTt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQsLmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXR7cGFkZGluZzowfS5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0LC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0e3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTouODc1ZW07d2lkdGg6Y2FsYygxMDAlIC0gOHB4KTtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxcHggc29saWQgZ3JleTtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MjRweDttYXJnaW46OHB4IDRweCA0cHg7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuMil9LmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmZvY3VzLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD5pbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC44KX0uY2FwaWJhcmEgbmF2LmxlZnQgLmNhcC1idG4tbmF2LWxpc3R7bGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpKTt3aWR0aDp2YXIoLS1idG4tbmF2LXdpZHRoKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtvdmVyZmxvdzpoaWRkZW59LmNhcGliYXJhIG5hdi5sZWZ0IC5jYXAtYnRuLW5hdi1saXN0IC5jYXAtYnRuLWNoaWxkLW5hdi1pdGVtIC5jYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnQsLmNhcGliYXJhIG5hdi5sZWZ0IC5jYXAtYnRuLW5hdi1saXN0IC5jYXAtYnRuLW5hdi1pdGVtIC5jYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnR7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTt3aWR0aDppbmhlcml0O3BhZGRpbmc6NHB4IDZweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjBiZWM1O3RleHQtYWxpZ246cmlnaHR9LmNhcGliYXJhIG5hdi5sZWZ0IC5uYXYtaXRlbS10b3RhbC1mb290ZXJ7cGFkZGluZy10b3A6M3B4fS5jYXBpYmFyYSBuYXYgLmNhcC1idG4tbmF2LWl0ZW0ucGFyZW50LC5jYXBpYmFyYSBuYXYgLmV4LW5hdi1pdGVtLnBhcmVudCwuY2FwaWJhcmEgbmF2IC5pbml0aWFsLW5hdi1pdGVtLnBhcmVudCwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1jb250YWluZXIucGFyZW50e2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC4xKX0uY2FwaWJhcmEgbmF2IC5jYXAtYnRuLW5hdi1pdGVtLnBhcmVudD4uaXRlbS10aXRsZSwuY2FwaWJhcmEgbmF2IC5leC1uYXYtaXRlbS5wYXJlbnQ+Lml0ZW0tdGl0bGUsLmNhcGliYXJhIG5hdiAuaW5pdGlhbC1uYXYtaXRlbS5wYXJlbnQ+Lml0ZW0tdGl0bGUsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tY29udGFpbmVyLnBhcmVudD4uaXRlbS10aXRsZXttYXgtd2lkdGg6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpIC0gNjBweCk7d2lkdGg6YXV0b30uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbXttaW4taGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjBiZWM1O2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCl9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29uLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLnRyZWUtaWNvbnt0cmFuc2l0aW9uOmFsbCAuNXMgZWFzZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO3dpZHRoOjM0cHg7ZmxleDowIDAgMzRweDtmb250LXNpemU6MS41ZW07dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXJ9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29uOmZvY3VzLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLnRyZWUtaWNvbjpmb2N1c3tib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5uYXYtaXRlbS1pY29uLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb257ZmxleDowIDAgMzRweDtmb250LXNpemU6MS4xMjVlbTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6NDBweDttYXJnaW4tdG9wOjEycHh9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAubmF2LWl0ZW0taWNvbiBwYXRoLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb24gcGF0aHt3aWR0aDoyMHB4O2hlaWdodDoyMHB4fS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZXtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6Z3JpZDtmb250LXNpemU6MWVtO2xpbmUtaGVpZ2h0OjM0cHg7cGFkZGluZzo0cHggOHB4fS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuZnVsbC13aWR0aCwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlLmZ1bGwtd2lkdGh7ZmxleDoxIDAgYXV0bztkaXNwbGF5OmlubGluZS1ibG9ja30uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlLmNsaWNrZWFibGUsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZS5jbGlja2VhYmxle2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuY2xpY2tlYWJsZTpob3ZlciwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlLmNsaWNrZWFibGU6aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjIpIWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuaG92ZXJhYmxlOmhvdmVyLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuaG92ZXJhYmxlOmhvdmVye2JhY2tncm91bmQ6aHNsYSgwLDAlLDM5LjIlLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhIG5hdiAubXVsdGlidXR0b25zLWJ0bntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2NvbG9yOiM5OTk7Zm9udC1zaXplOjEuNWVtO2N1cnNvcjpwb2ludGVyO21pbi13aWR0aDozOHB4O21heC1oZWlnaHQ6MzhweDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jYXBpYmFyYSBuYXYgLm11bHRpYnV0dG9ucy1idG46aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjIpfS5jYXBpYmFyYS5leHRlbmRlZC1yaWdodCBuYXYucmlnaHR7ZGlzcGxheTpibG9ja30uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIG5hdi5sZWZ0e21pbi1oZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSl9LmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCBuYXYucmlnaHR7dG9wOmNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1oZWFkZXItdG9wLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSk7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpIC0gdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpIC0gdmFyKC0tZXgtaGVhZGVyLWhlaWdodCkpfS5jYXBpYmFyYSBuYXYubGVmdCwuY2FwaWJhcmEgbmF2LnJpZ2h0LC5jYXBpYmFyYSBuYXYucmlnaHQgLmJ1dHRvbi1zZWN0aW9ue2JhY2tncm91bmQ6I2ZhZmFmYX0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMik7YmFja2dyb3VuZDojZmZmfS5jYXBpYmFyYSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5oZWFkZXItY2hpcC5yZWQtbGlnaHR7Ym9yZGVyLWNvbG9yOiNmODQ3NDd9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1jaGlwLnllbGxvdy1saWdodHtib3JkZXItY29sb3I6I2ZkZDgzNX0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWNoaXAuZ3JlZW4tbGlnaHR7Ym9yZGVyLWNvbG9yOiMzODk5M2R9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29uLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLnRyZWUtaWNvbntjb2xvcjojMzc0NzRmfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb24sLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAubmF2LWl0ZW0taWNvbntjb2xvcjpyZ2JhKDU1LDcxLDc5LC4yKX0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYucmlnaHQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LnJpZ2h0IC5idXR0b24tc2VjdGlvbntiYWNrZ3JvdW5kOiMyMjI4Mzd9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnR7YmFja2dyb3VuZDojMjIyODM3O2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbXtib3JkZXItY29sb3I6IzQwNGU2OTtiYWNrZ3JvdW5kOiMyMjI4Mzd9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWNoaXB7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5oZWFkZXItY2hpcC5yZWQtbGlnaHR7Ym9yZGVyLWNvbG9yOiNhYTFhMWF9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWNoaXAueWVsbG93LWxpZ2h0e2JvcmRlci1jb2xvcjojZmJjZDAwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1jaGlwLmdyZWVuLWxpZ2h0e2JvcmRlci1jb2xvcjojMzg4ZTNjfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmV4LW5hdi1pdGVtLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVte2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dHtiYWNrZ3JvdW5kOiM0MDRlNjk7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3Vze2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjIpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5jYXAtYnRuLW5hdi1saXN0IC5jYXAtYnRuLWNoaWxkLW5hdi1pdGVtIC5jYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmNhcC1idG4tbmF2LWxpc3QgLmNhcC1idG4tbmF2LWl0ZW0gLmNhcC1idG4tbmF2LWl0ZW0tY29udGVudCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVye2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC50cmVlLWljb24sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC50cmVlLWljb257Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb24sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5uYXYtaXRlbS1pY29ue2NvbG9yOmhzbGEoMCwwJSw5NC4xJSwuMil9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVye2hlaWdodDp2YXIoLS1oZWFkZXItaGVpZ2h0KTt3aWR0aDotd2Via2l0LWZpdC1jb250ZW50O3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnQ7dG9wOjA7bWluLXdpZHRoOjEwMCU7cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O3otaW5kZXg6Mztib3JkZXItYm90dG9tOjJweCBzb2xpZCBncmV5O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2hhZG93OjAgMnB4IDRweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNHB4IDVweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZHtoZWlnaHQ6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdHtwYWRkaW5nOjFweCAwO2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3Q6bm90KC5wZXJzaXN0ZW50KXtkaXNwbGF5Om5vbmV9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0PmRpdnt3aWR0aDp2YXIoLS1kYXktd2lkdGgpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdD5kaXY+c3BhbntkaXNwbGF5OmJsb2NrO3dpZHRoOmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0taGVhZGVyLWlucHV0LWhlaWdodCk7aGVpZ2h0OnZhcigtLWhlYWRlci1pbnB1dC1oZWlnaHQpO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTouODc1ZW19LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0IC5kaWEtaW5wdXQgaW5wdXR7d2lkdGg6aW5oZXJpdDtoZWlnaHQ6dmFyKC0taGVhZGVyLWlucHV0LWhlaWdodCk7Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjUpO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTouODc1ZW19LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0IC5kaWEtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCAuZGlhLWlucHV0IGlucHV0OmZvY3Vze2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjgpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6dmFyKC0taGVhZGVyLWxhYmVscy1oZWlnaHQpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lciAuaGVhZGVyLWl0ZW17cGFkZGluZzo2cHggOHB4O21pbi13aWR0aDp2YXIoLS1pdGVtLW1pbi13aWR0aCk7aGVpZ2h0OnZhcigtLWhlYWRlci1oZWlnaHQpO3RleHQtYWxpZ246Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItbGVmdDoxcHggc29saWQgcmdiYSgwLDAsMCwuMSl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyIC5oZWFkZXItaXRlbSBzcGFuLmJvdHRvbS10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206OHB4O3dpZHRoOjEwMCV9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW97ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6LXdlYmtpdC1tYXgtY29udGVudDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5hZ25ve3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTtsZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjMycHg7Zm9udC1zaXplOi43NWVtO21hcmdpbi10b3A6NHB4fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXNlc3tkaXNwbGF5OmJsb2NrO2Rpc3BsYXk6ZmxleH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW97ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOnZhcigtLWRheS13aWR0aCl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXN7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkpO3BhZGRpbmctbGVmdDouNWVtO3BhZGRpbmctcmlnaHQ6MmVtO2ZvbnQtc2l6ZTouODc1ZW07bWFyZ2luLXRvcDo2cHh9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWR7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTttYXgtd2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtvdmVyZmxvdzpoaWRkZW59LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWQubWVzLXJlZHVjZWQtMnt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkqMik7bWF4LXdpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSoyKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLm1lcy5tZXMtcmVkdWNlZC5tZXMtcmVkdWNlZC0ze3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSozKTttYXgtd2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpKjMpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAubWVzLm1lcy1yZWR1Y2VkLm1lcy1yZWR1Y2VkLTR7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpKjQpO21heC13aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkqNCl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWQgLm1lcy1sYWJlbHt3aWR0aDotd2Via2l0LW1heC1jb250ZW50O3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCxyZWQpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7aGVpZ2h0OjEwMCU7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpLzIpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhc3tkaXNwbGF5OmZsZXg7bWFyZ2luLXRvcDo1cHh9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpb3t3aWR0aDp2YXIoLS1kYXktd2lkdGgpO2hlaWdodDp2YXIoLS1oZWFkZXItZGF5LWhlaWdodCk7dmVydGljYWwtYWxpZ246Ym90dG9tO2ZvbnQtc2l6ZTouODc1ZW07Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo0cHggNnB4O3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uaXMtY2xpY2tlYWJsZXtjdXJzb3I6cG9pbnRlcn0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLmhhcy1hbGVydDphZnRlcntjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MDtyaWdodDowO3RvcDowO2JvcmRlci1jb2xvcjpyZWQgcmVkIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6NnB4O3otaW5kZXg6MX0uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb250YWluZXItdGwgaGVhZGVye2hlaWdodDpjYWxjKHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0tZXgtaGVhZGVyLWhlaWdodCkpfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3Q6bm90KC5wZXJzaXN0ZW50KXtkaXNwbGF5OmZsZXh9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2YxZmZmZTtjb2xvcjojMzc0NzRmfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNmMWZmZmUpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8ud2Vla2VuZHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpO2NvbG9yOiMyNjMyMzh9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby50b2RheXtiYWNrZ3JvdW5kOnJnYmEoMjI5LDU3LDUzLC45KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uYWN0aXZle2JhY2tncm91bmQ6Z3JlZW47Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLmlzLWNsaWNrZWFibGU6aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjQpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uaXMtY2xpY2tlYWJsZTphY3RpdmV7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjYpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCAuZGlhLWlucHV0IGlucHV0LC5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCBkaXY+c3Bhbntjb2xvcjojMzEzYjUwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6IzMxM2I1MDtjb2xvcjojZjBmMGYwO2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjMzEzYjUwKX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW97Ym9yZGVyLWNvbG9yOnJnYmEoNjQsNzgsMTA1LC42KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8ud2Vla2VuZHtiYWNrZ3JvdW5kOiMyMjI4Mzc7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8udG9kYXl7YmFja2dyb3VuZDpyZ2JhKDE4MywyOCwyOCwuNik7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uYWN0aXZle2JhY2tncm91bmQ6cmdiYSg1NiwxNDIsNjAsLjYpO2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLmlzLWNsaWNrZWFibGU6aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjQpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby5pcy1jbGlja2VhYmxlOmFjdGl2ZXtiYWNrZ3JvdW5kOmhzbGEoMCwwJSwzOS4yJSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgZGl2PnNwYW57Y29sb3I6aHNsYSgwLDAlLDEwMCUsLjgpIWltcG9ydGFudH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCAuZGlhLWlucHV0IGlucHV0e2JhY2tncm91bmQ6cmdiYSg2NCw3OCwxMDUsLjYpO2NvbG9yOmhzbGEoMCwwJSwxMDAlLC44KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiMzMTNiNTB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgLmRpYS1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgLmRpYS1pbnB1dCBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC4yKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAucGxvdC12ZXJ0aWNhbC1jb250YWluZXJ7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSl9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnBsb3QtdmVydGljYWwtY29udGFpbmVyIC5wbG90LXZlcnRpY2Fse2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMyk7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6Y2FsYygxMDB2aCAtIHZhcigtLWhlYWRlci1oZWlnaHQpIC0gdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnBsb3QtdmVydGljYWwtY29udGFpbmVyIC5wbG90LXZlcnRpY2FsLnJhaW57YmFja2dyb3VuZDpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDUzZGVnLHJnYmEoMywxNTUsMjI5LC4yKSxyZ2JhKDMsMTU1LDIyOSwuMikgNXB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQgMTJweCl9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnBsb3QtaG9yaXpvbnRhbC1jb250YWluZXJ7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSl9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnBsb3QtaG9yaXpvbnRhbC1jb250YWluZXIgLnBsb3QtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMpO3dpZHRoOjEwMHZ3O2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC5wbG90LWhvcml6b250YWwtY29udGFpbmVyIC5wbG90LWhvcml6b250YWwucGxvdC1wYXJlbnR7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjEpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsLmV4dGVuZGVkLXJpZ2h0IC5jb250YWluZXItdGwgLnBsb3QtY29udGFpbmVyIC5wbG90LXZlcnRpY2Fse2hlaWdodDpjYWxjKDEwMHZoIC0gdmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSl9LmNhcGliYXJhIC5jb250YWluZXItdGwgZm9vdGVye3dpZHRoOi13ZWJraXQtZml0LWNvbnRlbnQ7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudDtib3R0b206MDttaW4td2lkdGg6MTAwJTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTt6LWluZGV4OjI7Ym94LXNpemluZzpib3JkZXItYm94fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGZvb3RlciAuZm9vdGVyLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjEwMCU7ZGlzcGxheTpmbGV4fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGZvb3RlciAuZm9vdGVyLWNvbnRhaW5lciAuZm9vdGVyLWl0ZW17cGFkZGluZzoxMHB4IDJweDt3aWR0aDp2YXIoLS1kYXktd2lkdGgpO2N1cnNvcjpkZWZhdWx0O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTt0ZXh0LWFsaWduOmNlbnRlcn0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBmb290ZXJ7YmFja2dyb3VuZDojNzg5MDljO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5jb250YWluZXItdGwuZGFyay10aGVtZSBmb290ZXJ7YmFja2dyb3VuZDojMzEzYjUwO2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTt0b3A6dmFyKC0taGVhZGVyLWhlaWdodCk7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbmF2LXdpZHRoKSAtIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSAtIHZhcigtLWV4LW5hdi13aWR0aCkgLSB2YXIoLS1idG4tbmF2LXdpZHRoKSk7bWF4LWhlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSk7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpKTttYXJnaW4tdG9wOi0xcHh9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5kYXktbW91c2Utb3Zlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO2JvcmRlcjozcHggc29saWQgcmdiYSgyNDUsMTI0LDAsLjUpO2JveC1zaGFkb3c6MCAwIDJweCAjZjU3YzAwLGluc2V0IDAgMCAzcHggI2Y1N2MwMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFzZTtvdmVyZmxvdzp2aXNpYmxlO3dpbGwtY2hhbmdlOnRyYW5zZm9ybX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudGFibGUgLmRheS1tb3VzZS1vdmVyOmFmdGVyLC5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50YWJsZSAuZGF5LW1vdXNlLW92ZXI6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6cmdiYSgyNDUsMTI0LDAsLjEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudGFibGUgLmRheS1tb3VzZS1vdmVyOmFmdGVye3dpZHRoOnZhcigtLWRheS13aWR0aCk7aGVpZ2h0OjEwMHZoO3JpZ2h0Oi00cHg7Ym90dG9tOmNhbGModmFyKC0taXRlbS1oZWlnaHQpIC0gMnB4KX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudGFibGUgLmRheS1tb3VzZS1vdmVyOmJlZm9yZXtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3dpZHRoOjEwMHZ3O3JpZ2h0OmNhbGModmFyKC0tZGF5LXdpZHRoKSAtIDJweCk7Ym90dG9tOi00cHh9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5iYWNrZ3JvdW5kLWdyaWR7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpKjIwKTtoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkqMjApO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MXB4O2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6dmFyKC0tZGF5LXdpZHRoKSB2YXIoLS1pdGVtLWhlaWdodCksY2FsYyh2YXIoLS1kYXktd2lkdGgpKjcpIHZhcigtLWl0ZW0taGVpZ2h0KSxjYWxjKHZhcigtLWRheS13aWR0aCkqNykgdmFyKC0taXRlbS1oZWlnaHQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLHJnYmEoODAsODAsODAsLjMpIDFweCx0cmFuc3BhcmVudCAwKSxsaW5lYXItZ3JhZGllbnQoMGRlZyxyZ2JhKDgwLDgwLDgwLC4zKSAxcHgsdHJhbnNwYXJlbnQgMCksbGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50IGNhbGModmFyKC0tZGF5LXdpZHRoKSo1KSxyZ2JhKDgwLDgwLDgwLC4xKSAwKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCwwIDAsMCAwfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50YWJsZSAuZHJhdy1ib3h7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5kcmF3LWJveCBjYW52YXN7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvbnRhaW5lci10bCAudGFibGV7dG9wOmNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSl9LmNhcGliYXJhIC5zZWxlY3QtY29udGFpbmVye292ZXJmbG93OnZpc2libGU7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjA7aGVpZ2h0OjB9LmNhcGliYXJhIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6aHNsYSgwLDAlLDc0LjElLC40KTtib3gtc2hhZG93Omluc2V0IDAgMCA1cHggaHNsYSgwLDAlLDc0LjElLC44KX0uY2FwaWJhcmEgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheVtjYXAtYmFkZ2VdOmFmdGVye2NvbnRlbnQ6YXR0cihjYXAtYmFkZ2UpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTNweDt0b3A6LTNweDtiYWNrZ3JvdW5kOiMxNTY1YzA7Zm9udC1zaXplOi43NWVtO2NvbG9yOiNmZmY7d2lkdGg6MS41ZW07aGVpZ2h0OjEuNWVtO2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6Mjt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo3MDA7cGFkZGluZzoycHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5e21pbi1oZWlnaHQ6NTBweDttaW4td2lkdGg6MjUwcHg7bWF4LXdpZHRoOjQwMHB4O2JvcmRlcjoxcHggc29saWQgZ3JleTtwYWRkaW5nOi43NWVtO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDttYXJnaW46MCAwIDAgMWVtO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NXB4O3RyYW5zaXRpb246YWxsIC4zcyBlYXNlO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxsZWZ0LHRvcDt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS8yKi0xKSk7ei1pbmRleDo0O29wYWNpdHk6MX0uY2FwaWJhcmEgLmRldGFpbC1kYXk6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtiYWNrZ3JvdW5kOmluaGVyaXQ7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExcHg7dG9wOmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzIgKyA3cHgpO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO2JvcmRlci1jb2xvcjpncmV5O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MCAwIDFweCAxcHh9LmNhcGliYXJhIC5kZXRhaWwtZGF5LmRkLWhpZGV7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtcmlnaHQtYXJyb3d7bWFyZ2luOjAgMTZweCAwIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygtMTAwJSAtIDIwcHggLSB2YXIoLS1kYXktd2lkdGgpKSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS8yKi0xKSl9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1yaWdodC1hcnJvdzphZnRlcntib3JkZXItd2lkdGg6MXB4IDFweCAwIDA7bGVmdDp1bnNldDtyaWdodDotMTFweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLWNlaWwtYXJyb3d7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTdweCl9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1jZWlsLWFycm93OmFmdGVye3RvcDo2cHh9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1jZWlsLWFycm93Lmhhcy1yaWdodC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC0xMDAlIC0gMjBweCAtIHZhcigtLWRheS13aWR0aCkpKSB0cmFuc2xhdGVZKC03cHgpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtY2VpbC1hcnJvdy5oYXMtcmlnaHQtYXJyb3c6YWZ0ZXJ7bGVmdDp1bnNldDtyaWdodDotMTFweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLW1pZGRsZS1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKC01MCUgKyB2YXIoLS1pdGVtLWhlaWdodCkvMikpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtbWlkZGxlLWFycm93OmFmdGVye3RvcDpjYWxjKDUwJSAtIDEwcHgpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtbWlkZGxlLWFycm93Lmhhcy1yaWdodC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC0xMDAlIC0gMjBweCAtIHZhcigtLWRheS13aWR0aCkpKSB0cmFuc2xhdGVZKGNhbGMoLTUwJSArIHZhcigtLWl0ZW0taGVpZ2h0KS8yKSl9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1taWRkbGUtYXJyb3cuaGFzLXJpZ2h0LWFycm93OmFmdGVye2xlZnQ6dW5zZXQ7cmlnaHQ6LTExcHh9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1ib3R0b20tYXJyb3d7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYygtMTAwJSArIHZhcigtLWl0ZW0taGVpZ2h0KSkpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtYm90dG9tLWFycm93OmFmdGVye3RvcDp1bnNldDtib3R0b206NHB4fS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtYm90dG9tLWFycm93Lmhhcy1yaWdodC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC0xMDAlIC0gMjBweCAtIHZhcigtLWRheS13aWR0aCkpKSB0cmFuc2xhdGVZKGNhbGMoLTEwMCUgKyB2YXIoLS1pdGVtLWhlaWdodCkpKX0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLWJvdHRvbS1hcnJvdy5oYXMtcmlnaHQtYXJyb3c6YWZ0ZXJ7bGVmdDp1bnNldDtyaWdodDotMTFweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmhlYWRlci1kZXRhaWwgLnRpdGxle2ZvbnQtc2l6ZToxLjI1ZW07Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206LjI1ZW07bWluLXdpZHRoOjEwZW07bWF4LXdpZHRoOjIwZW07bGluZS1oZWlnaHQ6dW5zZXR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5oZWFkZXItZGV0YWlsIC5zdWJ0aXRsZXtmb250LXNpemU6Ljg3NWVtO21hcmdpbi1ib3R0b206OHB4O21pbi13aWR0aDoxMGVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWx7bWFyZ2luOjA7ZmxleDowIDAgYXV0b30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlse21hcmdpbjowO2ZvbnQtc2l6ZTouODc1ZW07cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzouNWVtIC41ZW0gLjVlbSAxZW07Ym9yZGVyLXJhZGl1czowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6dW5zZXQ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb257d2lkdGg6OHB4O2hlaWdodDo4cHg7bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnQ7bGVmdDoxcHg7dG9wOjEwcHg7Ym9yZGVyLXJhZGl1czo1MCV9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAubGVmdC1pY29uLmRpYW1vbmR7Ym9yZGVyLXJhZGl1czowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHNrZXcoMTBkZWcsMTBkZWcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLmxlZnQtaWNvbi5vdXRsaW5lZHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLmxlZnQtaWNvbi50cmlhbmdsZXtib3JkZXItcmFkaXVzOjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgc2tldygxMGRlZywxMGRlZykgdHJhbnNsYXRlKDNweCwzcHgpO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLXdpZHRoOjVweDtib3JkZXItc3R5bGU6c29saWQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24uc2hpZWxke3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czowIDAgNTAlIDUwJX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5uYW1le2ZsZXg6MCAxIDQwJTtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctcmlnaHQ6MWVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb257ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0YXJ0fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2N7ZGlzcGxheTpmbGV4O21hcmdpbi1ib3R0b206M3B4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MuZGVzYy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0YXJ0O3dpZHRoOjEwMCU7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHg7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDttYXJnaW4tYm90dG9tOjA7cGFkZGluZy1ib3R0b206MH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjLmRlc2MtY29sdW1uOmxhc3QtY2hpbGR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MuZGVzYy1jb2x1bW4gLmxhYmVse21hcmdpbi1yaWdodDowfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MgLmxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXg6MSAxIDY1JTtmb250LXdlaWdodDo3MDA7bWFyZ2luLXJpZ2h0Oi41ZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYyAudmFse2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTttYXJnaW4tbGVmdDoxZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYyAucHJlZml4LC5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MgLnN1ZmZpeHtmb250LXNpemU6Ljg1ZW07ZmxleDowIDAgYXV0b30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjIC52YWx1ZTpub3QoZW1wdHkpe21hcmdpbi1yaWdodDouMmVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2Mgc3Vwe3RvcDotMWVtIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmZsZXh7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQ7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWZsb3c6d3JhcDstbXMtd3JpdGluZy1tb2RlOnRiLWxyO3dyaXRpbmctbW9kZTp2ZXJ0aWNhbC1scjttYXgtaGVpZ2h0OjI1JX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmZsZXggLml0ZW0tZGV0YWlse2ZsZXg6MCAwIGF1dG87bWluLXdpZHRoOjhlbTstbXMtd3JpdGluZy1tb2RlOmxyLXRiO3dyaXRpbmctbW9kZTpob3Jpem9udGFsLXRifS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwuY29sdW1uey1tb3otY29sdW1uczo3ZW0gMztjb2x1bW5zOjdlbSAzO21pbi13aWR0aDozMGVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwuY29sdW1uIC5pdGVtLWRldGFpbHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlse21hcmdpbjo0cHg7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzouNWVtIDFlbTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVufS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5uYW1le2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOi41ZW07Y29sb3I6dmFyKC0tbG9jYWwtY29sb3ItZm9udCxpbmhlcml0KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYyAubGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6NzAwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb257bWluLWhlaWdodDoxMHB4O2hlaWdodDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbCAubGVmdC1pY29uLnRyaWFuZ2xle2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24uc2hpZWxke2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsZ3JleSl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5lbGVtZW50cy1kZXRhaWx7cGFkZGluZzouNWVtIDAgLjI1ZW07ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuZWxlbWVudHMtZGV0YWlsIC5uYW1le2ZsZXg6MSAwIDEwMCU7Zm9udC13ZWlnaHQ6NzAwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuZWxlbWVudHMtZGV0YWlsIC5lbGVtZW50cy1saXN0e21hcmdpbjo0cHggLTRweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmVsZW1lbnRzLWRldGFpbCAuZWxlbWVudHMtbGlzdCAuZWxlbWVudC1kZXRhaWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzouMjVlbSAuODc1ZW07Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6I2ZmZjttYXJnaW46LjI1ZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5hbGVydHtwYWRkaW5nOi41ZW0gMCAuMjVlbSAyZW07cG9zaXRpb246cmVsYXRpdmU7bWluLXdpZHRoOjE1ZW07bWluLXdpZHRoOjEwZW07bWF4LXdpZHRoOjMwZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5hbGVydCAuYWxlcnQtaWNvbnttYXgtd2lkdGg6MmVtO2ZvbnQtc2l6ZToxLjc1ZW07cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDouNWVtO2NvbG9yOmdyZXl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5hbGVydCAucmVke2NvbG9yOiNmNDQzMzZ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVye21hcmdpbjowIC0uNzhlbSAtLjc1ZW07Ym9yZGVyOjFweCBzb2xpZCBncmV5O3otaW5kZXg6Mn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLm1zai1jb250YWluZXIgcHJle3doaXRlLXNwYWNlOnByZS13cmFwO3doaXRlLXNwYWNlOi1tb3otcHJlLXdyYXA7d2hpdGUtc3BhY2U6LXByZS13cmFwO3doaXRlLXNwYWNlOi1vLXByZS13cmFwO3dvcmQtd3JhcDpicmVhay13b3JkfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lciAubXNqe21pbi13aWR0aDoxMGVtO21heC13aWR0aDozMGVtO21hcmdpbjowIDAgLjVlbTtwYWRkaW5nOi43NWVtO2ZvbnQtc2l6ZTouODc1ZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVyIC5tc2otZGV0YWlse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzouMjVlbSAuNWVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lciAubXNqLWRldGFpbCAuZW1haWx7Zm9udC1zaXplOi44NzVlbTtmb250LXN0eWxlOml0YWxpYztvcGFjaXR5Oi41fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lciAubXNqLWRldGFpbCAuZGF0ZXtmb250LXNpemU6LjcyNWVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheXtjb2xvcjojMzc0NzRmO2JhY2tncm91bmQ6I2ZmZn0uY2FwaWJhcmEgLmRldGFpbC1kYXksLmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCwuY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5kZXNjLWNvbHVtbiwuY2FwaWJhcmEgLmRldGFpbC1kYXk6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjIpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuZWxlbWVudHMtZGV0YWlsIC5lbGVtZW50cy1saXN0IC5lbGVtZW50LWRldGFpbHtiYWNrZ3JvdW5kOnJnYmEoNTUsNzEsNzksLjgpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNmZmVjYjM7Ym9yZGVyLWNvbG9yOiNmZmNhMjh9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVyIC5tc2otZGV0YWlse2JhY2tncm91bmQ6I2ZmZTA4Mjtib3JkZXItY29sb3I6I2ZmY2EyOH0uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheXtjb2xvcjojZjBmMGYwO2JvcmRlci1jb2xvcjojNDA0ZTY5O2JhY2tncm91bmQ6IzIyMjgzN30uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheTphZnRlcntib3JkZXItY29sb3I6IzQwNGU2OX0uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlse2JhY2tncm91bmQ6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCwuY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLmRlc2MtY29sdW1ue2JvcmRlci1jb2xvcjojNDA0ZTY5fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5kZXRhaWwtZGF5IC5lbGVtZW50cy1kZXRhaWwgLmVsZW1lbnRzLWxpc3QgLmVsZW1lbnQtZGV0YWlse2JhY2tncm91bmQ6IzI5MzI0M30uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiMyOTMyNDM7Ym9yZGVyLWNvbG9yOnJnYmEoMjUxLDE5Miw0NSwuNCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmRldGFpbC1kYXkgLm1zai1jb250YWluZXIgLm1zai1kZXRhaWx7YmFja2dyb3VuZDpyZ2JhKDI1MSwxOTIsNDUsLjEpfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3otaW5kZXg6MTA7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLGxlZnQsdG9wfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIuY20taGlkZSAuY2FwLWNvbnRleHQtbWVudXt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjB9LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudXtwb3NpdGlvbjphYnNvbHV0ZTttaW4td2lkdGg6MjUwcHg7ei1pbmRleDoyO2JvcmRlci1yYWRpdXM6NXB4O2JvcmRlcjoxcHggc29saWQgZ3JleTtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKTtmb250LXNpemU6Ljc1ZW07dHJhbnNpdGlvbjphbGwgLjFzIGxpbmVhcjt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO3BhZGRpbmc6LjRlbSAwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2FwaWJhcmEgLmNhcC1jb250ZXh0LW1lbnUtY29udGFpbmVyIC5jYXAtY29udGV4dC1tZW51X2l0ZW17cGFkZGluZzouNWVtIDFlbTtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjAsLjIpfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbS5pcy1kaXNhYmxlZHtvcGFjaXR5Oi41O2N1cnNvcjp1bnNldH0uY2FwaWJhcmEgLmNhcC1jb250ZXh0LW1lbnUtY29udGFpbmVyIC5jYXAtY29udGV4dC1tZW51X2l0ZW0uaXMtZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDpub25lfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbS5pcy1kaXZpZGVye2N1cnNvcjp1bnNldDtoZWlnaHQ6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDIwLDIwLDIwLC4yKTtwYWRkaW5nOjA7bWFyZ2luOi4zZW0gMWVtfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbV9pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXg6MCAwIGF1dG87cGFkZGluZy1yaWdodDouNWVtfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbV9pY29uIHN2Z3t3aWR0aDoxNnB4O2hlaWdodDoxNnB4fS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnV7Y29sb3I6IzM3NDc0Zjtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMik7YmFja2dyb3VuZDojZmZmfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnUgc3ZnIHBhdGh7ZmlsbDojMzc0NzRmfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudXtjb2xvcjojZjBmMGYwO2JvcmRlci1jb2xvcjojNDA0ZTY5O2JhY2tncm91bmQ6IzIyMjgzN30uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnUgc3ZnIHBhdGh7ZmlsbDojZjBmMGYwfS5jYXBpYmFyYSAuaG91ci1pbnB1dHtib3JkZXI6MXB4IHNvbGlkIGdyZXk7Ym9yZGVyLXJhZGl1czozcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyNHB4O21hcmdpbjo4cHggNHB4O292ZXJmbG93OmhpZGRlbn0uY2FwaWJhcmEgLmhvdXItaW5wdXQgaW5wdXR7d2lkdGg6NTAlO2hlaWdodDppbmhlcml0O2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtmb250LXNpemU6Ljg3NWVtfS5jYXBpYmFyYSAuaG91ci1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhIC5ob3VyLWlucHV0IGlucHV0OmZvY3Vze2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMSl9LmNhcGliYXJhIC5ob3VyLWlucHV0IHNwYW57d2lkdGg6OHB4O3RleHQtYWxpZ246Y2VudGVyfS5jYXBpYmFyYSAuaG91ci1pbnB1dCAuaGh7dGV4dC1hbGlnbjpyaWdodH0uY2FwaWJhcmEgLnRpbWV7Ym9yZGVyLXJhZGl1czo2cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjB9LmNhcGliYXJhIC50aW1lIC5zeW1ib2x7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OmF1dG87d2lkdGg6MjBweDtmb250LXNpemU6MnJlbTt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhIC50aW1lIGlucHV0e2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7d2lkdGg6NjJweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MnJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtwYWRkaW5nOjZweH0uY2FwaWJhcmEgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAudGltZSBpbnB1dDpmb2N1c3t0cmFuc2Zvcm06c2NhbGUoMS4wNil9LmNhcGliYXJhIC50aW1lIGlucHV0OmludmFsaWR7Ym9yZGVyOjJweCBzb2xpZCByZWR9LmNhcGliYXJhIC5idXR0b25zLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNhcGliYXJhIC5idXR0b25zLWdyb3VwIGJ1dHRvbi5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLXJhZGl1czowO21hcmdpbjowIC0ycHggMCAwfS5jYXBpYmFyYSAuYnV0dG9ucy1ncm91cCBidXR0b24uY2FwLWJ0bi1vdXRsaW5lOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXJhZGl1czo2cHggMCAwIDZweDttYXJnaW4tbGVmdDo0cHh9LmNhcGliYXJhIC5idXR0b25zLWdyb3VwIGJ1dHRvbi5jYXAtYnRuLW91dGxpbmU6bGFzdC1vZi10eXBle2JvcmRlci1yYWRpdXM6MCA2cHggNnB4IDA7bWFyZ2luLXJpZ2h0OjRweH0uY2FwaWJhcmEgLmlucHV0LWJveC10YWItY29udGFpbmVye2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO2ZsZXgtd3JhcDpub3dyYXA7Ym9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDtib3JkZXI6c29saWQgZ3JleTtib3JkZXItd2lkdGg6MnB4IDJweCAwfS5jYXBpYmFyYSAuaW5wdXQtYm94LXRhYi1jb250YWluZXIgLmlucHV0LWJveC10YWJ7ZmxleDoxIDEgYXV0bztwYWRkaW5nOi4zZW0gMWVtO2ZvbnQtc2l6ZTouOWVtO2JvcmRlci1yaWdodDoxcHggc29saWQgZ3JleTtjdXJzb3I6cG9pbnRlcn0uY2FwaWJhcmEgLmlucHV0LWJveC10YWItY29udGFpbmVyIC5pbnB1dC1ib3gtdGFiLmFjdGl2ZXtiYWNrZ3JvdW5kOmhzbGEoMCwwJSw1OC44JSwuMyl9LmNhcGliYXJhIC5pbnB1dC1ib3gtdGFiLWNvbnRhaW5lciAuaW5wdXQtYm94LXRhYjpsYXN0LWNoaWxke2JvcmRlci1yaWdodDpub25lfS5jYXBpYmFyYSAuaW5wdXQtYm94LXRhYi1jb250YWluZXIrLmlucHV0LWJveHtib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4fS5jYXBpYmFyYSAuaW5wdXQtYm94e21hcmdpbjowIDE2cHg7bWluLWhlaWdodDoxODBweDtib3JkZXI6MnB4IHNvbGlkIGdyZXk7Ym9yZGVyLXJhZGl1czo2cHg7b3ZlcmZsb3cteTpzY3JvbGw7cGFkZGluZy1ib3R0b206NjBweDt3aWR0aDoxMDAlO21heC1oZWlnaHQ6MzAwcHh9LmNhcGliYXJhIC5pbnB1dC1ib3ggLnNlYXJjaC1pbnB1dC1jb250YWluZXJ7cGFkZGluZzouM2VtO21heC13aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIGhzbGEoMCwwJSwzOS4yJSwuMyk7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5pbnB1dC1ib3ggLnNlYXJjaC1pbnB1dC1jb250YWluZXIgLnNlYXJjaC1pbnB1dHtib3JkZXI6MXB4IHNvbGlkICM2NDY0NjQ7Ym9yZGVyLXJhZGl1czoxM3B4O2hlaWdodDoyNnB4O3BhZGRpbmc6LjVlbSAxZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtmb250LXNpemU6LjhlbTtjb2xvcjppbmhlcml0fS5jYXBpYmFyYSAuaW5wdXQtYm94IC5zZWFyY2gtaW5wdXQtY29udGFpbmVyIC5zZWFyY2gtaW5wdXQ6LW1vei1wbGFjZWhvbGRlci1zaG93bisuc2VhcmNoLWlucHV0LWNsZWFye2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmlucHV0LWJveCAuc2VhcmNoLWlucHV0LWNvbnRhaW5lciAuc2VhcmNoLWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcisuc2VhcmNoLWlucHV0LWNsZWFye2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmlucHV0LWJveCAuc2VhcmNoLWlucHV0LWNvbnRhaW5lciAuc2VhcmNoLWlucHV0OnBsYWNlaG9sZGVyLXNob3duKy5zZWFyY2gtaW5wdXQtY2xlYXJ7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5zZWFyY2gtaW5wdXQtY29udGFpbmVyIC5zZWFyY2gtaW5wdXQtY2xlYXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MWVtO3RvcDouNGVtO2NvbG9yOmhzbGEoMCwwJSwzOS4yJSwuNik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6bm9uZX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9ue3BhZGRpbmc6LjVlbSAyZW0gLjVlbSAuNWVtO3RleHQtYWxpZ246bGVmdDt3aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIGhzbGEoMCwwJSwzOS4yJSwuMyl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi5oYXMtaWNvbntwYWRkaW5nOi41ZW0gMmVtIC41ZW0gMS41ZW19LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi5jbGlja2VhYmxle2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24uY2xpY2tlYWJsZTpob3ZlciBsYWJlbHtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24uaXMtdGl0bGV7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjEpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24uaXMtdGl0bGUgLm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGV7b3BhY2l0eTouNn0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwe3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjEuNWVtO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOi41ZW07bWFyZ2luOjFlbTtjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6M3B4O3otaW5kZXg6Mjtib3gtc2hhZG93OjAgMnB4IDVweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtmb250LXNpemU6Ljg3NWVtO2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXRpdGxlc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnN0YXJ0O21heC13aWR0aDoxMDAlO2ZsZXg6MCAxIGF1dG99LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDplbmQ7ZmxleDoxIDAgYXV0bztmb250LXNpemU6MWVtO3BhZGRpbmc6MCAuNWVtfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXN1YnRpdGxlLC5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXRpdGxle3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnVuc2V0O21heC13aWR0aDoxMDAlO2ZsZXgtZ3JvdzoxfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXN1YnRpdGxle2ZvbnQtc2l6ZTouODc1ZW19LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tc3VmZml4e2ZsZXg6MCAwIGF1dG87Zm9udC1zaXplOi44NzVlbTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDouNWVtO3RvcDouNzVlbTt3aWR0aDouNzVlbTtoZWlnaHQ6Ljc1ZW07Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixncmV5KTtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1saW5re29wYWNpdHk6LjY7Y29sb3I6IzIxOTZmMztkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDouNWVtO3RvcDouNzVlbX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1saW5rIHN2Z3t3aWR0aDoxOHB4IWltcG9ydGFudDtoZWlnaHQ6MThweCFpbXBvcnRhbnR9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbjpob3ZlciAubWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwe2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dHt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDo0ZW07bWFyZ2luLXJpZ2h0Oi41ZW07Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjIpO2ZvbnQtc2l6ZToxZW07ZmxleDowIDAgNGVtfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuOCl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tZm9vdGVye21hcmdpbi10b3A6LjI1ZW07ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5jYXBpYmFyYSBzZWxlY3QuaW5wdXQtc2VsZWN0e3BhZGRpbmc6LjNlbSAxZW07d2lkdGg6MTAwJTtmbGV4OjEgMCAxMDAlO2JvcmRlcjoxcHggc29saWQgZ3JleTtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC1hcHBlYXJhbmNlOmF1dG87LW1vei1hcHBlYXJhbmNlOmF1dG87YXBwZWFyYW5jZTphdXRvfS5jYXBpYmFyYSBzZWxlY3QuaW5wdXQtc2VsZWN0IG9wdGlvbntwYWRkaW5nOi4zZW07Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOmluaGVyaXR9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLWxpc3R7bWFyZ2luOjE2cHggMH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24tbGlzdCAuaW5wdXQtc2VjdGlvbi10aXRsZXttYXJnaW4tYm90dG9tOjhweH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24tbGlzdCAuaW5wdXQtc2VjdGlvbnttYXJnaW46MCAxNnB4IDhweH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb257bWFyZ2luOjE2cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LXdyYXA6bm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24udG8tcmlnaHR7YWxpZ24taXRlbXM6ZW5kfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAuc21hbGwtY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEwcHg7dG9wOi0xMHB4O3dpZHRoOjEuMmVtO2hlaWdodDoxLjJlbTtmb250LXNpemU6LjllbTtib3JkZXI6MXB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzoxcHggMXB4IDJweCByZ2JhKDAsMCwwLC40KTt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojZmZmO2JhY2tncm91bmQ6cmVkO2JvcmRlci1yYWRpdXM6NTAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLnRleHQtc3VidGl0bGV7dGV4dC1hbGlnbjpjZW50ZXI7YWxpZ24tc2VsZjpjZW50ZXJ9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5pbnB1dC1zZWN0aW9uLXRpdGxle2ZsZXg6MSAxIDEwMCU7d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5pbnB1dC1zZWN0aW9uLXRpdGxlIGJ1dHRvbnttYXJnaW4tbGVmdDphdXRvO2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXB9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5pbnB1dC1zZWN0aW9uLWxpbmt7ZmxleDoxIDEgMTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6YmFzZWxpbmU7cGFkZGluZy10b3A6LjI1ZW19LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5pbnB1dC1zZWN0aW9uLWxpbmsgYXtjb2xvcjojMjE5NmYzO21hcmdpbi10b3A6Ljc1cmVtfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5pcy1pbnZhbGlkIC5pbnB1dC1ib3gsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLmlzLWludmFsaWQgaW5wdXQubmF2LWlucHV0e2JvcmRlcjoycHggc29saWQgcmVkIWltcG9ydGFudDtib3gtc2hhZG93OjAgMCAzcHggcmVkIWltcG9ydGFudH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24uZGVuc2UgaW5wdXQubmF2LWlucHV0e3dpZHRoOjUwJTtmb250LXNpemU6MWVtO3BhZGRpbmc6M3B4IDZweH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlcjoycHggc29saWQgaHNsYSgwLDAlLDUwLjIlLC43KTtib3JkZXItcmFkaXVzOjZweDt3aWR0aDoxMDAlO21pbi13aWR0aDoxMzBweDttYXgtd2lkdGg6MTcwcHg7Zm9udC1zaXplOjJlbTt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweCA2cHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtvdXRsaW5lOm5vbmU7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2U7bWFyZ2luLWJvdHRvbTo4cHh9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXI6MnB4IHNvbGlkIGdyZXk7Ym94LXNoYWRvdzowIDRweCA2cHggaHNsYSgwLDAlLDUwLjIlLC4yKX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LnNtYWxse2ZvbnQtc2l6ZToxLjNlbX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxle2JvcmRlcjoycHggc29saWQgaHNsYSgwLDAlLDUwLjIlLC43KTtib3JkZXItcmFkaXVzOjZweDt3aWR0aDo3MCU7bWluLXdpZHRoOjEzMHB4O3BhZGRpbmc6M3B4IDZweDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O291dGxpbmU6bm9uZTt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZTtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3Vze2JvcmRlcjoycHggc29saWQgZ3JleTtib3gtc2hhZG93OjAgNHB4IDZweCBoc2xhKDAsMCUsNTAuMiUsLjIpfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUgbGFiZWx7ZmxleDoxIDEgYXV0b30uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlIGlucHV0W3R5cGU9ZmlsZV17ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAuaW5wdXQtc2VjdGlvbi1jb2x7d2lkdGg6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjEgMSAxMCV9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5pbnB1dC1zZWN0aW9uLWNvbCBpbnB1dC5uYXYtaW5wdXR7bWluLXdpZHRoOnVuc2V0O3dpZHRoOmNhbGMoMTAwJSAtIDFyZW0pO21heC13aWR0aDo3cmVtfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantvdXRsaW5lOm5vbmU7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOjJweCBzb2xpZCBncmV5O3dpZHRoOjEwMCU7bWluLXdpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7bWluLWhlaWdodDoxMDBweDt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZTtwYWRkaW5nOjhweDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTYwLDAsLjIpfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBpbnB1dFt0eXBlPWNoZWNrYm94XXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2FwaWJhcmEgLnRpbWV7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMTI4LDAsLjcpO2NvbG9yOmdyZWVufS5jYXBpYmFyYSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYSAudGltZSBpbnB1dHtjb2xvcjojMzc0NzRmfS5jYXBpYmFyYSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjpncmVlbjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTI4LDAsLjIpfS5jYXBpYmFyYSAuaW5wdXQtYm94LXRhYi1jb250YWluZXIsLmNhcGliYXJhIC5pbnB1dC1ib3gtdGFiLWNvbnRhaW5lciAuaW5wdXQtYm94LXRhYntib3JkZXItY29sb3I6Z3JlZW59LmNhcGliYXJhIC5pbnB1dC1ib3h7Y29sb3I6IzM3NDc0Zjtib3JkZXI6MnB4IHNvbGlkIGdyZWVufS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDojZmFmYWZhfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXB7YmFja2dyb3VuZDojZmFmYWZhO2NvbG9yOiMzNzQ3NGY7Ym9yZGVyOjFweCBzb2xpZCAjMzc0NzRmfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2NvbG9yOiMzNzQ3NGY7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMTI4LDAsLjcpfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXI6MnB4IHNvbGlkIGdyZWVuO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxMjgsMCwuMil9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Qgb3B0aW9ue2JhY2tncm91bmQ6I2ZhZmFmYTtjb2xvcjojMzc0NzRmfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtjb2xvcjojMzc0NzRmO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDEyOCwwLC43KX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyOjJweCBzb2xpZCBncmVlbjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTI4LDAsLjIpfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantiYWNrZ3JvdW5kOnJnYmEoMjU1LDI0OSwxOTYsLjYpO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwuNCl9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNDksMTk2LC44KTtib3gtc2hhZG93OjAgNHB4IDZweCB0cmFuc3BhcmVudH0uY2FwaWJhcmEuZGFyay10aGVtZSAudGltZXtib3JkZXI6MnB4IHNvbGlkIHJnYmEoNjQsNzgsMTA1LC43KTtjb2xvcjojNDA0ZTY5fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmRhcmstdGhlbWUgLnRpbWUgaW5wdXR7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM0MDRlNjk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg2NCw3OCwxMDUsLjIpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gtdGFiLWNvbnRhaW5lciwuY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtYm94LXRhYi1jb250YWluZXIgLmlucHV0LWJveC10YWJ7Ym9yZGVyLWNvbG9yOiM0MDRlNjl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LWJveHtjb2xvcjojZjBmMGYwO2JvcmRlcjoycHggc29saWQgIzQwNGU2OX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXR7YmFja2dyb3VuZDojNDA0ZTY5O2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDojMjIyODM3fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tdG9vbHRpcHtiYWNrZ3JvdW5kOiMyMjI4Mzc7Y29sb3I6I2YwZjBmMDtib3JkZXI6MXB4IHNvbGlkICNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtjb2xvcjojZjBmMGYwO2JvcmRlcjoycHggc29saWQgcmdiYSg2NCw3OCwxMDUsLjcpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyOjJweCBzb2xpZCAjNDA0ZTY5O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNjQsNzgsMTA1LC4yKX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0IG9wdGlvbntiYWNrZ3JvdW5kOiMyMjI4Mzc7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2NvbG9yOiNmMGYwZjA7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDY0LDc4LDEwNSwuNyl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyOjJweCBzb2xpZCAjNDA0ZTY5O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNjQsNzgsMTA1LC4yKX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantiYWNrZ3JvdW5kOnJnYmEoMjUxLDE5Miw0NSwuMSk7Ym9yZGVyOjJweCBzb2xpZCAjOWU5ZTllO2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgyNTEsMTkyLDQ1LC4zKTtib3gtc2hhZG93OjAgNHB4IDZweCBoc2xhKDAsMCUsNjIlLC4yKX0uY2FwaWJhcmEgYnV0dG9ue291dGxpbmU6bm9uZTtjdXJzb3I6cG9pbnRlcn0uY2FwaWJhcmEgYnV0dG9uLmNhcC1yb3RhdGUgLm1kaTpiZWZvcmUsLmNhcGliYXJhIGJ1dHRvbi5jYXAtcm90YXRlIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmNhcGliYXJhIC5jYXAtYnRuLWljb246Zm9jdXMsLmNhcGliYXJhIC5jYXAtYnRuLW91dGxpbmU6Zm9jdXMsLmNhcGliYXJhIC5jYXAtYnRuLXJhaXNlZDpmb2N1cywuY2FwaWJhcmEgLmNhcC1idG4tc2hhcGU6Zm9jdXN7Ym94LXNoYWRvdzowIDAgMCAzcHggcmdiYSgwLDAsMCwuMyl9LmNhcGliYXJhIC5jYXAtYnRuLWljb246ZGlzYWJsZWQsLmNhcGliYXJhIC5jYXAtYnRuLW91dGxpbmU6ZGlzYWJsZWQsLmNhcGliYXJhIC5jYXAtYnRuLXJhaXNlZDpkaXNhYmxlZCwuY2FwaWJhcmEgLmNhcC1idG4tc2hhcGU6ZGlzYWJsZWR7b3BhY2l0eTouNn0uY2FwaWJhcmEgYnV0dG9uLmNhcC1idG4tc217Zm9udC1zaXplOi43NWVtO21hcmdpbjo0cHg7cGFkZGluZzo0cHggOHB4fS5jYXBpYmFyYSAuY2FwLWJ0bi1vdXRsaW5le2N1cnNvcjpwb2ludGVyO2NvbG9yOmdyZXk7Ym9yZGVyOjJweCBzb2xpZCBncmV5O3BhZGRpbmc6OHB4IDE2cHg7bWFyZ2luOjAgOHB4O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtd2VpZ2h0OjcwMH0uY2FwaWJhcmEgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOmdyZXl9LmNhcGliYXJhIC5jYXAtYnRuLXJhaXNlZHtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjhweCAxNnB4O21hcmdpbjowIDhweDtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOmdyZXk7Ym9yZGVyOjJweCBzb2xpZCBncmV5O2ZvbnQtd2VpZ2h0OjcwMH0uY2FwaWJhcmEgLmNhcC1idG4taWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MzJweDt3aWR0aDozMnB4O291dGxpbmU6bm9uZTtjdXJzb3I6cG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLXJpZ2h0OjE2cHg7bWFyZ2luLXRvcDo0cHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtwYWRkaW5nOjRweDtmb250LXNpemU6MThweDtjb2xvcjpncmV5O2JvcmRlci1yYWRpdXM6NTAlO3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uIHN2Z3tmaWxsOmdyZXl9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1oYXMtYmFkZ2U6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0uMmVtO3RvcDotLjJlbTt3aWR0aDouOGVtO2hlaWdodDouOGVtO2JhY2tncm91bmQ6Z3JleTtib3JkZXItcmFkaXVzOjUwJX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2Vke2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6bm9uZX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZXtib3JkZXI6MXB4IHNvbGlkIGdyZXl9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi10b2dnbGUtc2lkZWJhcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMHB4O3RvcDoxMHB4O3otaW5kZXg6MjttYXJnaW46MH0uY2FwaWJhcmEgLmNhcC1idG4taWNvbiAubWRpe2ZvbnQtc2l6ZToyNHB4fS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uIC5sb2FkaW5nLWljb257ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MH0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5sb2FkaW5nPjpub3QoLmxvYWRpbmctaWNvbil7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmxvYWRpbmcgLmxvYWRpbmctaWNvbntkaXNwbGF5OnVuc2V0fS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O291dGxpbmU6bm9uZTtjdXJzb3I6cG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luOjRweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO3BhZGRpbmc6MDtmb250LXNpemU6MTRweH0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUgLm1kaXtmb250LXNpemU6MjRweH0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGV7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOm5vbmU7cGFkZGluZzowfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MnB4O3RvcDoycHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDpncmV5O3dpZHRoOjIycHg7aGVpZ2h0OjIycHh9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlIHNwYW57cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxcHg7dG9wOjZweDt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLW91dGxpbmV7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOm5vbmU7cGFkZGluZzowfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS1vdXRsaW5lOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoycHg7dG9wOjNweDtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MnB4IHNvbGlkIGdyZXk7d2lkdGg6MjJweDtoZWlnaHQ6MjJweH0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUtb3V0bGluZSBzcGFue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MXB4O3RvcDo2cHg7d2lkdGg6MTAwJTtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjpncmV5O3RleHQtYWxpZ246Y2VudGVyfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWRyb3B7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOm5vbmU7cGFkZGluZzowfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWRyb3A6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjRweDt0b3A6MDtib3JkZXItcmFkaXVzOjAgNTAlIDUwJSA1MCU7YmFja2dyb3VuZDpncmV5O3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMnB4LDRweCkgcm90YXRlKDQ1ZGVnKX0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1kcm9wIHNwYW57cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDo2cHg7d2lkdGg6MTAwJTtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyfS5jYXBpYmFyYS5leHRlbmRlZC1yaWdodCBbdG9nZ2xlLXNpZGViYXItcmlnaHRdIHN2ZywuY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIFt0b2dnbGUtaGVhZGVyXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5jYXBpYmFyYSAuY2FwLWJ0bi1yYWlzZWR7YmFja2dyb3VuZDojMDBmO2JvcmRlcjoycHggc29saWQgIzAwZjtjb2xvcjojZmZmfS5jYXBpYmFyYSAuY2FwLWJ0bi1vdXRsaW5le2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjJweCBzb2xpZCAjMDBmO2NvbG9yOiMwMGZ9LmNhcGliYXJhIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDojMDBmO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBle2NvbG9yOiMzNzQ3NGZ9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLC5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWRyb3B7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGU6YmVmb3JlLC5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWRyb3A6YmVmb3Jle2JhY2tncm91bmQ6IzM4OGUzY30uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUuaXMtZW1wdHk6YmVmb3JlLC5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWRyb3AuaXMtZW1wdHk6YmVmb3Jle2JhY2tncm91bmQ6IzYxNjE2MX0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUtb3V0bGluZTpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzODhlM2N9LmNhcGliYXJhIC5jYXAtYnRuLWljb24sLmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLW91dGxpbmUgc3Bhbntjb2xvcjojMzc0NzRmfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taGFzLWJhZGdlOmFmdGVye2JhY2tncm91bmQ6cmdiYSgyNDUsMTI0LDAsLjgpfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1yYWlzZWR7YmFja2dyb3VuZDpyZ2JhKDg0LDExMCwxMjIsLjEpO2JvcmRlci1jb2xvcjojNTQ2ZTdhO2NvbG9yOiM1NDZlN2F9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZDphY3RpdmV7YmFja2dyb3VuZDojNTQ2ZTdhfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1yYWlzZWQ6Zm9jdXMsLmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZDpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoODQsMTEwLDEyMiwuMyl9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLW91dGxpbmV7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItY29sb3I6IzU0NmU3YTtjb2xvcjojNTQ2ZTdhfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1vdXRsaW5lOmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoODQsMTEwLDEyMiwuMyl9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLW91dGxpbmU6Zm9jdXMsLmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLW91dGxpbmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDg0LDExMCwxMjIsLjEpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtiYWNrZ3JvdW5kOiM0MDRlNjk7Ym9yZGVyOjJweCBzb2xpZCAjZjBmMGYwO2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjoycHggc29saWQgI2YwZjBmMDtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDojNDA0ZTY5O2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1kcm9we2NvbG9yOmhzbGEoMCwwJSw5NC4xJSwuOCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGU6YmVmb3JlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcDpiZWZvcmV7YmFja2dyb3VuZDojMmU3ZDMyfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLmlzLWVtcHR5OmJlZm9yZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWRyb3AuaXMtZW1wdHk6YmVmb3Jle2JhY2tncm91bmQ6IzYxNjE2MX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS1vdXRsaW5lOmJlZm9yZXtib3JkZXItY29sb3I6IzJlN2QzMn0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1pY29uLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLW91dGxpbmUgc3Bhbntjb2xvcjpoc2xhKDAsMCUsOTQuMSUsLjgpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1oYXMtYmFkZ2U6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDU2LDE0Miw2MCwuOCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2Vke2JhY2tncm91bmQ6aHNsYSgwLDAlLDk0LjElLC4xKTtib3JkZXItY29sb3I6aHNsYSgwLDAlLDk0LjElLC44KTtjb2xvcjpoc2xhKDAsMCUsOTQuMSUsLjgpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZDphY3RpdmV7YmFja2dyb3VuZDojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1yYWlzZWQ6aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsOTQuMSUsLjMpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLW91dGxpbmV7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItY29sb3I6aHNsYSgwLDAlLDk0LjElLC44KTtjb2xvcjpoc2xhKDAsMCUsOTQuMSUsLjgpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLW91dGxpbmU6YWN0aXZle2JhY2tncm91bmQ6aHNsYSgwLDAlLDk0LjElLC4xKX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1vdXRsaW5lOmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLW91dGxpbmU6aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsOTQuMSUsMCl9LmNhcGliYXJhIFtjYXAtdG9vbHRpcF17cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNhcGliYXJhIFtjYXAtdG9vbHRpcF06aG92ZXI6YmVmb3Jle3BhZGRpbmc6OHB4O29wYWNpdHk6MTtib3JkZXItd2lkdGg6MXB4O2hlaWdodDphdXRvfS5jYXBpYmFyYSBbY2FwLXRvb2x0aXBdOmJlZm9yZXtvcGFjaXR5Oi4zO2hlaWdodDowO3BhZGRpbmc6MCA4cHg7dGV4dC1hbGlnbjpsZWZ0O292ZXJmbG93OmhpZGRlbjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7cG9zaXRpb246YWJzb2x1dGU7dG9wOmNhbGMoMTAwJSArIDE4cHgpO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGV4KC01MCUpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNyk7Ym9yZGVyOjAgc29saWQgIzAwMDtib3JkZXItcmFkaXVzOjVweDtjb2xvcjojZmZmO2NvbnRlbnQ6YXR0cihjYXAtdG9vbHRpcCk7dGV4dC10cmFuc2Zvcm06bm9uZTttaW4td2lkdGg6MTAwcHg7ei1pbmRleDo1fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lcntvdmVyZmxvdzp2aXNpYmxlO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDowO2hlaWdodDowfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lcjpob3ZlciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXItY29udGFpbmVyIC5sb25nLWJhcntvcGFjaXR5Oi4zfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94e3dpZHRoOnZhcigtLWRheS13aWR0aCk7bWF4LXdpZHRoOnZhcigtLWRheS13aWR0aCk7bWluLXdpZHRoOnZhcigtLWRheS13aWR0aCk7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTttYXgtaGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTttaW4taGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47Y3Vyc29yOmRlZmF1bHQ7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4ycyBlYXNlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lsbC1jaGFuZ2U6ZGlzcGxheX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveFtkYXRhLWlzLXZpc2libGU9ZmFsc2Vde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3g6aG92ZXJ7ei1pbmRleDoyfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94OmhvdmVyKy5mbG9hdC1ib3gtZXh0IC5sb25nLWJhcnt6LWluZGV4OjI7b3BhY2l0eToxfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94Lmhhcy1tZXNzYWdlOmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2hlaWdodDowO3JpZ2h0OjA7dG9wOjA7Ym9yZGVyLWNvbG9yOnJlZCByZWQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDo2cHg7ei1pbmRleDoxfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94Lmhhcy1lcnJvcnM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo3cHg7aGVpZ2h0OjdweDtsZWZ0OjFweDt0b3A6MXB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6I2QzMmYyZjt6LWluZGV4OjF9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItYm90dG9tLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QtY29udGFpbmVyLW1pZGRsZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LWNvbnRhaW5lci10b3B7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7b3ZlcmZsb3c6dmlzaWJsZTtoZWlnaHQ6MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LWNvbnRhaW5lci10b3B7dG9wOjFweH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LWNvbnRhaW5lci10b3AgLmRvdHtib3JkZXItcmFkaXVzOjAgMCA1MCUgNTAlfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QtY29udGFpbmVyLW1pZGRsZXt0b3A6Y2FsYyg1MCUgLSA0cHgpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QtY29udGFpbmVyLWJvdHRvbXtib3R0b206NXB4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QtY29udGFpbmVyLWJvdHRvbSAuZG90e2JvcmRlci1yYWRpdXM6MCAwIDUwJSA1MCV9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdHt3aWR0aDo4cHg7bWluLXdpZHRoOjhweDtoZWlnaHQ6OHB4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbjoxcHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbG9jYWwtY29sb3IsaHNsYSgwLDAlLDEwMCUsLjgpKTtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLGhzbGEoMCwwJSwzOS4yJSwuNSkpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuZGlhbW9uZHtib3JkZXItcmFkaXVzOjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgc2tldygxMGRlZywxMGRlZyl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5vdXRsaW5lZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QudHJpYW5nbGV7d2lkdGg6MDtoZWlnaHQ6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSBza2V3KDEwZGVnLDEwZGVnKSB0cmFuc2xhdGUoMXB4LDFweCk7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHZhcigtLWxvY2FsLWNvbG9yLGhzbGEoMCwwJSwzOS4yJSwuOCkpO2JvcmRlci1ib3R0b206NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDo1cHggc29saWQgdmFyKC0tbG9jYWwtY29sb3IsaHNsYSgwLDAlLDM5LjIlLC44KSk7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhe3dpZHRoOjEwMCU7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6Ljg3NWVtO3RleHQtYWxpZ246Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvMik7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvMik7bWFyZ2luLWJvdHRvbToycHg7Zm9udC13ZWlnaHQ6NzAwO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggaHNsYSgwLDAlLDEwMCUsLjIpO2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOnZhcigtLWxvY2FsLWNvbG9yLWZvbnQsI2ZmZik7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6b3BhY2l0eSgyMCUpO2JhY2tkcm9wLWZpbHRlcjpvcGFjaXR5KDIwJSk7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSk7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC4yKSl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLW91dGxpbmVke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1vdXRsaW5lZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtvcGFjaXR5Oi4zOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMnB4KTtiYWNrZHJvcC1maWx0ZXI6Ymx1cigycHgpO2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsaW5oZXJpdCk7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMXB4O3RvcDotMXB4O3dpZHRoOmNhbGMoMTAwJSArIDJweCk7aGVpZ2h0OmNhbGMoMTAwJSArIDJweCk7ZGlzcGxheTpibG9jazt6LWluZGV4Oi0xfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXJ7aGVpZ2h0OmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzQgLSAxLjVweCk7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpIC0gNnB4KTtsaW5lLWhlaWdodDowO2NvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MXB4O21hcmdpbjowIDNweH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFyOmZpcnN0LW9mLXR5cGV7bWFyZ2luLXRvcDozcHh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhci1vdXRsaW5lZHtoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIDEuNXB4KTt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkgLSA2cHgpO2xpbmUtaGVpZ2h0OjA7Y29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czoxcHg7bWFyZ2luOjAgM3B4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXItb3V0bGluZWQ6Zmlyc3Qtb2YtdHlwZXttYXJnaW4tdG9wOjNweH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFyLW91dGxpbmVkOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO29wYWNpdHk6LjM7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigycHgpO2JhY2tkcm9wLWZpbHRlcjpibHVyKDJweCk7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xcHg7dG9wOi0xcHg7d2lkdGg6Y2FsYygxMDAlICsgMnB4KTtoZWlnaHQ6Y2FsYygxMDAlICsgMnB4KTtkaXNwbGF5OmJsb2NrfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXItZGFzaGVke2hlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gMS41cHgpO3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSAtIDZweCk7bGluZS1oZWlnaHQ6MDtjb2xvcjp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjFweDttYXJnaW46MCAzcHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhci1kYXNoZWQ6Zmlyc3Qtb2YtdHlwZXttYXJnaW4tdG9wOjNweH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFyLWRhc2hlZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTFweDt0b3A6LTFweDt3aWR0aDpjYWxjKDEwMCUgKyAycHgpO2hlaWdodDpjYWxjKDEwMCUgKyAycHgpO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLXNpemU6MTBweCAxMHB4O2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCg0NWRlZyx2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KSx2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KSAzcHgsdHJhbnNwYXJlbnQgMCx0cmFuc3BhcmVudCA1MCUpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4ucm93ZG90LS1yb3d7ZGlzcGxheTpmbGV4O21heC1oZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIDFweCk7aGVpZ2h0OmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzQgLSAxcHgpO3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSAtIDJweCk7bGluZS1oZWlnaHQ6MDtjb2xvcjp0cmFuc3BhcmVudDttYXJnaW46MXB4O2JvcmRlci1jb2xvcjp2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC4yKSl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5yb3dkb3QtLXJvdzpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6M3B4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4ucm93ZG90LS1yb3c6ZW1wdHl7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLnJvd2RvdC0tcm93IC5yb3dkb3QtLWRvdHt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkvNCAtIDJweCk7aGVpZ2h0OmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzQgLSAycHgpO21hcmdpbi1yaWdodDoxcHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlcjozcHggc29saWQgdmFyKC0tbG9jYWwtY29sb3IsaHNsYSgwLDAlLDEwMCUsLjgpKTtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLGhzbGEoMCwwJSwzOS4yJSwuOCkpO2JveC1zaGFkb3c6MCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMil9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5yb3dkb3QtLXJvdyAucm93ZG90LS1kb3Quc2hhcGUtb3V0bGluZWR7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMzkuMiUsLjIpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4ucm93ZG90LS1yb3cgLnJvd2RvdC0tZG90LnNoYXBlLXJvdW5kZWR7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIC41cHgpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4ucm93ZG90LS1yb3cgLnJvd2RvdC0tZG90LnNoYXBlLW91dGxpbmVkLXJvdW5kZWR7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt3aWR0aDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gLjVweCl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnBsb3QtZmxvYXRib3gtY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OnZpc2libGV9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnBsb3QtZmxvYXRib3gtY29udGFpbmVyIC5wbG90LWZsb2F0Ym94e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbG9jYWwtY29sb3IscmdiYSgwLDAsMCwuNCkpO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucGxvdC1mbG9hdGJveC1jb250YWluZXIgLnBsb3QtZmxvYXRib3guc3RyaXBle2JhY2tncm91bmQ6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCg1M2RlZyx2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSksdmFyKC0tbG9jYWwtY29sb3IscmdiYSgwLDAsMCwuNCkpIDVweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50IDEycHgpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5wbG90LWZsb2F0Ym94LWNvbnRhaW5lciAucGxvdC1mbG9hdGJveC5zdHJpcGUtaW52ZXJzZXtiYWNrZ3JvdW5kOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMTI3ZGVnLHZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjQpKSx2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSkgNXB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQgMTJweCl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5pY29uLWZsb2F0Ym94e3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSAtIDE2cHgpO21hcmdpbjo2cHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO29wYWNpdHk6Ljh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5pY29uLWZsb2F0Ym94IHN2ZyBwYXRoe2ZpbGw6dmFyKC0tbG9jYWwtY29sb3IscmdiYSgwLDAsMCwuNCkpO2ZpbHRlcjpkcm9wLXNoYWRvdygwIDAgMXB4IHJnYmEoMCwwLDAsLjIpKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmljb24tZmxvYXRib3g6aG92ZXJ7b3BhY2l0eToxfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dHtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzp2aXNpYmxlO2N1cnNvcjpkZWZhdWx0O3RyYW5zaXRpb246Ym94LXNoYWRvdyAuMnMgZWFzZTt3aWxsLWNoYW5nZTpkaXNwbGF5O3BvaW50ZXItZXZlbnRzOm5vbmV9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDp2YXIoLS1kYXktd2lkdGgpO3RvcDowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OnN0YXJ0O2FsaWduLWl0ZW1zOnN0YXJ0fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXItY29udGFpbmVyIC5sb25nLWJhcnt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCwgMCkqdmFyKC0tbG9uZywgMCkgLSB2YXIoLS1kYXktd2lkdGgsIDApKjAuNSk7bWluLXdpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoLCAwKSp2YXIoLS1sb25nLCAwKSAtIHZhcigtLWRheS13aWR0aCwgMCkqMC41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIDMuNXB4KTtsaW5lLWhlaWdodDowO2NvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IscmdiYSgwLDAsMCwuNCkpO2JvcmRlci1yYWRpdXM6MCAzcHggM3B4IDA7bWFyZ2luLWxlZnQ6LTNweDttYXJnaW4tdG9wOjFweDttYXJnaW4tYm90dG9tOjFweDtvcGFjaXR5OnZhcigtLWxvY2FsLW9wYWNpdHksMSk7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLC4yKTtib3JkZXItbGVmdC13aWR0aDowO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLWNvbnRhaW5lciAubG9uZy1iYXIuc29saWR7b3BhY2l0eToxfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXItY29udGFpbmVyIC5sb25nLWJhcjpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6NHB4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94OmhvdmVye2JveC1zaGFkb3c6MCAwIDJweCA3cHggcmdiYSgxMTMsMTg5LDI1NSwuNCl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3g6aG92ZXIrLmZsb2F0LWJveC1leHQgLmxvbmctYmFye2JveC1zaGFkb3c6MCAwIDJweCA0cHggcmdiYSgxMTMsMTg5LDI1NSwuNCl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3grLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLnJlZC1saWdodHtiYWNrZ3JvdW5kOiNmODQ3NDd9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3grLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLnllbGxvdy1saWdodHtiYWNrZ3JvdW5kOiNmZGQ4MzV9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3grLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmdyZWVuLWxpZ2h0e2JhY2tncm91bmQ6IzM4OTkzZH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFye2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yKX0uY2FwaWJhcmEuZGFyay10aGVtZSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94OmhvdmVye2JveC1zaGFkb3c6MCAwIDJweCA3cHggaHNsYSgwLDAlLDQ3LjglLC42KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94OmhvdmVyKy5mbG9hdC1ib3gtZXh0IC5sb25nLWJhcntib3gtc2hhZG93OjAgMCAycHggNHB4IGhzbGEoMCwwJSw0Ny44JSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCsuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIucmVkLWxpZ2h0e2JhY2tncm91bmQ6I2FhMWExYX0uY2FwaWJhcmEuZGFyay10aGVtZSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94Ky5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci55ZWxsb3ctbGlnaHR7YmFja2dyb3VuZDojZmJjZDAwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3grLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmdyZWVuLWxpZ2h0e2JhY2tncm91bmQ6IzM4OGUzY30uY2FwaWJhcmEuZGFyay10aGVtZSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjMpfS5jYXBpYmFyYSAucHJvZ3Jlc3MtYmFye3dpZHRoOjEwMCU7aGVpZ2h0OjRweDtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSw4Ni43JSwuMik7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDt0cmFuc2l0aW9uOmhlaWdodCAxcyBlYXNlfS5jYXBpYmFyYSAucHJvZ3Jlc3MtYmFyLmhpZGUtcHJvZ3Jlc3N7aGVpZ2h0OjB9LmNhcGliYXJhIC5wcm9ncmVzcy1iYXI6YmVmb3Jley13ZWJraXQtYW5pbWF0aW9uLW5hbWU6bG9hZGluZy1mYXN0MTthbmltYXRpb24tbmFtZTpsb2FkaW5nLWZhc3QxOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0Oy13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlfS5jYXBpYmFyYSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTt3aWR0aDo2Mi41JTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiMyOTI5Mjk7LXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246MnM7YW5pbWF0aW9uLWR1cmF0aW9uOjJzfS5jYXBpYmFyYSAucHJvZ3Jlc3MtYmFyOmFmdGVyey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6bG9hZGluZy1mYXN0MjthbmltYXRpb24tbmFtZTpsb2FkaW5nLWZhc3QyOy13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OjEuM3M7YW5pbWF0aW9uLWRlbGF5OjEuM3M7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7LXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGV9c3Bhbi5tZGl7bWluLXdpZHRoOjE0cHg7bWluLWhlaWdodDoxNHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrfXNwYW4ubWRpLm1kaS1zdWJkaXJlY3RvcnktYXJyb3ctcmlnaHR7Y29sb3I6cmdiYSgwLDAsMCwuMil9LmNhcGliYXJhIC5saWdodHtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7ZmxleDowIDAgMThweDtib3JkZXItcmFkaXVzOjUwJTttYXJnaW46MTJweCA4cHg7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLC4zKTtiYWNrZ3JvdW5kOnZhcigtLWxpZ2h0LWNvbG9yLHVuc2V0KTtib3JkZXItY29sb3I6aHNsYSgwLDAlLDEwMCUsLjgpfS5jYXBpYmFyYSAubGlnaHQucmVkLWxpZ2h0e2JhY2tncm91bmQ6I2Y4NDc0N30uY2FwaWJhcmEgLmxpZ2h0LnllbGxvdy1saWdodHtiYWNrZ3JvdW5kOiNmZGQ4MzV9LmNhcGliYXJhIC5saWdodC5ncmVlbi1saWdodHtiYWNrZ3JvdW5kOiMzODk5M2R9LmNhcGliYXJhIC5saWdodC5kaXNhYmxlZC1saWdodHtiYWNrZ3JvdW5kOiM3MzczNzN9LmNhcGliYXJhIC5saWdodC5ibHVlLWxpZ2h0e2JhY2tncm91bmQ6IzAyNzdiZH0uY2FwaWJhcmEuZGFyay10aGVtZSAubGlnaHR7Ym9yZGVyLWNvbG9yOiM0MDRlNjl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmxpZ2h0LnJlZC1saWdodHtiYWNrZ3JvdW5kOiNhYTFhMWF9LmNhcGliYXJhLmRhcmstdGhlbWUgLmxpZ2h0LnllbGxvdy1saWdodHtiYWNrZ3JvdW5kOiNmYmNkMDB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmxpZ2h0LmdyZWVuLWxpZ2h0e2JhY2tncm91bmQ6IzM4OGUzY30uY2FwaWJhcmEgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQ6Z3JleTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxNnB4O291dGxpbmU6bm9uZTt3aWR0aDoxMDBweDtwYWRkaW5nOjNweCAxOHB4O2ZvbnQtd2VpZ2h0OjcwMDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O21hcmdpbjo4cHg7Ym9yZGVyLXJhZGl1czozMHB4O3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMgZWFzZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmV9LmNhcGliYXJhIHNlbGVjdC50YWJzLXNlbGVjdCBvcHRpb257Y29sb3I6Z3JleTtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxNXB4fS5jYXBpYmFyYSBzZWxlY3QudGFicy1zZWxlY3Q6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjRweDtib3JkZXItd2lkdGg6NHB4O2JvcmRlci1jb2xvcjojZmZmO3otaW5kZXg6Mn0uY2FwaWJhcmEgc2VsZWN0LnRhYnMtc2VsZWN0LmRpc2FibGVke2NvbG9yOmdyZXl9LmNhcGliYXJhIHNlbGVjdC50YWJzLXNlbGVjdDpob3Zlcntib3JkZXItY29sb3I6Z3JleX1cIiwgXCJcIl0pO1xuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/src/index.js!./node_modules/sass-loader/dist/cjs.js!./src/scss/style.scss\n");
|
|
106
|
+
eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.push([module.i, \"@import url(https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,700;0,900;1,300;1,400;1,500;1,700;1,900&display=swap);\"]);\n// Module\nexports.push([module.i, \":root{--header-top-height:40px;--header-height:98px;--header-labels-height:50px;--header-day-height:24px;--ex-header-height:120px;--header-input-height:20px;--nav-width:200px;--nav-item-col-width:60px;--initial-nav-width:0px;--ex-nav-width:0px;--btn-nav-width:117px;--nav-right-width:300px;--item-min-width:100px;--item-height:45px;--day-width:45px;--font-size:16px}@-webkit-keyframes pulseMessage{0%{border-color:rgba(211,47,47,.3) rgba(211,47,47,.3) transparent transparent}to{border-color:#d32f2f #d32f2f transparent transparent}}@keyframes pulseMessage{0%{border-color:rgba(211,47,47,.3) rgba(211,47,47,.3) transparent transparent}to{border-color:#d32f2f #d32f2f transparent transparent}}@-webkit-keyframes pulseBackground{0%{background:rgba(211,47,47,.3)}to{background:#d32f2f}}@keyframes pulseBackground{0%{background:rgba(211,47,47,.3)}to{background:#d32f2f}}@-webkit-keyframes loading-fast1{0%{transform:translateX(-100%)}40%{transform:translateX(-100%)}to{transform:translateX(200%)}}@keyframes loading-fast1{0%{transform:translateX(-100%)}40%{transform:translateX(-100%)}to{transform:translateX(200%)}}@-webkit-keyframes loading-fast2{0%{transform:translateX(-100%)}15%{transform:translateX(-100%)}to{transform:translateX(200%)}}@keyframes loading-fast2{0%{transform:translateX(-100%)}15%{transform:translateX(-100%)}to{transform:translateX(200%)}}.capibara.c-red:not(.dark-theme){scrollbar-color:#df554b transparent}.capibara.c-red:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#df554b}.capibara.c-red:not(.dark-theme) .header-top{background:#fdfaf9}.capibara.c-red:not(.dark-theme) .corner{background:#fdfaf9;border-color:#f99d97}.capibara.c-red:not(.dark-theme) .container-tl header{background:#fdfaf9;border-bottom-color:#f99d97}.capibara.c-red:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#fdfaf9)!important}.capibara.c-red:not(.dark-theme) nav.right{border-color:#f99d97}.capibara.c-red.dark-theme .header-top,.capibara.c-red.dark-theme nav.right{border-color:#ba160a}.capibara.c-red.dark-theme .container-tl header,.capibara.c-red.dark-theme .corner{border-bottom-color:#ba160a}.capibara.c-red.dark-theme ::-moz-selection,.capibara.c-red ::-moz-selection{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme ::selection,.capibara.c-red ::selection{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme .progress-bar,.capibara.c-red .progress-bar{background-color:rgba(244,67,54,.2)!important}.capibara.c-red.dark-theme .progress-bar:after,.capibara.c-red.dark-theme .progress-bar:before,.capibara.c-red .progress-bar:after,.capibara.c-red .progress-bar:before{background-color:#f44336!important}.capibara.c-red.dark-theme select.tabs-select,.capibara.c-red select.tabs-select{background-color:rgba(244,67,54,.7)!important;border-color:#f44336!important}.capibara.c-red.dark-theme .time,.capibara.c-red .time{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .time .symbol,.capibara.c-red .time .symbol{color:#f44336}.capibara.c-red.dark-theme .time input:active,.capibara.c-red.dark-theme .time input:focus,.capibara.c-red .time input:active,.capibara.c-red .time input:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-box,.capibara.c-red.dark-theme .input-section select.input-select,.capibara.c-red .input-box,.capibara.c-red .input-section select.input-select{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .input-section select.input-select:active,.capibara.c-red.dark-theme .input-section select.input-select:focus,.capibara.c-red .input-section select.input-select:active,.capibara.c-red .input-section select.input-select:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-section .nav-input-file,.capibara.c-red.dark-theme .input-section input.nav-input,.capibara.c-red .input-section .nav-input-file,.capibara.c-red .input-section input.nav-input{border-color:rgba(244,67,54,.6)}.capibara.c-red.dark-theme .input-section .nav-input-file:active,.capibara.c-red.dark-theme .input-section .nav-input-file:focus,.capibara.c-red.dark-theme .input-section input.nav-input:active,.capibara.c-red.dark-theme .input-section input.nav-input:focus,.capibara.c-red .input-section .nav-input-file:active,.capibara.c-red .input-section .nav-input-file:focus,.capibara.c-red .input-section input.nav-input:active,.capibara.c-red .input-section input.nav-input:focus{border-color:#f44336;box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-red .input-section.msj-input-container textarea.msj{border:2px solid #f44336}.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-red.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-red .input-section.msj-input-container textarea.msj:active,.capibara.c-red .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(244,67,54,.2)}.capibara.c-red .cap-btn-raised,.capibara.c-red.dark-theme .cap-btn-raised{border-color:#f44336;background:rgba(244,67,54,.8)}.capibara.c-red .cap-btn-outline,.capibara.c-red.dark-theme .cap-btn-outline{border-color:#f44336;color:#f44336}.capibara.c-red .cap-btn-outline.selected,.capibara.c-red.dark-theme .cap-btn-outline.selected{background:rgba(244,67,54,.8)}.capibara.c-red.dark-theme .select-container .selected-day,.capibara.c-red .select-container .selected-day{background:rgba(244,67,54,.3);box-shadow:inset 0 0 10px rgba(244,67,54,.5)}.capibara .c-red--background{background:#f44336!important}.capibara .c-red-d--background{background:#d2190b!important}.capibara .c-red-l--background{background:#f8877f!important}.capibara .c-red--text{color:#f44336!important}.capibara .c-red-d--text{color:#d2190b!important}.capibara .c-red-l--text{color:#f8877f!important}.capibara .detail-day .list-detail .item-detail.c-red{background:rgba(244,67,54,.2);border:1px solid #f44336}.capibara .detail-day .list-detail .item-detail.c-red .left-icon{background:#f44336}.capibara .detail-day .list-detail .item-detail.c-red .left-icon.outlined{border:1px solid #f44336;box-shadow:inset 0 0 0 1px rgba(244,67,54,.7)}.capibara .detail-day .list-detail .item-detail.c-red .name{color:#f44336}.capibara .float-box-container .float-box span.data.c-red{--local-color:#f44336;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-red,.capibara .float-box-container .float-box .dot.c-red,.capibara .float-box-container .float-box .rowdot--row.c-red .rowdot--dot{--local-color:#f44336}.capibara .header-top .tabs-container .tab:not(.disabled).c-red.active{background:rgba(244,67,54,.7);border-color:rgba(244,67,54,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-red.active:hover{background:rgba(244,67,54,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-red:hover{background:rgba(244,67,54,.2);border-color:rgba(244,67,54,.9)}.capibara .input-box .mini-input-section--icon.c-red{background:#f44336}.capibara.c-pink:not(.dark-theme){scrollbar-color:#d0376b transparent}.capibara.c-pink:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#d0376b}.capibara.c-pink:not(.dark-theme) .header-top{background:#f0e3e7}.capibara.c-pink:not(.dark-theme) .corner{background:#f0e3e7;border-color:#f27ba3}.capibara.c-pink:not(.dark-theme) .container-tl header{background:#f0e3e7;border-bottom-color:#f27ba3}.capibara.c-pink:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f0e3e7)!important}.capibara.c-pink:not(.dark-theme) nav.right{border-color:#f27ba3}.capibara.c-pink.dark-theme .header-top,.capibara.c-pink.dark-theme nav.right{border-color:#930e3b}.capibara.c-pink.dark-theme .container-tl header,.capibara.c-pink.dark-theme .corner{border-bottom-color:#930e3b}.capibara.c-pink.dark-theme ::-moz-selection,.capibara.c-pink ::-moz-selection{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme ::selection,.capibara.c-pink ::selection{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme .progress-bar,.capibara.c-pink .progress-bar{background-color:rgba(233,30,99,.2)!important}.capibara.c-pink.dark-theme .progress-bar:after,.capibara.c-pink.dark-theme .progress-bar:before,.capibara.c-pink .progress-bar:after,.capibara.c-pink .progress-bar:before{background-color:#e91e63!important}.capibara.c-pink.dark-theme select.tabs-select,.capibara.c-pink select.tabs-select{background-color:rgba(233,30,99,.7)!important;border-color:#e91e63!important}.capibara.c-pink.dark-theme .time,.capibara.c-pink .time{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .time .symbol,.capibara.c-pink .time .symbol{color:#e91e63}.capibara.c-pink.dark-theme .time input:active,.capibara.c-pink.dark-theme .time input:focus,.capibara.c-pink .time input:active,.capibara.c-pink .time input:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-box,.capibara.c-pink.dark-theme .input-section select.input-select,.capibara.c-pink .input-box,.capibara.c-pink .input-section select.input-select{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .input-section select.input-select:active,.capibara.c-pink.dark-theme .input-section select.input-select:focus,.capibara.c-pink .input-section select.input-select:active,.capibara.c-pink .input-section select.input-select:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-section .nav-input-file,.capibara.c-pink.dark-theme .input-section input.nav-input,.capibara.c-pink .input-section .nav-input-file,.capibara.c-pink .input-section input.nav-input{border-color:rgba(233,30,99,.6)}.capibara.c-pink.dark-theme .input-section .nav-input-file:active,.capibara.c-pink.dark-theme .input-section .nav-input-file:focus,.capibara.c-pink.dark-theme .input-section input.nav-input:active,.capibara.c-pink.dark-theme .input-section input.nav-input:focus,.capibara.c-pink .input-section .nav-input-file:active,.capibara.c-pink .input-section .nav-input-file:focus,.capibara.c-pink .input-section input.nav-input:active,.capibara.c-pink .input-section input.nav-input:focus{border-color:#e91e63;box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-pink .input-section.msj-input-container textarea.msj{border:2px solid #e91e63}.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-pink.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-pink .input-section.msj-input-container textarea.msj:active,.capibara.c-pink .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(233,30,99,.2)}.capibara.c-pink .cap-btn-raised,.capibara.c-pink.dark-theme .cap-btn-raised{border-color:#e91e63;background:rgba(233,30,99,.8)}.capibara.c-pink .cap-btn-outline,.capibara.c-pink.dark-theme .cap-btn-outline{border-color:#e91e63;color:#e91e63}.capibara.c-pink .cap-btn-outline.selected,.capibara.c-pink.dark-theme .cap-btn-outline.selected{background:rgba(233,30,99,.8)}.capibara.c-pink.dark-theme .select-container .selected-day,.capibara.c-pink .select-container .selected-day{background:rgba(233,30,99,.3);box-shadow:inset 0 0 10px rgba(233,30,99,.5)}.capibara .c-pink--background{background:#e91e63!important}.capibara .c-pink-d--background{background:#aa1145!important}.capibara .c-pink-l--background{background:#f06493!important}.capibara .c-pink--text{color:#e91e63!important}.capibara .c-pink-d--text{color:#aa1145!important}.capibara .c-pink-l--text{color:#f06493!important}.capibara .detail-day .list-detail .item-detail.c-pink{background:rgba(233,30,99,.2);border:1px solid #e91e63}.capibara .detail-day .list-detail .item-detail.c-pink .left-icon{background:#e91e63}.capibara .detail-day .list-detail .item-detail.c-pink .left-icon.outlined{border:1px solid #e91e63;box-shadow:inset 0 0 0 1px rgba(233,30,99,.7)}.capibara .detail-day .list-detail .item-detail.c-pink .name{color:#e91e63}.capibara .float-box-container .float-box span.data.c-pink{--local-color:#e91e63;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-pink,.capibara .float-box-container .float-box .dot.c-pink,.capibara .float-box-container .float-box .rowdot--row.c-pink .rowdot--dot{--local-color:#e91e63}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink.active{background:rgba(233,30,99,.7);border-color:rgba(233,30,99,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink.active:hover{background:rgba(233,30,99,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-pink:hover{background:rgba(233,30,99,.2);border-color:rgba(233,30,99,.9)}.capibara .input-box .mini-input-section--icon.c-pink{background:#e91e63}.capibara.c-purple:not(.dark-theme){scrollbar-color:#8d3d9b transparent}.capibara.c-purple:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#8d3d9b}.capibara.c-purple:not(.dark-theme) .header-top{background:#d6cbd8}.capibara.c-purple:not(.dark-theme) .corner{background:#d6cbd8;border-color:#ca61dc}.capibara.c-purple:not(.dark-theme) .container-tl header{background:#d6cbd8;border-bottom-color:#ca61dc}.capibara.c-purple:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d6cbd8)!important}.capibara.c-purple:not(.dark-theme) nav.right{border-color:#ca61dc}.capibara.c-purple.dark-theme .header-top,.capibara.c-purple.dark-theme nav.right{border-color:#52145d}.capibara.c-purple.dark-theme .container-tl header,.capibara.c-purple.dark-theme .corner{border-bottom-color:#52145d}.capibara.c-purple.dark-theme ::-moz-selection,.capibara.c-purple ::-moz-selection{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme ::selection,.capibara.c-purple ::selection{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme .progress-bar,.capibara.c-purple .progress-bar{background-color:rgba(156,39,176,.2)!important}.capibara.c-purple.dark-theme .progress-bar:after,.capibara.c-purple.dark-theme .progress-bar:before,.capibara.c-purple .progress-bar:after,.capibara.c-purple .progress-bar:before{background-color:#9c27b0!important}.capibara.c-purple.dark-theme select.tabs-select,.capibara.c-purple select.tabs-select{background-color:rgba(156,39,176,.7)!important;border-color:#9c27b0!important}.capibara.c-purple.dark-theme .time,.capibara.c-purple .time{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .time .symbol,.capibara.c-purple .time .symbol{color:#9c27b0}.capibara.c-purple.dark-theme .time input:active,.capibara.c-purple.dark-theme .time input:focus,.capibara.c-purple .time input:active,.capibara.c-purple .time input:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-box,.capibara.c-purple.dark-theme .input-section select.input-select,.capibara.c-purple .input-box,.capibara.c-purple .input-section select.input-select{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .input-section select.input-select:active,.capibara.c-purple.dark-theme .input-section select.input-select:focus,.capibara.c-purple .input-section select.input-select:active,.capibara.c-purple .input-section select.input-select:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-section .nav-input-file,.capibara.c-purple.dark-theme .input-section input.nav-input,.capibara.c-purple .input-section .nav-input-file,.capibara.c-purple .input-section input.nav-input{border-color:rgba(156,39,176,.6)}.capibara.c-purple.dark-theme .input-section .nav-input-file:active,.capibara.c-purple.dark-theme .input-section .nav-input-file:focus,.capibara.c-purple.dark-theme .input-section input.nav-input:active,.capibara.c-purple.dark-theme .input-section input.nav-input:focus,.capibara.c-purple .input-section .nav-input-file:active,.capibara.c-purple .input-section .nav-input-file:focus,.capibara.c-purple .input-section input.nav-input:active,.capibara.c-purple .input-section input.nav-input:focus{border-color:#9c27b0;box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-purple .input-section.msj-input-container textarea.msj{border:2px solid #9c27b0}.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-purple.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-purple .input-section.msj-input-container textarea.msj:active,.capibara.c-purple .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(156,39,176,.2)}.capibara.c-purple .cap-btn-raised,.capibara.c-purple.dark-theme .cap-btn-raised{border-color:#9c27b0;background:rgba(156,39,176,.8)}.capibara.c-purple .cap-btn-outline,.capibara.c-purple.dark-theme .cap-btn-outline{border-color:#9c27b0;color:#9c27b0}.capibara.c-purple .cap-btn-outline.selected,.capibara.c-purple.dark-theme .cap-btn-outline.selected{background:rgba(156,39,176,.8)}.capibara.c-purple.dark-theme .select-container .selected-day,.capibara.c-purple .select-container .selected-day{background:rgba(156,39,176,.3);box-shadow:inset 0 0 10px rgba(156,39,176,.5)}.capibara .c-purple--background{background:#9c27b0!important}.capibara .c-purple-d--background{background:#641971!important}.capibara .c-purple-l--background{background:#c34cd7!important}.capibara .c-purple--text{color:#9c27b0!important}.capibara .c-purple-d--text{color:#641971!important}.capibara .c-purple-l--text{color:#c34cd7!important}.capibara .detail-day .list-detail .item-detail.c-purple{background:rgba(156,39,176,.2);border:1px solid #9c27b0}.capibara .detail-day .list-detail .item-detail.c-purple .left-icon{background:#9c27b0}.capibara .detail-day .list-detail .item-detail.c-purple .left-icon.outlined{border:1px solid #9c27b0;box-shadow:inset 0 0 0 1px rgba(156,39,176,.7)}.capibara .detail-day .list-detail .item-detail.c-purple .name{color:#9c27b0}.capibara .float-box-container .float-box span.data.c-purple{--local-color:#9c27b0;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-purple,.capibara .float-box-container .float-box .dot.c-purple,.capibara .float-box-container .float-box .rowdot--row.c-purple .rowdot--dot{--local-color:#9c27b0}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple.active{background:rgba(156,39,176,.7);border-color:rgba(156,39,176,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple.active:hover{background:rgba(156,39,176,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-purple:hover{background:rgba(156,39,176,.2);border-color:rgba(156,39,176,.9)}.capibara .input-box .mini-input-section--icon.c-purple{background:#9c27b0}.capibara.c-deep-purple:not(.dark-theme){scrollbar-color:#6e529f transparent}.capibara.c-deep-purple:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#6e529f}.capibara.c-deep-purple:not(.dark-theme) .header-top{background:#dededf}.capibara.c-deep-purple:not(.dark-theme) .corner{background:#dededf;border-color:#9f80d7}.capibara.c-deep-purple:not(.dark-theme) .container-tl header{background:#dededf;border-bottom-color:#9f80d7}.capibara.c-deep-purple:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#dededf)!important}.capibara.c-deep-purple:not(.dark-theme) nav.right{border-color:#9f80d7}.capibara.c-deep-purple.dark-theme .header-top,.capibara.c-deep-purple.dark-theme nav.right{border-color:#3b216a}.capibara.c-deep-purple.dark-theme .container-tl header,.capibara.c-deep-purple.dark-theme .corner{border-bottom-color:#3b216a}.capibara.c-deep-purple.dark-theme ::-moz-selection,.capibara.c-deep-purple ::-moz-selection{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme ::selection,.capibara.c-deep-purple ::selection{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme .progress-bar,.capibara.c-deep-purple .progress-bar{background-color:rgba(103,58,183,.2)!important}.capibara.c-deep-purple.dark-theme .progress-bar:after,.capibara.c-deep-purple.dark-theme .progress-bar:before,.capibara.c-deep-purple .progress-bar:after,.capibara.c-deep-purple .progress-bar:before{background-color:#673ab7!important}.capibara.c-deep-purple.dark-theme select.tabs-select,.capibara.c-deep-purple select.tabs-select{background-color:rgba(103,58,183,.7)!important;border-color:#673ab7!important}.capibara.c-deep-purple.dark-theme .time,.capibara.c-deep-purple .time{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .time .symbol,.capibara.c-deep-purple .time .symbol{color:#673ab7}.capibara.c-deep-purple.dark-theme .time input:active,.capibara.c-deep-purple.dark-theme .time input:focus,.capibara.c-deep-purple .time input:active,.capibara.c-deep-purple .time input:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-box,.capibara.c-deep-purple.dark-theme .input-section select.input-select,.capibara.c-deep-purple .input-box,.capibara.c-deep-purple .input-section select.input-select{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .input-section select.input-select:active,.capibara.c-deep-purple.dark-theme .input-section select.input-select:focus,.capibara.c-deep-purple .input-section select.input-select:active,.capibara.c-deep-purple .input-section select.input-select:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-section .nav-input-file,.capibara.c-deep-purple.dark-theme .input-section input.nav-input,.capibara.c-deep-purple .input-section .nav-input-file,.capibara.c-deep-purple .input-section input.nav-input{border-color:rgba(103,58,183,.6)}.capibara.c-deep-purple.dark-theme .input-section .nav-input-file:active,.capibara.c-deep-purple.dark-theme .input-section .nav-input-file:focus,.capibara.c-deep-purple.dark-theme .input-section input.nav-input:active,.capibara.c-deep-purple.dark-theme .input-section input.nav-input:focus,.capibara.c-deep-purple .input-section .nav-input-file:active,.capibara.c-deep-purple .input-section .nav-input-file:focus,.capibara.c-deep-purple .input-section input.nav-input:active,.capibara.c-deep-purple .input-section input.nav-input:focus{border-color:#673ab7;box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj{border:2px solid #673ab7}.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-purple.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-purple .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(103,58,183,.2)}.capibara.c-deep-purple .cap-btn-raised,.capibara.c-deep-purple.dark-theme .cap-btn-raised{border-color:#673ab7;background:rgba(103,58,183,.8)}.capibara.c-deep-purple .cap-btn-outline,.capibara.c-deep-purple.dark-theme .cap-btn-outline{border-color:#673ab7;color:#673ab7}.capibara.c-deep-purple .cap-btn-outline.selected,.capibara.c-deep-purple.dark-theme .cap-btn-outline.selected{background:rgba(103,58,183,.8)}.capibara.c-deep-purple.dark-theme .select-container .selected-day,.capibara.c-deep-purple .select-container .selected-day{background:rgba(103,58,183,.3);box-shadow:inset 0 0 10px rgba(103,58,183,.5)}.capibara .c-deep-purple--background{background:#673ab7!important}.capibara .c-deep-purple-d--background{background:#46287d!important}.capibara .c-deep-purple-l--background{background:#916dd1!important}.capibara .c-deep-purple--text{color:#673ab7!important}.capibara .c-deep-purple-d--text{color:#46287d!important}.capibara .c-deep-purple-l--text{color:#916dd1!important}.capibara .detail-day .list-detail .item-detail.c-deep-purple{background:rgba(103,58,183,.2);border:1px solid #673ab7}.capibara .detail-day .list-detail .item-detail.c-deep-purple .left-icon{background:#673ab7}.capibara .detail-day .list-detail .item-detail.c-deep-purple .left-icon.outlined{border:1px solid #673ab7;box-shadow:inset 0 0 0 1px rgba(103,58,183,.7)}.capibara .detail-day .list-detail .item-detail.c-deep-purple .name{color:#673ab7}.capibara .float-box-container .float-box span.data.c-deep-purple{--local-color:#673ab7;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-deep-purple,.capibara .float-box-container .float-box .dot.c-deep-purple,.capibara .float-box-container .float-box .rowdot--row.c-deep-purple .rowdot--dot{--local-color:#673ab7}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple.active{background:rgba(103,58,183,.7);border-color:rgba(103,58,183,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple.active:hover{background:rgba(103,58,183,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-purple:hover{background:rgba(103,58,183,.2);border-color:rgba(103,58,183,.9)}.capibara .input-box .mini-input-section--icon.c-deep-purple{background:#673ab7}.capibara.c-indigo:not(.dark-theme){scrollbar-color:#57629d transparent}.capibara.c-indigo:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#57629d}.capibara.c-indigo:not(.dark-theme) .header-top{background:#e0e0e0}.capibara.c-indigo:not(.dark-theme) .corner{background:#e0e0e0;border-color:#8591d5}.capibara.c-indigo:not(.dark-theme) .container-tl header{background:#e0e0e0;border-bottom-color:#8591d5}.capibara.c-indigo:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#e0e0e0)!important}.capibara.c-indigo:not(.dark-theme) nav.right{border-color:#8591d5}.capibara.c-indigo.dark-theme .header-top,.capibara.c-indigo.dark-theme nav.right{border-color:#252f69}.capibara.c-indigo.dark-theme .container-tl header,.capibara.c-indigo.dark-theme .corner{border-bottom-color:#252f69}.capibara.c-indigo.dark-theme ::-moz-selection,.capibara.c-indigo ::-moz-selection{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme ::selection,.capibara.c-indigo ::selection{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme .progress-bar,.capibara.c-indigo .progress-bar{background-color:rgba(63,81,181,.2)!important}.capibara.c-indigo.dark-theme .progress-bar:after,.capibara.c-indigo.dark-theme .progress-bar:before,.capibara.c-indigo .progress-bar:after,.capibara.c-indigo .progress-bar:before{background-color:#3f51b5!important}.capibara.c-indigo.dark-theme select.tabs-select,.capibara.c-indigo select.tabs-select{background-color:rgba(63,81,181,.7)!important;border-color:#3f51b5!important}.capibara.c-indigo.dark-theme .time,.capibara.c-indigo .time{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .time .symbol,.capibara.c-indigo .time .symbol{color:#3f51b5}.capibara.c-indigo.dark-theme .time input:active,.capibara.c-indigo.dark-theme .time input:focus,.capibara.c-indigo .time input:active,.capibara.c-indigo .time input:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-box,.capibara.c-indigo.dark-theme .input-section select.input-select,.capibara.c-indigo .input-box,.capibara.c-indigo .input-section select.input-select{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .input-section select.input-select:active,.capibara.c-indigo.dark-theme .input-section select.input-select:focus,.capibara.c-indigo .input-section select.input-select:active,.capibara.c-indigo .input-section select.input-select:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-section .nav-input-file,.capibara.c-indigo.dark-theme .input-section input.nav-input,.capibara.c-indigo .input-section .nav-input-file,.capibara.c-indigo .input-section input.nav-input{border-color:rgba(63,81,181,.6)}.capibara.c-indigo.dark-theme .input-section .nav-input-file:active,.capibara.c-indigo.dark-theme .input-section .nav-input-file:focus,.capibara.c-indigo.dark-theme .input-section input.nav-input:active,.capibara.c-indigo.dark-theme .input-section input.nav-input:focus,.capibara.c-indigo .input-section .nav-input-file:active,.capibara.c-indigo .input-section .nav-input-file:focus,.capibara.c-indigo .input-section input.nav-input:active,.capibara.c-indigo .input-section input.nav-input:focus{border-color:#3f51b5;box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-indigo .input-section.msj-input-container textarea.msj{border:2px solid #3f51b5}.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-indigo.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-indigo .input-section.msj-input-container textarea.msj:active,.capibara.c-indigo .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(63,81,181,.2)}.capibara.c-indigo .cap-btn-raised,.capibara.c-indigo.dark-theme .cap-btn-raised{border-color:#3f51b5;background:rgba(63,81,181,.8)}.capibara.c-indigo .cap-btn-outline,.capibara.c-indigo.dark-theme .cap-btn-outline{border-color:#3f51b5;color:#3f51b5}.capibara.c-indigo .cap-btn-outline.selected,.capibara.c-indigo.dark-theme .cap-btn-outline.selected{background:rgba(63,81,181,.8)}.capibara.c-indigo.dark-theme .select-container .selected-day,.capibara.c-indigo .select-container .selected-day{background:rgba(63,81,181,.3);box-shadow:inset 0 0 10px rgba(63,81,181,.5)}.capibara .c-indigo--background{background:#3f51b5!important}.capibara .c-indigo-d--background{background:#2b387c!important}.capibara .c-indigo-l--background{background:#7280ce!important}.capibara .c-indigo--text{color:#3f51b5!important}.capibara .c-indigo-d--text{color:#2b387c!important}.capibara .c-indigo-l--text{color:#7280ce!important}.capibara .detail-day .list-detail .item-detail.c-indigo{background:rgba(63,81,181,.2);border:1px solid #3f51b5}.capibara .detail-day .list-detail .item-detail.c-indigo .left-icon{background:#3f51b5}.capibara .detail-day .list-detail .item-detail.c-indigo .left-icon.outlined{border:1px solid #3f51b5;box-shadow:inset 0 0 0 1px rgba(63,81,181,.7)}.capibara .detail-day .list-detail .item-detail.c-indigo .name{color:#3f51b5}.capibara .float-box-container .float-box span.data.c-indigo{--local-color:#3f51b5;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-indigo,.capibara .float-box-container .float-box .dot.c-indigo,.capibara .float-box-container .float-box .rowdot--row.c-indigo .rowdot--dot{--local-color:#3f51b5}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo.active{background:rgba(63,81,181,.7);border-color:rgba(63,81,181,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo.active:hover{background:rgba(63,81,181,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-indigo:hover{background:rgba(63,81,181,.2);border-color:rgba(63,81,181,.9)}.capibara .input-box .mini-input-section--icon.c-indigo{background:#3f51b5}.capibara.c-blue:not(.dark-theme){scrollbar-color:#3176bb transparent}.capibara.c-blue:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#3176bb}.capibara.c-blue:not(.dark-theme) .header-top{background:#d1dce6}.capibara.c-blue:not(.dark-theme) .corner{background:#d1dce6;border-color:#64a9ed}.capibara.c-blue:not(.dark-theme) .container-tl header{background:#d1dce6;border-bottom-color:#64a9ed}.capibara.c-blue:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d1dce6)!important}.capibara.c-blue:not(.dark-theme) nav.right{border-color:#64a9ed}.capibara.c-blue.dark-theme .header-top,.capibara.c-blue.dark-theme nav.right{border-color:#0e4377}.capibara.c-blue.dark-theme .container-tl header,.capibara.c-blue.dark-theme .corner{border-bottom-color:#0e4377}.capibara.c-blue.dark-theme ::-moz-selection,.capibara.c-blue ::-moz-selection{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme ::selection,.capibara.c-blue ::selection{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme .progress-bar,.capibara.c-blue .progress-bar{background-color:rgba(25,118,210,.2)!important}.capibara.c-blue.dark-theme .progress-bar:after,.capibara.c-blue.dark-theme .progress-bar:before,.capibara.c-blue .progress-bar:after,.capibara.c-blue .progress-bar:before{background-color:#1976d2!important}.capibara.c-blue.dark-theme select.tabs-select,.capibara.c-blue select.tabs-select{background-color:rgba(25,118,210,.7)!important;border-color:#1976d2!important}.capibara.c-blue.dark-theme .time,.capibara.c-blue .time{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .time .symbol,.capibara.c-blue .time .symbol{color:#1976d2}.capibara.c-blue.dark-theme .time input:active,.capibara.c-blue.dark-theme .time input:focus,.capibara.c-blue .time input:active,.capibara.c-blue .time input:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-box,.capibara.c-blue.dark-theme .input-section select.input-select,.capibara.c-blue .input-box,.capibara.c-blue .input-section select.input-select{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .input-section select.input-select:active,.capibara.c-blue.dark-theme .input-section select.input-select:focus,.capibara.c-blue .input-section select.input-select:active,.capibara.c-blue .input-section select.input-select:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-section .nav-input-file,.capibara.c-blue.dark-theme .input-section input.nav-input,.capibara.c-blue .input-section .nav-input-file,.capibara.c-blue .input-section input.nav-input{border-color:rgba(25,118,210,.6)}.capibara.c-blue.dark-theme .input-section .nav-input-file:active,.capibara.c-blue.dark-theme .input-section .nav-input-file:focus,.capibara.c-blue.dark-theme .input-section input.nav-input:active,.capibara.c-blue.dark-theme .input-section input.nav-input:focus,.capibara.c-blue .input-section .nav-input-file:active,.capibara.c-blue .input-section .nav-input-file:focus,.capibara.c-blue .input-section input.nav-input:active,.capibara.c-blue .input-section input.nav-input:focus{border-color:#1976d2;box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-blue .input-section.msj-input-container textarea.msj{border:2px solid #1976d2}.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-blue.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-blue .input-section.msj-input-container textarea.msj:active,.capibara.c-blue .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(25,118,210,.2)}.capibara.c-blue .cap-btn-raised,.capibara.c-blue.dark-theme .cap-btn-raised{border-color:#1976d2;background:rgba(25,118,210,.8)}.capibara.c-blue .cap-btn-outline,.capibara.c-blue.dark-theme .cap-btn-outline{border-color:#1976d2;color:#1976d2}.capibara.c-blue .cap-btn-outline.selected,.capibara.c-blue.dark-theme .cap-btn-outline.selected{background:rgba(25,118,210,.8)}.capibara.c-blue.dark-theme .select-container .selected-day,.capibara.c-blue .select-container .selected-day{background:rgba(25,118,210,.3);box-shadow:inset 0 0 10px rgba(25,118,210,.5)}.capibara .c-blue--background{background:#1976d2!important}.capibara .c-blue-d--background{background:#11508e!important}.capibara .c-blue-l--background{background:#4e9cea!important}.capibara .c-blue--text{color:#1976d2!important}.capibara .c-blue-d--text{color:#11508e!important}.capibara .c-blue-l--text{color:#4e9cea!important}.capibara .detail-day .list-detail .item-detail.c-blue{background:rgba(25,118,210,.2);border:1px solid #1976d2}.capibara .detail-day .list-detail .item-detail.c-blue .left-icon{background:#1976d2}.capibara .detail-day .list-detail .item-detail.c-blue .left-icon.outlined{border:1px solid #1976d2;box-shadow:inset 0 0 0 1px rgba(25,118,210,.7)}.capibara .detail-day .list-detail .item-detail.c-blue .name{color:#1976d2}.capibara .float-box-container .float-box span.data.c-blue{--local-color:#1976d2;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-blue,.capibara .float-box-container .float-box .dot.c-blue,.capibara .float-box-container .float-box .rowdot--row.c-blue .rowdot--dot{--local-color:#1976d2}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue.active{background:rgba(25,118,210,.7);border-color:rgba(25,118,210,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue.active:hover{background:rgba(25,118,210,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue:hover{background:rgba(25,118,210,.2);border-color:rgba(25,118,210,.9)}.capibara .input-box .mini-input-section--icon.c-blue{background:#1976d2}.capibara.c-light-blue:not(.dark-theme){scrollbar-color:#1ca0db transparent}.capibara.c-light-blue:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#1ca0db}.capibara.c-light-blue:not(.dark-theme) .header-top{background:#d3e7f0}.capibara.c-light-blue:not(.dark-theme) .corner{background:#d3e7f0;border-color:#60ccfd}.capibara.c-light-blue:not(.dark-theme) .container-tl header{background:#d3e7f0;border-bottom-color:#60ccfd}.capibara.c-light-blue:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#d3e7f0)!important}.capibara.c-light-blue:not(.dark-theme) nav.right{border-color:#60ccfd}.capibara.c-light-blue.dark-theme .header-top,.capibara.c-light-blue.dark-theme nav.right{border-color:#02638f}.capibara.c-light-blue.dark-theme .container-tl header,.capibara.c-light-blue.dark-theme .corner{border-bottom-color:#02638f}.capibara.c-light-blue.dark-theme ::-moz-selection,.capibara.c-light-blue ::-moz-selection{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme ::selection,.capibara.c-light-blue ::selection{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme .progress-bar,.capibara.c-light-blue .progress-bar{background-color:rgba(3,169,244,.2)!important}.capibara.c-light-blue.dark-theme .progress-bar:after,.capibara.c-light-blue.dark-theme .progress-bar:before,.capibara.c-light-blue .progress-bar:after,.capibara.c-light-blue .progress-bar:before{background-color:#03a9f4!important}.capibara.c-light-blue.dark-theme select.tabs-select,.capibara.c-light-blue select.tabs-select{background-color:rgba(3,169,244,.7)!important;border-color:#03a9f4!important}.capibara.c-light-blue.dark-theme .time,.capibara.c-light-blue .time{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .time .symbol,.capibara.c-light-blue .time .symbol{color:#03a9f4}.capibara.c-light-blue.dark-theme .time input:active,.capibara.c-light-blue.dark-theme .time input:focus,.capibara.c-light-blue .time input:active,.capibara.c-light-blue .time input:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-box,.capibara.c-light-blue.dark-theme .input-section select.input-select,.capibara.c-light-blue .input-box,.capibara.c-light-blue .input-section select.input-select{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .input-section select.input-select:active,.capibara.c-light-blue.dark-theme .input-section select.input-select:focus,.capibara.c-light-blue .input-section select.input-select:active,.capibara.c-light-blue .input-section select.input-select:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-section .nav-input-file,.capibara.c-light-blue.dark-theme .input-section input.nav-input,.capibara.c-light-blue .input-section .nav-input-file,.capibara.c-light-blue .input-section input.nav-input{border-color:rgba(3,169,244,.6)}.capibara.c-light-blue.dark-theme .input-section .nav-input-file:active,.capibara.c-light-blue.dark-theme .input-section .nav-input-file:focus,.capibara.c-light-blue.dark-theme .input-section input.nav-input:active,.capibara.c-light-blue.dark-theme .input-section input.nav-input:focus,.capibara.c-light-blue .input-section .nav-input-file:active,.capibara.c-light-blue .input-section .nav-input-file:focus,.capibara.c-light-blue .input-section input.nav-input:active,.capibara.c-light-blue .input-section input.nav-input:focus{border-color:#03a9f4;box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-light-blue .input-section.msj-input-container textarea.msj{border:2px solid #03a9f4}.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-light-blue.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-light-blue .input-section.msj-input-container textarea.msj:active,.capibara.c-light-blue .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(3,169,244,.2)}.capibara.c-light-blue .cap-btn-raised,.capibara.c-light-blue.dark-theme .cap-btn-raised{border-color:#03a9f4;background:rgba(3,169,244,.8)}.capibara.c-light-blue .cap-btn-outline,.capibara.c-light-blue.dark-theme .cap-btn-outline{border-color:#03a9f4;color:#03a9f4}.capibara.c-light-blue .cap-btn-outline.selected,.capibara.c-light-blue.dark-theme .cap-btn-outline.selected{background:rgba(3,169,244,.8)}.capibara.c-light-blue.dark-theme .select-container .selected-day,.capibara.c-light-blue .select-container .selected-day{background:rgba(3,169,244,.3);box-shadow:inset 0 0 10px rgba(3,169,244,.5)}.capibara .c-light-blue--background{background:#03a9f4!important}.capibara .c-light-blue-d--background{background:#0275a8!important}.capibara .c-light-blue-l--background{background:#47c4fd!important}.capibara .c-light-blue--text{color:#03a9f4!important}.capibara .c-light-blue-d--text{color:#0275a8!important}.capibara .c-light-blue-l--text{color:#47c4fd!important}.capibara .detail-day .list-detail .item-detail.c-light-blue{background:rgba(3,169,244,.2);border:1px solid #03a9f4}.capibara .detail-day .list-detail .item-detail.c-light-blue .left-icon{background:#03a9f4}.capibara .detail-day .list-detail .item-detail.c-light-blue .left-icon.outlined{border:1px solid #03a9f4;box-shadow:inset 0 0 0 1px rgba(3,169,244,.7)}.capibara .detail-day .list-detail .item-detail.c-light-blue .name{color:#03a9f4}.capibara .float-box-container .float-box span.data.c-light-blue{--local-color:#03a9f4;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-light-blue,.capibara .float-box-container .float-box .dot.c-light-blue,.capibara .float-box-container .float-box .rowdot--row.c-light-blue .rowdot--dot{--local-color:#03a9f4}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue.active{background:rgba(3,169,244,.7);border-color:rgba(3,169,244,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue.active:hover{background:rgba(3,169,244,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-blue:hover{background:rgba(3,169,244,.2);border-color:rgba(3,169,244,.9)}.capibara .input-box .mini-input-section--icon.c-light-blue{background:#03a9f4}.capibara.c-cyan:not(.dark-theme){scrollbar-color:#15acbf transparent}.capibara.c-cyan:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#15acbf}.capibara.c-cyan:not(.dark-theme) .header-top{background:#b9e2e8}.capibara.c-cyan:not(.dark-theme) .corner{background:#b9e2e8;border-color:#3be9ff}.capibara.c-cyan:not(.dark-theme) .container-tl header{background:#b9e2e8;border-bottom-color:#3be9ff}.capibara.c-cyan:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#b9e2e8)!important}.capibara.c-cyan:not(.dark-theme) nav.right{border-color:#3be9ff}.capibara.c-cyan.dark-theme .header-top,.capibara.c-cyan.dark-theme nav.right{border-color:#00626e}.capibara.c-cyan.dark-theme .container-tl header,.capibara.c-cyan.dark-theme .corner{border-bottom-color:#00626e}.capibara.c-cyan.dark-theme ::-moz-selection,.capibara.c-cyan ::-moz-selection{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme ::selection,.capibara.c-cyan ::selection{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme .progress-bar,.capibara.c-cyan .progress-bar{background-color:rgba(0,188,212,.2)!important}.capibara.c-cyan.dark-theme .progress-bar:after,.capibara.c-cyan.dark-theme .progress-bar:before,.capibara.c-cyan .progress-bar:after,.capibara.c-cyan .progress-bar:before{background-color:#00bcd4!important}.capibara.c-cyan.dark-theme select.tabs-select,.capibara.c-cyan select.tabs-select{background-color:rgba(0,188,212,.7)!important;border-color:#00bcd4!important}.capibara.c-cyan.dark-theme .time,.capibara.c-cyan .time{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .time .symbol,.capibara.c-cyan .time .symbol{color:#00bcd4}.capibara.c-cyan.dark-theme .time input:active,.capibara.c-cyan.dark-theme .time input:focus,.capibara.c-cyan .time input:active,.capibara.c-cyan .time input:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-box,.capibara.c-cyan.dark-theme .input-section select.input-select,.capibara.c-cyan .input-box,.capibara.c-cyan .input-section select.input-select{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .input-section select.input-select:active,.capibara.c-cyan.dark-theme .input-section select.input-select:focus,.capibara.c-cyan .input-section select.input-select:active,.capibara.c-cyan .input-section select.input-select:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-section .nav-input-file,.capibara.c-cyan.dark-theme .input-section input.nav-input,.capibara.c-cyan .input-section .nav-input-file,.capibara.c-cyan .input-section input.nav-input{border-color:rgba(0,188,212,.6)}.capibara.c-cyan.dark-theme .input-section .nav-input-file:active,.capibara.c-cyan.dark-theme .input-section .nav-input-file:focus,.capibara.c-cyan.dark-theme .input-section input.nav-input:active,.capibara.c-cyan.dark-theme .input-section input.nav-input:focus,.capibara.c-cyan .input-section .nav-input-file:active,.capibara.c-cyan .input-section .nav-input-file:focus,.capibara.c-cyan .input-section input.nav-input:active,.capibara.c-cyan .input-section input.nav-input:focus{border-color:#00bcd4;box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-cyan .input-section.msj-input-container textarea.msj{border:2px solid #00bcd4}.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-cyan.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-cyan .input-section.msj-input-container textarea.msj:active,.capibara.c-cyan .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(0,188,212,.2)}.capibara.c-cyan .cap-btn-raised,.capibara.c-cyan.dark-theme .cap-btn-raised{border-color:#00bcd4;background:rgba(0,188,212,.8)}.capibara.c-cyan .cap-btn-outline,.capibara.c-cyan.dark-theme .cap-btn-outline{border-color:#00bcd4;color:#00bcd4}.capibara.c-cyan .cap-btn-outline.selected,.capibara.c-cyan.dark-theme .cap-btn-outline.selected{background:rgba(0,188,212,.8)}.capibara.c-cyan.dark-theme .select-container .selected-day,.capibara.c-cyan .select-container .selected-day{background:rgba(0,188,212,.3);box-shadow:inset 0 0 10px rgba(0,188,212,.5)}.capibara .c-cyan--background{background:#00bcd4!important}.capibara .c-cyan-d--background{background:#007888!important}.capibara .c-cyan-l--background{background:#22e6ff!important}.capibara .c-cyan--text{color:#00bcd4!important}.capibara .c-cyan-d--text{color:#007888!important}.capibara .c-cyan-l--text{color:#22e6ff!important}.capibara .detail-day .list-detail .item-detail.c-cyan{background:rgba(0,188,212,.2);border:1px solid #00bcd4}.capibara .detail-day .list-detail .item-detail.c-cyan .left-icon{background:#00bcd4}.capibara .detail-day .list-detail .item-detail.c-cyan .left-icon.outlined{border:1px solid #00bcd4;box-shadow:inset 0 0 0 1px rgba(0,188,212,.7)}.capibara .detail-day .list-detail .item-detail.c-cyan .name{color:#00bcd4}.capibara .float-box-container .float-box span.data.c-cyan{--local-color:#00bcd4;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-cyan,.capibara .float-box-container .float-box .dot.c-cyan,.capibara .float-box-container .float-box .rowdot--row.c-cyan .rowdot--dot{--local-color:#00bcd4}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan.active{background:rgba(0,188,212,.7);border-color:rgba(0,188,212,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan.active:hover{background:rgba(0,188,212,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-cyan:hover{background:rgba(0,188,212,.2);border-color:rgba(0,188,212,.9)}.capibara .input-box .mini-input-section--icon.c-cyan{background:#00bcd4}.capibara.c-teal:not(.dark-theme){scrollbar-color:#0f877c transparent}.capibara.c-teal:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#0f877c}.capibara.c-teal:not(.dark-theme) .header-top{background:#8ad8d1}.capibara.c-teal:not(.dark-theme) .corner{background:#8ad8d1;border-color:#00fce4}.capibara.c-teal:not(.dark-theme) .container-tl header{background:#8ad8d1;border-bottom-color:#00fce4}.capibara.c-teal:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#8ad8d1)!important}.capibara.c-teal:not(.dark-theme) nav.right{border-color:#00fce4}.capibara.c-teal.dark-theme .header-top,.capibara.c-teal.dark-theme nav.right{border-color:#00302c}.capibara.c-teal.dark-theme .container-tl header,.capibara.c-teal.dark-theme .corner{border-bottom-color:#00302c}.capibara.c-teal.dark-theme ::-moz-selection,.capibara.c-teal ::-moz-selection{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme ::selection,.capibara.c-teal ::selection{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme .progress-bar,.capibara.c-teal .progress-bar{background-color:rgba(0,150,136,.2)!important}.capibara.c-teal.dark-theme .progress-bar:after,.capibara.c-teal.dark-theme .progress-bar:before,.capibara.c-teal .progress-bar:after,.capibara.c-teal .progress-bar:before{background-color:#009688!important}.capibara.c-teal.dark-theme select.tabs-select,.capibara.c-teal select.tabs-select{background-color:rgba(0,150,136,.7)!important;border-color:#009688!important}.capibara.c-teal.dark-theme .time,.capibara.c-teal .time{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .time .symbol,.capibara.c-teal .time .symbol{color:#009688}.capibara.c-teal.dark-theme .time input:active,.capibara.c-teal.dark-theme .time input:focus,.capibara.c-teal .time input:active,.capibara.c-teal .time input:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-box,.capibara.c-teal.dark-theme .input-section select.input-select,.capibara.c-teal .input-box,.capibara.c-teal .input-section select.input-select{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .input-section select.input-select:active,.capibara.c-teal.dark-theme .input-section select.input-select:focus,.capibara.c-teal .input-section select.input-select:active,.capibara.c-teal .input-section select.input-select:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-section .nav-input-file,.capibara.c-teal.dark-theme .input-section input.nav-input,.capibara.c-teal .input-section .nav-input-file,.capibara.c-teal .input-section input.nav-input{border-color:rgba(0,150,136,.6)}.capibara.c-teal.dark-theme .input-section .nav-input-file:active,.capibara.c-teal.dark-theme .input-section .nav-input-file:focus,.capibara.c-teal.dark-theme .input-section input.nav-input:active,.capibara.c-teal.dark-theme .input-section input.nav-input:focus,.capibara.c-teal .input-section .nav-input-file:active,.capibara.c-teal .input-section .nav-input-file:focus,.capibara.c-teal .input-section input.nav-input:active,.capibara.c-teal .input-section input.nav-input:focus{border-color:#009688;box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-teal .input-section.msj-input-container textarea.msj{border:2px solid #009688}.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-teal.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-teal .input-section.msj-input-container textarea.msj:active,.capibara.c-teal .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(0,150,136,.2)}.capibara.c-teal .cap-btn-raised,.capibara.c-teal.dark-theme .cap-btn-raised{border-color:#009688;background:rgba(0,150,136,.8)}.capibara.c-teal .cap-btn-outline,.capibara.c-teal.dark-theme .cap-btn-outline{border-color:#009688;color:#009688}.capibara.c-teal .cap-btn-outline.selected,.capibara.c-teal.dark-theme .cap-btn-outline.selected{background:rgba(0,150,136,.8)}.capibara.c-teal.dark-theme .select-container .selected-day,.capibara.c-teal .select-container .selected-day{background:rgba(0,150,136,.3);box-shadow:inset 0 0 10px rgba(0,150,136,.5)}.capibara .c-teal--background{background:#009688!important}.capibara .c-teal-d--background{background:#004a43!important}.capibara .c-teal-l--background{background:#00e3cd!important}.capibara .c-teal--text{color:#009688!important}.capibara .c-teal-d--text{color:#004a43!important}.capibara .c-teal-l--text{color:#00e3cd!important}.capibara .detail-day .list-detail .item-detail.c-teal{background:rgba(0,150,136,.2);border:1px solid #009688}.capibara .detail-day .list-detail .item-detail.c-teal .left-icon{background:#009688}.capibara .detail-day .list-detail .item-detail.c-teal .left-icon.outlined{border:1px solid #009688;box-shadow:inset 0 0 0 1px rgba(0,150,136,.7)}.capibara .detail-day .list-detail .item-detail.c-teal .name{color:#009688}.capibara .float-box-container .float-box span.data.c-teal{--local-color:#009688;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-teal,.capibara .float-box-container .float-box .dot.c-teal,.capibara .float-box-container .float-box .rowdot--row.c-teal .rowdot--dot{--local-color:#009688}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal.active{background:rgba(0,150,136,.7);border-color:rgba(0,150,136,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal.active:hover{background:rgba(0,150,136,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-teal:hover{background:rgba(0,150,136,.2);border-color:rgba(0,150,136,.9)}.capibara .input-box .mini-input-section--icon.c-teal{background:#009688}.capibara.c-green:not(.dark-theme){scrollbar-color:#3f6c41 transparent}.capibara.c-green:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#3f6c41}.capibara.c-green:not(.dark-theme) .header-top{background:#bcbcbc}.capibara.c-green:not(.dark-theme) .corner{background:#bcbcbc;border-color:#52bf57}.capibara.c-green:not(.dark-theme) .container-tl header{background:#bcbcbc;border-bottom-color:#52bf57}.capibara.c-green:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#bcbcbc)!important}.capibara.c-green:not(.dark-theme) nav.right{border-color:#52bf57}.capibara.c-green.dark-theme .header-top,.capibara.c-green.dark-theme nav.right{border-color:#133214}.capibara.c-green.dark-theme .container-tl header,.capibara.c-green.dark-theme .corner{border-bottom-color:#133214}.capibara.c-green.dark-theme ::-moz-selection,.capibara.c-green ::-moz-selection{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme ::selection,.capibara.c-green ::selection{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme .progress-bar,.capibara.c-green .progress-bar{background-color:rgba(46,125,50,.2)!important}.capibara.c-green.dark-theme .progress-bar:after,.capibara.c-green.dark-theme .progress-bar:before,.capibara.c-green .progress-bar:after,.capibara.c-green .progress-bar:before{background-color:#2e7d32!important}.capibara.c-green.dark-theme select.tabs-select,.capibara.c-green select.tabs-select{background-color:rgba(46,125,50,.7)!important;border-color:#2e7d32!important}.capibara.c-green.dark-theme .time,.capibara.c-green .time{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .time .symbol,.capibara.c-green .time .symbol{color:#2e7d32}.capibara.c-green.dark-theme .time input:active,.capibara.c-green.dark-theme .time input:focus,.capibara.c-green .time input:active,.capibara.c-green .time input:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-box,.capibara.c-green.dark-theme .input-section select.input-select,.capibara.c-green .input-box,.capibara.c-green .input-section select.input-select{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .input-section select.input-select:active,.capibara.c-green.dark-theme .input-section select.input-select:focus,.capibara.c-green .input-section select.input-select:active,.capibara.c-green .input-section select.input-select:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-section .nav-input-file,.capibara.c-green.dark-theme .input-section input.nav-input,.capibara.c-green .input-section .nav-input-file,.capibara.c-green .input-section input.nav-input{border-color:rgba(46,125,50,.6)}.capibara.c-green.dark-theme .input-section .nav-input-file:active,.capibara.c-green.dark-theme .input-section .nav-input-file:focus,.capibara.c-green.dark-theme .input-section input.nav-input:active,.capibara.c-green.dark-theme .input-section input.nav-input:focus,.capibara.c-green .input-section .nav-input-file:active,.capibara.c-green .input-section .nav-input-file:focus,.capibara.c-green .input-section input.nav-input:active,.capibara.c-green .input-section input.nav-input:focus{border-color:#2e7d32;box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-green .input-section.msj-input-container textarea.msj{border:2px solid #2e7d32}.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-green.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-green .input-section.msj-input-container textarea.msj:active,.capibara.c-green .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(46,125,50,.2)}.capibara.c-green .cap-btn-raised,.capibara.c-green.dark-theme .cap-btn-raised{border-color:#2e7d32;background:rgba(46,125,50,.8)}.capibara.c-green .cap-btn-outline,.capibara.c-green.dark-theme .cap-btn-outline{border-color:#2e7d32;color:#2e7d32}.capibara.c-green .cap-btn-outline.selected,.capibara.c-green.dark-theme .cap-btn-outline.selected{background:rgba(46,125,50,.8)}.capibara.c-green.dark-theme .select-container .selected-day,.capibara.c-green .select-container .selected-day{background:rgba(46,125,50,.3);box-shadow:inset 0 0 10px rgba(46,125,50,.5)}.capibara .c-green--background{background:#2e7d32!important}.capibara .c-green-d--background{background:#19451c!important}.capibara .c-green-l--background{background:#43b548!important}.capibara .c-green--text{color:#2e7d32!important}.capibara .c-green-d--text{color:#19451c!important}.capibara .c-green-l--text{color:#43b548!important}.capibara .detail-day .list-detail .item-detail.c-green{background:rgba(46,125,50,.2);border:1px solid #2e7d32}.capibara .detail-day .list-detail .item-detail.c-green .left-icon{background:#2e7d32}.capibara .detail-day .list-detail .item-detail.c-green .left-icon.outlined{border:1px solid #2e7d32;box-shadow:inset 0 0 0 1px rgba(46,125,50,.7)}.capibara .detail-day .list-detail .item-detail.c-green .name{color:#2e7d32}.capibara .float-box-container .float-box span.data.c-green{--local-color:#2e7d32;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-green,.capibara .float-box-container .float-box .dot.c-green,.capibara .float-box-container .float-box .rowdot--row.c-green .rowdot--dot{--local-color:#2e7d32}.capibara .header-top .tabs-container .tab:not(.disabled).c-green.active{background:rgba(46,125,50,.7);border-color:rgba(46,125,50,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-green.active:hover{background:rgba(46,125,50,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-green:hover{background:rgba(46,125,50,.2);border-color:rgba(46,125,50,.9)}.capibara .input-box .mini-input-section--icon.c-green{background:#2e7d32}.capibara.c-light-green:not(.dark-theme){scrollbar-color:#89ab62 transparent}.capibara.c-light-green:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#89ab62}.capibara.c-light-green:not(.dark-theme) .header-top{background:#ededec}.capibara.c-light-green:not(.dark-theme) .corner{background:#ededec;border-color:#bcdc97}.capibara.c-light-green:not(.dark-theme) .container-tl header{background:#ededec;border-bottom-color:#bcdc97}.capibara.c-light-green:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#ededec)!important}.capibara.c-light-green:not(.dark-theme) nav.right{border-color:#bcdc97}.capibara.c-light-green.dark-theme .header-top,.capibara.c-light-green.dark-theme nav.right{border-color:#577d2a}.capibara.c-light-green.dark-theme .container-tl header,.capibara.c-light-green.dark-theme .corner{border-bottom-color:#577d2a}.capibara.c-light-green.dark-theme ::-moz-selection,.capibara.c-light-green ::-moz-selection{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme ::selection,.capibara.c-light-green ::selection{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme .progress-bar,.capibara.c-light-green .progress-bar{background-color:rgba(139,195,74,.2)!important}.capibara.c-light-green.dark-theme .progress-bar:after,.capibara.c-light-green.dark-theme .progress-bar:before,.capibara.c-light-green .progress-bar:after,.capibara.c-light-green .progress-bar:before{background-color:#8bc34a!important}.capibara.c-light-green.dark-theme select.tabs-select,.capibara.c-light-green select.tabs-select{background-color:rgba(139,195,74,.7)!important;border-color:#8bc34a!important}.capibara.c-light-green.dark-theme .time,.capibara.c-light-green .time{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .time .symbol,.capibara.c-light-green .time .symbol{color:#8bc34a}.capibara.c-light-green.dark-theme .time input:active,.capibara.c-light-green.dark-theme .time input:focus,.capibara.c-light-green .time input:active,.capibara.c-light-green .time input:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-box,.capibara.c-light-green.dark-theme .input-section select.input-select,.capibara.c-light-green .input-box,.capibara.c-light-green .input-section select.input-select{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .input-section select.input-select:active,.capibara.c-light-green.dark-theme .input-section select.input-select:focus,.capibara.c-light-green .input-section select.input-select:active,.capibara.c-light-green .input-section select.input-select:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-section .nav-input-file,.capibara.c-light-green.dark-theme .input-section input.nav-input,.capibara.c-light-green .input-section .nav-input-file,.capibara.c-light-green .input-section input.nav-input{border-color:rgba(139,195,74,.6)}.capibara.c-light-green.dark-theme .input-section .nav-input-file:active,.capibara.c-light-green.dark-theme .input-section .nav-input-file:focus,.capibara.c-light-green.dark-theme .input-section input.nav-input:active,.capibara.c-light-green.dark-theme .input-section input.nav-input:focus,.capibara.c-light-green .input-section .nav-input-file:active,.capibara.c-light-green .input-section .nav-input-file:focus,.capibara.c-light-green .input-section input.nav-input:active,.capibara.c-light-green .input-section input.nav-input:focus{border-color:#8bc34a;box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-light-green .input-section.msj-input-container textarea.msj{border:2px solid #8bc34a}.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-light-green.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-light-green .input-section.msj-input-container textarea.msj:active,.capibara.c-light-green .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(139,195,74,.2)}.capibara.c-light-green .cap-btn-raised,.capibara.c-light-green.dark-theme .cap-btn-raised{border-color:#8bc34a;background:rgba(139,195,74,.8)}.capibara.c-light-green .cap-btn-outline,.capibara.c-light-green.dark-theme .cap-btn-outline{border-color:#8bc34a;color:#8bc34a}.capibara.c-light-green .cap-btn-outline.selected,.capibara.c-light-green.dark-theme .cap-btn-outline.selected{background:rgba(139,195,74,.8)}.capibara.c-light-green.dark-theme .select-container .selected-day,.capibara.c-light-green .select-container .selected-day{background:rgba(139,195,74,.3);box-shadow:inset 0 0 10px rgba(139,195,74,.5)}.capibara .c-light-green--background{background:#8bc34a!important}.capibara .c-light-green-d--background{background:#649130!important}.capibara .c-light-green-l--background{background:#b0d683!important}.capibara .c-light-green--text{color:#8bc34a!important}.capibara .c-light-green-d--text{color:#649130!important}.capibara .c-light-green-l--text{color:#b0d683!important}.capibara .detail-day .list-detail .item-detail.c-light-green{background:rgba(139,195,74,.2);border:1px solid #8bc34a}.capibara .detail-day .list-detail .item-detail.c-light-green .left-icon{background:#8bc34a}.capibara .detail-day .list-detail .item-detail.c-light-green .left-icon.outlined{border:1px solid #8bc34a;box-shadow:inset 0 0 0 1px rgba(139,195,74,.7)}.capibara .detail-day .list-detail .item-detail.c-light-green .name{color:#8bc34a}.capibara .float-box-container .float-box span.data.c-light-green{--local-color:#8bc34a;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-light-green,.capibara .float-box-container .float-box .dot.c-light-green,.capibara .float-box-container .float-box .rowdot--row.c-light-green .rowdot--dot{--local-color:#8bc34a}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green.active{background:rgba(139,195,74,.7);border-color:rgba(139,195,74,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green.active:hover{background:rgba(139,195,74,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-light-green:hover{background:rgba(139,195,74,.2);border-color:rgba(139,195,74,.9)}.capibara .input-box .mini-input-section--icon.c-light-green{background:#8bc34a}.capibara.c-lime:not(.dark-theme){scrollbar-color:#bac550 transparent}.capibara.c-lime:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#bac550}.capibara.c-lime:not(.dark-theme) .header-top{background:#f3f3ee}.capibara.c-lime:not(.dark-theme) .corner{background:#f3f3ee;border-color:#e3eb90}.capibara.c-lime:not(.dark-theme) .container-tl header{background:#f3f3ee;border-bottom-color:#e3eb90}.capibara.c-lime:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f3f3ee)!important}.capibara.c-lime:not(.dark-theme) nav.right{border-color:#e3eb90}.capibara.c-lime.dark-theme .header-top,.capibara.c-lime.dark-theme nav.right{border-color:#89951a}.capibara.c-lime.dark-theme .container-tl header,.capibara.c-lime.dark-theme .corner{border-bottom-color:#89951a}.capibara.c-lime.dark-theme ::-moz-selection,.capibara.c-lime ::-moz-selection{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme ::selection,.capibara.c-lime ::selection{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme .progress-bar,.capibara.c-lime .progress-bar{background-color:rgba(205,220,57,.2)!important}.capibara.c-lime.dark-theme .progress-bar:after,.capibara.c-lime.dark-theme .progress-bar:before,.capibara.c-lime .progress-bar:after,.capibara.c-lime .progress-bar:before{background-color:#cddc39!important}.capibara.c-lime.dark-theme select.tabs-select,.capibara.c-lime select.tabs-select{background-color:rgba(205,220,57,.7)!important;border-color:#cddc39!important}.capibara.c-lime.dark-theme .time,.capibara.c-lime .time{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .time .symbol,.capibara.c-lime .time .symbol{color:#cddc39}.capibara.c-lime.dark-theme .time input:active,.capibara.c-lime.dark-theme .time input:focus,.capibara.c-lime .time input:active,.capibara.c-lime .time input:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-box,.capibara.c-lime.dark-theme .input-section select.input-select,.capibara.c-lime .input-box,.capibara.c-lime .input-section select.input-select{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .input-section select.input-select:active,.capibara.c-lime.dark-theme .input-section select.input-select:focus,.capibara.c-lime .input-section select.input-select:active,.capibara.c-lime .input-section select.input-select:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-section .nav-input-file,.capibara.c-lime.dark-theme .input-section input.nav-input,.capibara.c-lime .input-section .nav-input-file,.capibara.c-lime .input-section input.nav-input{border-color:rgba(205,220,57,.6)}.capibara.c-lime.dark-theme .input-section .nav-input-file:active,.capibara.c-lime.dark-theme .input-section .nav-input-file:focus,.capibara.c-lime.dark-theme .input-section input.nav-input:active,.capibara.c-lime.dark-theme .input-section input.nav-input:focus,.capibara.c-lime .input-section .nav-input-file:active,.capibara.c-lime .input-section .nav-input-file:focus,.capibara.c-lime .input-section input.nav-input:active,.capibara.c-lime .input-section input.nav-input:focus{border-color:#cddc39;box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-lime .input-section.msj-input-container textarea.msj{border:2px solid #cddc39}.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-lime.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-lime .input-section.msj-input-container textarea.msj:active,.capibara.c-lime .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(205,220,57,.2)}.capibara.c-lime .cap-btn-raised,.capibara.c-lime.dark-theme .cap-btn-raised{border-color:#cddc39;background:rgba(205,220,57,.8)}.capibara.c-lime .cap-btn-outline,.capibara.c-lime.dark-theme .cap-btn-outline{border-color:#cddc39;color:#cddc39}.capibara.c-lime .cap-btn-outline.selected,.capibara.c-lime.dark-theme .cap-btn-outline.selected{background:rgba(205,220,57,.8)}.capibara.c-lime.dark-theme .select-container .selected-day,.capibara.c-lime .select-container .selected-day{background:rgba(205,220,57,.3);box-shadow:inset 0 0 10px rgba(205,220,57,.5)}.capibara .c-lime--background{background:#cddc39!important}.capibara .c-lime-d--background{background:#9daa1e!important}.capibara .c-lime-l--background{background:#dde77a!important}.capibara .c-lime--text{color:#cddc39!important}.capibara .c-lime-d--text{color:#9daa1e!important}.capibara .c-lime-l--text{color:#dde77a!important}.capibara .detail-day .list-detail .item-detail.c-lime{background:rgba(205,220,57,.2);border:1px solid #cddc39}.capibara .detail-day .list-detail .item-detail.c-lime .left-icon{background:#cddc39}.capibara .detail-day .list-detail .item-detail.c-lime .left-icon.outlined{border:1px solid #cddc39;box-shadow:inset 0 0 0 1px rgba(205,220,57,.7)}.capibara .detail-day .list-detail .item-detail.c-lime .name{color:#cddc39}.capibara .float-box-container .float-box span.data.c-lime{--local-color:#cddc39;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-lime,.capibara .float-box-container .float-box .dot.c-lime,.capibara .float-box-container .float-box .rowdot--row.c-lime .rowdot--dot{--local-color:#cddc39}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime.active{background:rgba(205,220,57,.7);border-color:rgba(205,220,57,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime.active:hover{background:rgba(205,220,57,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-lime:hover{background:rgba(205,220,57,.2);border-color:rgba(205,220,57,.9)}.capibara .input-box .mini-input-section--icon.c-lime{background:#cddc39}.capibara.c-yellow:not(.dark-theme){scrollbar-color:#ebdb4f transparent}.capibara.c-yellow:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#ebdb4f}.capibara.c-yellow:not(.dark-theme) .header-top{background:#fff}.capibara.c-yellow:not(.dark-theme) .corner{background:#fff;border-color:#fff5a1}.capibara.c-yellow:not(.dark-theme) .container-tl header{background:#fff;border-bottom-color:#fff5a1}.capibara.c-yellow:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#fff)!important}.capibara.c-yellow:not(.dark-theme) nav.right{border-color:#fff5a1}.capibara.c-yellow.dark-theme .header-top,.capibara.c-yellow.dark-theme nav.right{border-color:#d4be00}.capibara.c-yellow.dark-theme .container-tl header,.capibara.c-yellow.dark-theme .corner{border-bottom-color:#d4be00}.capibara.c-yellow.dark-theme ::-moz-selection,.capibara.c-yellow ::-moz-selection{background-color:rgba(255,235,59,.2)!important}.capibara.c-yellow.dark-theme ::selection,.capibara.c-yellow ::selection{background-color:rgba(255,235,59,.2)!important}.capibara.c-yellow.dark-theme .progress-bar,.capibara.c-yellow .progress-bar{background-color:rgba(255,235,59,.2)!important}.capibara.c-yellow.dark-theme .progress-bar:after,.capibara.c-yellow.dark-theme .progress-bar:before,.capibara.c-yellow .progress-bar:after,.capibara.c-yellow .progress-bar:before{background-color:#ffeb3b!important}.capibara.c-yellow.dark-theme select.tabs-select,.capibara.c-yellow select.tabs-select{background-color:rgba(255,235,59,.7)!important;border-color:#ffeb3b!important}.capibara.c-yellow.dark-theme .time,.capibara.c-yellow .time{border-color:rgba(255,235,59,.6)}.capibara.c-yellow.dark-theme .time .symbol,.capibara.c-yellow .time .symbol{color:#ffeb3b}.capibara.c-yellow.dark-theme .time input:active,.capibara.c-yellow.dark-theme .time input:focus,.capibara.c-yellow .time input:active,.capibara.c-yellow .time input:focus{border-color:#ffeb3b;box-shadow:0 4px 6px rgba(255,235,59,.2)}.capibara.c-yellow.dark-theme .input-box,.capibara.c-yellow.dark-theme .input-section select.input-select,.capibara.c-yellow .input-box,.capibara.c-yellow .input-section select.input-select{border-color:rgba(255,235,59,.6)}.capibara.c-yellow.dark-theme .input-section select.input-select:active,.capibara.c-yellow.dark-theme .input-section select.input-select:focus,.capibara.c-yellow .input-section select.input-select:active,.capibara.c-yellow .input-section select.input-select:focus{border-color:#ffeb3b;box-shadow:0 4px 6px rgba(255,235,59,.2)}.capibara.c-yellow.dark-theme .input-section .nav-input-file,.capibara.c-yellow.dark-theme .input-section input.nav-input,.capibara.c-yellow .input-section .nav-input-file,.capibara.c-yellow .input-section input.nav-input{border-color:rgba(255,235,59,.6)}.capibara.c-yellow.dark-theme .input-section .nav-input-file:active,.capibara.c-yellow.dark-theme .input-section .nav-input-file:focus,.capibara.c-yellow.dark-theme .input-section input.nav-input:active,.capibara.c-yellow.dark-theme .input-section input.nav-input:focus,.capibara.c-yellow .input-section .nav-input-file:active,.capibara.c-yellow .input-section .nav-input-file:focus,.capibara.c-yellow .input-section input.nav-input:active,.capibara.c-yellow .input-section input.nav-input:focus{border-color:#ffeb3b;box-shadow:0 4px 6px rgba(255,235,59,.2)}.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-yellow .input-section.msj-input-container textarea.msj{border:2px solid #ffeb3b}.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-yellow.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-yellow .input-section.msj-input-container textarea.msj:active,.capibara.c-yellow .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,235,59,.2)}.capibara.c-yellow .cap-btn-raised,.capibara.c-yellow.dark-theme .cap-btn-raised{border-color:#ffeb3b;background:rgba(255,235,59,.8)}.capibara.c-yellow .cap-btn-outline,.capibara.c-yellow.dark-theme .cap-btn-outline{border-color:#ffeb3b;color:#ffeb3b}.capibara.c-yellow .cap-btn-outline.selected,.capibara.c-yellow.dark-theme .cap-btn-outline.selected{background:rgba(255,235,59,.8)}.capibara.c-yellow.dark-theme .select-container .selected-day,.capibara.c-yellow .select-container .selected-day{background:rgba(255,235,59,.3);box-shadow:inset 0 0 10px rgba(255,235,59,.5)}.capibara .c-yellow--background{background:#ffeb3b!important}.capibara .c-yellow-d--background{background:#eed500!important}.capibara .c-yellow-l--background{background:#fff388!important}.capibara .c-yellow--text{color:#ffeb3b!important}.capibara .c-yellow-d--text{color:#eed500!important}.capibara .c-yellow-l--text{color:#fff388!important}.capibara .detail-day .list-detail .item-detail.c-yellow{background:rgba(255,235,59,.2);border:1px solid #ffeb3b}.capibara .detail-day .list-detail .item-detail.c-yellow .left-icon{background:#ffeb3b}.capibara .detail-day .list-detail .item-detail.c-yellow .left-icon.outlined{border:1px solid #ffeb3b;box-shadow:inset 0 0 0 1px rgba(255,235,59,.7)}.capibara .detail-day .list-detail .item-detail.c-yellow .name{color:#ffeb3b}.capibara .float-box-container .float-box span.data.c-yellow{--local-color:#ffeb3b;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-yellow,.capibara .float-box-container .float-box .dot.c-yellow,.capibara .float-box-container .float-box .rowdot--row.c-yellow .rowdot--dot{--local-color:#ffeb3b}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow.active{background:rgba(255,235,59,.7);border-color:rgba(255,235,59,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow.active:hover{background:rgba(255,235,59,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-yellow:hover{background:rgba(255,235,59,.2);border-color:rgba(255,235,59,.9)}.capibara .input-box .mini-input-section--icon.c-yellow{background:#ffeb3b}.capibara.c-amber:not(.dark-theme){scrollbar-color:#e6b520 transparent}.capibara.c-amber:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#e6b520}.capibara.c-amber:not(.dark-theme) .header-top{background:#f4efde}.capibara.c-amber:not(.dark-theme) .corner{background:#f4efde;border-color:#ffdb6d}.capibara.c-amber:not(.dark-theme) .container-tl header{background:#f4efde;border-bottom-color:#ffdb6d}.capibara.c-amber:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f4efde)!important}.capibara.c-amber:not(.dark-theme) nav.right{border-color:#ffdb6d}.capibara.c-amber.dark-theme .header-top,.capibara.c-amber.dark-theme nav.right{border-color:#a07800}.capibara.c-amber.dark-theme .container-tl header,.capibara.c-amber.dark-theme .corner{border-bottom-color:#a07800}.capibara.c-amber.dark-theme ::-moz-selection,.capibara.c-amber ::-moz-selection{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme ::selection,.capibara.c-amber ::selection{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme .progress-bar,.capibara.c-amber .progress-bar{background-color:rgba(255,193,7,.2)!important}.capibara.c-amber.dark-theme .progress-bar:after,.capibara.c-amber.dark-theme .progress-bar:before,.capibara.c-amber .progress-bar:after,.capibara.c-amber .progress-bar:before{background-color:#ffc107!important}.capibara.c-amber.dark-theme select.tabs-select,.capibara.c-amber select.tabs-select{background-color:rgba(255,193,7,.7)!important;border-color:#ffc107!important}.capibara.c-amber.dark-theme .time,.capibara.c-amber .time{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .time .symbol,.capibara.c-amber .time .symbol{color:#ffc107}.capibara.c-amber.dark-theme .time input:active,.capibara.c-amber.dark-theme .time input:focus,.capibara.c-amber .time input:active,.capibara.c-amber .time input:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-box,.capibara.c-amber.dark-theme .input-section select.input-select,.capibara.c-amber .input-box,.capibara.c-amber .input-section select.input-select{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .input-section select.input-select:active,.capibara.c-amber.dark-theme .input-section select.input-select:focus,.capibara.c-amber .input-section select.input-select:active,.capibara.c-amber .input-section select.input-select:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-section .nav-input-file,.capibara.c-amber.dark-theme .input-section input.nav-input,.capibara.c-amber .input-section .nav-input-file,.capibara.c-amber .input-section input.nav-input{border-color:rgba(255,193,7,.6)}.capibara.c-amber.dark-theme .input-section .nav-input-file:active,.capibara.c-amber.dark-theme .input-section .nav-input-file:focus,.capibara.c-amber.dark-theme .input-section input.nav-input:active,.capibara.c-amber.dark-theme .input-section input.nav-input:focus,.capibara.c-amber .input-section .nav-input-file:active,.capibara.c-amber .input-section .nav-input-file:focus,.capibara.c-amber .input-section input.nav-input:active,.capibara.c-amber .input-section input.nav-input:focus{border-color:#ffc107;box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-amber .input-section.msj-input-container textarea.msj{border:2px solid #ffc107}.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-amber.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-amber .input-section.msj-input-container textarea.msj:active,.capibara.c-amber .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,193,7,.2)}.capibara.c-amber .cap-btn-raised,.capibara.c-amber.dark-theme .cap-btn-raised{border-color:#ffc107;background:rgba(255,193,7,.8)}.capibara.c-amber .cap-btn-outline,.capibara.c-amber.dark-theme .cap-btn-outline{border-color:#ffc107;color:#ffc107}.capibara.c-amber .cap-btn-outline.selected,.capibara.c-amber.dark-theme .cap-btn-outline.selected{background:rgba(255,193,7,.8)}.capibara.c-amber.dark-theme .select-container .selected-day,.capibara.c-amber .select-container .selected-day{background:rgba(255,193,7,.3);box-shadow:inset 0 0 10px rgba(255,193,7,.5)}.capibara .c-amber--background{background:#ffc107!important}.capibara .c-amber-d--background{background:#ba8b00!important}.capibara .c-amber-l--background{background:#ffd454!important}.capibara .c-amber--text{color:#ffc107!important}.capibara .c-amber-d--text{color:#ba8b00!important}.capibara .c-amber-l--text{color:#ffd454!important}.capibara .detail-day .list-detail .item-detail.c-amber{background:rgba(255,193,7,.2);border:1px solid #ffc107}.capibara .detail-day .list-detail .item-detail.c-amber .left-icon{background:#ffc107}.capibara .detail-day .list-detail .item-detail.c-amber .left-icon.outlined{border:1px solid #ffc107;box-shadow:inset 0 0 0 1px rgba(255,193,7,.7)}.capibara .detail-day .list-detail .item-detail.c-amber .name{color:#ffc107}.capibara .float-box-container .float-box span.data.c-amber{--local-color:#ffc107;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-amber,.capibara .float-box-container .float-box .dot.c-amber,.capibara .float-box-container .float-box .rowdot--row.c-amber .rowdot--dot{--local-color:#ffc107}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber.active{background:rgba(255,193,7,.7);border-color:rgba(255,193,7,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber.active:hover{background:rgba(255,193,7,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-amber:hover{background:rgba(255,193,7,.2);border-color:rgba(255,193,7,.9)}.capibara .input-box .mini-input-section--icon.c-amber{background:#ffc107}.capibara.c-orange:not(.dark-theme){scrollbar-color:#e6931a transparent}.capibara.c-orange:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#e6931a}.capibara.c-orange:not(.dark-theme) .header-top{background:#f2e8d9}.capibara.c-orange:not(.dark-theme) .corner{background:#f2e8d9;border-color:#ffc166}.capibara.c-orange:not(.dark-theme) .container-tl header{background:#f2e8d9;border-bottom-color:#ffc166}.capibara.c-orange:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f2e8d9)!important}.capibara.c-orange:not(.dark-theme) nav.right{border-color:#ffc166}.capibara.c-orange.dark-theme .header-top,.capibara.c-orange.dark-theme nav.right{border-color:#995b00}.capibara.c-orange.dark-theme .container-tl header,.capibara.c-orange.dark-theme .corner{border-bottom-color:#995b00}.capibara.c-orange.dark-theme ::-moz-selection,.capibara.c-orange ::-moz-selection{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme ::selection,.capibara.c-orange ::selection{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme .progress-bar,.capibara.c-orange .progress-bar{background-color:rgba(255,152,0,.2)!important}.capibara.c-orange.dark-theme .progress-bar:after,.capibara.c-orange.dark-theme .progress-bar:before,.capibara.c-orange .progress-bar:after,.capibara.c-orange .progress-bar:before{background-color:#ff9800!important}.capibara.c-orange.dark-theme select.tabs-select,.capibara.c-orange select.tabs-select{background-color:rgba(255,152,0,.7)!important;border-color:#ff9800!important}.capibara.c-orange.dark-theme .time,.capibara.c-orange .time{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .time .symbol,.capibara.c-orange .time .symbol{color:#ff9800}.capibara.c-orange.dark-theme .time input:active,.capibara.c-orange.dark-theme .time input:focus,.capibara.c-orange .time input:active,.capibara.c-orange .time input:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-box,.capibara.c-orange.dark-theme .input-section select.input-select,.capibara.c-orange .input-box,.capibara.c-orange .input-section select.input-select{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .input-section select.input-select:active,.capibara.c-orange.dark-theme .input-section select.input-select:focus,.capibara.c-orange .input-section select.input-select:active,.capibara.c-orange .input-section select.input-select:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-section .nav-input-file,.capibara.c-orange.dark-theme .input-section input.nav-input,.capibara.c-orange .input-section .nav-input-file,.capibara.c-orange .input-section input.nav-input{border-color:rgba(255,152,0,.6)}.capibara.c-orange.dark-theme .input-section .nav-input-file:active,.capibara.c-orange.dark-theme .input-section .nav-input-file:focus,.capibara.c-orange.dark-theme .input-section input.nav-input:active,.capibara.c-orange.dark-theme .input-section input.nav-input:focus,.capibara.c-orange .input-section .nav-input-file:active,.capibara.c-orange .input-section .nav-input-file:focus,.capibara.c-orange .input-section input.nav-input:active,.capibara.c-orange .input-section input.nav-input:focus{border-color:#ff9800;box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-orange .input-section.msj-input-container textarea.msj{border:2px solid #ff9800}.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-orange.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-orange .input-section.msj-input-container textarea.msj:active,.capibara.c-orange .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,152,0,.2)}.capibara.c-orange .cap-btn-raised,.capibara.c-orange.dark-theme .cap-btn-raised{border-color:#ff9800;background:rgba(255,152,0,.8)}.capibara.c-orange .cap-btn-outline,.capibara.c-orange.dark-theme .cap-btn-outline{border-color:#ff9800;color:#ff9800}.capibara.c-orange .cap-btn-outline.selected,.capibara.c-orange.dark-theme .cap-btn-outline.selected{background:rgba(255,152,0,.8)}.capibara.c-orange.dark-theme .select-container .selected-day,.capibara.c-orange .select-container .selected-day{background:rgba(255,152,0,.3);box-shadow:inset 0 0 10px rgba(255,152,0,.5)}.capibara .c-orange--background{background:#ff9800!important}.capibara .c-orange-d--background{background:#b36a00!important}.capibara .c-orange-l--background{background:#ffb74d!important}.capibara .c-orange--text{color:#ff9800!important}.capibara .c-orange-d--text{color:#b36a00!important}.capibara .c-orange-l--text{color:#ffb74d!important}.capibara .detail-day .list-detail .item-detail.c-orange{background:rgba(255,152,0,.2);border:1px solid #ff9800}.capibara .detail-day .list-detail .item-detail.c-orange .left-icon{background:#ff9800}.capibara .detail-day .list-detail .item-detail.c-orange .left-icon.outlined{border:1px solid #ff9800;box-shadow:inset 0 0 0 1px rgba(255,152,0,.7)}.capibara .detail-day .list-detail .item-detail.c-orange .name{color:#ff9800}.capibara .float-box-container .float-box span.data.c-orange{--local-color:#ff9800;--local-color-font:#263238}.capibara .float-box-container .float-box-ext .long-bar.c-orange,.capibara .float-box-container .float-box .dot.c-orange,.capibara .float-box-container .float-box .rowdot--row.c-orange .rowdot--dot{--local-color:#ff9800}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange.active{background:rgba(255,152,0,.7);border-color:rgba(255,152,0,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange.active:hover{background:rgba(255,152,0,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-orange:hover{background:rgba(255,152,0,.2);border-color:rgba(255,152,0,.9)}.capibara .input-box .mini-input-section--icon.c-orange{background:#ff9800}.capibara.c-deep-orange:not(.dark-theme){scrollbar-color:#cd5733 transparent}.capibara.c-deep-orange:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#cd5733}.capibara.c-deep-orange:not(.dark-theme) .header-top{background:#ede1de}.capibara.c-deep-orange:not(.dark-theme) .corner{background:#ede1de;border-color:#f09275}.capibara.c-deep-orange:not(.dark-theme) .container-tl header{background:#ede1de;border-bottom-color:#f09275}.capibara.c-deep-orange:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#ede1de)!important}.capibara.c-deep-orange:not(.dark-theme) nav.right{border-color:#f09275}.capibara.c-deep-orange.dark-theme .header-top,.capibara.c-deep-orange.dark-theme nav.right{border-color:#8a2c0f}.capibara.c-deep-orange.dark-theme .container-tl header,.capibara.c-deep-orange.dark-theme .corner{border-bottom-color:#8a2c0f}.capibara.c-deep-orange.dark-theme ::-moz-selection,.capibara.c-deep-orange ::-moz-selection{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme ::selection,.capibara.c-deep-orange ::selection{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme .progress-bar,.capibara.c-deep-orange .progress-bar{background-color:rgba(230,74,25,.2)!important}.capibara.c-deep-orange.dark-theme .progress-bar:after,.capibara.c-deep-orange.dark-theme .progress-bar:before,.capibara.c-deep-orange .progress-bar:after,.capibara.c-deep-orange .progress-bar:before{background-color:#e64a19!important}.capibara.c-deep-orange.dark-theme select.tabs-select,.capibara.c-deep-orange select.tabs-select{background-color:rgba(230,74,25,.7)!important;border-color:#e64a19!important}.capibara.c-deep-orange.dark-theme .time,.capibara.c-deep-orange .time{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .time .symbol,.capibara.c-deep-orange .time .symbol{color:#e64a19}.capibara.c-deep-orange.dark-theme .time input:active,.capibara.c-deep-orange.dark-theme .time input:focus,.capibara.c-deep-orange .time input:active,.capibara.c-deep-orange .time input:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-box,.capibara.c-deep-orange.dark-theme .input-section select.input-select,.capibara.c-deep-orange .input-box,.capibara.c-deep-orange .input-section select.input-select{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .input-section select.input-select:active,.capibara.c-deep-orange.dark-theme .input-section select.input-select:focus,.capibara.c-deep-orange .input-section select.input-select:active,.capibara.c-deep-orange .input-section select.input-select:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-section .nav-input-file,.capibara.c-deep-orange.dark-theme .input-section input.nav-input,.capibara.c-deep-orange .input-section .nav-input-file,.capibara.c-deep-orange .input-section input.nav-input{border-color:rgba(230,74,25,.6)}.capibara.c-deep-orange.dark-theme .input-section .nav-input-file:active,.capibara.c-deep-orange.dark-theme .input-section .nav-input-file:focus,.capibara.c-deep-orange.dark-theme .input-section input.nav-input:active,.capibara.c-deep-orange.dark-theme .input-section input.nav-input:focus,.capibara.c-deep-orange .input-section .nav-input-file:active,.capibara.c-deep-orange .input-section .nav-input-file:focus,.capibara.c-deep-orange .input-section input.nav-input:active,.capibara.c-deep-orange .input-section input.nav-input:focus{border-color:#e64a19;box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj{border:2px solid #e64a19}.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-orange.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj:active,.capibara.c-deep-orange .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(230,74,25,.2)}.capibara.c-deep-orange .cap-btn-raised,.capibara.c-deep-orange.dark-theme .cap-btn-raised{border-color:#e64a19;background:rgba(230,74,25,.8)}.capibara.c-deep-orange .cap-btn-outline,.capibara.c-deep-orange.dark-theme .cap-btn-outline{border-color:#e64a19;color:#e64a19}.capibara.c-deep-orange .cap-btn-outline.selected,.capibara.c-deep-orange.dark-theme .cap-btn-outline.selected{background:rgba(230,74,25,.8)}.capibara.c-deep-orange.dark-theme .select-container .selected-day,.capibara.c-deep-orange .select-container .selected-day{background:rgba(230,74,25,.3);box-shadow:inset 0 0 10px rgba(230,74,25,.5)}.capibara .c-deep-orange--background{background:#e64a19!important}.capibara .c-deep-orange-d--background{background:#a13412!important}.capibara .c-deep-orange-l--background{background:#ee805e!important}.capibara .c-deep-orange--text{color:#e64a19!important}.capibara .c-deep-orange-d--text{color:#a13412!important}.capibara .c-deep-orange-l--text{color:#ee805e!important}.capibara .detail-day .list-detail .item-detail.c-deep-orange{background:rgba(230,74,25,.2);border:1px solid #e64a19}.capibara .detail-day .list-detail .item-detail.c-deep-orange .left-icon{background:#e64a19}.capibara .detail-day .list-detail .item-detail.c-deep-orange .left-icon.outlined{border:1px solid #e64a19;box-shadow:inset 0 0 0 1px rgba(230,74,25,.7)}.capibara .detail-day .list-detail .item-detail.c-deep-orange .name{color:#e64a19}.capibara .float-box-container .float-box span.data.c-deep-orange{--local-color:#e64a19;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-deep-orange,.capibara .float-box-container .float-box .dot.c-deep-orange,.capibara .float-box-container .float-box .rowdot--row.c-deep-orange .rowdot--dot{--local-color:#e64a19}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange.active{background:rgba(230,74,25,.7);border-color:rgba(230,74,25,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange.active:hover{background:rgba(230,74,25,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-deep-orange:hover{background:rgba(230,74,25,.2);border-color:rgba(230,74,25,.9)}.capibara .input-box .mini-input-section--icon.c-deep-orange{background:#e64a19}.capibara.c-brown:not(.dark-theme){scrollbar-color:#665e5b transparent}.capibara.c-brown:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#665e5b}.capibara.c-brown:not(.dark-theme) .header-top{background:#c7c7c7}.capibara.c-brown:not(.dark-theme) .corner{background:#c7c7c7;border-color:#af8778}.capibara.c-brown:not(.dark-theme) .container-tl header{background:#c7c7c7;border-bottom-color:#af8778}.capibara.c-brown:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#c7c7c7)!important}.capibara.c-brown:not(.dark-theme) nav.right{border-color:#af8778}.capibara.c-brown.dark-theme .header-top,.capibara.c-brown.dark-theme nav.right{border-color:#392822}.capibara.c-brown.dark-theme .container-tl header,.capibara.c-brown.dark-theme .corner{border-bottom-color:#392822}.capibara.c-brown.dark-theme ::-moz-selection,.capibara.c-brown ::-moz-selection{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme ::selection,.capibara.c-brown ::selection{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme .progress-bar,.capibara.c-brown .progress-bar{background-color:rgba(121,85,72,.2)!important}.capibara.c-brown.dark-theme .progress-bar:after,.capibara.c-brown.dark-theme .progress-bar:before,.capibara.c-brown .progress-bar:after,.capibara.c-brown .progress-bar:before{background-color:#795548!important}.capibara.c-brown.dark-theme select.tabs-select,.capibara.c-brown select.tabs-select{background-color:rgba(121,85,72,.7)!important;border-color:#795548!important}.capibara.c-brown.dark-theme .time,.capibara.c-brown .time{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .time .symbol,.capibara.c-brown .time .symbol{color:#795548}.capibara.c-brown.dark-theme .time input:active,.capibara.c-brown.dark-theme .time input:focus,.capibara.c-brown .time input:active,.capibara.c-brown .time input:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-box,.capibara.c-brown.dark-theme .input-section select.input-select,.capibara.c-brown .input-box,.capibara.c-brown .input-section select.input-select{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .input-section select.input-select:active,.capibara.c-brown.dark-theme .input-section select.input-select:focus,.capibara.c-brown .input-section select.input-select:active,.capibara.c-brown .input-section select.input-select:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-section .nav-input-file,.capibara.c-brown.dark-theme .input-section input.nav-input,.capibara.c-brown .input-section .nav-input-file,.capibara.c-brown .input-section input.nav-input{border-color:rgba(121,85,72,.6)}.capibara.c-brown.dark-theme .input-section .nav-input-file:active,.capibara.c-brown.dark-theme .input-section .nav-input-file:focus,.capibara.c-brown.dark-theme .input-section input.nav-input:active,.capibara.c-brown.dark-theme .input-section input.nav-input:focus,.capibara.c-brown .input-section .nav-input-file:active,.capibara.c-brown .input-section .nav-input-file:focus,.capibara.c-brown .input-section input.nav-input:active,.capibara.c-brown .input-section input.nav-input:focus{border-color:#795548;box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-brown .input-section.msj-input-container textarea.msj{border:2px solid #795548}.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-brown.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-brown .input-section.msj-input-container textarea.msj:active,.capibara.c-brown .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(121,85,72,.2)}.capibara.c-brown .cap-btn-raised,.capibara.c-brown.dark-theme .cap-btn-raised{border-color:#795548;background:rgba(121,85,72,.8)}.capibara.c-brown .cap-btn-outline,.capibara.c-brown.dark-theme .cap-btn-outline{border-color:#795548;color:#795548}.capibara.c-brown .cap-btn-outline.selected,.capibara.c-brown.dark-theme .cap-btn-outline.selected{background:rgba(121,85,72,.8)}.capibara.c-brown.dark-theme .select-container .selected-day,.capibara.c-brown .select-container .selected-day{background:rgba(121,85,72,.3);box-shadow:inset 0 0 10px rgba(121,85,72,.5)}.capibara .c-brown--background{background:#795548!important}.capibara .c-brown-d--background{background:#49332b!important}.capibara .c-brown-l--background{background:#a57868!important}.capibara .c-brown--text{color:#795548!important}.capibara .c-brown-d--text{color:#49332b!important}.capibara .c-brown-l--text{color:#a57868!important}.capibara .detail-day .list-detail .item-detail.c-brown{background:rgba(121,85,72,.2);border:1px solid #795548}.capibara .detail-day .list-detail .item-detail.c-brown .left-icon{background:#795548}.capibara .detail-day .list-detail .item-detail.c-brown .left-icon.outlined{border:1px solid #795548;box-shadow:inset 0 0 0 1px rgba(121,85,72,.7)}.capibara .detail-day .list-detail .item-detail.c-brown .name{color:#795548}.capibara .float-box-container .float-box span.data.c-brown{--local-color:#795548;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-brown,.capibara .float-box-container .float-box .dot.c-brown,.capibara .float-box-container .float-box .rowdot--row.c-brown .rowdot--dot{--local-color:#795548}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown.active{background:rgba(121,85,72,.7);border-color:rgba(121,85,72,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown.active:hover{background:rgba(121,85,72,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-brown:hover{background:rgba(121,85,72,.2);border-color:rgba(121,85,72,.9)}.capibara .input-box .mini-input-section--icon.c-brown{background:#795548}.capibara.c-blue_grey:not(.dark-theme){scrollbar-color:#767676 transparent}.capibara.c-blue_grey:not(.dark-theme) ::-webkit-scrollbar-thumb{background:#767676}.capibara.c-blue_grey:not(.dark-theme) .header-top{background:#dcdcdc}.capibara.c-blue_grey:not(.dark-theme) .corner{background:#dcdcdc;border-color:#99aeb8}.capibara.c-blue_grey:not(.dark-theme) .container-tl header{background:#dcdcdc;border-bottom-color:#99aeb8}.capibara.c-blue_grey:not(.dark-theme) .container-tl header .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#dcdcdc)!important}.capibara.c-blue_grey:not(.dark-theme) nav.right{border-color:#99aeb8}.capibara.c-blue_grey.dark-theme .header-top,.capibara.c-blue_grey.dark-theme nav.right{border-color:#36474f}.capibara.c-blue_grey.dark-theme .container-tl header,.capibara.c-blue_grey.dark-theme .corner{border-bottom-color:#36474f}.capibara.c-blue_grey.dark-theme ::-moz-selection,.capibara.c-blue_grey ::-moz-selection{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme ::selection,.capibara.c-blue_grey ::selection{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme .progress-bar,.capibara.c-blue_grey .progress-bar{background-color:rgba(96,125,139,.2)!important}.capibara.c-blue_grey.dark-theme .progress-bar:after,.capibara.c-blue_grey.dark-theme .progress-bar:before,.capibara.c-blue_grey .progress-bar:after,.capibara.c-blue_grey .progress-bar:before{background-color:#607d8b!important}.capibara.c-blue_grey.dark-theme select.tabs-select,.capibara.c-blue_grey select.tabs-select{background-color:rgba(96,125,139,.7)!important;border-color:#607d8b!important}.capibara.c-blue_grey.dark-theme .time,.capibara.c-blue_grey .time{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .time .symbol,.capibara.c-blue_grey .time .symbol{color:#607d8b}.capibara.c-blue_grey.dark-theme .time input:active,.capibara.c-blue_grey.dark-theme .time input:focus,.capibara.c-blue_grey .time input:active,.capibara.c-blue_grey .time input:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-box,.capibara.c-blue_grey.dark-theme .input-section select.input-select,.capibara.c-blue_grey .input-box,.capibara.c-blue_grey .input-section select.input-select{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .input-section select.input-select:active,.capibara.c-blue_grey.dark-theme .input-section select.input-select:focus,.capibara.c-blue_grey .input-section select.input-select:active,.capibara.c-blue_grey .input-section select.input-select:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-section .nav-input-file,.capibara.c-blue_grey.dark-theme .input-section input.nav-input,.capibara.c-blue_grey .input-section .nav-input-file,.capibara.c-blue_grey .input-section input.nav-input{border-color:rgba(96,125,139,.6)}.capibara.c-blue_grey.dark-theme .input-section .nav-input-file:active,.capibara.c-blue_grey.dark-theme .input-section .nav-input-file:focus,.capibara.c-blue_grey.dark-theme .input-section input.nav-input:active,.capibara.c-blue_grey.dark-theme .input-section input.nav-input:focus,.capibara.c-blue_grey .input-section .nav-input-file:active,.capibara.c-blue_grey .input-section .nav-input-file:focus,.capibara.c-blue_grey .input-section input.nav-input:active,.capibara.c-blue_grey .input-section input.nav-input:focus{border-color:#607d8b;box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj{border:2px solid #607d8b}.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.c-blue_grey.dark-theme .input-section.msj-input-container textarea.msj:focus,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj:active,.capibara.c-blue_grey .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(96,125,139,.2)}.capibara.c-blue_grey .cap-btn-raised,.capibara.c-blue_grey.dark-theme .cap-btn-raised{border-color:#607d8b;background:rgba(96,125,139,.8)}.capibara.c-blue_grey .cap-btn-outline,.capibara.c-blue_grey.dark-theme .cap-btn-outline{border-color:#607d8b;color:#607d8b}.capibara.c-blue_grey .cap-btn-outline.selected,.capibara.c-blue_grey.dark-theme .cap-btn-outline.selected{background:rgba(96,125,139,.8)}.capibara.c-blue_grey.dark-theme .select-container .selected-day,.capibara.c-blue_grey .select-container .selected-day{background:rgba(96,125,139,.3);box-shadow:inset 0 0 10px rgba(96,125,139,.5)}.capibara .c-blue_grey--background{background:#607d8b!important}.capibara .c-blue_grey-d--background{background:#41545e!important}.capibara .c-blue_grey-l--background{background:#8aa2ae!important}.capibara .c-blue_grey--text{color:#607d8b!important}.capibara .c-blue_grey-d--text{color:#41545e!important}.capibara .c-blue_grey-l--text{color:#8aa2ae!important}.capibara .detail-day .list-detail .item-detail.c-blue_grey{background:rgba(96,125,139,.2);border:1px solid #607d8b}.capibara .detail-day .list-detail .item-detail.c-blue_grey .left-icon{background:#607d8b}.capibara .detail-day .list-detail .item-detail.c-blue_grey .left-icon.outlined{border:1px solid #607d8b;box-shadow:inset 0 0 0 1px rgba(96,125,139,.7)}.capibara .detail-day .list-detail .item-detail.c-blue_grey .name{color:#607d8b}.capibara .float-box-container .float-box span.data.c-blue_grey{--local-color:#607d8b;--local-color-font:#fff}.capibara .float-box-container .float-box-ext .long-bar.c-blue_grey,.capibara .float-box-container .float-box .dot.c-blue_grey,.capibara .float-box-container .float-box .rowdot--row.c-blue_grey .rowdot--dot{--local-color:#607d8b}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey.active{background:rgba(96,125,139,.7);border-color:rgba(96,125,139,.7);color:#fff}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey.active:hover{background:rgba(96,125,139,.8)}.capibara .header-top .tabs-container .tab:not(.disabled).c-blue_grey:hover{background:rgba(96,125,139,.2);border-color:rgba(96,125,139,.9)}.capibara .input-box .mini-input-section--icon.c-blue_grey{background:#607d8b}.capibara *,.capibara :after,.capibara :before{box-sizing:border-box}.capibara input{outline:none}.capibara input[type=number]{-moz-appearance:textfield}.capibara input[type=number]::-webkit-inner-spin-button,.capibara input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.capibara input[type=number]::-moz-placeholder{opacity:1}.capibara input[type=number]:-ms-input-placeholder{opacity:1}.capibara input[type=number]::placeholder{opacity:1}.capibara.dark-theme .hide-dark,.capibara:not(.dark-theme) .hide-light{display:none!important}.capibara .truncate{width:100%;display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.capibara .hide{display:none!important}.capibara .text-title{font-size:1.25em;font-weight:700;margin:.5em .3em}.capibara .text-subtitle{font-size:.875em;font-weight:700;margin:.5em .3em;flex:0 0 auto}.capibara .text-hint{font-size:.75em;margin:.3em;text-align:left;align-self:flex-start}.capibara .text-subtitle-2{font-size:.75em;margin:.5em .3em;flex:0 0 auto}.capibara .d-inline-block{display:inline-block}.capibara .d-block{display:block}.capibara .d-flex{display:flex;flex-direction:column;align-items:center}@media screen and (min-width:960px){.capibara .c-d-desktop-none{display:none!important}.capibara .c-d-desktop-inline-block{display:inline-block!important}.capibara .c-d-desktop-block{display:block!important}.capibara .c-d-desktop-flex{display:flex!important}}@media screen and (max-width:959px){.capibara .c-d-mobile-none{display:none!important}.capibara .c-d-mobile-block{display:block!important}.capibara .c-d-mobile-inline-block{display:inline-block!important}.capibara .c-d-mobile-flex{display:flex!important}}.capibara{scrollbar-width:auto}.capibara ::-webkit-scrollbar{width:12px;height:12px;opacity:.5}.capibara ::-webkit-scrollbar-corner,.capibara ::-webkit-scrollbar-track{background:transparent}.capibara ::-webkit-scrollbar-thumb{border-radius:5px;background:grey}.capibara.dark-theme ::-webkit-scrollbar-corner,.capibara.dark-theme ::-webkit-scrollbar-track{background:transparent}.capibara.dark-theme ::-webkit-scrollbar-thumb{background:#bdbdbd}.capibara{position:relative;font-family:Roboto,sans-serif;height:inherit;max-height:inherit;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal;font-size:var(--font-size)}.capibara pre{font-family:Roboto,sans-serif!important}.capibara{color:#37474f;background:#f5f5f5}.capibara.dark-theme{color:#f0f0f0;background:#222837}.capibara .container-tl{width:100%;height:calc(100% - var(--header-top-height));max-height:calc(100% - var(--header-top-height));position:relative;overflow:scroll;margin:0;will-change:scroll-position}.capibara.extended-right .container-tl{width:calc(100% - var(--nav-right-width))}.capibara .container-tl{background:#f5f5f5}.capibara.dark-theme .container-tl{background:#222837}.capibara .container-tl .today-line{width:0;position:absolute}.capibara .container-tl .today-line.disable-line,.capibara .container-tl .today-line.disable-line:after{display:none!important}.capibara .container-tl .today-line:after{margin-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width) + 1px);position:absolute;display:block;left:0;top:0;content:\\\"\\\";width:2px;height:100%;background:rgba(183,28,28,.4)}.capibara .container-tl.header-extended .container-tl .today-line:after{height:calc(100vh - var(--header-height) + var(--ex-header-height) + var(--header-top-height))}.capibara .corner{position:absolute;top:var(--header-top-height);z-index:4;height:var(--header-height);border:solid rgba(0,0,0,.4);border-width:0 0 2px;padding-left:8px}.capibara .corner:not(.right){left:0;border-right-width:1px;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .corner.right{right:0;width:var(--nav-right-width);display:none}.capibara .corner>div:not([class]){width:inherit;height:inherit}.capibara .corner .btn-container{padding-top:.5em}.capibara .corner .btn-container .corner-btn{font-size:.825em;margin:0 4px;padding:4px 8px}.capibara .corner .corner-title{height:inherit;display:block;text-align:left;position:relative}.capibara .corner .corner-title span.bottom-text{position:absolute;left:0;bottom:8px}@media screen and (max-width:959px){.capibara .corner .corner-title{font-size:.75em}}.capibara .corner .initial-corner{position:absolute;left:var(--nav-width);top:0;width:var(--initial-nav-width);height:var(--header-height);overflow:hidden;display:block}.capibara .corner .initial-corner .initial-corner-title{height:inherit;width:inherit;display:inline-block;margin-right:-1px;box-sizing:border-box;vertical-align:top;position:relative}.capibara .corner .initial-corner .initial-corner-title .bottom-container{position:absolute;left:0;bottom:8px;width:100%;box-sizing:border-box;display:flex;align-items:center}.capibara .corner .initial-corner .initial-corner-title .bottom-container .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;display:inline-block;font-size:.75em}.capibara .corner .extend-corner{position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width));top:0;width:var(--ex-nav-width);height:var(--header-height);overflow:hidden;display:block}.capibara .corner .extend-corner .ex-corner-title{height:inherit;width:inherit;display:inline-block;margin-right:-1px;box-sizing:border-box;vertical-align:top;position:relative}.capibara .corner .extend-corner .ex-corner-title .bottom-container{position:absolute;left:0;bottom:8px;width:100%;box-sizing:border-box;display:flex;align-items:center}.capibara .corner .extend-corner .ex-corner-title .bottom-container .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;display:inline-block;font-size:.75em}.capibara .corner .cap-btn-nav-corner{position:absolute;right:0;top:0;width:var(--btn-nav-width);height:var(--header-height);min-width:100px;padding-top:var(--header-labels-height)}.capibara .corner .cap-btn-nav-corner .input-titles{text-align:right;display:flex;flex-direction:column;position:absolute;right:0;top:var(--header-labels-height)}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container{position:relative;border-radius:3px}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent){display:none}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container.input-title--accent .input-title{color:#fff;background:grey}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container span.average{font-weight:700;margin-right:4px;padding:3px}.capibara .corner .cap-btn-nav-corner .input-titles .input-title-container .input-title{height:calc(var(--header-input-height) + 3px);line-height:calc(var(--header-input-height) + 2px);padding-right:8px;display:inline-block;font-size:.75em}.capibara.extended-right .corner.right{display:block}.capibara.header-extended .corner,.capibara.header-extended .corner .cap-btn-nav-corner,.capibara.header-extended .corner .extend-corner,.capibara.header-extended .corner .initial-corner{height:calc(var(--header-height) + var(--ex-header-height))}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent){display:unset}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent) .average-box{visibility:visible}.capibara.header-extended .corner .cap-btn-nav-corner .input-titles .input-title-container:not(.persistent) .input-title{visibility:visible;height:auto}.capibara .corner{background:#f1fffe}.capibara.dark-theme .corner{background:#313b50;border-color:rgba(64,78,105,.6)}.capibara.dark-theme .corner .input-titles .input-title-container .input-title{color:hsla(0,0%,100%,.8)!important}.capibara .header-top{position:relative;width:100%;height:var(--header-top-height);padding:0 .5em;display:flex;flex-flow:row wrap;z-index:5}.capibara .header-top .spacer{flex:1 0 auto}.capibara .header-top .tabs-container{display:flex;border-right:1px solid hsla(0,0%,43.5%,.3);margin-right:.5em}.capibara .header-top .tabs-container:not(:empty){padding:0}.capibara .header-top .tabs-container button.tab{cursor:pointer;padding:.25em 1em;font-weight:700;border:1px solid transparent;margin:.5em .5em 0 0;border-radius:30px;transition:background .2s ease;background:transparent}.capibara .header-top .tabs-container button.tab:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara .header-top .tabs-container button.tab.disabled{color:grey}.capibara .header-top .tabs-container button.tab:hover{border-color:grey}.capibara .header-top .legends-container{display:flex}.capibara .header-top .legends-container .legend{display:flex;flex-direction:row;margin-right:1em;cursor:pointer;padding:.8em .5em .5em 0}.capibara .header-top .legends-container .legend:not(.active){opacity:.5}.capibara .header-top .legends-container .legend:not(.active) .icon-legend{background:grey!important}.capibara .header-top .legends-container .legend .icon-legend{width:.825em;height:.825em;margin:2px .5em 2px 0;background:grey;box-shadow:0 1px 2px rgba(0,0,0,.4);display:inline-block;border-radius:1px;border:1px solid rgba(0,0,0,.4)}.capibara .header-top .legends-container .legend .icon-legend.circle{border-radius:50%}.capibara .header-top .legends-container .legend:hover span{text-decoration:underline}.capibara .header-top .legends-container.force-mobile-style{position:absolute;left:2em;top:2em;background:inherit;color:inherit;flex-direction:column;z-index:6;border:1px solid rgba(0,0,0,.4);border-radius:3px;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)!important}.capibara .header-top .legends-container.force-mobile-style .legend{font-size:16px;padding:.5em}@media screen and (max-width:959px){.capibara .header-top .legends-container{position:absolute;left:2em;top:2em;background:inherit;color:inherit;flex-direction:column;z-index:6;border:1px solid rgba(0,0,0,.4);border-radius:3px;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)!important}.capibara .header-top .legends-container .legend{font-size:16px;padding:.5em}}.capibara .header-top{background:#f1fffe}.capibara .header-top .tabs-container .tab{color:#313b50}.capibara .header-top .tabs-container .tab.disabled{color:rgba(49,59,80,.5)}.capibara.dark-theme .header-top{background:#313b50}.capibara.dark-theme .header-top .tabs-container .tab{color:hsla(0,0%,100%,.8)}.capibara.dark-theme .header-top .tabs-container .tab.disabled{color:hsla(0,0%,100%,.4)}.capibara .corner-footer{position:-webkit-sticky;position:sticky;left:0;bottom:0;z-index:3;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));height:var(--item-height);margin-bottom:calc(var(--item-height)*-1);box-sizing:border-box}.capibara .corner-footer .corner-title{line-height:30px;height:inherit;display:block;text-align:left;box-sizing:border-box;position:relative;font-weight:700;padding:4px 8px}.capibara .corner-footer{background:#78909c;color:#fff}.capibara.dark-theme .corner-footer{background:#313b50;color:#f0f0f0}.capibara nav.right{position:absolute;right:0;top:calc(var(--header-height) + var(--header-top-height));height:calc(100% - var(--header-height) - var(--header-top-height));overflow-y:scroll;overflow-x:hidden;z-index:5;display:none;border-left:1px solid red}.capibara nav.right,.capibara nav.right .child-nav-item,.capibara nav.right .nav-item{width:var(--nav-right-width)}.capibara nav.right .nav-input-container{text-align:center}.capibara nav.right .nav-input-container .button-section{padding-bottom:.75em;padding-top:.75em;position:-webkit-sticky;position:sticky;bottom:0}.capibara nav.left{min-height:calc(100% - var(--header-height));position:-webkit-sticky;position:sticky;left:0;width:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));height:auto;z-index:2;border-right:1px solid #b0bec5;overflow:visible;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.capibara nav.left .child-nav-item,.capibara nav.left .nav-item{width:var(--nav-width)}.capibara nav.left .detail-nav-item{min-width:250px;max-width:500px;width:-webkit-max-content;width:-moz-max-content;width:max-content;min-height:70px;position:absolute;left:3rem;top:0;border:1px solid grey;z-index:2;border-radius:5px;padding:16px;transition:all .3s ease;flex-flow:column nowrap;box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12);transform:translateY(calc(.5rem + var(--item-height)))}.capibara nav.left .detail-nav-item.to-bottom{transform:translateY(calc(-100% - .5rem))}.capibara nav.left .detail-nav-item .header-detail .detail-title{font-size:1.125em;font-weight:700;margin-bottom:8px;max-width:100%;width:100%;padding-right:80px}.capibara nav.left .detail-nav-item .header-detail .detail-subtitle{font-size:.875;margin-bottom:8px}.capibara nav.left .detail-nav-item .header-detail .header-chip{position:absolute;right:16px;top:16px;padding:2px 8px;border:3px solid grey;border-radius:5px}.capibara nav.left .detail-nav-item .detail-container>div{margin:6px 0}.capibara nav.left .initial-nav-list{width:var(--initial-nav-width);position:absolute;left:var(--nav-width);top:0;overflow:hidden;display:block}.capibara nav.left .initial-nav-list .child-initial-nav-item,.capibara nav.left .initial-nav-list .initial-nav-item{border-bottom:1px solid #b0bec5;height:var(--item-height);box-sizing:border-box;display:flex;line-height:34px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-title,.capibara nav.left .initial-nav-list .initial-nav-item .item-title{flex:1 0 auto;padding:4px 8px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col,.capibara nav.left .initial-nav-list .initial-nav-item .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;padding:4px 8px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input{padding:0}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>.hour-input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>.hour-input{font-size:.875em;width:calc(100% - 8px);border:1px solid grey;border-radius:3px;height:24px}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input{text-align:center;font-size:.875em;width:calc(100% - 8px);display:block;border:1px solid grey;border-radius:3px;height:24px;margin:8px 4px 4px;background:hsla(0,0%,100%,.2)}.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input:active,.capibara nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input>input:focus,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input:active,.capibara nav.left .initial-nav-list .initial-nav-item .item-col.has-input>input:focus{background:hsla(0,0%,100%,.8)}.capibara nav.left .extend-nav-list{width:var(--ex-nav-width);position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width));top:0;overflow:hidden;display:block}.capibara nav.left .extend-nav-list .child-ex-nav-item,.capibara nav.left .extend-nav-list .ex-nav-item{border-bottom:1px solid #b0bec5;height:var(--item-height);box-sizing:border-box;display:flex;line-height:1.75rem}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-title,.capibara nav.left .extend-nav-list .ex-nav-item .item-title{flex:1 0 auto;padding:4px 8px}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col,.capibara nav.left .extend-nav-list .ex-nav-item .item-col{flex:0 0 var(--nav-item-col-width);text-align:center;padding:4px 8px}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input{padding:0}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input{text-align:center;font-size:.875em;width:calc(100% - 8px);display:block;border:1px solid grey;border-radius:3px;height:24px;margin:8px 4px 4px;background:hsla(0,0%,100%,.2)}.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input:active,.capibara nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input>input:focus,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input:active,.capibara nav.left .extend-nav-list .ex-nav-item .item-col.has-input>input:focus{background:hsla(0,0%,100%,.8)}.capibara nav.left .cap-btn-nav-list{left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width));width:var(--btn-nav-width);position:absolute;top:0;overflow:hidden}.capibara nav.left .cap-btn-nav-list .cap-btn-child-nav-item .cap-btn-nav-item-content,.capibara nav.left .cap-btn-nav-list .cap-btn-nav-item .cap-btn-nav-item-content{height:var(--item-height);width:inherit;padding:4px 6px;border-bottom:1px solid #b0bec5;text-align:right}.capibara nav.left .nav-item-total-footer{padding-top:3px}.capibara nav .cap-btn-nav-item.parent,.capibara nav .ex-nav-item.parent,.capibara nav .initial-nav-item.parent,.capibara nav .nav-item-container.parent{background:rgba(25,118,210,.1)}.capibara nav .cap-btn-nav-item.parent>.item-title,.capibara nav .ex-nav-item.parent>.item-title,.capibara nav .initial-nav-item.parent>.item-title,.capibara nav .nav-item-container.parent>.item-title{max-width:calc(var(--nav-width) + var(--ex-nav-width) + var(--initial-nav-width) + var(--btn-nav-width) - 60px);width:auto}.capibara nav .nav-item-list .child-nav-item,.capibara nav .nav-item-list .nav-item{min-height:var(--item-height);box-sizing:border-box;position:relative}.capibara nav .nav-item-list .child-nav-item .nav-item-container,.capibara nav .nav-item-list .nav-item .nav-item-container{display:flex;border-bottom:1px solid #b0bec5;height:var(--item-height)}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon{transition:all .5s ease;background:transparent;border:none;width:34px;flex:0 0 34px;font-size:1.5em;text-align:center;cursor:pointer}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon:focus,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{flex:0 0 34px;font-size:1.125em;vertical-align:middle;text-align:center;line-height:40px;margin-top:12px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon path,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon path{width:20px;height:20px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title{flex:1 1 auto;display:grid;font-size:1em;line-height:34px;padding:4px 8px}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.full-width,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.full-width{flex:1 0 auto;display:inline-block}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.clickeable,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.clickeable{cursor:pointer}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.clickeable:hover,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.clickeable:hover{background:hsla(0,0%,39.2%,.2)!important;text-decoration:underline}.capibara nav .nav-item-list .child-nav-item .nav-item-container .item-title.hoverable:hover,.capibara nav .nav-item-list .nav-item .nav-item-container .item-title.hoverable:hover{background:hsla(0,0%,39.2%,.2)!important}.capibara nav .multibuttons-btn{background:transparent;border:none;color:#999;font-size:1.5em;cursor:pointer;min-width:38px;max-height:38px;display:flex;flex-direction:row;align-items:center;justify-content:center}.capibara nav .multibuttons-btn:hover{background:hsla(0,0%,39.2%,.2)}.capibara.extended-right nav.right{display:block}.capibara.header-extended nav.left{min-height:calc(100% - var(--header-height) + var(--ex-header-height))}.capibara.header-extended nav.right{top:calc(var(--header-height) + var(--header-top-height) + var(--ex-header-height));height:calc(100% - var(--header-height) - var(--header-top-height) - var(--ex-header-height))}.capibara nav.left,.capibara nav.right,.capibara nav.right .button-section{background:#fafafa}.capibara nav.left .detail-nav-item{border-color:rgba(0,0,0,.2);background:#fff}.capibara nav.left .detail-nav-item .header-chip.red-light{border-color:#f84747}.capibara nav.left .detail-nav-item .header-chip.yellow-light{border-color:#fdd835}.capibara nav.left .detail-nav-item .header-chip.green-light{border-color:#38993d}.capibara nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .tree-icon{color:#37474f}.capibara nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{color:rgba(55,71,79,.2)}.capibara.dark-theme nav.right,.capibara.dark-theme nav.right .button-section{background:#222837}.capibara.dark-theme nav.left{background:#222837;border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav.left .detail-nav-item{border-color:#404e69;background:#222837}.capibara.dark-theme nav.left .detail-nav-item .header-chip{color:#f0f0f0}.capibara.dark-theme nav.left .detail-nav-item .header-chip.red-light{border-color:#aa1a1a}.capibara.dark-theme nav.left .detail-nav-item .header-chip.yellow-light{border-color:#fbcd00}.capibara.dark-theme nav.left .detail-nav-item .header-chip.green-light{border-color:#388e3c}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item{border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input{background:#404e69;color:#f0f0f0}.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .child-ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .child-initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .extend-nav-list .initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .child-ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .child-initial-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .ex-nav-item .item-col.has-input input:focus,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input:active,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input .hour-input:focus,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input:active,.capibara.dark-theme nav.left .initial-nav-list .initial-nav-item .item-col.has-input input:focus{background:hsla(0,0%,100%,.2)}.capibara.dark-theme nav.left .cap-btn-nav-list .cap-btn-child-nav-item .cap-btn-nav-item-content,.capibara.dark-theme nav.left .cap-btn-nav-list .cap-btn-nav-item .cap-btn-nav-item-content,.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container{border-color:rgba(64,78,105,.6)}.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container .tree-icon,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container .tree-icon{color:#f0f0f0}.capibara.dark-theme nav .nav-item-list .child-nav-item .nav-item-container .nav-item-icon,.capibara.dark-theme nav .nav-item-list .nav-item .nav-item-container .nav-item-icon{color:hsla(0,0%,94.1%,.2)}.capibara .container-tl header{height:var(--header-height);width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;top:0;min-width:100%;position:-webkit-sticky;position:sticky;z-index:3;border-bottom:2px solid grey;box-sizing:border-box;box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.capibara .container-tl header .header-container-extended{height:auto;position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));width:100%;box-sizing:border-box;display:flex;flex-direction:column}.capibara .container-tl header .header-container-extended .input-list{padding:1px 0;flex:0 0 auto;display:flex;flex-direction:row}.capibara .container-tl header .header-container-extended .input-list:not(.persistent){display:none}.capibara .container-tl header .header-container-extended .input-list>div{width:var(--day-width)}.capibara .container-tl header .header-container-extended .input-list>div>span{display:block;width:inherit;line-height:var(--header-input-height);height:var(--header-input-height);text-align:center;font-size:.875em}.capibara .container-tl header .header-container-extended .input-list .dia-input input{width:inherit;height:var(--header-input-height);border:1px solid grey;border-left-width:0;border-radius:0;background:hsla(0,0%,100%,.5);text-align:center;font-size:.875em}.capibara .container-tl header .header-container-extended .input-list .dia-input input:active,.capibara .container-tl header .header-container-extended .input-list .dia-input input:focus{background:hsla(0,0%,100%,.8)}.capibara .container-tl header .header-container{position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));width:100%;display:flex;height:var(--header-labels-height)}.capibara .container-tl header .header-container .header-item{padding:6px 8px;min-width:var(--item-min-width);height:var(--header-height);text-align:center;box-sizing:border-box;position:relative;border-left:1px solid rgba(0,0,0,.1)}.capibara .container-tl header .header-container .header-item span.bottom-text{position:absolute;left:0;bottom:8px;width:100%}.capibara .container-tl header .agno-calendario{display:inline-block;width:-webkit-max-content;width:-moz-max-content;width:max-content}.capibara .container-tl header .agno-calendario .agno{position:-webkit-sticky;position:sticky;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));display:inline-block;padding-left:8px;padding-right:32px;font-size:.75em;margin-top:4px}.capibara .container-tl header .agno-calendario .meses{display:block;display:flex}.capibara .container-tl header .agno-calendario .mes-calendario{display:inline-block;min-width:var(--day-width)}.capibara .container-tl header .agno-calendario .mes-calendario .mes{display:inline-block;position:-webkit-sticky;position:sticky;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--btn-nav-width));padding-left:.5em;padding-right:2em;font-size:.875em;margin-top:6px}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced{width:var(--day-width);max-width:var(--day-width);overflow:hidden}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-2{width:calc(var(--day-width)*2);max-width:calc(var(--day-width)*2)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-3{width:calc(var(--day-width)*3);max-width:calc(var(--day-width)*3)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced.mes-reduced-4{width:calc(var(--day-width)*4);max-width:calc(var(--day-width)*4)}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced .mes-label{width:-webkit-max-content;width:-moz-max-content;width:max-content}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{content:\\\"\\\";background:linear-gradient(90deg,transparent,red);position:absolute;right:0;top:0;height:100%;width:calc(var(--day-width)/2)}.capibara .container-tl header .agno-calendario .mes-calendario .dias{display:flex;margin-top:5px}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario{width:var(--day-width);height:var(--header-day-height);vertical-align:bottom;font-size:.875em;border-right:1px solid rgba(0,0,0,.1);box-sizing:border-box;padding:4px 6px;text-align:center;position:relative}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable{cursor:pointer}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.has-alert:after{content:\\\"\\\";display:block;position:absolute;width:0;height:0;right:0;top:0;border-color:red red transparent transparent;border-style:solid;border-width:6px;z-index:1}.capibara.header-extended .container-tl header{height:calc(var(--header-height) + var(--ex-header-height))}.capibara.header-extended .container-tl header .header-container-extended .input-list:not(.persistent){display:flex}.capibara .container-tl header{background:#f1fffe;color:#37474f}.capibara .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#f1fffe)}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.weekend{background:rgba(0,0,0,.1);color:#263238}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.today{background:rgba(229,57,53,.9);color:#fff}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.active{background:green;color:#fff}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:hover{background:hsla(0,0%,39.2%,.4)}.capibara .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:active{background:hsla(0,0%,39.2%,.6)}.capibara .container-tl header .header-container-extended .input-list .dia-input input,.capibara .container-tl header .header-container-extended .input-list div>span{color:#313b50}.capibara.dark-theme .container-tl header{background:#313b50;color:#f0f0f0;border-color:rgba(64,78,105,.6)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .mes.mes-reduced:after{background:linear-gradient(90deg,transparent,#313b50)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario{border-color:rgba(64,78,105,.6)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.weekend{background:#222837;color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.today{background:rgba(183,28,28,.6);color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.active{background:rgba(56,142,60,.6);color:#f0f0f0}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:hover{background:hsla(0,0%,39.2%,.4)}.capibara.dark-theme .container-tl header .agno-calendario .mes-calendario .dias .dia-calendario.is-clickeable:active{background:hsla(0,0%,39.2%,.6)}.capibara.dark-theme .container-tl header .header-container-extended .input-list div>span{color:hsla(0,0%,100%,.8)!important}.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input{background:rgba(64,78,105,.6);color:hsla(0,0%,100%,.8)!important;border-color:#313b50}.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input:active,.capibara.dark-theme .container-tl header .header-container-extended .input-list .dia-input input:focus{background:hsla(0,0%,100%,.2)}.capibara .container-tl .plot-vertical-container{height:0;width:0;position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .container-tl .plot-vertical-container .plot-vertical{background:rgba(0,0,0,.3);width:var(--day-width);height:calc(100vh - var(--header-height) - var(--header-top-height));position:absolute;top:0;left:0}.capibara .container-tl .plot-vertical-container .plot-vertical.rain{background:repeating-linear-gradient(53deg,rgba(3,155,229,.2),rgba(3,155,229,.2) 5px,transparent 0,transparent 12px)}.capibara .container-tl .plot-horizontal-container{height:0;width:0;position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width))}.capibara .container-tl .plot-horizontal-container .plot-horizontal{background:rgba(0,0,0,.3);width:100vw;height:var(--item-height);position:absolute;top:0;left:0}.capibara .container-tl .plot-horizontal-container .plot-horizontal.plot-parent{background:rgba(25,118,210,.1)}.capibara .container-tl.extended-right .container-tl .plot-container .plot-vertical{height:calc(100vh - var(--header-height) + var(--ex-header-height) + var(--header-top-height))}.capibara .container-tl footer{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;bottom:0;min-width:100%;height:var(--item-height);position:-webkit-sticky;position:sticky;z-index:2;box-sizing:border-box}.capibara .container-tl footer .footer-container{position:relative;padding-left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));box-sizing:border-box;min-width:100%;display:flex}.capibara .container-tl footer .footer-container .footer-item{padding:10px 2px;width:var(--day-width);cursor:default;border-left:1px solid rgba(0,0,0,.1);box-sizing:border-box;height:var(--item-height);text-align:center}.capibara .container-tl footer{background:#78909c;color:#fff}.capibara .container-tl.dark-theme footer{background:#313b50;color:#f0f0f0}.capibara .container-tl .table{position:absolute;left:calc(var(--nav-width) + var(--initial-nav-width) + var(--ex-nav-width) + var(--btn-nav-width));top:var(--header-height);width:calc(100% - var(--nav-width) - var(--initial-nav-width) - var(--ex-nav-width) - var(--btn-nav-width));max-height:calc(100% - var(--header-height));height:calc(100% - var(--header-height));margin-top:-1px}.capibara .container-tl .table .day-mouse-over{position:absolute;left:0;top:0;width:var(--day-width);height:var(--item-height);border:3px solid rgba(245,124,0,.5);box-shadow:0 0 2px #f57c00,inset 0 0 3px #f57c00;transition:transform .1s ease;overflow:visible;will-change:transform}.capibara .container-tl .table .day-mouse-over:after,.capibara .container-tl .table .day-mouse-over:before{position:absolute;background:rgba(245,124,0,.1);content:\\\"\\\";display:block}.capibara .container-tl .table .day-mouse-over:after{width:var(--day-width);height:100vh;right:-4px;bottom:calc(var(--item-height) - 2px)}.capibara .container-tl .table .day-mouse-over:before{height:var(--item-height);width:100vw;right:calc(var(--day-width) - 2px);bottom:-4px}.capibara .container-tl .table .background-grid{width:calc(var(--day-width)*20);height:calc(var(--item-height)*20);position:absolute;left:0;top:1px;background-repeat:repeat;background-size:var(--day-width) var(--item-height),calc(var(--day-width)*7) var(--item-height),calc(var(--day-width)*7) var(--item-height);background-image:linear-gradient(90deg,rgba(80,80,80,.3) 1px,transparent 0),linear-gradient(0deg,rgba(80,80,80,.3) 1px,transparent 0),linear-gradient(90deg,transparent calc(var(--day-width)*5),rgba(80,80,80,.1) 0);background-position:0 0,0 0,0 0}.capibara .container-tl .table .draw-box{position:relative}.capibara .container-tl .table .draw-box canvas{position:absolute;left:0;top:0}.capibara.header-extended .container-tl .table{top:calc(var(--header-height) + var(--ex-header-height))}.capibara .select-container{overflow:visible;position:absolute;left:0;top:0;width:0;height:0}.capibara .select-container .selected-day{width:var(--day-width);height:var(--item-height);position:absolute;background:hsla(0,0%,74.1%,.4);box-shadow:inset 0 0 5px hsla(0,0%,74.1%,.8)}.capibara .select-container .selected-day[cap-badge]:after{content:attr(cap-badge);display:block;position:absolute;right:-3px;top:-3px;background:#1565c0;font-size:.75em;color:#fff;width:1.5em;height:1.5em;border-radius:50%;z-index:2;text-align:center;font-weight:700;padding:2px;box-shadow:0 1px 3px rgba(0,0,0,.3)}.capibara .detail-day{min-height:50px;min-width:250px;max-width:400px;border:1px solid grey;padding:.75em;display:flex;flex-flow:column nowrap;margin:0 0 0 1em;box-sizing:border-box;box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12);position:absolute;border-radius:5px;transition:all .3s ease;will-change:transform,left,top;transform:translateY(calc(var(--item-height)/2*-1));z-index:4;opacity:1}.capibara .detail-day:after{content:\\\"\\\";background:inherit;width:20px;height:20px;display:block;position:absolute;left:-11px;top:calc(var(--item-height)/2 + 7px);transform:rotate(45deg);border-color:grey;border-style:solid;border-width:0 0 1px 1px}.capibara .detail-day.dd-hide{display:none}.capibara .detail-day.has-right-arrow{margin:0 16px 0 0;transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(var(--item-height)/2*-1))}.capibara .detail-day.has-right-arrow:after{border-width:1px 1px 0 0;left:unset;right:-11px}.capibara .detail-day.has-ceil-arrow{transform:translateY(-7px)}.capibara .detail-day.has-ceil-arrow:after{top:6px}.capibara .detail-day.has-ceil-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(-7px)}.capibara .detail-day.has-ceil-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day.has-middle-arrow{transform:translateY(calc(-50% + var(--item-height)/2))}.capibara .detail-day.has-middle-arrow:after{top:calc(50% - 10px)}.capibara .detail-day.has-middle-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(-50% + var(--item-height)/2))}.capibara .detail-day.has-middle-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day.has-bottom-arrow{transform:translateY(calc(-100% + var(--item-height)))}.capibara .detail-day.has-bottom-arrow:after{top:unset;bottom:4px}.capibara .detail-day.has-bottom-arrow.has-right-arrow{transform:translateX(calc(-100% - 20px - var(--day-width))) translateY(calc(-100% + var(--item-height)))}.capibara .detail-day.has-bottom-arrow.has-right-arrow:after{left:unset;right:-11px}.capibara .detail-day .header-detail .title{font-size:1.25em;font-weight:700;margin-bottom:.25em;min-width:10em;max-width:20em;line-height:unset}.capibara .detail-day .header-detail .subtitle{font-size:.875em;margin-bottom:8px;min-width:10em}.capibara .detail-day .list-detail{margin:0;flex:0 0 auto}.capibara .detail-day .list-detail.list .item-detail{margin:0;font-size:.875em;position:relative;padding:.5em .5em .5em 1em;border-radius:0;box-sizing:border-box;overflow:hidden;background:transparent;border:unset;border-top:1px solid rgba(0,0,0,.1);display:flex;flex-direction:row}.capibara .detail-day .list-detail.list .item-detail .left-icon{width:8px;height:8px;min-height:unset!important;left:1px;top:10px;border-radius:50%}.capibara .detail-day .list-detail.list .item-detail .left-icon.diamond{border-radius:0;transform:rotate(45deg) skew(10deg,10deg)}.capibara .detail-day .list-detail.list .item-detail .left-icon.outlined{background:transparent}.capibara .detail-day .list-detail.list .item-detail .left-icon.triangle{border-radius:0;transform:rotate(45deg) skew(10deg,10deg) translate(3px,3px);width:0;height:0;border-width:5px;border-style:solid;background-color:transparent}.capibara .detail-day .list-detail.list .item-detail .left-icon.shield{width:10px;height:10px;border-radius:0 0 50% 50%}.capibara .detail-day .list-detail.list .item-detail .name{flex:0 1 40%;font-weight:700;margin-bottom:0;padding-right:1em}.capibara .detail-day .list-detail.list .item-detail .item-description{flex:1 1 auto;display:flex;flex-direction:column;align-items:start}.capibara .detail-day .list-detail.list .item-detail .item-description .desc{display:flex;margin-bottom:3px;align-items:baseline}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column{flex-direction:column;align-items:start;width:100%;border-bottom-width:1px;border-bottom-style:solid;margin-bottom:0;padding-bottom:0}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column:last-child{border-color:transparent}.capibara .detail-day .list-detail.list .item-detail .item-description .desc.desc-column .label{margin-right:0}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .label{display:inline-block;flex:1 1 65%;font-weight:700;margin-right:.5em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .val{display:flex;align-items:baseline;margin-left:1em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .prefix,.capibara .detail-day .list-detail.list .item-detail .item-description .desc .suffix{font-size:.85em;flex:0 0 auto}.capibara .detail-day .list-detail.list .item-detail .item-description .desc .value:not(empty){margin-right:.2em}.capibara .detail-day .list-detail.list .item-detail .item-description .desc sup{top:-1em!important}.capibara .detail-day .list-detail.flex{display:flex;flex-flow:row wrap;align-content:flex-start;display:inline-flex;flex-flow:wrap;-ms-writing-mode:tb-lr;writing-mode:vertical-lr;max-height:25%}.capibara .detail-day .list-detail.flex .item-detail{flex:0 0 auto;min-width:8em;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb}.capibara .detail-day .list-detail.column{-moz-columns:7em 3;columns:7em 3;min-width:30em}.capibara .detail-day .list-detail.column .item-detail{display:inline-block;width:100%}.capibara .detail-day .list-detail .item-detail{margin:4px;position:relative;padding:.5em 1em;border-radius:6px;box-sizing:border-box;overflow:hidden}.capibara .detail-day .list-detail .item-detail .name{font-weight:700;margin-bottom:.5em;color:var(--local-color-font,inherit)}.capibara .detail-day .list-detail .item-detail .item-description .desc .label{display:inline-block;font-weight:700}.capibara .detail-day .list-detail .item-detail .left-icon{min-height:10px;height:100%;position:absolute;left:0;top:0;background:var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.outlined{border:1px solid var(--local-color,inherit);box-shadow:inset 0 0 0 1px var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.triangle{background:transparent;border-color:var(--local-color,inherit) transparent transparent var(--local-color,inherit)}.capibara .detail-day .list-detail .item-detail .left-icon.shield{background:var(--local-color,grey)}.capibara .detail-day .elements-detail{padding:.5em 0 .25em;display:flex;flex-wrap:wrap}.capibara .detail-day .elements-detail .name{flex:1 0 100%;font-weight:700}.capibara .detail-day .elements-detail .elements-list{margin:4px -4px}.capibara .detail-day .elements-detail .elements-list .element-detail{display:inline-block;padding:.25em .875em;border-radius:3px;color:#fff;margin:.25em}.capibara .detail-day .alert{padding:.5em 0 .25em 2em;position:relative;min-width:15em;min-width:10em;max-width:30em}.capibara .detail-day .alert .alert-icon{max-width:2em;font-size:1.75em;position:absolute;left:0;top:.5em;color:grey}.capibara .detail-day .alert .red{color:#f44336}.capibara .detail-day .msj-container{margin:0 -.78em -.75em;border:1px solid grey;z-index:2}.capibara .detail-day .msj-container pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.capibara .detail-day .msj-container .msj{min-width:10em;max-width:30em;margin:0 0 .5em;padding:.75em;font-size:.875em}.capibara .detail-day .msj-container .msj-detail{display:flex;flex-direction:column;padding:.25em .5em}.capibara .detail-day .msj-container .msj-detail .email{font-size:.875em;font-style:italic;opacity:.5}.capibara .detail-day .msj-container .msj-detail .date{font-size:.725em}.capibara .detail-day{color:#37474f;background:#fff}.capibara .detail-day,.capibara .detail-day .list-detail.list .item-detail,.capibara .detail-day .list-detail.list .item-detail .desc-column,.capibara .detail-day:after{border-color:rgba(0,0,0,.2)}.capibara .detail-day .elements-detail .elements-list .element-detail{background:rgba(55,71,79,.8)}.capibara .detail-day .msj-container{background:#ffecb3;border-color:#ffca28}.capibara .detail-day .msj-container .msj-detail{background:#ffe082;border-color:#ffca28}.capibara.dark-theme .detail-day{color:#f0f0f0;border-color:#404e69;background:#222837}.capibara.dark-theme .detail-day:after{border-color:#404e69}.capibara.dark-theme .detail-day .list-detail .item-detail{background:transparent!important}.capibara.dark-theme .detail-day .list-detail.list .item-detail,.capibara.dark-theme .detail-day .list-detail.list .item-detail .desc-column{border-color:#404e69}.capibara.dark-theme .detail-day .elements-detail .elements-list .element-detail{background:#293243}.capibara.dark-theme .detail-day .msj-container{background:#293243;border-color:rgba(251,192,45,.4)}.capibara.dark-theme .detail-day .msj-container .msj-detail{background:rgba(251,192,45,.1)}.capibara .cap-context-menu-container{position:absolute;left:0;top:0;z-index:10;will-change:transform,left,top}.capibara .cap-context-menu-container.cm-hide .cap-context-menu{visibility:hidden;opacity:0}.capibara .cap-context-menu-container .cap-context-menu{position:absolute;min-width:250px;z-index:2;border-radius:5px;border:1px solid grey;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);font-size:.75em;transition:all .1s linear;visibility:visible;opacity:1;padding:.4em 0;vertical-align:middle}.capibara .cap-context-menu-container .cap-context-menu_item{padding:.5em 1em;flex:0 0 auto;display:flex;flex-direction:row;align-items:center;cursor:pointer}.capibara .cap-context-menu-container .cap-context-menu_item:hover{background:rgba(20,20,20,.2)}.capibara .cap-context-menu-container .cap-context-menu_item.is-disabled{opacity:.5;cursor:unset}.capibara .cap-context-menu-container .cap-context-menu_item.is-disabled:hover{background:none}.capibara .cap-context-menu-container .cap-context-menu_item.is-divider{cursor:unset;height:0;border-bottom:1px solid rgba(20,20,20,.2);padding:0;margin:.3em 1em}.capibara .cap-context-menu-container .cap-context-menu_item_icon{display:inline-block;flex:0 0 auto;padding-right:.5em}.capibara .cap-context-menu-container .cap-context-menu_item_icon svg{width:16px;height:16px}.capibara .cap-context-menu-container .cap-context-menu{color:#37474f;border-color:rgba(0,0,0,.2);background:#fff}.capibara .cap-context-menu-container .cap-context-menu svg path{fill:#37474f}.capibara.dark-theme .cap-context-menu-container .cap-context-menu{color:#f0f0f0;border-color:#404e69;background:#222837}.capibara.dark-theme .cap-context-menu-container .cap-context-menu svg path{fill:#f0f0f0}.capibara .hour-input{border:1px solid grey;border-radius:3px;display:flex;justify-content:center;align-items:center;height:24px;margin:8px 4px;overflow:hidden}.capibara .hour-input input{width:50%;height:inherit;border:1px solid transparent;background:transparent;font-size:.875em}.capibara .hour-input input:active,.capibara .hour-input input:focus{border:1px solid rgba(0,0,0,.1)}.capibara .hour-input span{width:8px;text-align:center}.capibara .hour-input .hh{text-align:right}.capibara .time{border-radius:6px;display:inline-block;font-size:0}.capibara .time .symbol{display:inline-block;height:auto;width:20px;font-size:2rem;text-align:center;vertical-align:center}.capibara .time input{border-radius:6px;border:2px solid transparent;width:62px;text-align:center;font-size:2rem;position:relative;transition:all .1s ease;outline:none;background:transparent;padding:6px}.capibara .time input:active,.capibara .time input:focus{transform:scale(1.06)}.capibara .time input:invalid{border:2px solid red}.capibara .buttons-group{display:flex;flex-direction:row}.capibara .buttons-group button.cap-btn-outline{border-radius:0;margin:0 -2px 0 0}.capibara .buttons-group button.cap-btn-outline:first-of-type{border-radius:6px 0 0 6px;margin-left:4px}.capibara .buttons-group button.cap-btn-outline:last-of-type{border-radius:0 6px 6px 0;margin-right:4px}.capibara .input-box-tab-container{display:flex;width:100%;flex-wrap:nowrap;border-radius:6px 6px 0 0;border:solid grey;border-width:2px 2px 0}.capibara .input-box-tab-container .input-box-tab{flex:1 1 auto;padding:.3em 1em;font-size:.9em;border-right:1px solid grey;cursor:pointer}.capibara .input-box-tab-container .input-box-tab.active{background:hsla(0,0%,58.8%,.3)}.capibara .input-box-tab-container .input-box-tab:last-child{border-right:none}.capibara .input-box-tab-container+.input-box{border-radius:0 0 6px 6px}.capibara .input-box{margin:0 16px;min-height:180px;border:2px solid grey;border-radius:6px;overflow-y:scroll;padding-bottom:60px;width:100%;max-height:300px}.capibara .input-box .search-input-container{padding:.3em;max-width:100%;text-align:center;border-bottom:1px solid hsla(0,0%,39.2%,.3);position:relative}.capibara .input-box .search-input-container .search-input{border:1px solid #646464;border-radius:13px;height:26px;padding:.5em 1em;max-width:100%;width:100%;font-size:.8em;color:inherit}.capibara .input-box .search-input-container .search-input:-moz-placeholder-shown+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input:-ms-input-placeholder+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input:placeholder-shown+.search-input-clear{display:none}.capibara .input-box .search-input-container .search-input-clear{position:absolute;right:1em;top:.4em;color:hsla(0,0%,39.2%,.6);background-color:transparent;border-style:none}.capibara .input-box .mini-input-section{padding:.5em 2em .5em .5em;text-align:left;width:100%;position:relative;border-bottom:1px solid hsla(0,0%,39.2%,.3)}.capibara .input-box .mini-input-section.has-icon{padding:.5em 2em .5em 1.5em}.capibara .input-box .mini-input-section.clickeable{cursor:pointer}.capibara .input-box .mini-input-section.clickeable:hover label{cursor:pointer;text-decoration:underline}.capibara .input-box .mini-input-section.is-title{background:hsla(0,0%,39.2%,.1)}.capibara .input-box .mini-input-section.is-title .mini-input-section--title{opacity:.6}.capibara .input-box .mini-input-section--tooltip{position:absolute;right:0;top:1.5em;display:none;padding:.5em;margin:1em;color:#000;border-radius:3px;z-index:2;box-shadow:0 2px 5px rgba(0,0,0,.3)}.capibara .input-box .mini-input-section label{display:flex;flex-direction:row;flex-wrap:nowrap;font-size:.875em;align-items:baseline}.capibara .input-box .mini-input-section--titles{display:flex;flex-direction:column;flex-wrap:nowrap;justify-content:start;max-width:100%;flex:0 1 auto}.capibara .input-box .mini-input-section--content{display:flex;flex-direction:row;justify-content:end;flex:1 0 auto;font-size:1em;padding:0 .5em}.capibara .input-box .mini-input-section--subtitle,.capibara .input-box .mini-input-section--title{position:relative;width:unset;max-width:100%;flex-grow:1}.capibara .input-box .mini-input-section--subtitle{font-size:.875em}.capibara .input-box .mini-input-section--suffix{flex:0 0 auto;font-size:.875em;display:flex;flex-direction:column}.capibara .input-box .mini-input-section--icon{display:inline-block;position:absolute;left:.5em;top:.75em;width:.75em;height:.75em;border-radius:50%;background:var(--local-color,grey);box-shadow:0 1px 3px rgba(0,0,0,.3)}.capibara .input-box .mini-input-section--link{opacity:.6;color:#2196f3;display:inline-block;position:absolute;right:.5em;top:.75em}.capibara .input-box .mini-input-section--link svg{width:18px!important;height:18px!important}.capibara .input-box .mini-input-section:hover .mini-input-section--tooltip{display:block}.capibara .input-box .mini-input-section input{text-align:center;width:4em;margin-right:.5em;border:1px solid grey;border-radius:3px;background:hsla(0,0%,100%,.2);font-size:1em;flex:0 0 4em}.capibara .input-box .mini-input-section input:active,.capibara .input-box .mini-input-section input:focus{background:hsla(0,0%,100%,.8)}.capibara .input-box .mini-input-section--footer{margin-top:.25em;display:flex;justify-content:space-between}.capibara select.input-select{padding:.3em 1em;width:100%;flex:1 0 100%;border:1px solid grey;border-radius:6px;background:inherit;cursor:pointer;-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}.capibara select.input-select option{padding:.3em;color:inherit;background:inherit}.capibara .input-section-list{margin:16px 0}.capibara .input-section-list .input-section-title{margin-bottom:8px}.capibara .input-section-list .input-section{margin:0 16px 8px}.capibara .input-section{margin:16px;display:flex;flex-direction:column;flex-wrap:nowrap;align-items:center;position:relative}.capibara .input-section.to-right{align-items:end}.capibara .input-section.to-left{align-items:start}.capibara .input-section .small-close{position:absolute;right:-10px;top:-10px;width:1.2em;height:1.2em;font-size:.9em;border:1px solid #fff;box-shadow:1px 1px 2px rgba(0,0,0,.4);text-align:center;color:#fff;background:red;border-radius:50%;vertical-align:middle}.capibara .input-section .input-section-title{flex:1 1 100%;width:100%;margin:0 auto;display:flex;flex-direction:row;justify-content:center;align-items:center}.capibara .input-section .input-section-title button{margin-left:auto;flex:0 0 auto;display:flex;flex-wrap:nowrap}.capibara .input-section .input-section-link{flex:1 1 100%;display:flex;flex-direction:row;justify-content:center;align-items:baseline;padding-top:.25em}.capibara .input-section .input-section-link a{color:#2196f3;margin-top:.75rem}.capibara .input-section.is-invalid .input-box,.capibara .input-section.is-invalid input.nav-input{border:2px solid red!important;box-shadow:0 0 3px red!important}.capibara .input-section.dense input.nav-input{width:50%;font-size:1em;padding:3px 6px}.capibara .input-section input.nav-input{border:2px solid hsla(0,0%,50.2%,.7);border-radius:6px;width:100%;min-width:130px;max-width:170px;font-size:2em;text-align:center;padding:3px 6px;background:transparent;outline:none;transition:all .1s ease;margin-bottom:8px}.capibara .input-section input.nav-input:active,.capibara .input-section input.nav-input:focus{border:2px solid grey;box-shadow:0 4px 6px hsla(0,0%,50.2%,.2)}.capibara .input-section input.nav-input.small{font-size:1.3em}.capibara .input-section .nav-input-file{border:2px solid hsla(0,0%,50.2%,.7);border-radius:6px;width:70%;min-width:130px;padding:3px 6px;text-align:center;background:transparent;outline:none;transition:all .1s ease;position:relative}.capibara .input-section .nav-input-file:active,.capibara .input-section .nav-input-file:focus{border:2px solid grey;box-shadow:0 4px 6px hsla(0,0%,50.2%,.2)}.capibara .input-section .nav-input-file label{flex:1 1 auto}.capibara .input-section .nav-input-file input[type=file]{display:none}.capibara .input-section .input-section-col{width:auto;position:relative;flex:1 1 10%}.capibara .input-section .input-section-col input.nav-input{min-width:unset;width:calc(100% - 1rem);max-width:7rem}.capibara .input-section.msj-input-container textarea.msj{outline:none;border-radius:6px;border:2px solid grey;width:100%;min-width:100%;max-width:100%;min-height:100px;transition:all .1s ease;padding:8px;box-sizing:border-box}.capibara .input-section.msj-input-container textarea.msj:active,.capibara .input-section.msj-input-container textarea.msj:focus{box-shadow:0 4px 6px rgba(255,160,0,.2)}.capibara .input-section input[type=checkbox]{width:18px;height:18px;vertical-align:middle}.capibara .time{border:2px solid rgba(0,128,0,.7);color:green}.capibara .time .symbol,.capibara .time input{color:#37474f}.capibara .time input:active,.capibara .time input:focus{border-color:green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-box-tab-container,.capibara .input-box-tab-container .input-box-tab{border-color:green}.capibara .input-box{color:#37474f;border:2px solid green}.capibara .input-box .mini-input-section input:active,.capibara .input-box .mini-input-section input:focus{background:#fafafa}.capibara .input-box .mini-input-section--tooltip{background:#fafafa;color:#37474f;border:1px solid #37474f}.capibara .input-section select.input-select{color:#37474f;border:2px solid rgba(0,128,0,.7)}.capibara .input-section select.input-select:active,.capibara .input-section select.input-select:focus{border:2px solid green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-section select.input-select option{background:#fafafa;color:#37474f}.capibara .input-section .nav-input-file,.capibara .input-section input.nav-input{color:#37474f;border:2px solid rgba(0,128,0,.7)}.capibara .input-section .nav-input-file:active,.capibara .input-section .nav-input-file:focus,.capibara .input-section input.nav-input:active,.capibara .input-section input.nav-input:focus{border:2px solid green;box-shadow:0 4px 6px rgba(0,128,0,.2)}.capibara .input-section.msj-input-container textarea.msj{background:rgba(255,249,196,.6);border:2px solid rgba(0,0,0,.4)}.capibara .input-section.msj-input-container textarea.msj:active,.capibara .input-section.msj-input-container textarea.msj:focus{background:rgba(255,249,196,.8);box-shadow:0 4px 6px transparent}.capibara.dark-theme .time{border:2px solid rgba(64,78,105,.7);color:#404e69}.capibara.dark-theme .time .symbol,.capibara.dark-theme .time input{color:#f0f0f0}.capibara.dark-theme .time input:active,.capibara.dark-theme .time input:focus{border-color:#404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-box-tab-container,.capibara.dark-theme .input-box-tab-container .input-box-tab{border-color:#404e69}.capibara.dark-theme .input-box{color:#f0f0f0;border:2px solid #404e69}.capibara.dark-theme .input-box .mini-input-section input{background:#404e69;color:#f0f0f0}.capibara.dark-theme .input-box .mini-input-section input:active,.capibara.dark-theme .input-box .mini-input-section input:focus{background:#222837}.capibara.dark-theme .input-box .mini-input-section--tooltip{background:#222837;color:#f0f0f0;border:1px solid #f0f0f0}.capibara.dark-theme .input-section select.input-select{color:#f0f0f0;border:2px solid rgba(64,78,105,.7)}.capibara.dark-theme .input-section select.input-select:active,.capibara.dark-theme .input-section select.input-select:focus{border:2px solid #404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-section select.input-select option{background:#222837;color:#f0f0f0}.capibara.dark-theme .input-section .nav-input-file,.capibara.dark-theme .input-section input.nav-input{color:#f0f0f0;border:2px solid rgba(64,78,105,.7)}.capibara.dark-theme .input-section .nav-input-file:active,.capibara.dark-theme .input-section .nav-input-file:focus,.capibara.dark-theme .input-section input.nav-input:active,.capibara.dark-theme .input-section input.nav-input:focus{border:2px solid #404e69;box-shadow:0 4px 6px rgba(64,78,105,.2)}.capibara.dark-theme .input-section.msj-input-container textarea.msj{background:rgba(251,192,45,.1);border:2px solid #9e9e9e;color:#f0f0f0}.capibara.dark-theme .input-section.msj-input-container textarea.msj:active,.capibara.dark-theme .input-section.msj-input-container textarea.msj:focus{background:rgba(251,192,45,.3);box-shadow:0 4px 6px hsla(0,0%,62%,.2)}.capibara button{outline:none;cursor:pointer}.capibara button.cap-rotate .mdi:before,.capibara button.cap-rotate svg{transform:rotate(180deg)}.capibara .cap-btn-icon:focus,.capibara .cap-btn-outline:focus,.capibara .cap-btn-raised:focus,.capibara .cap-btn-shape:focus{box-shadow:0 0 0 3px rgba(0,0,0,.3)}.capibara .cap-btn-icon:disabled,.capibara .cap-btn-outline:disabled,.capibara .cap-btn-raised:disabled,.capibara .cap-btn-shape:disabled{opacity:.6}.capibara button.cap-btn-sm{font-size:.75em;margin:4px;padding:4px 8px}.capibara .cap-btn-outline{cursor:pointer;color:grey;border:2px solid grey;padding:8px 16px;margin:0 8px;border-radius:6px;font-weight:700}.capibara .cap-btn-outline.selected{background:grey}.capibara .cap-btn-raised{cursor:pointer;padding:8px 16px;margin:0 8px;border-radius:6px;background:grey;border:2px solid grey;font-weight:700}.capibara .cap-btn-icon{display:inline-block;height:32px;width:32px;outline:none;cursor:pointer;vertical-align:middle;margin-right:16px;margin-top:4px;background:transparent;border:none;padding:4px;font-size:18px;color:grey;border-radius:50%;position:relative}.capibara .cap-btn-icon svg{fill:grey}.capibara .cap-btn-icon.cap-btn-has-badge:after{content:\\\"\\\";display:block;position:absolute;right:-.2em;top:-.2em;width:.8em;height:.8em;background:grey;border-radius:50%}.capibara .cap-btn-icon.cap-btn-icon-raised{background:#fff;border:none}.capibara .cap-btn-icon.cap-btn-icon-outline{border:1px solid grey}.capibara .cap-btn-icon.cap-btn-toggle-sidebar{position:absolute;right:10px;top:10px;z-index:2;margin:0}.capibara .cap-btn-icon .mdi{font-size:24px}.capibara .cap-btn-icon .loading-icon{display:none;position:absolute;left:0;top:0}.capibara .cap-btn-icon.loading>:not(.loading-icon){display:none}.capibara .cap-btn-icon.loading .loading-icon{display:unset}.capibara .cap-btn-shape{display:inline-block;width:24px;height:24px;outline:none;cursor:pointer;vertical-align:middle;margin:4px;background:transparent;border:none;padding:0;font-size:14px}.capibara .cap-btn-shape .mdi{font-size:24px}.capibara .cap-btn-shape.cap-btn-circle{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-circle:before{content:\\\"\\\";display:block;position:absolute;left:2px;top:2px;border-radius:50%;background:grey;width:22px;height:22px}.capibara .cap-btn-shape.cap-btn-circle span{position:absolute;left:1px;top:6px;width:100%;display:inline-block;color:#fff;text-align:center}.capibara .cap-btn-shape.cap-btn-circle-outline{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-circle-outline:before{content:\\\"\\\";display:block;position:absolute;left:2px;top:3px;border-radius:50%;border:2px solid grey;width:22px;height:22px}.capibara .cap-btn-shape.cap-btn-circle-outline span{position:absolute;left:1px;top:6px;width:100%;display:inline-block;color:grey;text-align:center}.capibara .cap-btn-shape.cap-btn-drop{position:relative;border:none;padding:0}.capibara .cap-btn-shape.cap-btn-drop:before{content:\\\"\\\";display:block;position:absolute;left:4px;top:0;border-radius:0 50% 50% 50%;background:grey;width:20px;height:20px;transform:translate(-2px,4px) rotate(45deg)}.capibara .cap-btn-shape.cap-btn-drop span{position:absolute;left:0;top:6px;width:100%;display:inline-block;color:#fff;text-align:center}.capibara.extended-right [toggle-sidebar-right] svg,.capibara.header-extended [toggle-header] svg{transform:rotate(180deg)}.capibara .cap-btn-raised{background:#00f;border:2px solid #00f;color:#fff}.capibara .cap-btn-outline{background:transparent;border:2px solid #00f;color:#00f}.capibara .cap-btn-outline.selected{background:#00f;color:#fff}.capibara .cap-btn-shape{color:#37474f}.capibara .cap-btn-shape.cap-btn-circle,.capibara .cap-btn-shape.cap-btn-drop{color:#fff}.capibara .cap-btn-shape.cap-btn-circle:before,.capibara .cap-btn-shape.cap-btn-drop:before{background:#388e3c}.capibara .cap-btn-shape.cap-btn-circle.is-empty:before,.capibara .cap-btn-shape.cap-btn-drop.is-empty:before{background:#616161}.capibara .cap-btn-shape.cap-btn-circle-outline:before{border-color:#388e3c}.capibara .cap-btn-icon,.capibara .cap-btn-shape.cap-btn-circle-outline span{color:#37474f}.capibara .cap-btn-icon.cap-btn-has-badge:after{background:rgba(245,124,0,.8)}.capibara .cap-btn-icon.cap-btn-icon-raised{background:rgba(84,110,122,.1);border-color:#546e7a;color:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-raised:active{background:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-raised:focus,.capibara .cap-btn-icon.cap-btn-icon-raised:hover{background:rgba(84,110,122,.3)}.capibara .cap-btn-icon.cap-btn-icon-outline{background:transparent;border-color:#546e7a;color:#546e7a}.capibara .cap-btn-icon.cap-btn-icon-outline:active{background:rgba(84,110,122,.3)}.capibara .cap-btn-icon.cap-btn-icon-outline:focus,.capibara .cap-btn-icon.cap-btn-icon-outline:hover{background:rgba(84,110,122,.1)}.capibara.dark-theme .cap-btn-raised{background:#404e69;border:2px solid #f0f0f0;color:#f0f0f0}.capibara.dark-theme .cap-btn-outline{background:transparent;border:2px solid #f0f0f0;color:#f0f0f0}.capibara.dark-theme .cap-btn-outline.selected{background:#404e69;color:#f0f0f0}.capibara.dark-theme .cap-btn-shape,.capibara.dark-theme .cap-btn-shape.cap-btn-circle,.capibara.dark-theme .cap-btn-shape.cap-btn-drop{color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-shape.cap-btn-circle:before,.capibara.dark-theme .cap-btn-shape.cap-btn-drop:before{background:#2e7d32}.capibara.dark-theme .cap-btn-shape.cap-btn-circle.is-empty:before,.capibara.dark-theme .cap-btn-shape.cap-btn-drop.is-empty:before{background:#616161}.capibara.dark-theme .cap-btn-shape.cap-btn-circle-outline:before{border-color:#2e7d32}.capibara.dark-theme .cap-btn-icon,.capibara.dark-theme .cap-btn-shape.cap-btn-circle-outline span{color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-has-badge:after{background:rgba(56,142,60,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised{background:hsla(0,0%,94.1%,.1);border-color:hsla(0,0%,94.1%,.8);color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:active{background:#f0f0f0}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:focus,.capibara.dark-theme .cap-btn-icon.cap-btn-icon-raised:hover{background:hsla(0,0%,94.1%,.3)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline{background:transparent;border-color:hsla(0,0%,94.1%,.8);color:hsla(0,0%,94.1%,.8)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:active{background:hsla(0,0%,94.1%,.1)}.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:focus,.capibara.dark-theme .cap-btn-icon.cap-btn-icon-outline:hover{background:hsla(0,0%,94.1%,0)}.capibara [cap-tooltip]{position:relative;display:inline-block}.capibara [cap-tooltip]:hover:before{padding:8px;opacity:1;border-width:1px;height:auto}.capibara [cap-tooltip]:before{opacity:.3;height:0;padding:0 8px;text-align:left;overflow:hidden;font-size:14px;font-weight:400;position:absolute;top:calc(100% + 18px);left:50%;transform:translatex(-50%);background-color:rgba(0,0,0,.7);border:0 solid #000;border-radius:5px;color:#fff;content:attr(cap-tooltip);text-transform:none;min-width:100px;z-index:5}.capibara .float-box-container{overflow:visible;position:absolute;left:0;top:0;width:0;height:0}.capibara .float-box-container:hover .float-box-ext .long-bar-container .long-bar{opacity:.3}.capibara .float-box-container .float-box{width:var(--day-width);max-width:var(--day-width);min-width:var(--day-width);height:var(--item-height);max-height:var(--item-height);min-height:var(--item-height);position:absolute;overflow:hidden;cursor:default;transition:box-shadow .2s ease;display:flex;flex-direction:column;will-change:display}.capibara .float-box-container .float-box[data-is-visible=false]{display:none!important}.capibara .float-box-container .float-box:hover{z-index:2}.capibara .float-box-container .float-box:hover+.float-box-ext .long-bar{z-index:2;opacity:1}.capibara .float-box-container .float-box.has-message:after{content:\\\"\\\";display:block;position:absolute;width:0;height:0;right:0;top:0;border-color:red red transparent transparent;border-style:solid;border-width:6px;z-index:1}.capibara .float-box-container .float-box.has-errors:before{content:\\\"\\\";display:block;position:absolute;width:7px;height:7px;left:1px;top:1px;border-radius:50%;background:#d32f2f;z-index:1}.capibara .float-box-container .float-box .dot-container-bottom,.capibara .float-box-container .float-box .dot-container-middle,.capibara .float-box-container .float-box .dot-container-top{position:absolute;left:0;width:100%;overflow:visible;height:0;display:flex;justify-content:center}.capibara .float-box-container .float-box .dot-container-top{top:1px}.capibara .float-box-container .float-box .dot-container-top .dot{border-radius:0 0 50% 50%}.capibara .float-box-container .float-box .dot-container-middle{top:calc(50% - 4px)}.capibara .float-box-container .float-box .dot-container-bottom{bottom:5px}.capibara .float-box-container .float-box .dot-container-bottom .dot{border-radius:0 0 50% 50%}.capibara .float-box-container .float-box .dot{width:8px;min-width:8px;height:8px;border-radius:50%;margin:1px;vertical-align:middle;border:1px solid var(--local-color,hsla(0,0%,100%,.8));background:var(--local-color,hsla(0,0%,39.2%,.5))}.capibara .float-box-container .float-box .dot.diamond{border-radius:0;transform:rotate(45deg) skew(10deg,10deg)}.capibara .float-box-container .float-box .dot.outlined{background-color:transparent}.capibara .float-box-container .float-box .dot.triangle{width:0;height:0;transform:rotate(45deg) skew(10deg,10deg) translate(1px,1px);border-left:5px solid var(--local-color,hsla(0,0%,39.2%,.8));border-bottom:5px solid transparent;border-right:5px solid transparent;border-top:5px solid var(--local-color,hsla(0,0%,39.2%,.8));border-radius:0;background-color:transparent}.capibara .float-box-container .float-box span.data{width:100%;display:block;position:relative;font-size:.875em;text-align:center;box-sizing:border-box;height:calc(var(--item-height)/2);line-height:calc(var(--item-height)/2);margin-bottom:2px;font-weight:700;box-shadow:inset 0 0 10px hsla(0,0%,100%,.2);border-radius:3px;color:var(--local-color-font,#fff);-webkit-backdrop-filter:opacity(20%);backdrop-filter:opacity(20%);background:var(--local-color,rgba(0,0,0,.4));border:2px solid var(--local-color,rgba(0,0,0,.2))}.capibara .float-box-container .float-box span.data.shape-outlined{background-color:transparent!important}.capibara .float-box-container .float-box span.data.shape-outlined:before{content:\\\"\\\";opacity:.3;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block;z-index:-1}.capibara .float-box-container .float-box span.data.shape-bar{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px}.capibara .float-box-container .float-box span.data.shape-bar:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-outlined{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px;background-color:transparent!important}.capibara .float-box-container .float-box span.data.shape-bar-outlined:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-outlined:before{content:\\\"\\\";opacity:.3;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block}.capibara .float-box-container .float-box span.data.shape-bar-dashed{height:calc(var(--item-height)/4 - 1.5px);width:calc(var(--day-width) - 6px);line-height:0;color:transparent;border-radius:1px;margin:0 3px;background-color:transparent!important}.capibara .float-box-container .float-box span.data.shape-bar-dashed:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.data.shape-bar-dashed:before{content:\\\"\\\";background:var(--local-color,inherit);position:absolute;left:-1px;top:-1px;width:calc(100% + 2px);height:calc(100% + 2px);display:block;background-color:transparent;background-size:10px 10px;background-image:repeating-linear-gradient(45deg,var(--local-color,inherit),var(--local-color,inherit) 3px,transparent 0,transparent 50%)}.capibara .float-box-container .float-box span.rowdot--row{display:flex;max-height:calc(var(--item-height)/4 - 1px);height:calc(var(--item-height)/4 - 1px);width:calc(var(--day-width) - 2px);line-height:0;color:transparent;margin:1px;border-color:var(--local-color,rgba(0,0,0,.2))}.capibara .float-box-container .float-box span.rowdot--row:first-of-type{margin-top:3px}.capibara .float-box-container .float-box span.rowdot--row:empty{display:none!important}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot{width:calc(var(--day-width)/4 - 2px);height:calc(var(--item-height)/4 - 2px);margin-right:1px;vertical-align:middle;border:3px solid var(--local-color,hsla(0,0%,100%,.8));background:var(--local-color,hsla(0,0%,39.2%,.8));box-shadow:0 0 1px 1px rgba(0,0,0,.2)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-outlined{background-color:hsla(0,0%,39.2%,.2)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-rounded{border-radius:50%;width:calc(var(--item-height)/4 - .5px)}.capibara .float-box-container .float-box span.rowdot--row .rowdot--dot.shape-outlined-rounded{border-radius:50%;background-color:transparent;width:calc(var(--item-height)/4 - .5px)}.capibara .float-box-container .float-box .plot-floatbox-container{position:absolute;left:0;top:0;width:100%;height:100%;overflow:visible}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox{position:absolute;left:0;top:0;width:100%;height:100%;background-color:var(--local-color,rgba(0,0,0,.4));transition:opacity .2s ease}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox.stripe{background:repeating-linear-gradient(53deg,var(--local-color,rgba(0,0,0,.4)),var(--local-color,rgba(0,0,0,.4)) 5px,transparent 0,transparent 12px)}.capibara .float-box-container .float-box .plot-floatbox-container .plot-floatbox.stripe-inverse{background:repeating-linear-gradient(127deg,var(--local-color,rgba(0,0,0,.4)),var(--local-color,rgba(0,0,0,.4)) 5px,transparent 0,transparent 12px)}.capibara .float-box-container .icon-floatbox{width:calc(var(--day-width) - 16px);margin:6px;position:absolute;left:0;top:0;opacity:.8}.capibara .float-box-container .icon-floatbox svg path{fill:var(--local-color,rgba(0,0,0,.4));filter:drop-shadow(0 0 1px rgba(0,0,0,.2))}.capibara .float-box-container .icon-floatbox:hover{opacity:1}.capibara .float-box-container .float-box-ext{position:absolute;overflow:visible;cursor:default;transition:box-shadow .2s ease;will-change:display;pointer-events:none}.capibara .float-box-container .float-box-ext .long-bar-container{position:absolute;left:var(--day-width);top:0;display:flex;flex-direction:column;justify-content:start;align-items:start}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar{width:calc(var(--day-width, 0)*var(--long, 0) - var(--day-width, 0)*0.5);min-width:calc(var(--day-width, 0)*var(--long, 0) - var(--day-width, 0)*0.5);height:calc(var(--item-height)/4 - 3.5px);line-height:0;color:transparent;background:var(--local-color,rgba(0,0,0,.4));border-radius:0 3px 3px 0;margin-left:-3px;margin-top:1px;margin-bottom:1px;opacity:var(--local-opacity,1);border:2px solid rgba(0,0,0,.2);border-left-width:0;transition:opacity .2s ease}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar.solid{opacity:1}.capibara .float-box-container .float-box-ext .long-bar-container .long-bar:first-of-type{margin-top:4px}.capibara .float-box-container .float-box:hover{box-shadow:0 0 2px 7px rgba(113,189,255,.4)}.capibara .float-box-container .float-box:hover+.float-box-ext .long-bar{box-shadow:0 0 2px 4px rgba(113,189,255,.4)}.capibara .float-box-container .float-box+.float-box-ext .long-bar.red-light{background:#f84747}.capibara .float-box-container .float-box+.float-box-ext .long-bar.yellow-light{background:#fdd835}.capibara .float-box-container .float-box+.float-box-ext .long-bar.green-light{background:#38993d}.capibara .float-box-container .float-box span.data.shape-bar{border-color:rgba(0,0,0,.2)}.capibara.dark-theme .float-box-container .float-box:hover{box-shadow:0 0 2px 7px hsla(0,0%,47.8%,.6)}.capibara.dark-theme .float-box-container .float-box:hover+.float-box-ext .long-bar{box-shadow:0 0 2px 4px hsla(0,0%,47.8%,.6)}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.red-light{background:#aa1a1a}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.yellow-light{background:#fbcd00}.capibara.dark-theme .float-box-container .float-box+.float-box-ext .long-bar.green-light{background:#388e3c}.capibara.dark-theme .float-box-container .float-box span.data.shape-bar{border-color:rgba(0,0,0,.3)}.capibara .progress-bar{width:100%;height:4px;background-color:hsla(0,0%,86.7%,.2);overflow:hidden;position:absolute;left:0;bottom:0;transition:height 1s ease}.capibara .progress-bar.hide-progress{height:0}.capibara .progress-bar:before{-webkit-animation-name:loading-fast1;animation-name:loading-fast1;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.capibara .progress-bar:after,.capibara .progress-bar:before{content:\\\"\\\";position:absolute;transform:translateX(-100%);width:62.5%;height:100%;background-color:#292929;-webkit-animation-duration:2s;animation-duration:2s}.capibara .progress-bar:after{-webkit-animation-name:loading-fast2;animation-name:loading-fast2;-webkit-animation-delay:1.3s;animation-delay:1.3s;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}span.mdi{min-width:14px;min-height:14px;display:inline-block}span.mdi.mdi-subdirectory-arrow-right{color:rgba(0,0,0,.2)}.capibara .light{display:block;width:18px;height:18px;flex:0 0 18px;border-radius:50%;margin:12px 8px;border:2px solid rgba(0,0,0,.3);background:var(--light-color,unset);border-color:hsla(0,0%,100%,.8)}.capibara .light.red-light{background:#f84747}.capibara .light.yellow-light{background:#fdd835}.capibara .light.green-light{background:#38993d}.capibara .light.disabled-light{background:#737373}.capibara .light.blue-light{background:#0277bd}.capibara.dark-theme .light{border-color:#404e69}.capibara.dark-theme .light.red-light{background:#aa1a1a}.capibara.dark-theme .light.yellow-light{background:#fbcd00}.capibara.dark-theme .light.green-light{background:#388e3c}.capibara select.tabs-select{background:grey;color:#fff;font-size:16px;outline:none;width:100px;padding:3px 18px;font-weight:700;border:1px solid transparent;margin:8px;border-radius:30px;transition:background .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none}.capibara select.tabs-select option{color:grey;background:#fff;padding:15px}.capibara select.tabs-select:after{content:\\\"\\\";display:block;position:absolute;right:10px;top:4px;border-width:4px;border-color:#fff;z-index:2}.capibara select.tabs-select.disabled{color:grey}.capibara select.tabs-select:hover{border-color:grey}\", \"\"]);\n// Exports\nmodule.exports = exports;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvc2Nzcy9zdHlsZS5zY3NzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvc2Nzcy9zdHlsZS5zY3NzPzQxM2YiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xudmFyIF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyA9IHJlcXVpcmUoXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpO1xuZXhwb3J0cyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhmYWxzZSk7XG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJAaW1wb3J0IHVybChodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVJvYm90bzppdGFsLHdnaHRAMCwzMDA7MCw0MDA7MCw1MDA7MCw3MDA7MCw5MDA7MSwzMDA7MSw0MDA7MSw1MDA7MSw3MDA7MSw5MDAmZGlzcGxheT1zd2FwKTtcIl0pO1xuLy8gTW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCI6cm9vdHstLWhlYWRlci10b3AtaGVpZ2h0OjQwcHg7LS1oZWFkZXItaGVpZ2h0Ojk4cHg7LS1oZWFkZXItbGFiZWxzLWhlaWdodDo1MHB4Oy0taGVhZGVyLWRheS1oZWlnaHQ6MjRweDstLWV4LWhlYWRlci1oZWlnaHQ6MTIwcHg7LS1oZWFkZXItaW5wdXQtaGVpZ2h0OjIwcHg7LS1uYXYtd2lkdGg6MjAwcHg7LS1uYXYtaXRlbS1jb2wtd2lkdGg6NjBweDstLWluaXRpYWwtbmF2LXdpZHRoOjBweDstLWV4LW5hdi13aWR0aDowcHg7LS1idG4tbmF2LXdpZHRoOjExN3B4Oy0tbmF2LXJpZ2h0LXdpZHRoOjMwMHB4Oy0taXRlbS1taW4td2lkdGg6MTAwcHg7LS1pdGVtLWhlaWdodDo0NXB4Oy0tZGF5LXdpZHRoOjQ1cHg7LS1mb250LXNpemU6MTZweH1ALXdlYmtpdC1rZXlmcmFtZXMgcHVsc2VNZXNzYWdlezAle2JvcmRlci1jb2xvcjpyZ2JhKDIxMSw0Nyw0NywuMykgcmdiYSgyMTEsNDcsNDcsLjMpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50fXRve2JvcmRlci1jb2xvcjojZDMyZjJmICNkMzJmMmYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnR9fUBrZXlmcmFtZXMgcHVsc2VNZXNzYWdlezAle2JvcmRlci1jb2xvcjpyZ2JhKDIxMSw0Nyw0NywuMykgcmdiYSgyMTEsNDcsNDcsLjMpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50fXRve2JvcmRlci1jb2xvcjojZDMyZjJmICNkMzJmMmYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnR9fUAtd2Via2l0LWtleWZyYW1lcyBwdWxzZUJhY2tncm91bmR7MCV7YmFja2dyb3VuZDpyZ2JhKDIxMSw0Nyw0NywuMyl9dG97YmFja2dyb3VuZDojZDMyZjJmfX1Aa2V5ZnJhbWVzIHB1bHNlQmFja2dyb3VuZHswJXtiYWNrZ3JvdW5kOnJnYmEoMjExLDQ3LDQ3LC4zKX10b3tiYWNrZ3JvdW5kOiNkMzJmMmZ9fUAtd2Via2l0LWtleWZyYW1lcyBsb2FkaW5nLWZhc3QxezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX00MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDIwMCUpfX1Aa2V5ZnJhbWVzIGxvYWRpbmctZmFzdDF7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfTQwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMjAwJSl9fUAtd2Via2l0LWtleWZyYW1lcyBsb2FkaW5nLWZhc3QyezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX0xNSV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDIwMCUpfX1Aa2V5ZnJhbWVzIGxvYWRpbmctZmFzdDJ7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfTE1JXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMjAwJSl9fS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojZGY1NTRiIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojZGY1NTRifS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2ZkZmFmOX0uY2FwaWJhcmEuYy1yZWQ6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2ZkZmFmOTtib3JkZXItY29sb3I6I2Y5OWQ5N30uY2FwaWJhcmEuYy1yZWQ6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNmZGZhZjk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZjk5ZDk3fS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2ZkZmFmOSkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXJlZDpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2Y5OWQ5N30uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNiYTE2MGF9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiNiYTE2MGF9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1yZWQgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtcmVkIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLXJlZCAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLXJlZCAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXJlZCAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzYhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1yZWQgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6I2Y0NDMzNiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtcmVkIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNil9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1yZWQgLnRpbWUgLnN5bWJvbHtjb2xvcjojZjQ0MzM2fS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1yZWQgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZCAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2Y0NDMzNjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI0NCw2Nyw1NCwuMil9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNil9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmNDQzMzY7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNDQsNjcsNTQsLjIpfS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNil9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtcmVkIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZjQ0MzM2O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjQ0LDY3LDU0LC4yKX0uY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjZjQ0MzM2fS5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1yZWQgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXJlZCAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI0NCw2Nyw1NCwuMil9LmNhcGliYXJhLmMtcmVkIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1yZWQuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiNmNDQzMzY7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuOCl9LmNhcGliYXJhLmMtcmVkIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6I2Y0NDMzNjtjb2xvcjojZjQ0MzM2fS5jYXBpYmFyYS5jLXJlZCAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLXJlZC5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuOCl9LmNhcGliYXJhLmMtcmVkLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1yZWQgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMjQ0LDY3LDU0LC41KX0uY2FwaWJhcmEgLmMtcmVkLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2Y0NDMzNiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXJlZC1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2QyMTkwYiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXJlZC1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2Y4ODc3ZiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXJlZC0tdGV4dHtjb2xvcjojZjQ0MzM2IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcmVkLWQtLXRleHR7Y29sb3I6I2QyMTkwYiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXJlZC1sLS10ZXh0e2NvbG9yOiNmODg3N2YhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcmVke2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpO2JvcmRlcjoxcHggc29saWQgI2Y0NDMzNn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXJlZCAubGVmdC1pY29ue2JhY2tncm91bmQ6I2Y0NDMzNn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXJlZCAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgI2Y0NDMzNjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDI0NCw2Nyw1NCwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1yZWQgLm5hbWV7Y29sb3I6I2Y0NDMzNn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1yZWR7LS1sb2NhbC1jb2xvcjojZjQ0MzM2Oy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1yZWQsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLXJlZCwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1yZWQgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6I2Y0NDMzNn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1yZWQuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1yZWQuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXJlZDpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKTtib3JkZXItY29sb3I6cmdiYSgyNDQsNjcsNTQsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1yZWR7YmFja2dyb3VuZDojZjQ0MzM2fS5jYXBpYmFyYS5jLXBpbms6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6I2QwMzc2YiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1waW5rOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiNkMDM3NmJ9LmNhcGliYXJhLmMtcGluazpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2YwZTNlN30uY2FwaWJhcmEuYy1waW5rOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNmMGUzZTc7Ym9yZGVyLWNvbG9yOiNmMjdiYTN9LmNhcGliYXJhLmMtcGluazpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2YwZTNlNztib3JkZXItYm90dG9tLWNvbG9yOiNmMjdiYTN9LmNhcGliYXJhLmMtcGluazpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2YwZTNlNykhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXBpbms6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNmMjdiYTN9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM5MzBlM2J9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzkzMGUzYn0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1waW5rIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1waW5rIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzMsMzAsOTksLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1waW5rIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1waW5rIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtcGluayAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNlOTFlNjMhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtcGluayBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMywzMCw5OSwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojZTkxZTYzIWltcG9ydGFudH0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtcGluayAudGltZXtib3JkZXItY29sb3I6cmdiYSgyMzMsMzAsOTksLjYpfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLXBpbmsgLnRpbWUgLnN5bWJvbHtjb2xvcjojZTkxZTYzfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXBpbmsgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlOTFlNjM7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMzMsMzAsOTksLjIpfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC42KX0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlOTFlNjM7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMzMsMzAsOTksLjIpfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgyMzMsMzAsOTksLjYpfS5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1waW5rIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXBpbmsgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZTkxZTYzO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjMzLDMwLDk5LC4yKX0uY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICNlOTFlNjN9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1waW5rLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtcGluayAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIzMywzMCw5OSwuMil9LmNhcGliYXJhLmMtcGluayAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6I2U5MWU2MztiYWNrZ3JvdW5kOnJnYmEoMjMzLDMwLDk5LC44KX0uY2FwaWJhcmEuYy1waW5rIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiNlOTFlNjM7Y29sb3I6I2U5MWU2M30uY2FwaWJhcmEuYy1waW5rIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDIzMywzMCw5OSwuOCl9LmNhcGliYXJhLmMtcGluay5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtcGluayAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyMzMsMzAsOTksLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgyMzMsMzAsOTksLjUpfS5jYXBpYmFyYSAuYy1waW5rLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2U5MWU2MyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXBpbmstZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNhYTExNDUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1waW5rLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZjA2NDkzIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcGluay0tdGV4dHtjb2xvcjojZTkxZTYzIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcGluay1kLS10ZXh0e2NvbG9yOiNhYTExNDUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1waW5rLWwtLXRleHR7Y29sb3I6I2YwNjQ5MyFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1waW5re2JhY2tncm91bmQ6cmdiYSgyMzMsMzAsOTksLjIpO2JvcmRlcjoxcHggc29saWQgI2U5MWU2M30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXBpbmsgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiNlOTFlNjN9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1waW5rIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjZTkxZTYzO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjMzLDMwLDk5LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXBpbmsgLm5hbWV7Y29sb3I6I2U5MWU2M30uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1waW5rey0tbG9jYWwtY29sb3I6I2U5MWU2MzstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtcGluaywuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtcGluaywuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1waW5rIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiNlOTFlNjN9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtcGluay5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDIzMywzMCw5OSwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXBpbmsuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyMzMsMzAsOTksLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXBpbms6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDIzMywzMCw5OSwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMjMzLDMwLDk5LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtcGlua3tiYWNrZ3JvdW5kOiNlOTFlNjN9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiM4ZDNkOWIgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiM4ZDNkOWJ9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZDZjYmQ4fS5jYXBpYmFyYS5jLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZDZjYmQ4O2JvcmRlci1jb2xvcjojY2E2MWRjfS5jYXBpYmFyYS5jLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2Q2Y2JkODtib3JkZXItYm90dG9tLWNvbG9yOiNjYTYxZGN9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZDZjYmQ4KSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcHVycGxlOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojY2E2MWRjfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzUyMTQ1ZH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzUyMTQ1ZH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLXB1cnBsZSA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTYsMzksMTc2LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtcHVycGxlIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTYsMzksMTc2LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1wdXJwbGUgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtcHVycGxlIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtcHVycGxlIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzljMjdiMCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLXB1cnBsZSBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzljMjdiMCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtcHVycGxlIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjYpfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtcHVycGxlIC50aW1lIC5zeW1ib2x7Y29sb3I6IzljMjdiMH0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtcHVycGxlIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM5YzI3YjA7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxNTYsMzksMTc2LC4yKX0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuNil9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM5YzI3YjA7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxNTYsMzksMTc2LC4yKX0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtcHVycGxlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgxNTYsMzksMTc2LC42KX0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM5YzI3YjA7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxNTYsMzksMTc2LC4yKX0uY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjOWMyN2IwfS5jYXBpYmFyYS5jLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1wdXJwbGUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXB1cnBsZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDE1NiwzOSwxNzYsLjIpfS5jYXBpYmFyYS5jLXB1cnBsZSAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojOWMyN2IwO2JhY2tncm91bmQ6cmdiYSgxNTYsMzksMTc2LC44KX0uY2FwaWJhcmEuYy1wdXJwbGUgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1wdXJwbGUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojOWMyN2IwO2NvbG9yOiM5YzI3YjB9LmNhcGliYXJhLmMtcHVycGxlIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMTU2LDM5LDE3NiwuOCl9LmNhcGliYXJhLmMtcHVycGxlLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1wdXJwbGUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMTU2LDM5LDE3NiwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDE1NiwzOSwxNzYsLjUpfS5jYXBpYmFyYSAuYy1wdXJwbGUtLWJhY2tncm91bmR7YmFja2dyb3VuZDojOWMyN2IwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcHVycGxlLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNjQxOTcxIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcHVycGxlLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojYzM0Y2Q3IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcHVycGxlLS10ZXh0e2NvbG9yOiM5YzI3YjAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1wdXJwbGUtZC0tdGV4dHtjb2xvcjojNjQxOTcxIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtcHVycGxlLWwtLXRleHR7Y29sb3I6I2MzNGNkNyFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1wdXJwbGV7YmFja2dyb3VuZDpyZ2JhKDE1NiwzOSwxNzYsLjIpO2JvcmRlcjoxcHggc29saWQgIzljMjdiMH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXB1cnBsZSAubGVmdC1pY29ue2JhY2tncm91bmQ6IzljMjdiMH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXB1cnBsZSAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzljMjdiMDtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDE1NiwzOSwxNzYsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtcHVycGxlIC5uYW1le2NvbG9yOiM5YzI3YjB9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtcHVycGxley0tbG9jYWwtY29sb3I6IzljMjdiMDstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtcHVycGxlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1wdXJwbGUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtcHVycGxlIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiM5YzI3YjB9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtcHVycGxlLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMTU2LDM5LDE3NiwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMTU2LDM5LDE3NiwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1wdXJwbGUuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgxNTYsMzksMTc2LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1wdXJwbGU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDE1NiwzOSwxNzYsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDE1NiwzOSwxNzYsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1wdXJwbGV7YmFja2dyb3VuZDojOWMyN2IwfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiM2ZTUyOWYgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGU6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzZlNTI5Zn0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2RlZGVkZn0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZGVkZWRmO2JvcmRlci1jb2xvcjojOWY4MGQ3fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZGVkZWRmO2JvcmRlci1ib3R0b20tY29sb3I6IzlmODBkN30uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2RlZGVkZikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojOWY4MGQ3fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMzYjIxNmF9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojM2IyMTZhfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxMDMsNTgsMTgzLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxMDMsNTgsMTgzLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiM2NzNhYjchaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTAzLDU4LDE4MywuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojNjczYWI3IWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDEwMyw1OCwxODMsLjYpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAudGltZSAuc3ltYm9se2NvbG9yOiM2NzNhYjd9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM2NzNhYjc7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMDMsNTgsMTgzLC4yKX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgxMDMsNTgsMTgzLC42KX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojNjczYWI3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTAzLDU4LDE4MywuMil9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgxMDMsNTgsMTgzLC42KX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojNjczYWI3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTAzLDU4LDE4MywuMil9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICM2NzNhYjd9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMDMsNTgsMTgzLC4yKX0uY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiM2NzNhYjc7YmFja2dyb3VuZDpyZ2JhKDEwMyw1OCwxODMsLjgpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtZGVlcC1wdXJwbGUuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojNjczYWI3O2NvbG9yOiM2NzNhYjd9LmNhcGliYXJhLmMtZGVlcC1wdXJwbGUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDEwMyw1OCwxODMsLjgpfS5jYXBpYmFyYS5jLWRlZXAtcHVycGxlLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1kZWVwLXB1cnBsZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgxMDMsNTgsMTgzLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMTAzLDU4LDE4MywuNSl9LmNhcGliYXJhIC5jLWRlZXAtcHVycGxlLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzY3M2FiNyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtcHVycGxlLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNDYyODdkIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1wdXJwbGUtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM5MTZkZDEhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLXB1cnBsZS0tdGV4dHtjb2xvcjojNjczYWI3IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1wdXJwbGUtZC0tdGV4dHtjb2xvcjojNDYyODdkIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1wdXJwbGUtbC0tdGV4dHtjb2xvcjojOTE2ZGQxIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtcHVycGxle2JhY2tncm91bmQ6cmdiYSgxMDMsNTgsMTgzLC4yKTtib3JkZXI6MXB4IHNvbGlkICM2NzNhYjd9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLXB1cnBsZSAubGVmdC1pY29ue2JhY2tncm91bmQ6IzY3M2FiN30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtcHVycGxlIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjNjczYWI3O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMTAzLDU4LDE4MywuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLXB1cnBsZSAubmFtZXtjb2xvcjojNjczYWI3fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWRlZXAtcHVycGxley0tbG9jYWwtY29sb3I6IzY3M2FiNzstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtZGVlcC1wdXJwbGUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWRlZXAtcHVycGxlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWRlZXAtcHVycGxlIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiM2NzNhYjd9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZGVlcC1wdXJwbGUuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgxMDMsNTgsMTgzLC43KTtib3JkZXItY29sb3I6cmdiYSgxMDMsNTgsMTgzLC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWRlZXAtcHVycGxlLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMTAzLDU4LDE4MywuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZGVlcC1wdXJwbGU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDEwMyw1OCwxODMsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDEwMyw1OCwxODMsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1kZWVwLXB1cnBsZXtiYWNrZ3JvdW5kOiM2NzNhYjd9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiM1NzYyOWQgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiM1NzYyOWR9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZTBlMGUwfS5jYXBpYmFyYS5jLWluZGlnbzpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZTBlMGUwO2JvcmRlci1jb2xvcjojODU5MWQ1fS5jYXBpYmFyYS5jLWluZGlnbzpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2UwZTBlMDtib3JkZXItYm90dG9tLWNvbG9yOiM4NTkxZDV9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZTBlMGUwKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtaW5kaWdvOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojODU5MWQ1fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzI1MmY2OX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzI1MmY2OX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWluZGlnbyA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSg2Myw4MSwxODEsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1pbmRpZ28gOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtaW5kaWdvIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtaW5kaWdvIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtaW5kaWdvIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzNmNTFiNSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWluZGlnbyBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojM2Y1MWI1IWltcG9ydGFudH0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1pbmRpZ28gLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoNjMsODEsMTgxLC42KX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWluZGlnbyAudGltZSAuc3ltYm9se2NvbG9yOiMzZjUxYjV9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWluZGlnbyAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojM2Y1MWI1O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNjMsODEsMTgxLC4yKX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoNjMsODEsMTgxLC42KX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzNmNTFiNTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDYzLDgxLDE4MSwuMil9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoNjMsODEsMTgxLC42KX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1pbmRpZ28gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMzZjUxYjU7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg2Myw4MSwxODEsLjIpfS5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICMzZjUxYjV9LmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWluZGlnbyAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtaW5kaWdvIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNjMsODEsMTgxLC4yKX0uY2FwaWJhcmEuYy1pbmRpZ28gLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWluZGlnby5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzNmNTFiNTtiYWNrZ3JvdW5kOnJnYmEoNjMsODEsMTgxLC44KX0uY2FwaWJhcmEuYy1pbmRpZ28gLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojM2Y1MWI1O2NvbG9yOiMzZjUxYjV9LmNhcGliYXJhLmMtaW5kaWdvIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtaW5kaWdvLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoNjMsODEsMTgxLC44KX0uY2FwaWJhcmEuYy1pbmRpZ28uZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWluZGlnbyAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSg2Myw4MSwxODEsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSg2Myw4MSwxODEsLjUpfS5jYXBpYmFyYSAuYy1pbmRpZ28tLWJhY2tncm91bmR7YmFja2dyb3VuZDojM2Y1MWI1IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtaW5kaWdvLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMmIzODdjIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtaW5kaWdvLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNzI4MGNlIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtaW5kaWdvLS10ZXh0e2NvbG9yOiMzZjUxYjUhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1pbmRpZ28tZC0tdGV4dHtjb2xvcjojMmIzODdjIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtaW5kaWdvLWwtLXRleHR7Y29sb3I6IzcyODBjZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1pbmRpZ297YmFja2dyb3VuZDpyZ2JhKDYzLDgxLDE4MSwuMik7Ym9yZGVyOjFweCBzb2xpZCAjM2Y1MWI1fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtaW5kaWdvIC5sZWZ0LWljb257YmFja2dyb3VuZDojM2Y1MWI1fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtaW5kaWdvIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjM2Y1MWI1O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoNjMsODEsMTgxLC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWluZGlnbyAubmFtZXtjb2xvcjojM2Y1MWI1fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWluZGlnb3stLWxvY2FsLWNvbG9yOiMzZjUxYjU7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWluZGlnbywuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtaW5kaWdvLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWluZGlnbyAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojM2Y1MWI1fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWluZGlnby5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDYzLDgxLDE4MSwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoNjMsODEsMTgxLC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWluZGlnby5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDYzLDgxLDE4MSwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtaW5kaWdvOmhvdmVye2JhY2tncm91bmQ6cmdiYSg2Myw4MSwxODEsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDYzLDgxLDE4MSwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWluZGlnb3tiYWNrZ3JvdW5kOiMzZjUxYjV9LmNhcGliYXJhLmMtYmx1ZTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojMzE3NmJiIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWJsdWU6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzMxNzZiYn0uY2FwaWJhcmEuYy1ibHVlOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZDFkY2U2fS5jYXBpYmFyYS5jLWJsdWU6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2QxZGNlNjtib3JkZXItY29sb3I6IzY0YTllZH0uY2FwaWJhcmEuYy1ibHVlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZDFkY2U2O2JvcmRlci1ib3R0b20tY29sb3I6IzY0YTllZH0uY2FwaWJhcmEuYy1ibHVlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZDFkY2U2KSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzY0YTllZH0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzBlNDM3N30uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMGU0Mzc3fS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWJsdWUgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1ibHVlIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNSwxMTgsMjEwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtYmx1ZSAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNSwxMTgsMjEwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWJsdWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1ibHVlIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzE5NzZkMiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1ibHVlIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojMTk3NmQyIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtYmx1ZSAudGltZXtib3JkZXItY29sb3I6cmdiYSgyNSwxMTgsMjEwLC42KX0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1ibHVlIC50aW1lIC5zeW1ib2x7Y29sb3I6IzE5NzZkMn0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1ibHVlIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMTk3NmQyO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjUsMTE4LDIxMCwuMil9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyNSwxMTgsMjEwLC42KX0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMxOTc2ZDI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNSwxMTgsMjEwLC4yKX0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMjUsMTE4LDIxMCwuNil9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWJsdWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1ibHVlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMxOTc2ZDI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNSwxMTgsMjEwLC4yKX0uY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICMxOTc2ZDJ9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1LDExOCwyMTAsLjIpfS5jYXBpYmFyYS5jLWJsdWUgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWJsdWUuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiMxOTc2ZDI7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjgpfS5jYXBpYmFyYS5jLWJsdWUgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzE5NzZkMjtjb2xvcjojMTk3NmQyfS5jYXBpYmFyYS5jLWJsdWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1ibHVlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMjUsMTE4LDIxMCwuOCl9LmNhcGliYXJhLmMtYmx1ZS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtYmx1ZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMjUsMTE4LDIxMCwuNSl9LmNhcGliYXJhIC5jLWJsdWUtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMTk3NmQyIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzExNTA4ZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWUtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM0ZTljZWEhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlLS10ZXh0e2NvbG9yOiMxOTc2ZDIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ibHVlLWQtLXRleHR7Y29sb3I6IzExNTA4ZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWUtbC0tdGV4dHtjb2xvcjojNGU5Y2VhIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJsdWV7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjIpO2JvcmRlcjoxcHggc29saWQgIzE5NzZkMn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJsdWUgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiMxOTc2ZDJ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVlIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjMTk3NmQyO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjUsMTE4LDIxMCwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVlIC5uYW1le2NvbG9yOiMxOTc2ZDJ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtYmx1ZXstLWxvY2FsLWNvbG9yOiMxOTc2ZDI7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWJsdWUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWJsdWUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtYmx1ZSAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojMTk3NmQyfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJsdWUuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC43KTtib3JkZXItY29sb3I6cmdiYSgyNSwxMTgsMjEwLC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJsdWUuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1ibHVlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC4yKTtib3JkZXItY29sb3I6cmdiYSgyNSwxMTgsMjEwLC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtYmx1ZXtiYWNrZ3JvdW5kOiMxOTc2ZDJ9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojMWNhMGRiIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWU6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IzFjYTBkYn0uY2FwaWJhcmEuYy1saWdodC1ibHVlOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZDNlN2YwfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWU6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2QzZTdmMDtib3JkZXItY29sb3I6IzYwY2NmZH0uY2FwaWJhcmEuYy1saWdodC1ibHVlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZDNlN2YwO2JvcmRlci1ib3R0b20tY29sb3I6IzYwY2NmZH0uY2FwaWJhcmEuYy1saWdodC1ibHVlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZDNlN2YwKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzYwY2NmZH0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzAyNjM4Zn0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDI2MzhmfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMywxNjksMjQ0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMywxNjksMjQ0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzAzYTlmNCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1saWdodC1ibHVlIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMywxNjksMjQ0LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiMwM2E5ZjQhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuNil9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAudGltZSAuc3ltYm9se2NvbG9yOiMwM2E5ZjR9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzAzYTlmNDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDMsMTY5LDI0NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgzLDE2OSwyNDQsLjYpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzAzYTlmNDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDMsMTY5LDI0NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDMsMTY5LDI0NCwuNil9LmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtYmx1ZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwM2E5ZjQ7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgzLDE2OSwyNDQsLjIpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzAzYTlmNH0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMywxNjksMjQ0LC4yKX0uY2FwaWJhcmEuYy1saWdodC1ibHVlIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojMDNhOWY0O2JhY2tncm91bmQ6cmdiYSgzLDE2OSwyNDQsLjgpfS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzAzYTlmNDtjb2xvcjojMDNhOWY0fS5jYXBpYmFyYS5jLWxpZ2h0LWJsdWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMywxNjksMjQ0LC44KX0uY2FwaWJhcmEuYy1saWdodC1ibHVlLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1saWdodC1ibHVlIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDMsMTY5LDI0NCwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDMsMTY5LDI0NCwuNSl9LmNhcGliYXJhIC5jLWxpZ2h0LWJsdWUtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMDNhOWY0IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtYmx1ZS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzAyNzVhOCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWJsdWUtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM0N2M0ZmQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ibHVlLS10ZXh0e2NvbG9yOiMwM2E5ZjQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ibHVlLWQtLXRleHR7Y29sb3I6IzAyNzVhOCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWJsdWUtbC0tdGV4dHtjb2xvcjojNDdjNGZkIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWJsdWV7YmFja2dyb3VuZDpyZ2JhKDMsMTY5LDI0NCwuMik7Ym9yZGVyOjFweCBzb2xpZCAjMDNhOWY0fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGlnaHQtYmx1ZSAubGVmdC1pY29ue2JhY2tncm91bmQ6IzAzYTlmNH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWJsdWUgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICMwM2E5ZjQ7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgzLDE2OSwyNDQsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtbGlnaHQtYmx1ZSAubmFtZXtjb2xvcjojMDNhOWY0fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWxpZ2h0LWJsdWV7LS1sb2NhbC1jb2xvcjojMDNhOWY0Oy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1saWdodC1ibHVlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1saWdodC1ibHVlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWxpZ2h0LWJsdWUgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6IzAzYTlmNH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1saWdodC1ibHVlLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMywxNjksMjQ0LC43KTtib3JkZXItY29sb3I6cmdiYSgzLDE2OSwyNDQsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGlnaHQtYmx1ZS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDMsMTY5LDI0NCwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGlnaHQtYmx1ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMywxNjksMjQ0LC4yKTtib3JkZXItY29sb3I6cmdiYSgzLDE2OSwyNDQsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1saWdodC1ibHVle2JhY2tncm91bmQ6IzAzYTlmNH0uY2FwaWJhcmEuYy1jeWFuOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiMxNWFjYmYgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtY3lhbjpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojMTVhY2JmfS5jYXBpYmFyYS5jLWN5YW46bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNiOWUyZTh9LmNhcGliYXJhLmMtY3lhbjpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojYjllMmU4O2JvcmRlci1jb2xvcjojM2JlOWZmfS5jYXBpYmFyYS5jLWN5YW46bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNiOWUyZTg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojM2JlOWZmfS5jYXBpYmFyYS5jLWN5YW46bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNiOWUyZTgpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1jeWFuOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojM2JlOWZmfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojMDA2MjZlfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMwMDYyNmV9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtY3lhbiA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE4OCwyMTIsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtY3lhbiA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwxODgsMjEyLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtY3lhbiAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE4OCwyMTIsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtY3lhbiAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWN5YW4gLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojMDBiY2Q0IWltcG9ydGFudH0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWN5YW4gc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE4OCwyMTIsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzAwYmNkNCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWN5YW4gLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxODgsMjEyLC42KX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1jeWFuIC50aW1lIC5zeW1ib2x7Y29sb3I6IzAwYmNkNH0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1jeWFuIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMDBiY2Q0O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxODgsMjEyLC4yKX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuNil9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojMDBiY2Q0O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxODgsMjEyLC4yKX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxODgsMjEyLC42KX0uY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtY3lhbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1jeWFuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzAwYmNkNDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTg4LDIxMiwuMil9LmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjMDBiY2Q0fS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtY3lhbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWN5YW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDE4OCwyMTIsLjIpfS5jYXBpYmFyYS5jLWN5YW4gLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiMwMGJjZDQ7YmFja2dyb3VuZDpyZ2JhKDAsMTg4LDIxMiwuOCl9LmNhcGliYXJhLmMtY3lhbiAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojMDBiY2Q0O2NvbG9yOiMwMGJjZDR9LmNhcGliYXJhLmMtY3lhbiAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgwLDE4OCwyMTIsLjgpfS5jYXBpYmFyYS5jLWN5YW4uZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWN5YW4gLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMCwxODgsMjEyLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMCwxODgsMjEyLC41KX0uY2FwaWJhcmEgLmMtY3lhbi0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMwMGJjZDQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1jeWFuLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMDA3ODg4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtY3lhbi1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzIyZTZmZiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWN5YW4tLXRleHR7Y29sb3I6IzAwYmNkNCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWN5YW4tZC0tdGV4dHtjb2xvcjojMDA3ODg4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtY3lhbi1sLS10ZXh0e2NvbG9yOiMyMmU2ZmYhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtY3lhbntiYWNrZ3JvdW5kOnJnYmEoMCwxODgsMjEyLC4yKTtib3JkZXI6MXB4IHNvbGlkICMwMGJjZDR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1jeWFuIC5sZWZ0LWljb257YmFja2dyb3VuZDojMDBiY2Q0fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtY3lhbiAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzAwYmNkNDtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDAsMTg4LDIxMiwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1jeWFuIC5uYW1le2NvbG9yOiMwMGJjZDR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtY3lhbnstLWxvY2FsLWNvbG9yOiMwMGJjZDQ7LS1sb2NhbC1jb2xvci1mb250OiMyNjMyMzh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWN5YW4sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWN5YW4sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtY3lhbiAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojMDBiY2Q0fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWN5YW4uYWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDE4OCwyMTIsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1jeWFuLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMCwxODgsMjEyLC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1jeWFuOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDE4OCwyMTIsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDAsMTg4LDIxMiwuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWN5YW57YmFja2dyb3VuZDojMDBiY2Q0fS5jYXBpYmFyYS5jLXRlYWw6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzBmODc3YyB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy10ZWFsOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiMwZjg3N2N9LmNhcGliYXJhLmMtdGVhbDpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6IzhhZDhkMX0uY2FwaWJhcmEuYy10ZWFsOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiM4YWQ4ZDE7Ym9yZGVyLWNvbG9yOiMwMGZjZTR9LmNhcGliYXJhLmMtdGVhbDpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6IzhhZDhkMTtib3JkZXItYm90dG9tLWNvbG9yOiMwMGZjZTR9LmNhcGliYXJhLmMtdGVhbDpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsIzhhZDhkMSkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXRlYWw6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMwMGZjZTR9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMwMDMwMmN9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzAwMzAyY30uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy10ZWFsIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy10ZWFsIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDE1MCwxMzYsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy10ZWFsIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy10ZWFsIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtdGVhbCAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDk2ODghaW1wb3J0YW50fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtdGVhbCBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMTUwLDEzNiwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojMDA5Njg4IWltcG9ydGFudH0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtdGVhbCAudGltZXtib3JkZXItY29sb3I6cmdiYSgwLDE1MCwxMzYsLjYpfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLXRlYWwgLnRpbWUgLnN5bWJvbHtjb2xvcjojMDA5Njg4fS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLXRlYWwgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDk2ODg7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDE1MCwxMzYsLjIpfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LWJveCwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC42KX0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDk2ODg7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDE1MCwxMzYsLjIpfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgwLDE1MCwxMzYsLjYpfS5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy10ZWFsIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXRlYWwgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojMDA5Njg4O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxNTAsMTM2LC4yKX0uY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICMwMDk2ODh9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy10ZWFsLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtdGVhbCAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDAsMTUwLDEzNiwuMil9LmNhcGliYXJhLmMtdGVhbCAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzAwOTY4ODtiYWNrZ3JvdW5kOnJnYmEoMCwxNTAsMTM2LC44KX0uY2FwaWJhcmEuYy10ZWFsIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMwMDk2ODg7Y29sb3I6IzAwOTY4OH0uY2FwaWJhcmEuYy10ZWFsIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDAsMTUwLDEzNiwuOCl9LmNhcGliYXJhLmMtdGVhbC5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtdGVhbCAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgwLDE1MCwxMzYsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgwLDE1MCwxMzYsLjUpfS5jYXBpYmFyYSAuYy10ZWFsLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzAwOTY4OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLXRlYWwtZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMwMDRhNDMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy10ZWFsLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojMDBlM2NkIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtdGVhbC0tdGV4dHtjb2xvcjojMDA5Njg4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtdGVhbC1kLS10ZXh0e2NvbG9yOiMwMDRhNDMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy10ZWFsLWwtLXRleHR7Y29sb3I6IzAwZTNjZCFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy10ZWFse2JhY2tncm91bmQ6cmdiYSgwLDE1MCwxMzYsLjIpO2JvcmRlcjoxcHggc29saWQgIzAwOTY4OH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXRlYWwgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiMwMDk2ODh9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy10ZWFsIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjMDA5Njg4O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMCwxNTAsMTM2LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXRlYWwgLm5hbWV7Y29sb3I6IzAwOTY4OH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy10ZWFsey0tbG9jYWwtY29sb3I6IzAwOTY4ODstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtdGVhbCwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtdGVhbCwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy10ZWFsIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiMwMDk2ODh9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtdGVhbC5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDAsMTUwLDEzNiwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXRlYWwuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDE1MCwxMzYsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLXRlYWw6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMTUwLDEzNiwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMCwxNTAsMTM2LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtdGVhbHtiYWNrZ3JvdW5kOiMwMDk2ODh9LmNhcGliYXJhLmMtZ3JlZW46bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzNmNmM0MSB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1ncmVlbjpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojM2Y2YzQxfS5jYXBpYmFyYS5jLWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojYmNiY2JjfS5jYXBpYmFyYS5jLWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNiY2JjYmM7Ym9yZGVyLWNvbG9yOiM1MmJmNTd9LmNhcGliYXJhLmMtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNiY2JjYmM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNTJiZjU3fS5jYXBpYmFyYS5jLWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjYmNiY2JjKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM1MmJmNTd9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzEzMzIxNH0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMxMzMyMTR9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWdyZWVuIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtZ3JlZW4gOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1ncmVlbiAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSg0NiwxMjUsNTAsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1ncmVlbiAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWdyZWVuIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzJlN2QzMiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtZ3JlZW4gc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSg0NiwxMjUsNTAsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6IzJlN2QzMiFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1ncmVlbiAudGltZXtib3JkZXItY29sb3I6cmdiYSg0NiwxMjUsNTAsLjYpfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1ncmVlbiAudGltZSAuc3ltYm9se2NvbG9yOiMyZTdkMzJ9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1ncmVlbiAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4gLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMyZTdkMzI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg0NiwxMjUsNTAsLjIpfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LWJveCwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuNil9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6IzJlN2QzMjtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDQ2LDEyNSw1MCwuMil9LmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSg0NiwxMjUsNTAsLjYpfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ncmVlbiAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMyZTdkMzI7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg0NiwxMjUsNTAsLjIpfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjMmU3ZDMyfS5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtZ3JlZW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWdyZWVuIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoNDYsMTI1LDUwLC4yKX0uY2FwaWJhcmEuYy1ncmVlbiAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtZ3JlZW4uZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiMyZTdkMzI7YmFja2dyb3VuZDpyZ2JhKDQ2LDEyNSw1MCwuOCl9LmNhcGliYXJhLmMtZ3JlZW4gLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMyZTdkMzI7Y29sb3I6IzJlN2QzMn0uY2FwaWJhcmEuYy1ncmVlbiAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWdyZWVuLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoNDYsMTI1LDUwLC44KX0uY2FwaWJhcmEuYy1ncmVlbi5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtZ3JlZW4gLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoNDYsMTI1LDUwLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoNDYsMTI1LDUwLC41KX0uY2FwaWJhcmEgLmMtZ3JlZW4tLWJhY2tncm91bmR7YmFja2dyb3VuZDojMmU3ZDMyIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZ3JlZW4tZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiMxOTQ1MWMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ncmVlbi1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzQzYjU0OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWdyZWVuLS10ZXh0e2NvbG9yOiMyZTdkMzIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ncmVlbi1kLS10ZXh0e2NvbG9yOiMxOTQ1MWMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1ncmVlbi1sLS10ZXh0e2NvbG9yOiM0M2I1NDghaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZ3JlZW57YmFja2dyb3VuZDpyZ2JhKDQ2LDEyNSw1MCwuMik7Ym9yZGVyOjFweCBzb2xpZCAjMmU3ZDMyfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtZ3JlZW4gLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiMyZTdkMzJ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ncmVlbiAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzJlN2QzMjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDQ2LDEyNSw1MCwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ncmVlbiAubmFtZXtjb2xvcjojMmU3ZDMyfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWdyZWVuey0tbG9jYWwtY29sb3I6IzJlN2QzMjstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtZ3JlZW4sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWdyZWVuLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWdyZWVuIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiMyZTdkMzJ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZ3JlZW4uYWN0aXZle2JhY2tncm91bmQ6cmdiYSg0NiwxMjUsNTAsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDQ2LDEyNSw1MCwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1ncmVlbi5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDQ2LDEyNSw1MCwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDQ2LDEyNSw1MCwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoNDYsMTI1LDUwLC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtZ3JlZW57YmFja2dyb3VuZDojMmU3ZDMyfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiM4OWFiNjIgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW46bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6Izg5YWI2Mn0uY2FwaWJhcmEuYy1saWdodC1ncmVlbjpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2VkZWRlY30uY2FwaWJhcmEuYy1saWdodC1ncmVlbjpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZWRlZGVjO2JvcmRlci1jb2xvcjojYmNkYzk3fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZWRlZGVjO2JvcmRlci1ib3R0b20tY29sb3I6I2JjZGM5N30uY2FwaWJhcmEuYy1saWdodC1ncmVlbjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2VkZWRlYykhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojYmNkYzk3fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiM1NzdkMmF9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNTc3ZDJhfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgxMzksMTk1LDc0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTM5LDE5NSw3NCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxMzksMTk1LDc0LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiM4YmMzNGEhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTM5LDE5NSw3NCwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojOGJjMzRhIWltcG9ydGFudH0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDEzOSwxOTUsNzQsLjYpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAudGltZSAuc3ltYm9se2NvbG9yOiM4YmMzNGF9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM4YmMzNGE7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMzksMTk1LDc0LC4yKX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgxMzksMTk1LDc0LC42KX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojOGJjMzRhO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTM5LDE5NSw3NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgxMzksMTk1LDc0LC42KX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojOGJjMzRhO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTM5LDE5NSw3NCwuMil9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICM4YmMzNGF9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMzksMTk1LDc0LC4yKX0uY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiM4YmMzNGE7YmFja2dyb3VuZDpyZ2JhKDEzOSwxOTUsNzQsLjgpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4uZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojOGJjMzRhO2NvbG9yOiM4YmMzNGF9LmNhcGliYXJhLmMtbGlnaHQtZ3JlZW4gLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1saWdodC1ncmVlbi5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDEzOSwxOTUsNzQsLjgpfS5jYXBpYmFyYS5jLWxpZ2h0LWdyZWVuLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1saWdodC1ncmVlbiAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgxMzksMTk1LDc0LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMTM5LDE5NSw3NCwuNSl9LmNhcGliYXJhIC5jLWxpZ2h0LWdyZWVuLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzhiYzM0YSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpZ2h0LWdyZWVuLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojNjQ5MTMwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtZ3JlZW4tbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNiMGQ2ODMhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saWdodC1ncmVlbi0tdGV4dHtjb2xvcjojOGJjMzRhIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtZ3JlZW4tZC0tdGV4dHtjb2xvcjojNjQ5MTMwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGlnaHQtZ3JlZW4tbC0tdGV4dHtjb2xvcjojYjBkNjgzIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWdyZWVue2JhY2tncm91bmQ6cmdiYSgxMzksMTk1LDc0LC4yKTtib3JkZXI6MXB4IHNvbGlkICM4YmMzNGF9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saWdodC1ncmVlbiAubGVmdC1pY29ue2JhY2tncm91bmQ6IzhiYzM0YX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpZ2h0LWdyZWVuIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjOGJjMzRhO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMTM5LDE5NSw3NCwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saWdodC1ncmVlbiAubmFtZXtjb2xvcjojOGJjMzRhfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWxpZ2h0LWdyZWVuey0tbG9jYWwtY29sb3I6IzhiYzM0YTstLWxvY2FsLWNvbG9yLWZvbnQ6IzI2MzIzOH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtbGlnaHQtZ3JlZW4sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWxpZ2h0LWdyZWVuLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWxpZ2h0LWdyZWVuIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiM4YmMzNGF9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGlnaHQtZ3JlZW4uYWN0aXZle2JhY2tncm91bmQ6cmdiYSgxMzksMTk1LDc0LC43KTtib3JkZXItY29sb3I6cmdiYSgxMzksMTk1LDc0LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpZ2h0LWdyZWVuLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMTM5LDE5NSw3NCwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtbGlnaHQtZ3JlZW46aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDEzOSwxOTUsNzQsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDEzOSwxOTUsNzQsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1saWdodC1ncmVlbntiYWNrZ3JvdW5kOiM4YmMzNGF9LmNhcGliYXJhLmMtbGltZTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojYmFjNTUwIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWxpbWU6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6I2JhYzU1MH0uY2FwaWJhcmEuYy1saW1lOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZjNmM2VlfS5jYXBpYmFyYS5jLWxpbWU6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2YzZjNlZTtib3JkZXItY29sb3I6I2UzZWI5MH0uY2FwaWJhcmEuYy1saW1lOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZjNmM2VlO2JvcmRlci1ib3R0b20tY29sb3I6I2UzZWI5MH0uY2FwaWJhcmEuYy1saW1lOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZjNmM2VlKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGltZTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2UzZWI5MH0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6Izg5OTUxYX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojODk5NTFhfS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWxpbWUgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1saW1lIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDUsMjIwLDU3LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtbGltZSAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyMDUsMjIwLDU3LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWxpbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1saW1lIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2NkZGMzOSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1saW1lIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojY2RkYzM5IWltcG9ydGFudH0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtbGltZSAudGltZXtib3JkZXItY29sb3I6cmdiYSgyMDUsMjIwLDU3LC42KX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1saW1lIC50aW1lIC5zeW1ib2x7Y29sb3I6I2NkZGMzOX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1saW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojY2RkYzM5O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjA1LDIyMCw1NywuMil9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyMDUsMjIwLDU3LC42KX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNjZGRjMzk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMDUsMjIwLDU3LC4yKX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMjA1LDIyMCw1NywuNil9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWxpbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1saW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNjZGRjMzk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMDUsMjIwLDU3LC4yKX0uY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICNjZGRjMzl9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtbGltZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIwNSwyMjAsNTcsLjIpfS5jYXBpYmFyYS5jLWxpbWUgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWxpbWUuZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiNjZGRjMzk7YmFja2dyb3VuZDpyZ2JhKDIwNSwyMjAsNTcsLjgpfS5jYXBpYmFyYS5jLWxpbWUgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6I2NkZGMzOTtjb2xvcjojY2RkYzM5fS5jYXBpYmFyYS5jLWxpbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1saW1lLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMjA1LDIyMCw1NywuOCl9LmNhcGliYXJhLmMtbGltZS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtbGltZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyMDUsMjIwLDU3LC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMjA1LDIyMCw1NywuNSl9LmNhcGliYXJhIC5jLWxpbWUtLWJhY2tncm91bmR7YmFja2dyb3VuZDojY2RkYzM5IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtbGltZS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzlkYWExZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpbWUtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNkZGU3N2EhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saW1lLS10ZXh0e2NvbG9yOiNjZGRjMzkhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1saW1lLWQtLXRleHR7Y29sb3I6IzlkYWExZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWxpbWUtbC0tdGV4dHtjb2xvcjojZGRlNzdhIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpbWV7YmFja2dyb3VuZDpyZ2JhKDIwNSwyMjAsNTcsLjIpO2JvcmRlcjoxcHggc29saWQgI2NkZGMzOX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWxpbWUgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiNjZGRjMzl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saW1lIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjY2RkYzM5O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjA1LDIyMCw1NywuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1saW1lIC5uYW1le2NvbG9yOiNjZGRjMzl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtbGltZXstLWxvY2FsLWNvbG9yOiNjZGRjMzk7LS1sb2NhbC1jb2xvci1mb250OiMyNjMyMzh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWxpbWUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWxpbWUsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtbGltZSAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojY2RkYzM5fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpbWUuYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyMDUsMjIwLDU3LC43KTtib3JkZXItY29sb3I6cmdiYSgyMDUsMjIwLDU3LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWxpbWUuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyMDUsMjIwLDU3LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1saW1lOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyMDUsMjIwLDU3LC4yKTtib3JkZXItY29sb3I6cmdiYSgyMDUsMjIwLDU3LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtbGltZXtiYWNrZ3JvdW5kOiNjZGRjMzl9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiNlYmRiNGYgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiNlYmRiNGZ9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojZmZmfS5jYXBpYmFyYS5jLXllbGxvdzpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZmZmO2JvcmRlci1jb2xvcjojZmZmNWExfS5jYXBpYmFyYS5jLXllbGxvdzpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY1YTF9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjZmZmKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMteWVsbG93Om5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojZmZmNWExfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2Q0YmUwMH0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6I2Q0YmUwMH0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLXllbGxvdyA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjM1LDU5LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMteWVsbG93IDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjM1LDU5LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy15ZWxsb3cgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIzNSw1OSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMteWVsbG93IC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMteWVsbG93IC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2ZmZWIzYiFpbXBvcnRhbnR9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLXllbGxvdyBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMzUsNTksLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6I2ZmZWIzYiFpbXBvcnRhbnR9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMteWVsbG93IC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyMzUsNTksLjYpfS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMteWVsbG93IC50aW1lIC5zeW1ib2x7Y29sb3I6I2ZmZWIzYn0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMteWVsbG93IC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmViM2I7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMjM1LDU5LC4yKX0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1ib3gsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDIzNSw1OSwuNil9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmViM2I7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMjM1LDU5LC4yKX0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMteWVsbG93IC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgyNTUsMjM1LDU5LC42KX0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmViM2I7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMjM1LDU5LC4yKX0uY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjZmZlYjNifS5jYXBpYmFyYS5jLXllbGxvdy5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy15ZWxsb3cgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLXllbGxvdyAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwyMzUsNTksLjIpfS5jYXBpYmFyYS5jLXllbGxvdyAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojZmZlYjNiO2JhY2tncm91bmQ6cmdiYSgyNTUsMjM1LDU5LC44KX0uY2FwaWJhcmEuYy15ZWxsb3cgLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy15ZWxsb3cuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojZmZlYjNiO2NvbG9yOiNmZmViM2J9LmNhcGliYXJhLmMteWVsbG93IC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMjU1LDIzNSw1OSwuOCl9LmNhcGliYXJhLmMteWVsbG93LmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy15ZWxsb3cgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDIzNSw1OSwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDI1NSwyMzUsNTksLjUpfS5jYXBpYmFyYSAuYy15ZWxsb3ctLWJhY2tncm91bmR7YmFja2dyb3VuZDojZmZlYjNiIWltcG9ydGFudH0uY2FwaWJhcmEgLmMteWVsbG93LWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZWVkNTAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMteWVsbG93LWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZmZmMzg4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMteWVsbG93LS10ZXh0e2NvbG9yOiNmZmViM2IhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy15ZWxsb3ctZC0tdGV4dHtjb2xvcjojZWVkNTAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMteWVsbG93LWwtLXRleHR7Y29sb3I6I2ZmZjM4OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy15ZWxsb3d7YmFja2dyb3VuZDpyZ2JhKDI1NSwyMzUsNTksLjIpO2JvcmRlcjoxcHggc29saWQgI2ZmZWIzYn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXllbGxvdyAubGVmdC1pY29ue2JhY2tncm91bmQ6I2ZmZWIzYn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLXllbGxvdyAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgI2ZmZWIzYjtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwyMzUsNTksLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMteWVsbG93IC5uYW1le2NvbG9yOiNmZmViM2J9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMteWVsbG93ey0tbG9jYWwtY29sb3I6I2ZmZWIzYjstLWxvY2FsLWNvbG9yLWZvbnQ6IzI2MzIzOH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMteWVsbG93LC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy15ZWxsb3csLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMteWVsbG93IC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiNmZmViM2J9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMteWVsbG93LmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDIzNSw1OSwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDIzNSw1OSwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy15ZWxsb3cuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMjM1LDU5LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy15ZWxsb3c6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyMzUsNTksLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyMzUsNTksLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy15ZWxsb3d7YmFja2dyb3VuZDojZmZlYjNifS5jYXBpYmFyYS5jLWFtYmVyOm5vdCguZGFyay10aGVtZSl7c2Nyb2xsYmFyLWNvbG9yOiNlNmI1MjAgdHJhbnNwYXJlbnR9LmNhcGliYXJhLmMtYW1iZXI6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6I2U2YjUyMH0uY2FwaWJhcmEuYy1hbWJlcjpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2Y0ZWZkZX0uY2FwaWJhcmEuYy1hbWJlcjpub3QoLmRhcmstdGhlbWUpIC5jb3JuZXJ7YmFja2dyb3VuZDojZjRlZmRlO2JvcmRlci1jb2xvcjojZmZkYjZkfS5jYXBpYmFyYS5jLWFtYmVyOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZjRlZmRlO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZGI2ZH0uY2FwaWJhcmEuYy1hbWJlcjpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2Y0ZWZkZSkhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWFtYmVyOm5vdCguZGFyay10aGVtZSkgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojZmZkYjZkfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNhMDc4MDB9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYTA3ODAwfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1hbWJlciA6Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTkzLDcsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWFtYmVyIDo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTkzLDcsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtYW1iZXIgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjpiZWZvcmUsLmNhcGliYXJhLmMtYW1iZXIgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1hbWJlciAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmMxMDchaW1wb3J0YW50fS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgc2VsZWN0LnRhYnMtc2VsZWN0LC5jYXBpYmFyYS5jLWFtYmVyIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiNmZmMxMDchaW1wb3J0YW50fS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnRpbWUsLmNhcGliYXJhLmMtYW1iZXIgLnRpbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC42KX0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtYW1iZXIgLnRpbWUgLnN5bWJvbHtjb2xvcjojZmZjMTA3fS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtYW1iZXIgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyIC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZmZjMTA3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE5Myw3LC4yKX0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyNTUsMTkzLDcsLjYpfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3VzLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZmMxMDc7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTkzLDcsLjIpfS5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE5Myw3LC42KX0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYW1iZXIgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojZmZjMTA3O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE5Myw3LC4yKX0uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgI2ZmYzEwN30uY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3VzLC5jYXBpYmFyYS5jLWFtYmVyIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1hbWJlciAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxOTMsNywuMil9LmNhcGliYXJhLmMtYW1iZXIgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWFtYmVyLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojZmZjMTA3O2JhY2tncm91bmQ6cmdiYSgyNTUsMTkzLDcsLjgpfS5jYXBpYmFyYS5jLWFtYmVyIC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JvcmRlci1jb2xvcjojZmZjMTA3O2NvbG9yOiNmZmMxMDd9LmNhcGliYXJhLmMtYW1iZXIgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1hbWJlci5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDI1NSwxOTMsNywuOCl9LmNhcGliYXJhLmMtYW1iZXIuZGFyay10aGVtZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5LC5jYXBpYmFyYS5jLWFtYmVyIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDI1NSwxOTMsNywuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDI1NSwxOTMsNywuNSl9LmNhcGliYXJhIC5jLWFtYmVyLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2ZmYzEwNyFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWFtYmVyLWQtLWJhY2tncm91bmR7YmFja2dyb3VuZDojYmE4YjAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYW1iZXItbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNmZmQ0NTQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1hbWJlci0tdGV4dHtjb2xvcjojZmZjMTA3IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYW1iZXItZC0tdGV4dHtjb2xvcjojYmE4YjAwIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYW1iZXItbC0tdGV4dHtjb2xvcjojZmZkNDU0IWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWFtYmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMTkzLDcsLjIpO2JvcmRlcjoxcHggc29saWQgI2ZmYzEwN30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWFtYmVyIC5sZWZ0LWljb257YmFja2dyb3VuZDojZmZjMTA3fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYW1iZXIgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICNmZmMxMDc7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsMTkzLDcsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYW1iZXIgLm5hbWV7Y29sb3I6I2ZmYzEwN30uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuYy1hbWJlcnstLWxvY2FsLWNvbG9yOiNmZmMxMDc7LS1sb2NhbC1jb2xvci1mb250OiMyNjMyMzh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWFtYmVyLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1hbWJlciwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucm93ZG90LS1yb3cuYy1hbWJlciAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojZmZjMTA3fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWFtYmVyLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE5Myw3LC43KTtib3JkZXItY29sb3I6cmdiYSgyNTUsMTkzLDcsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYW1iZXIuYWN0aXZlOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMTkzLDcsLjgpfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWFtYmVyOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMTkzLDcsLjIpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwxOTMsNywuOSl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbi5jLWFtYmVye2JhY2tncm91bmQ6I2ZmYzEwN30uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6I2U2OTMxYSB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6I2U2OTMxYX0uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNmMmU4ZDl9LmNhcGliYXJhLmMtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNmMmU4ZDk7Ym9yZGVyLWNvbG9yOiNmZmMxNjZ9LmNhcGliYXJhLmMtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXJ7YmFja2dyb3VuZDojZjJlOGQ5O2JvcmRlci1ib3R0b20tY29sb3I6I2ZmYzE2Nn0uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNmMmU4ZDkpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNmZmMxNjZ9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmhlYWRlci10b3AsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojOTk1YjAwfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5jb3JuZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojOTk1YjAwfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtb3JhbmdlIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLW9yYW5nZSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1vcmFuZ2UgLnByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1vcmFuZ2UgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1vcmFuZ2UgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwIWltcG9ydGFudH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtb3JhbmdlIHNlbGVjdC50YWJzLXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiNmZjk4MDAhaW1wb3J0YW50fS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLW9yYW5nZSAudGltZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMTUyLDAsLjYpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhLmMtb3JhbmdlIC50aW1lIC5zeW1ib2x7Y29sb3I6I2ZmOTgwMH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtb3JhbmdlIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZjk4MDA7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTUyLDAsLjIpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdHtib3JkZXItY29sb3I6cmdiYSgyNTUsMTUyLDAsLjYpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojZmY5ODAwO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjU1LDE1MiwwLC4yKX0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0LC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgyNTUsMTUyLDAsLjYpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2ZmOTgwMDtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxNTIsMCwuMil9LmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgI2ZmOTgwMH0uY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtb3JhbmdlIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1vcmFuZ2UgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyNTUsMTUyLDAsLjIpfS5jYXBpYmFyYS5jLW9yYW5nZSAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtb3JhbmdlLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JvcmRlci1jb2xvcjojZmY5ODAwO2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjgpfS5jYXBpYmFyYS5jLW9yYW5nZSAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmOTgwMH0uY2FwaWJhcmEuYy1vcmFuZ2UgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZCwuY2FwaWJhcmEuYy1vcmFuZ2UuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjgpfS5jYXBpYmFyYS5jLW9yYW5nZS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtb3JhbmdlIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMyk7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCByZ2JhKDI1NSwxNTIsMCwuNSl9LmNhcGliYXJhIC5jLW9yYW5nZS0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNmZjk4MDAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1vcmFuZ2UtZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNiMzZhMDAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1vcmFuZ2UtbC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNmZmI3NGQhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1vcmFuZ2UtLXRleHR7Y29sb3I6I2ZmOTgwMCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLW9yYW5nZS1kLS10ZXh0e2NvbG9yOiNiMzZhMDAhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1vcmFuZ2UtbC0tdGV4dHtjb2xvcjojZmZiNzRkIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLW9yYW5nZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKTtib3JkZXI6MXB4IHNvbGlkICNmZjk4MDB9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1vcmFuZ2UgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiNmZjk4MDB9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1vcmFuZ2UgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICNmZjk4MDA7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsMTUyLDAsLjcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtb3JhbmdlIC5uYW1le2NvbG9yOiNmZjk4MDB9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtb3Jhbmdley0tbG9jYWwtY29sb3I6I2ZmOTgwMDstLWxvY2FsLWNvbG9yLWZvbnQ6IzI2MzIzOH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtb3JhbmdlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QuYy1vcmFuZ2UsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtb3JhbmdlIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiNmZjk4MDB9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtb3JhbmdlLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC43KTtib3JkZXItY29sb3I6cmdiYSgyNTUsMTUyLDAsLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtb3JhbmdlLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1vcmFuZ2U6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtb3Jhbmdle2JhY2tncm91bmQ6I2ZmOTgwMH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojY2Q1NzMzIHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlOm5vdCguZGFyay10aGVtZSkgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kOiNjZDU3MzN9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNlZGUxZGV9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2VkZTFkZTtib3JkZXItY29sb3I6I2YwOTI3NX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2VkZTFkZTtib3JkZXItYm90dG9tLWNvbG9yOiNmMDkyNzV9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2U6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlciAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNlZGUxZGUpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6I2YwOTI3NX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5oZWFkZXItdG9wLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgbmF2LnJpZ2h0e2JvcmRlci1jb2xvcjojOGEyYzBmfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuY29ybmVye2JvcmRlci1ib3R0b20tY29sb3I6IzhhMmMwZn0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIDo6LW1vei1zZWxlY3Rpb24sLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSA6OnNlbGVjdGlvbiwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhcjphZnRlciwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLnByb2dyZXNzLWJhcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjojZTY0YTE5IWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuNykhaW1wb3J0YW50O2JvcmRlci1jb2xvcjojZTY0YTE5IWltcG9ydGFudH0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC50aW1le2JvcmRlci1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuNil9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC50aW1lIC5zeW1ib2x7Y29sb3I6I2U2NGExOX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2U2NGExOTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIzMCw3NCwyNSwuMil9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC42KX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojZTY0YTE5O2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMjMwLDc0LDI1LC4yKX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2JvcmRlci1jb2xvcjpyZ2JhKDIzMCw3NCwyNSwuNil9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmZvY3VzLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2U2NGExOTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDIzMCw3NCwyNSwuMil9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zaiwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zantib3JkZXI6MnB4IHNvbGlkICNlNjRhMTl9LmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1cywuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgyMzAsNzQsMjUsLjIpfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5jYXAtYnRuLXJhaXNlZCwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZS5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6I2U2NGExOTtiYWNrZ3JvdW5kOnJnYmEoMjMwLDc0LDI1LC44KX0uY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuY2FwLWJ0bi1vdXRsaW5lLC5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6I2U2NGExOTtjb2xvcjojZTY0YTE5fS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWQsLmNhcGliYXJhLmMtZGVlcC1vcmFuZ2UuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgyMzAsNzQsMjUsLjgpfS5jYXBpYmFyYS5jLWRlZXAtb3JhbmdlLmRhcmstdGhlbWUgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheSwuY2FwaWJhcmEuYy1kZWVwLW9yYW5nZSAuc2VsZWN0LWNvbnRhaW5lciAuc2VsZWN0ZWQtZGF5e2JhY2tncm91bmQ6cmdiYSgyMzAsNzQsMjUsLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSgyMzAsNzQsMjUsLjUpfS5jYXBpYmFyYSAuYy1kZWVwLW9yYW5nZS0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiNlNjRhMTkhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1kZWVwLW9yYW5nZS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2ExMzQxMiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtb3JhbmdlLWwtLWJhY2tncm91bmR7YmFja2dyb3VuZDojZWU4MDVlIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZGVlcC1vcmFuZ2UtLXRleHR7Y29sb3I6I2U2NGExOSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtb3JhbmdlLWQtLXRleHR7Y29sb3I6I2ExMzQxMiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWRlZXAtb3JhbmdlLWwtLXRleHR7Y29sb3I6I2VlODA1ZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLW9yYW5nZXtiYWNrZ3JvdW5kOnJnYmEoMjMwLDc0LDI1LC4yKTtib3JkZXI6MXB4IHNvbGlkICNlNjRhMTl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1kZWVwLW9yYW5nZSAubGVmdC1pY29ue2JhY2tncm91bmQ6I2U2NGExOX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtb3JhbmdlIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCAjZTY0YTE5O2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHJnYmEoMjMwLDc0LDI1LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWRlZXAtb3JhbmdlIC5uYW1le2NvbG9yOiNlNjRhMTl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLmMtZGVlcC1vcmFuZ2V7LS1sb2NhbC1jb2xvcjojZTY0YTE5Oy0tbG9jYWwtY29sb3ItZm9udDojZmZmfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuYy1kZWVwLW9yYW5nZSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtZGVlcC1vcmFuZ2UsLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnJvd2RvdC0tcm93LmMtZGVlcC1vcmFuZ2UgLnJvd2RvdC0tZG90ey0tbG9jYWwtY29sb3I6I2U2NGExOX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1kZWVwLW9yYW5nZS5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDIzMCw3NCwyNSwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjMwLDc0LDI1LC43KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWRlZXAtb3JhbmdlLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjMwLDc0LDI1LC44KX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1kZWVwLW9yYW5nZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjMwLDc0LDI1LC4yKTtib3JkZXItY29sb3I6cmdiYSgyMzAsNzQsMjUsLjkpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb24uYy1kZWVwLW9yYW5nZXtiYWNrZ3JvdW5kOiNlNjRhMTl9LmNhcGliYXJhLmMtYnJvd246bm90KC5kYXJrLXRoZW1lKXtzY3JvbGxiYXItY29sb3I6IzY2NWU1YiB0cmFuc3BhcmVudH0uY2FwaWJhcmEuYy1icm93bjpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojNjY1ZTVifS5jYXBpYmFyYS5jLWJyb3duOm5vdCguZGFyay10aGVtZSkgLmhlYWRlci10b3B7YmFja2dyb3VuZDojYzdjN2M3fS5jYXBpYmFyYS5jLWJyb3duOm5vdCguZGFyay10aGVtZSkgLmNvcm5lcntiYWNrZ3JvdW5kOiNjN2M3Yzc7Ym9yZGVyLWNvbG9yOiNhZjg3Nzh9LmNhcGliYXJhLmMtYnJvd246bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNjN2M3Yzc7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYWY4Nzc4fS5jYXBpYmFyYS5jLWJyb3duOm5vdCguZGFyay10aGVtZSkgLmNvbnRhaW5lci10bCBoZWFkZXIgLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjYzdjN2M3KSFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYnJvd246bm90KC5kYXJrLXRoZW1lKSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiNhZjg3Nzh9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIG5hdi5yaWdodHtib3JkZXItY29sb3I6IzM5MjgyMn0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMzOTI4MjJ9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSA6Oi1tb3otc2VsZWN0aW9uLC5jYXBpYmFyYS5jLWJyb3duIDo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgOjpzZWxlY3Rpb24sLmNhcGliYXJhLmMtYnJvd24gOjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLnByb2dyZXNzLWJhciwuY2FwaWJhcmEuYy1icm93biAucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxMjEsODUsNzIsLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmJlZm9yZSwuY2FwaWJhcmEuYy1icm93biAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWJyb3duIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6Izc5NTU0OCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSBzZWxlY3QudGFicy1zZWxlY3QsLmNhcGliYXJhLmMtYnJvd24gc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSgxMjEsODUsNzIsLjcpIWltcG9ydGFudDtib3JkZXItY29sb3I6Izc5NTU0OCFpbXBvcnRhbnR9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAudGltZSwuY2FwaWJhcmEuYy1icm93biAudGltZXtib3JkZXItY29sb3I6cmdiYSgxMjEsODUsNzIsLjYpfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuYy1icm93biAudGltZSAuc3ltYm9se2NvbG9yOiM3OTU1NDh9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1cywuY2FwaWJhcmEuYy1icm93biAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24gLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM3OTU1NDg7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMjEsODUsNzIsLjIpfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3QsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LWJveCwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuNil9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXItY29sb3I6Izc5NTU0ODtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDEyMSw4NSw3MiwuMil9LmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dHtib3JkZXItY29sb3I6cmdiYSgxMjEsODUsNzIsLjYpfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1icm93biAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM3OTU1NDg7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgxMjEsODUsNzIsLjIpfS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2p7Ym9yZGVyOjJweCBzb2xpZCAjNzk1NTQ4fS5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtYnJvd24gLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYS5jLWJyb3duIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmZvY3Vze2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMTIxLDg1LDcyLC4yKX0uY2FwaWJhcmEuYy1icm93biAuY2FwLWJ0bi1yYWlzZWQsLmNhcGliYXJhLmMtYnJvd24uZGFyay10aGVtZSAuY2FwLWJ0bi1yYWlzZWR7Ym9yZGVyLWNvbG9yOiM3OTU1NDg7YmFja2dyb3VuZDpyZ2JhKDEyMSw4NSw3MiwuOCl9LmNhcGliYXJhLmMtYnJvd24gLmNhcC1idG4tb3V0bGluZSwuY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiM3OTU1NDg7Y29sb3I6Izc5NTU0OH0uY2FwaWJhcmEuYy1icm93biAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWJyb3duLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOnJnYmEoMTIxLDg1LDcyLC44KX0uY2FwaWJhcmEuYy1icm93bi5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtYnJvd24gLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheXtiYWNrZ3JvdW5kOnJnYmEoMTIxLDg1LDcyLC4zKTtib3gtc2hhZG93Omluc2V0IDAgMCAxMHB4IHJnYmEoMTIxLDg1LDcyLC41KX0uY2FwaWJhcmEgLmMtYnJvd24tLWJhY2tncm91bmR7YmFja2dyb3VuZDojNzk1NTQ4IWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYnJvd24tZC0tYmFja2dyb3VuZHtiYWNrZ3JvdW5kOiM0OTMzMmIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1icm93bi1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6I2E1Nzg2OCFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJyb3duLS10ZXh0e2NvbG9yOiM3OTU1NDghaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1icm93bi1kLS10ZXh0e2NvbG9yOiM0OTMzMmIhaW1wb3J0YW50fS5jYXBpYmFyYSAuYy1icm93bi1sLS10ZXh0e2NvbG9yOiNhNTc4NjghaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYnJvd257YmFja2dyb3VuZDpyZ2JhKDEyMSw4NSw3MiwuMik7Ym9yZGVyOjFweCBzb2xpZCAjNzk1NTQ4fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYnJvd24gLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiM3OTU1NDh9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1icm93biAubGVmdC1pY29uLm91dGxpbmVke2JvcmRlcjoxcHggc29saWQgIzc5NTU0ODtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCByZ2JhKDEyMSw4NSw3MiwuNyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1icm93biAubmFtZXtjb2xvcjojNzk1NTQ4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWJyb3duey0tbG9jYWwtY29sb3I6Izc5NTU0ODstLWxvY2FsLWNvbG9yLWZvbnQ6I2ZmZn0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLmMtYnJvd24sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5jLWJyb3duLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWJyb3duIC5yb3dkb3QtLWRvdHstLWxvY2FsLWNvbG9yOiM3OTU1NDh9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYnJvd24uYWN0aXZle2JhY2tncm91bmQ6cmdiYSgxMjEsODUsNzIsLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDEyMSw4NSw3MiwuNyk7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWI6bm90KC5kaXNhYmxlZCkuYy1icm93bi5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDEyMSw4NSw3MiwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYnJvd246aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDEyMSw4NSw3MiwuMik7Ym9yZGVyLWNvbG9yOnJnYmEoMTIxLDg1LDcyLC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtYnJvd257YmFja2dyb3VuZDojNzk1NTQ4fS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpe3Njcm9sbGJhci1jb2xvcjojNzY3Njc2IHRyYW5zcGFyZW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojNzY3Njc2fS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpIC5oZWFkZXItdG9we2JhY2tncm91bmQ6I2RjZGNkY30uY2FwaWJhcmEuYy1ibHVlX2dyZXk6bm90KC5kYXJrLXRoZW1lKSAuY29ybmVye2JhY2tncm91bmQ6I2RjZGNkYztib3JkZXItY29sb3I6Izk5YWViOH0uY2FwaWJhcmEuYy1ibHVlX2dyZXk6bm90KC5kYXJrLXRoZW1lKSAuY29udGFpbmVyLXRsIGhlYWRlcntiYWNrZ3JvdW5kOiNkY2RjZGM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojOTlhZWI4fS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpIC5jb250YWluZXItdGwgaGVhZGVyIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2RjZGNkYykhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleTpub3QoLmRhcmstdGhlbWUpIG5hdi5yaWdodHtib3JkZXItY29sb3I6Izk5YWViOH0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaGVhZGVyLXRvcCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSBuYXYucmlnaHR7Ym9yZGVyLWNvbG9yOiMzNjQ3NGZ9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmNvcm5lcntib3JkZXItYm90dG9tLWNvbG9yOiMzNjQ3NGZ9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgOjotbW96LXNlbGVjdGlvbiwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgOjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIDo6c2VsZWN0aW9uLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSA6OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuMikhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXIsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjIpIWltcG9ydGFudH0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5wcm9ncmVzcy1iYXI6YmVmb3JlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAucHJvZ3Jlc3MtYmFyOmFmdGVyLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAucHJvZ3Jlc3MtYmFyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiM2MDdkOGIhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIHNlbGVjdC50YWJzLXNlbGVjdCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgc2VsZWN0LnRhYnMtc2VsZWN0e2JhY2tncm91bmQtY29sb3I6cmdiYSg5NiwxMjUsMTM5LC43KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiM2MDdkOGIhaW1wb3J0YW50fS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC50aW1lLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAudGltZXtib3JkZXItY29sb3I6cmdiYSg5NiwxMjUsMTM5LC42KX0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAudGltZSAuc3ltYm9sLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAudGltZSAuc3ltYm9se2NvbG9yOiM2MDdkOGJ9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmZvY3VzLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAudGltZSBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC50aW1lIGlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojNjA3ZDhiO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoOTYsMTI1LDEzOSwuMil9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LWJveCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0LC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtYm94LC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2JvcmRlci1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjYpfS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojNjA3ZDhiO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoOTYsMTI1LDEzOSwuMil9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dCwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlLC5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyLWNvbG9yOnJnYmEoOTYsMTI1LDEzOSwuNil9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gLm5hdi1pbnB1dC1maWxlOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlci1jb2xvcjojNjA3ZDhiO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoOTYsMTI1LDEzOSwuMil9LmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2osLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JvcmRlcjoycHggc29saWQgIzYwN2Q4Yn0uY2FwaWJhcmEuYy1ibHVlX2dyZXkuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXMsLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqOmFjdGl2ZSwuY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg5NiwxMjUsMTM5LC4yKX0uY2FwaWJhcmEuYy1ibHVlX2dyZXkgLmNhcC1idG4tcmFpc2VkLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5jYXAtYnRuLXJhaXNlZHtib3JkZXItY29sb3I6IzYwN2Q4YjtiYWNrZ3JvdW5kOnJnYmEoOTYsMTI1LDEzOSwuOCl9LmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5jYXAtYnRuLW91dGxpbmUsLmNhcGliYXJhLmMtYmx1ZV9ncmV5LmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzYwN2Q4Yjtjb2xvcjojNjA3ZDhifS5jYXBpYmFyYS5jLWJsdWVfZ3JleSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVkLC5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5jYXAtYnRuLW91dGxpbmUuc2VsZWN0ZWR7YmFja2dyb3VuZDpyZ2JhKDk2LDEyNSwxMzksLjgpfS5jYXBpYmFyYS5jLWJsdWVfZ3JleS5kYXJrLXRoZW1lIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXksLmNhcGliYXJhLmMtYmx1ZV9ncmV5IC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7YmFja2dyb3VuZDpyZ2JhKDk2LDEyNSwxMzksLjMpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDEwcHggcmdiYSg5NiwxMjUsMTM5LC41KX0uY2FwaWJhcmEgLmMtYmx1ZV9ncmV5LS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzYwN2Q4YiFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWVfZ3JleS1kLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzQxNTQ1ZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWVfZ3JleS1sLS1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6IzhhYTJhZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWVfZ3JleS0tdGV4dHtjb2xvcjojNjA3ZDhiIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtYmx1ZV9ncmV5LWQtLXRleHR7Y29sb3I6IzQxNTQ1ZSFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWJsdWVfZ3JleS1sLS10ZXh0e2NvbG9yOiM4YWEyYWUhaW1wb3J0YW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsLmMtYmx1ZV9ncmV5e2JhY2tncm91bmQ6cmdiYSg5NiwxMjUsMTM5LC4yKTtib3JkZXI6MXB4IHNvbGlkICM2MDdkOGJ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVlX2dyZXkgLmxlZnQtaWNvbntiYWNrZ3JvdW5kOiM2MDdkOGJ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbCAuaXRlbS1kZXRhaWwuYy1ibHVlX2dyZXkgLmxlZnQtaWNvbi5vdXRsaW5lZHtib3JkZXI6MXB4IHNvbGlkICM2MDdkOGI7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSg5NiwxMjUsMTM5LC43KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbC5jLWJsdWVfZ3JleSAubmFtZXtjb2xvcjojNjA3ZDhifS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5jLWJsdWVfZ3JleXstLWxvY2FsLWNvbG9yOiM2MDdkOGI7LS1sb2NhbC1jb2xvci1mb250OiNmZmZ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5jLWJsdWVfZ3JleSwuY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LmMtYmx1ZV9ncmV5LC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5yb3dkb3QtLXJvdy5jLWJsdWVfZ3JleSAucm93ZG90LS1kb3R7LS1sb2NhbC1jb2xvcjojNjA3ZDhifS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYjpub3QoLmRpc2FibGVkKS5jLWJsdWVfZ3JleS5hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDk2LDEyNSwxMzksLjcpO2JvcmRlci1jb2xvcjpyZ2JhKDk2LDEyNSwxMzksLjcpO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYmx1ZV9ncmV5LmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoOTYsMTI1LDEzOSwuOCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiOm5vdCguZGlzYWJsZWQpLmMtYmx1ZV9ncmV5OmhvdmVye2JhY2tncm91bmQ6cmdiYSg5NiwxMjUsMTM5LC4yKTtib3JkZXItY29sb3I6cmdiYSg5NiwxMjUsMTM5LC45KX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1pY29uLmMtYmx1ZV9ncmV5e2JhY2tncm91bmQ6IzYwN2Q4Yn0uY2FwaWJhcmEgKiwuY2FwaWJhcmEgOmFmdGVyLC5jYXBpYmFyYSA6YmVmb3Jle2JveC1zaXppbmc6Ym9yZGVyLWJveH0uY2FwaWJhcmEgaW5wdXR7b3V0bGluZTpub25lfS5jYXBpYmFyYSBpbnB1dFt0eXBlPW51bWJlcl17LW1vei1hcHBlYXJhbmNlOnRleHRmaWVsZH0uY2FwaWJhcmEgaW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5jYXBpYmFyYSBpbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LmNhcGliYXJhIGlucHV0W3R5cGU9bnVtYmVyXTo6LW1vei1wbGFjZWhvbGRlcntvcGFjaXR5OjF9LmNhcGliYXJhIGlucHV0W3R5cGU9bnVtYmVyXTotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eToxfS5jYXBpYmFyYSBpbnB1dFt0eXBlPW51bWJlcl06OnBsYWNlaG9sZGVye29wYWNpdHk6MX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaGlkZS1kYXJrLC5jYXBpYmFyYTpub3QoLmRhcmstdGhlbWUpIC5oaWRlLWxpZ2h0e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmNhcGliYXJhIC50cnVuY2F0ZXt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uY2FwaWJhcmEgLmhpZGV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLnRleHQtdGl0bGV7Zm9udC1zaXplOjEuMjVlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luOi41ZW0gLjNlbX0uY2FwaWJhcmEgLnRleHQtc3VidGl0bGV7Zm9udC1zaXplOi44NzVlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luOi41ZW0gLjNlbTtmbGV4OjAgMCBhdXRvfS5jYXBpYmFyYSAudGV4dC1oaW50e2ZvbnQtc2l6ZTouNzVlbTttYXJnaW46LjNlbTt0ZXh0LWFsaWduOmxlZnQ7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jYXBpYmFyYSAudGV4dC1zdWJ0aXRsZS0ye2ZvbnQtc2l6ZTouNzVlbTttYXJnaW46LjVlbSAuM2VtO2ZsZXg6MCAwIGF1dG99LmNhcGliYXJhIC5kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uY2FwaWJhcmEgLmQtYmxvY2t7ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgLmQtZmxleHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjk2MHB4KXsuY2FwaWJhcmEgLmMtZC1kZXNrdG9wLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZC1kZXNrdG9wLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWQtZGVza3RvcC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZC1kZXNrdG9wLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo5NTlweCl7LmNhcGliYXJhIC5jLWQtbW9iaWxlLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLmMtZC1tb2JpbGUtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWQtbW9iaWxlLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNhcGliYXJhIC5jLWQtbW9iaWxlLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH19LmNhcGliYXJhe3Njcm9sbGJhci13aWR0aDphdXRvfS5jYXBpYmFyYSA6Oi13ZWJraXQtc2Nyb2xsYmFye3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7b3BhY2l0eTouNX0uY2FwaWJhcmEgOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsLmNhcGliYXJhIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2t7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uY2FwaWJhcmEgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntib3JkZXItcmFkaXVzOjVweDtiYWNrZ3JvdW5kOmdyZXl9LmNhcGliYXJhLmRhcmstdGhlbWUgOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsLmNhcGliYXJhLmRhcmstdGhlbWUgOjotd2Via2l0LXNjcm9sbGJhci10cmFja3tiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jYXBpYmFyYS5kYXJrLXRoZW1lIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDojYmRiZGJkfS5jYXBpYmFyYXtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZjtoZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXQ7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1zaXplOnZhcigtLWZvbnQtc2l6ZSl9LmNhcGliYXJhIHByZXtmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZiFpbXBvcnRhbnR9LmNhcGliYXJhe2NvbG9yOiMzNzQ3NGY7YmFja2dyb3VuZDojZjVmNWY1fS5jYXBpYmFyYS5kYXJrLXRoZW1le2NvbG9yOiNmMGYwZjA7YmFja2dyb3VuZDojMjIyODM3fS5jYXBpYmFyYSAuY29udGFpbmVyLXRse3dpZHRoOjEwMCU7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSk7bWF4LWhlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1oZWFkZXItdG9wLWhlaWdodCkpO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnNjcm9sbDttYXJnaW46MDt3aWxsLWNoYW5nZTpzY3JvbGwtcG9zaXRpb259LmNhcGliYXJhLmV4dGVuZGVkLXJpZ2h0IC5jb250YWluZXItdGx7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbmF2LXJpZ2h0LXdpZHRoKSl9LmNhcGliYXJhIC5jb250YWluZXItdGx7YmFja2dyb3VuZDojZjVmNWY1fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGx7YmFja2dyb3VuZDojMjIyODM3fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50b2RheS1saW5le3dpZHRoOjA7cG9zaXRpb246YWJzb2x1dGV9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRvZGF5LWxpbmUuZGlzYWJsZS1saW5lLC5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50b2RheS1saW5lLmRpc2FibGUtbGluZTphZnRlcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50b2RheS1saW5lOmFmdGVye21hcmdpbi1sZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSArIDFweCk7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztsZWZ0OjA7dG9wOjA7Y29udGVudDpcXFwiXFxcIjt3aWR0aDoycHg7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpyZ2JhKDE4MywyOCwyOCwuNCl9LmNhcGliYXJhIC5jb250YWluZXItdGwuaGVhZGVyLWV4dGVuZGVkIC5jb250YWluZXItdGwgLnRvZGF5LWxpbmU6YWZ0ZXJ7aGVpZ2h0OmNhbGMoMTAwdmggLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWV4LWhlYWRlci1oZWlnaHQpICsgdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpKX0uY2FwaWJhcmEgLmNvcm5lcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6dmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpO3otaW5kZXg6NDtoZWlnaHQ6dmFyKC0taGVhZGVyLWhlaWdodCk7Ym9yZGVyOnNvbGlkIHJnYmEoMCwwLDAsLjQpO2JvcmRlci13aWR0aDowIDAgMnB4O3BhZGRpbmctbGVmdDo4cHh9LmNhcGliYXJhIC5jb3JuZXI6bm90KC5yaWdodCl7bGVmdDowO2JvcmRlci1yaWdodC13aWR0aDoxcHg7d2lkdGg6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKX0uY2FwaWJhcmEgLmNvcm5lci5yaWdodHtyaWdodDowO3dpZHRoOnZhcigtLW5hdi1yaWdodC13aWR0aCk7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuY29ybmVyPmRpdjpub3QoW2NsYXNzXSl7d2lkdGg6aW5oZXJpdDtoZWlnaHQ6aW5oZXJpdH0uY2FwaWJhcmEgLmNvcm5lciAuYnRuLWNvbnRhaW5lcntwYWRkaW5nLXRvcDouNWVtfS5jYXBpYmFyYSAuY29ybmVyIC5idG4tY29udGFpbmVyIC5jb3JuZXItYnRue2ZvbnQtc2l6ZTouODI1ZW07bWFyZ2luOjAgNHB4O3BhZGRpbmc6NHB4IDhweH0uY2FwaWJhcmEgLmNvcm5lciAuY29ybmVyLXRpdGxle2hlaWdodDppbmhlcml0O2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpsZWZ0O3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuY29ybmVyIC5jb3JuZXItdGl0bGUgc3Bhbi5ib3R0b20tdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjhweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk1OXB4KXsuY2FwaWJhcmEgLmNvcm5lciAuY29ybmVyLXRpdGxle2ZvbnQtc2l6ZTouNzVlbX19LmNhcGliYXJhIC5jb3JuZXIgLmluaXRpYWwtY29ybmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6dmFyKC0tbmF2LXdpZHRoKTt0b3A6MDt3aWR0aDp2YXIoLS1pbml0aWFsLW5hdi13aWR0aCk7aGVpZ2h0OnZhcigtLWhlYWRlci1oZWlnaHQpO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrfS5jYXBpYmFyYSAuY29ybmVyIC5pbml0aWFsLWNvcm5lciAuaW5pdGlhbC1jb3JuZXItdGl0bGV7aGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6LTFweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7dmVydGljYWwtYWxpZ246dG9wO3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuY29ybmVyIC5pbml0aWFsLWNvcm5lciAuaW5pdGlhbC1jb3JuZXItdGl0bGUgLmJvdHRvbS1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTo4cHg7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2FwaWJhcmEgLmNvcm5lciAuaW5pdGlhbC1jb3JuZXIgLmluaXRpYWwtY29ybmVyLXRpdGxlIC5ib3R0b20tY29udGFpbmVyIC5pdGVtLWNvbHtmbGV4OjAgMCB2YXIoLS1uYXYtaXRlbS1jb2wtd2lkdGgpO3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTouNzVlbX0uY2FwaWJhcmEgLmNvcm5lciAuZXh0ZW5kLWNvcm5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSk7dG9wOjA7d2lkdGg6dmFyKC0tZXgtbmF2LXdpZHRoKTtoZWlnaHQ6dmFyKC0taGVhZGVyLWhlaWdodCk7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIC5jb3JuZXIgLmV4dGVuZC1jb3JuZXIgLmV4LWNvcm5lci10aXRsZXtoZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDotMXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt2ZXJ0aWNhbC1hbGlnbjp0b3A7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5jb3JuZXIgLmV4dGVuZC1jb3JuZXIgLmV4LWNvcm5lci10aXRsZSAuYm90dG9tLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjhweDt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jYXBpYmFyYSAuY29ybmVyIC5leHRlbmQtY29ybmVyIC5leC1jb3JuZXItdGl0bGUgLmJvdHRvbS1jb250YWluZXIgLml0ZW0tY29se2ZsZXg6MCAwIHZhcigtLW5hdi1pdGVtLWNvbC13aWR0aCk7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOi43NWVtfS5jYXBpYmFyYSAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDp2YXIoLS1idG4tbmF2LXdpZHRoKTtoZWlnaHQ6dmFyKC0taGVhZGVyLWhlaWdodCk7bWluLXdpZHRoOjEwMHB4O3BhZGRpbmctdG9wOnZhcigtLWhlYWRlci1sYWJlbHMtaGVpZ2h0KX0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXN7dGV4dC1hbGlnbjpyaWdodDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOnZhcigtLWhlYWRlci1sYWJlbHMtaGVpZ2h0KX0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjNweH0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lcjpub3QoLnBlcnNpc3RlbnQpe2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lci5pbnB1dC10aXRsZS0tYWNjZW50IC5pbnB1dC10aXRsZXtjb2xvcjojZmZmO2JhY2tncm91bmQ6Z3JleX0uY2FwaWJhcmEgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lciBzcGFuLmF2ZXJhZ2V7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1yaWdodDo0cHg7cGFkZGluZzozcHh9LmNhcGliYXJhIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXIgLmlucHV0LXRpdGxle2hlaWdodDpjYWxjKHZhcigtLWhlYWRlci1pbnB1dC1oZWlnaHQpICsgM3B4KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWhlYWRlci1pbnB1dC1oZWlnaHQpICsgMnB4KTtwYWRkaW5nLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6Ljc1ZW19LmNhcGliYXJhLmV4dGVuZGVkLXJpZ2h0IC5jb3JuZXIucmlnaHR7ZGlzcGxheTpibG9ja30uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb3JuZXIsLmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIsLmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29ybmVyIC5leHRlbmQtY29ybmVyLC5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvcm5lciAuaW5pdGlhbC1jb3JuZXJ7aGVpZ2h0OmNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSl9LmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCAuY29ybmVyIC5jYXAtYnRuLW5hdi1jb3JuZXIgLmlucHV0LXRpdGxlcyAuaW5wdXQtdGl0bGUtY29udGFpbmVyOm5vdCgucGVyc2lzdGVudCl7ZGlzcGxheTp1bnNldH0uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb3JuZXIgLmNhcC1idG4tbmF2LWNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXI6bm90KC5wZXJzaXN0ZW50KSAuYXZlcmFnZS1ib3h7dmlzaWJpbGl0eTp2aXNpYmxlfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvcm5lciAuY2FwLWJ0bi1uYXYtY29ybmVyIC5pbnB1dC10aXRsZXMgLmlucHV0LXRpdGxlLWNvbnRhaW5lcjpub3QoLnBlcnNpc3RlbnQpIC5pbnB1dC10aXRsZXt2aXNpYmlsaXR5OnZpc2libGU7aGVpZ2h0OmF1dG99LmNhcGliYXJhIC5jb3JuZXJ7YmFja2dyb3VuZDojZjFmZmZlfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb3JuZXJ7YmFja2dyb3VuZDojMzEzYjUwO2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvcm5lciAuaW5wdXQtdGl0bGVzIC5pbnB1dC10aXRsZS1jb250YWluZXIgLmlucHV0LXRpdGxle2NvbG9yOmhzbGEoMCwwJSwxMDAlLC44KSFpbXBvcnRhbnR9LmNhcGliYXJhIC5oZWFkZXItdG9we3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OnZhcigtLWhlYWRlci10b3AtaGVpZ2h0KTtwYWRkaW5nOjAgLjVlbTtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO3otaW5kZXg6NX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnNwYWNlcntmbGV4OjEgMCBhdXRvfS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2JvcmRlci1yaWdodDoxcHggc29saWQgaHNsYSgwLDAlLDQzLjUlLC4zKTttYXJnaW4tcmlnaHQ6LjVlbX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyOm5vdCg6ZW1wdHkpe3BhZGRpbmc6MH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIGJ1dHRvbi50YWJ7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzouMjVlbSAxZW07Zm9udC13ZWlnaHQ6NzAwO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7bWFyZ2luOi41ZW0gLjVlbSAwIDA7Ym9yZGVyLXJhZGl1czozMHB4O3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMgZWFzZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgYnV0dG9uLnRhYjpmb2N1c3tib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIGJ1dHRvbi50YWIuZGlzYWJsZWR7Y29sb3I6Z3JleX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIGJ1dHRvbi50YWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOmdyZXl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lcntkaXNwbGF5OmZsZXh9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5ke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7bWFyZ2luLXJpZ2h0OjFlbTtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOi44ZW0gLjVlbSAuNWVtIDB9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5kOm5vdCguYWN0aXZlKXtvcGFjaXR5Oi41fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXIgLmxlZ2VuZDpub3QoLmFjdGl2ZSkgLmljb24tbGVnZW5ke2JhY2tncm91bmQ6Z3JleSFpbXBvcnRhbnR9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5kIC5pY29uLWxlZ2VuZHt3aWR0aDouODI1ZW07aGVpZ2h0Oi44MjVlbTttYXJnaW46MnB4IC41ZW0gMnB4IDA7YmFja2dyb3VuZDpncmV5O2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsLjQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6MXB4O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuNCl9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5kIC5pY29uLWxlZ2VuZC5jaXJjbGV7Ym9yZGVyLXJhZGl1czo1MCV9LmNhcGliYXJhIC5oZWFkZXItdG9wIC5sZWdlbmRzLWNvbnRhaW5lciAubGVnZW5kOmhvdmVyIHNwYW57dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVyLmZvcmNlLW1vYmlsZS1zdHlsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjJlbTt0b3A6MmVtO2JhY2tncm91bmQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjY7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC40KTtib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDRweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNHB4IDVweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTIpIWltcG9ydGFudH0uY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVyLmZvcmNlLW1vYmlsZS1zdHlsZSAubGVnZW5ke2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6LjVlbX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk1OXB4KXsuY2FwaWJhcmEgLmhlYWRlci10b3AgLmxlZ2VuZHMtY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MmVtO3RvcDoyZW07YmFja2dyb3VuZDppbmhlcml0O2NvbG9yOmluaGVyaXQ7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3otaW5kZXg6Njtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjQpO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA0cHggNXB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDEwcHggMCByZ2JhKDAsMCwwLC4xMikhaW1wb3J0YW50fS5jYXBpYmFyYSAuaGVhZGVyLXRvcCAubGVnZW5kcy1jb250YWluZXIgLmxlZ2VuZHtmb250LXNpemU6MTZweDtwYWRkaW5nOi41ZW19fS5jYXBpYmFyYSAuaGVhZGVyLXRvcHtiYWNrZ3JvdW5kOiNmMWZmZmV9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFie2NvbG9yOiMzMTNiNTB9LmNhcGliYXJhIC5oZWFkZXItdG9wIC50YWJzLWNvbnRhaW5lciAudGFiLmRpc2FibGVke2NvbG9yOnJnYmEoNDksNTksODAsLjUpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5oZWFkZXItdG9we2JhY2tncm91bmQ6IzMxM2I1MH0uY2FwaWJhcmEuZGFyay10aGVtZSAuaGVhZGVyLXRvcCAudGFicy1jb250YWluZXIgLnRhYntjb2xvcjpoc2xhKDAsMCUsMTAwJSwuOCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmhlYWRlci10b3AgLnRhYnMtY29udGFpbmVyIC50YWIuZGlzYWJsZWR7Y29sb3I6aHNsYSgwLDAlLDEwMCUsLjQpfS5jYXBpYmFyYSAuY29ybmVyLWZvb3Rlcntwb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7bGVmdDowO2JvdHRvbTowO3otaW5kZXg6Mzt3aWR0aDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkpO2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KSotMSk7Ym94LXNpemluZzpib3JkZXItYm94fS5jYXBpYmFyYSAuY29ybmVyLWZvb3RlciAuY29ybmVyLXRpdGxle2xpbmUtaGVpZ2h0OjMwcHg7aGVpZ2h0OmluaGVyaXQ7ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmxlZnQ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIC5jb3JuZXItZm9vdGVye2JhY2tncm91bmQ6Izc4OTA5Yztjb2xvcjojZmZmfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb3JuZXItZm9vdGVye2JhY2tncm91bmQ6IzMxM2I1MDtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYSBuYXYucmlnaHR7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6Y2FsYyh2YXIoLS1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSk7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpIC0gdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpKTtvdmVyZmxvdy15OnNjcm9sbDtvdmVyZmxvdy14OmhpZGRlbjt6LWluZGV4OjU7ZGlzcGxheTpub25lO2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZWR9LmNhcGliYXJhIG5hdi5yaWdodCwuY2FwaWJhcmEgbmF2LnJpZ2h0IC5jaGlsZC1uYXYtaXRlbSwuY2FwaWJhcmEgbmF2LnJpZ2h0IC5uYXYtaXRlbXt3aWR0aDp2YXIoLS1uYXYtcmlnaHQtd2lkdGgpfS5jYXBpYmFyYSBuYXYucmlnaHQgLm5hdi1pbnB1dC1jb250YWluZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhIG5hdi5yaWdodCAubmF2LWlucHV0LWNvbnRhaW5lciAuYnV0dG9uLXNlY3Rpb257cGFkZGluZy1ib3R0b206Ljc1ZW07cGFkZGluZy10b3A6Ljc1ZW07cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O2JvdHRvbTowfS5jYXBpYmFyYSBuYXYubGVmdHttaW4taGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpKTtwb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7bGVmdDowO3dpZHRoOmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSk7aGVpZ2h0OmF1dG87ei1pbmRleDoyO2JvcmRlci1yaWdodDoxcHggc29saWQgI2IwYmVjNTtvdmVyZmxvdzp2aXNpYmxlO2JveC1zaGFkb3c6MCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA0cHggNXB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDEwcHggMCByZ2JhKDAsMCwwLC4xMil9LmNhcGliYXJhIG5hdi5sZWZ0IC5jaGlsZC1uYXYtaXRlbSwuY2FwaWJhcmEgbmF2LmxlZnQgLm5hdi1pdGVte3dpZHRoOnZhcigtLW5hdi13aWR0aCl9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW17bWluLXdpZHRoOjI1MHB4O21heC13aWR0aDo1MDBweDt3aWR0aDotd2Via2l0LW1heC1jb250ZW50O3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7bWluLWhlaWdodDo3MHB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6M3JlbTt0b3A6MDtib3JkZXI6MXB4IHNvbGlkIGdyZXk7ei1pbmRleDoyO2JvcmRlci1yYWRpdXM6NXB4O3BhZGRpbmc6MTZweDt0cmFuc2l0aW9uOmFsbCAuM3MgZWFzZTtmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoLjVyZW0gKyB2YXIoLS1pdGVtLWhlaWdodCkpKX0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbS50by1ib3R0b217dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYygtMTAwJSAtIC41cmVtKSl9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1kZXRhaWwgLmRldGFpbC10aXRsZXtmb250LXNpemU6MS4xMjVlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbTo4cHg7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjgwcHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1kZXRhaWwgLmRldGFpbC1zdWJ0aXRsZXtmb250LXNpemU6Ljg3NTttYXJnaW4tYm90dG9tOjhweH0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWRldGFpbCAuaGVhZGVyLWNoaXB7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTZweDt0b3A6MTZweDtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyOjNweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6NXB4fS5jYXBpYmFyYSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5kZXRhaWwtY29udGFpbmVyPmRpdnttYXJnaW46NnB4IDB9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0e3dpZHRoOnZhcigtLWluaXRpYWwtbmF2LXdpZHRoKTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLW5hdi13aWR0aCk7dG9wOjA7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjBiZWM1O2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtsaW5lLWhlaWdodDozNHB4fS5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS10aXRsZSwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tdGl0bGV7ZmxleDoxIDAgYXV0bztwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbCwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29se2ZsZXg6MCAwIHZhcigtLW5hdi1pdGVtLWNvbC13aWR0aCk7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0cHggOHB4fS5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0LC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0e3BhZGRpbmc6MH0uY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD4uaG91ci1pbnB1dCwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD4uaG91ci1pbnB1dHtmb250LXNpemU6Ljg3NWVtO3dpZHRoOmNhbGMoMTAwJSAtIDhweCk7Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6M3B4O2hlaWdodDoyNHB4fS5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0LC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0e3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTouODc1ZW07d2lkdGg6Y2FsYygxMDAlIC0gOHB4KTtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxcHggc29saWQgZ3JleTtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MjRweDttYXJnaW46OHB4IDRweCA0cHg7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuMil9LmNhcGliYXJhIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmZvY3VzLC5jYXBpYmFyYSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD5pbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC44KX0uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdHt3aWR0aDp2YXIoLS1leC1uYXYtd2lkdGgpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpKTt0b3A6MDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0sLmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVte2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNiMGJlYzU7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2xpbmUtaGVpZ2h0OjEuNzVyZW19LmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLXRpdGxlLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS10aXRsZXtmbGV4OjEgMCBhdXRvO3BhZGRpbmc6NHB4IDhweH0uY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2x7ZmxleDowIDAgdmFyKC0tbmF2LWl0ZW0tY29sLXdpZHRoKTt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQsLmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXR7cGFkZGluZzowfS5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0LC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0e3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTouODc1ZW07d2lkdGg6Y2FsYygxMDAlIC0gOHB4KTtkaXNwbGF5OmJsb2NrO2JvcmRlcjoxcHggc29saWQgZ3JleTtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MjRweDttYXJnaW46OHB4IDRweCA0cHg7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuMil9LmNhcGliYXJhIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQ+aW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmZvY3VzLC5jYXBpYmFyYSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0PmlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dD5pbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC44KX0uY2FwaWJhcmEgbmF2LmxlZnQgLmNhcC1idG4tbmF2LWxpc3R7bGVmdDpjYWxjKHZhcigtLW5hdi13aWR0aCkgKyB2YXIoLS1pbml0aWFsLW5hdi13aWR0aCkgKyB2YXIoLS1leC1uYXYtd2lkdGgpKTt3aWR0aDp2YXIoLS1idG4tbmF2LXdpZHRoKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtvdmVyZmxvdzpoaWRkZW59LmNhcGliYXJhIG5hdi5sZWZ0IC5jYXAtYnRuLW5hdi1saXN0IC5jYXAtYnRuLWNoaWxkLW5hdi1pdGVtIC5jYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnQsLmNhcGliYXJhIG5hdi5sZWZ0IC5jYXAtYnRuLW5hdi1saXN0IC5jYXAtYnRuLW5hdi1pdGVtIC5jYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnR7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTt3aWR0aDppbmhlcml0O3BhZGRpbmc6NHB4IDZweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjBiZWM1O3RleHQtYWxpZ246cmlnaHR9LmNhcGliYXJhIG5hdi5sZWZ0IC5uYXYtaXRlbS10b3RhbC1mb290ZXJ7cGFkZGluZy10b3A6M3B4fS5jYXBpYmFyYSBuYXYgLmNhcC1idG4tbmF2LWl0ZW0ucGFyZW50LC5jYXBpYmFyYSBuYXYgLmV4LW5hdi1pdGVtLnBhcmVudCwuY2FwaWJhcmEgbmF2IC5pbml0aWFsLW5hdi1pdGVtLnBhcmVudCwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1jb250YWluZXIucGFyZW50e2JhY2tncm91bmQ6cmdiYSgyNSwxMTgsMjEwLC4xKX0uY2FwaWJhcmEgbmF2IC5jYXAtYnRuLW5hdi1pdGVtLnBhcmVudD4uaXRlbS10aXRsZSwuY2FwaWJhcmEgbmF2IC5leC1uYXYtaXRlbS5wYXJlbnQ+Lml0ZW0tdGl0bGUsLmNhcGliYXJhIG5hdiAuaW5pdGlhbC1uYXYtaXRlbS5wYXJlbnQ+Lml0ZW0tdGl0bGUsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tY29udGFpbmVyLnBhcmVudD4uaXRlbS10aXRsZXttYXgtd2lkdGg6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpIC0gNjBweCk7d2lkdGg6YXV0b30uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbXttaW4taGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjBiZWM1O2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCl9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29uLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLnRyZWUtaWNvbnt0cmFuc2l0aW9uOmFsbCAuNXMgZWFzZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO3dpZHRoOjM0cHg7ZmxleDowIDAgMzRweDtmb250LXNpemU6MS41ZW07dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXJ9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29uOmZvY3VzLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLnRyZWUtaWNvbjpmb2N1c3tib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5uYXYtaXRlbS1pY29uLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb257ZmxleDowIDAgMzRweDtmb250LXNpemU6MS4xMjVlbTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6NDBweDttYXJnaW4tdG9wOjEycHh9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAubmF2LWl0ZW0taWNvbiBwYXRoLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb24gcGF0aHt3aWR0aDoyMHB4O2hlaWdodDoyMHB4fS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZXtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6Z3JpZDtmb250LXNpemU6MWVtO2xpbmUtaGVpZ2h0OjM0cHg7cGFkZGluZzo0cHggOHB4fS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuZnVsbC13aWR0aCwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlLmZ1bGwtd2lkdGh7ZmxleDoxIDAgYXV0bztkaXNwbGF5OmlubGluZS1ibG9ja30uY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlLmNsaWNrZWFibGUsLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAuaXRlbS10aXRsZS5jbGlja2VhYmxle2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuY2xpY2tlYWJsZTpob3ZlciwuY2FwaWJhcmEgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5pdGVtLXRpdGxlLmNsaWNrZWFibGU6aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjIpIWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuaG92ZXJhYmxlOmhvdmVyLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLml0ZW0tdGl0bGUuaG92ZXJhYmxlOmhvdmVye2JhY2tncm91bmQ6aHNsYSgwLDAlLDM5LjIlLC4yKSFpbXBvcnRhbnR9LmNhcGliYXJhIG5hdiAubXVsdGlidXR0b25zLWJ0bntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2NvbG9yOiM5OTk7Zm9udC1zaXplOjEuNWVtO2N1cnNvcjpwb2ludGVyO21pbi13aWR0aDozOHB4O21heC1oZWlnaHQ6MzhweDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jYXBpYmFyYSBuYXYgLm11bHRpYnV0dG9ucy1idG46aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjIpfS5jYXBpYmFyYS5leHRlbmRlZC1yaWdodCBuYXYucmlnaHR7ZGlzcGxheTpibG9ja30uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIG5hdi5sZWZ0e21pbi1oZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSl9LmNhcGliYXJhLmhlYWRlci1leHRlbmRlZCBuYXYucmlnaHR7dG9wOmNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1oZWFkZXItdG9wLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSk7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpIC0gdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpIC0gdmFyKC0tZXgtaGVhZGVyLWhlaWdodCkpfS5jYXBpYmFyYSBuYXYubGVmdCwuY2FwaWJhcmEgbmF2LnJpZ2h0LC5jYXBpYmFyYSBuYXYucmlnaHQgLmJ1dHRvbi1zZWN0aW9ue2JhY2tncm91bmQ6I2ZhZmFmYX0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMik7YmFja2dyb3VuZDojZmZmfS5jYXBpYmFyYSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5oZWFkZXItY2hpcC5yZWQtbGlnaHR7Ym9yZGVyLWNvbG9yOiNmODQ3NDd9LmNhcGliYXJhIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1jaGlwLnllbGxvdy1saWdodHtib3JkZXItY29sb3I6I2ZkZDgzNX0uY2FwaWJhcmEgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWNoaXAuZ3JlZW4tbGlnaHR7Ym9yZGVyLWNvbG9yOiMzODk5M2R9LmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAuY2hpbGQtbmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAudHJlZS1pY29uLC5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLm5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLnRyZWUtaWNvbntjb2xvcjojMzc0NzRmfS5jYXBpYmFyYSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb24sLmNhcGliYXJhIG5hdiAubmF2LWl0ZW0tbGlzdCAubmF2LWl0ZW0gLm5hdi1pdGVtLWNvbnRhaW5lciAubmF2LWl0ZW0taWNvbntjb2xvcjpyZ2JhKDU1LDcxLDc5LC4yKX0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYucmlnaHQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LnJpZ2h0IC5idXR0b24tc2VjdGlvbntiYWNrZ3JvdW5kOiMyMjI4Mzd9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnR7YmFja2dyb3VuZDojMjIyODM3O2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbXtib3JkZXItY29sb3I6IzQwNGU2OTtiYWNrZ3JvdW5kOiMyMjI4Mzd9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWNoaXB7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZGV0YWlsLW5hdi1pdGVtIC5oZWFkZXItY2hpcC5yZWQtbGlnaHR7Ym9yZGVyLWNvbG9yOiNhYTFhMWF9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmRldGFpbC1uYXYtaXRlbSAuaGVhZGVyLWNoaXAueWVsbG93LWxpZ2h0e2JvcmRlci1jb2xvcjojZmJjZDAwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5kZXRhaWwtbmF2LWl0ZW0gLmhlYWRlci1jaGlwLmdyZWVuLWxpZ2h0e2JvcmRlci1jb2xvcjojMzg4ZTNjfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmV4LW5hdi1pdGVtLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVte2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0LC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dHtiYWNrZ3JvdW5kOiM0MDRlNjk7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgLmhvdXItaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5jaGlsZC1pbml0aWFsLW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuZXh0ZW5kLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5leHRlbmQtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmV4dGVuZC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5jaGlsZC1leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuY2hpbGQtaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5pbml0aWFsLW5hdi1saXN0IC5leC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IC5ob3VyLWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuZXgtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmV4LW5hdi1pdGVtIC5pdGVtLWNvbC5oYXMtaW5wdXQgaW5wdXQ6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmluaXRpYWwtbmF2LWxpc3QgLmluaXRpYWwtbmF2LWl0ZW0gLml0ZW0tY29sLmhhcy1pbnB1dCAuaG91ci1pbnB1dDpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYubGVmdCAuaW5pdGlhbC1uYXYtbGlzdCAuaW5pdGlhbC1uYXYtaXRlbSAuaXRlbS1jb2wuaGFzLWlucHV0IGlucHV0OmZvY3Vze2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjIpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIG5hdi5sZWZ0IC5jYXAtYnRuLW5hdi1saXN0IC5jYXAtYnRuLWNoaWxkLW5hdi1pdGVtIC5jYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnQsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2LmxlZnQgLmNhcC1idG4tbmF2LWxpc3QgLmNhcC1idG4tbmF2LWl0ZW0gLmNhcC1idG4tbmF2LWl0ZW0tY29udGVudCwuY2FwaWJhcmEuZGFyay10aGVtZSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIsLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVye2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgbmF2IC5uYXYtaXRlbS1saXN0IC5jaGlsZC1uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC50cmVlLWljb24sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC50cmVlLWljb257Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSBuYXYgLm5hdi1pdGVtLWxpc3QgLmNoaWxkLW5hdi1pdGVtIC5uYXYtaXRlbS1jb250YWluZXIgLm5hdi1pdGVtLWljb24sLmNhcGliYXJhLmRhcmstdGhlbWUgbmF2IC5uYXYtaXRlbS1saXN0IC5uYXYtaXRlbSAubmF2LWl0ZW0tY29udGFpbmVyIC5uYXYtaXRlbS1pY29ue2NvbG9yOmhzbGEoMCwwJSw5NC4xJSwuMil9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVye2hlaWdodDp2YXIoLS1oZWFkZXItaGVpZ2h0KTt3aWR0aDotd2Via2l0LWZpdC1jb250ZW50O3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnQ7dG9wOjA7bWluLXdpZHRoOjEwMCU7cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O3otaW5kZXg6Mztib3JkZXItYm90dG9tOjJweCBzb2xpZCBncmV5O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2hhZG93OjAgMnB4IDRweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNHB4IDVweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxMHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZHtoZWlnaHQ6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdHtwYWRkaW5nOjFweCAwO2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3Q6bm90KC5wZXJzaXN0ZW50KXtkaXNwbGF5Om5vbmV9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0PmRpdnt3aWR0aDp2YXIoLS1kYXktd2lkdGgpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdD5kaXY+c3BhbntkaXNwbGF5OmJsb2NrO3dpZHRoOmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0taGVhZGVyLWlucHV0LWhlaWdodCk7aGVpZ2h0OnZhcigtLWhlYWRlci1pbnB1dC1oZWlnaHQpO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTouODc1ZW19LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0IC5kaWEtaW5wdXQgaW5wdXR7d2lkdGg6aW5oZXJpdDtoZWlnaHQ6dmFyKC0taGVhZGVyLWlucHV0LWhlaWdodCk7Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjUpO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTouODc1ZW19LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyLWV4dGVuZGVkIC5pbnB1dC1saXN0IC5kaWEtaW5wdXQgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCAuZGlhLWlucHV0IGlucHV0OmZvY3Vze2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjgpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6dmFyKC0taGVhZGVyLWxhYmVscy1oZWlnaHQpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lciAuaGVhZGVyLWl0ZW17cGFkZGluZzo2cHggOHB4O21pbi13aWR0aDp2YXIoLS1pdGVtLW1pbi13aWR0aCk7aGVpZ2h0OnZhcigtLWhlYWRlci1oZWlnaHQpO3RleHQtYWxpZ246Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItbGVmdDoxcHggc29saWQgcmdiYSgwLDAsMCwuMSl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5oZWFkZXItY29udGFpbmVyIC5oZWFkZXItaXRlbSBzcGFuLmJvdHRvbS10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206OHB4O3dpZHRoOjEwMCV9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW97ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6LXdlYmtpdC1tYXgtY29udGVudDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5hZ25ve3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTtsZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjMycHg7Zm9udC1zaXplOi43NWVtO21hcmdpbi10b3A6NHB4fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXNlc3tkaXNwbGF5OmJsb2NrO2Rpc3BsYXk6ZmxleH0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW97ZGlzcGxheTppbmxpbmUtYmxvY2s7bWluLXdpZHRoOnZhcigtLWRheS13aWR0aCl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXN7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tYnRuLW5hdi13aWR0aCkpO3BhZGRpbmctbGVmdDouNWVtO3BhZGRpbmctcmlnaHQ6MmVtO2ZvbnQtc2l6ZTouODc1ZW07bWFyZ2luLXRvcDo2cHh9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWR7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTttYXgtd2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtvdmVyZmxvdzpoaWRkZW59LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWQubWVzLXJlZHVjZWQtMnt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkqMik7bWF4LXdpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSoyKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLm1lcy5tZXMtcmVkdWNlZC5tZXMtcmVkdWNlZC0ze3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSozKTttYXgtd2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpKjMpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAubWVzLm1lcy1yZWR1Y2VkLm1lcy1yZWR1Y2VkLTR7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpKjQpO21heC13aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkqNCl9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWQgLm1lcy1sYWJlbHt3aWR0aDotd2Via2l0LW1heC1jb250ZW50O3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5tZXMubWVzLXJlZHVjZWQ6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCxyZWQpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7aGVpZ2h0OjEwMCU7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpLzIpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhc3tkaXNwbGF5OmZsZXg7bWFyZ2luLXRvcDo1cHh9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpb3t3aWR0aDp2YXIoLS1kYXktd2lkdGgpO2hlaWdodDp2YXIoLS1oZWFkZXItZGF5LWhlaWdodCk7dmVydGljYWwtYWxpZ246Ym90dG9tO2ZvbnQtc2l6ZTouODc1ZW07Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo0cHggNnB4O3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uaXMtY2xpY2tlYWJsZXtjdXJzb3I6cG9pbnRlcn0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLmhhcy1hbGVydDphZnRlcntjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MDtyaWdodDowO3RvcDowO2JvcmRlci1jb2xvcjpyZWQgcmVkIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6NnB4O3otaW5kZXg6MX0uY2FwaWJhcmEuaGVhZGVyLWV4dGVuZGVkIC5jb250YWluZXItdGwgaGVhZGVye2hlaWdodDpjYWxjKHZhcigtLWhlYWRlci1oZWlnaHQpICsgdmFyKC0tZXgtaGVhZGVyLWhlaWdodCkpfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3Q6bm90KC5wZXJzaXN0ZW50KXtkaXNwbGF5OmZsZXh9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6I2YxZmZmZTtjb2xvcjojMzc0NzRmfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAubWVzLm1lcy1yZWR1Y2VkOmFmdGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50LCNmMWZmZmUpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8ud2Vla2VuZHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpO2NvbG9yOiMyNjMyMzh9LmNhcGliYXJhIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby50b2RheXtiYWNrZ3JvdW5kOnJnYmEoMjI5LDU3LDUzLC45KTtjb2xvcjojZmZmfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uYWN0aXZle2JhY2tncm91bmQ6Z3JlZW47Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLmlzLWNsaWNrZWFibGU6aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjQpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uaXMtY2xpY2tlYWJsZTphY3RpdmV7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjYpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCAuZGlhLWlucHV0IGlucHV0LC5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCBkaXY+c3Bhbntjb2xvcjojMzEzYjUwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVye2JhY2tncm91bmQ6IzMxM2I1MDtjb2xvcjojZjBmMGYwO2JvcmRlci1jb2xvcjpyZ2JhKDY0LDc4LDEwNSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLm1lcy5tZXMtcmVkdWNlZDphZnRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx0cmFuc3BhcmVudCwjMzEzYjUwKX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW97Ym9yZGVyLWNvbG9yOnJnYmEoNjQsNzgsMTA1LC42KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8ud2Vla2VuZHtiYWNrZ3JvdW5kOiMyMjI4Mzc7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8udG9kYXl7YmFja2dyb3VuZDpyZ2JhKDE4MywyOCwyOCwuNik7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuYWduby1jYWxlbmRhcmlvIC5tZXMtY2FsZW5kYXJpbyAuZGlhcyAuZGlhLWNhbGVuZGFyaW8uYWN0aXZle2JhY2tncm91bmQ6cmdiYSg1NiwxNDIsNjAsLjYpO2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmFnbm8tY2FsZW5kYXJpbyAubWVzLWNhbGVuZGFyaW8gLmRpYXMgLmRpYS1jYWxlbmRhcmlvLmlzLWNsaWNrZWFibGU6aG92ZXJ7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjQpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jb250YWluZXItdGwgaGVhZGVyIC5hZ25vLWNhbGVuZGFyaW8gLm1lcy1jYWxlbmRhcmlvIC5kaWFzIC5kaWEtY2FsZW5kYXJpby5pcy1jbGlja2VhYmxlOmFjdGl2ZXtiYWNrZ3JvdW5kOmhzbGEoMCwwJSwzOS4yJSwuNil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgZGl2PnNwYW57Y29sb3I6aHNsYSgwLDAlLDEwMCUsLjgpIWltcG9ydGFudH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY29udGFpbmVyLXRsIGhlYWRlciAuaGVhZGVyLWNvbnRhaW5lci1leHRlbmRlZCAuaW5wdXQtbGlzdCAuZGlhLWlucHV0IGlucHV0e2JhY2tncm91bmQ6cmdiYSg2NCw3OCwxMDUsLjYpO2NvbG9yOmhzbGEoMCwwJSwxMDAlLC44KSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiMzMTNiNTB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgLmRpYS1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmNvbnRhaW5lci10bCBoZWFkZXIgLmhlYWRlci1jb250YWluZXItZXh0ZW5kZWQgLmlucHV0LWxpc3QgLmRpYS1pbnB1dCBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOmhzbGEoMCwwJSwxMDAlLC4yKX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAucGxvdC12ZXJ0aWNhbC1jb250YWluZXJ7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSl9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnBsb3QtdmVydGljYWwtY29udGFpbmVyIC5wbG90LXZlcnRpY2Fse2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMyk7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6Y2FsYygxMDB2aCAtIHZhcigtLWhlYWRlci1oZWlnaHQpIC0gdmFyKC0taGVhZGVyLXRvcC1oZWlnaHQpKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnBsb3QtdmVydGljYWwtY29udGFpbmVyIC5wbG90LXZlcnRpY2FsLnJhaW57YmFja2dyb3VuZDpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDUzZGVnLHJnYmEoMywxNTUsMjI5LC4yKSxyZ2JhKDMsMTU1LDIyOSwuMikgNXB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQgMTJweCl9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnBsb3QtaG9yaXpvbnRhbC1jb250YWluZXJ7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGModmFyKC0tbmF2LXdpZHRoKSArIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSArIHZhcigtLWV4LW5hdi13aWR0aCkgKyB2YXIoLS1idG4tbmF2LXdpZHRoKSl9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnBsb3QtaG9yaXpvbnRhbC1jb250YWluZXIgLnBsb3QtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMpO3dpZHRoOjEwMHZ3O2hlaWdodDp2YXIoLS1pdGVtLWhlaWdodCk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC5wbG90LWhvcml6b250YWwtY29udGFpbmVyIC5wbG90LWhvcml6b250YWwucGxvdC1wYXJlbnR7YmFja2dyb3VuZDpyZ2JhKDI1LDExOCwyMTAsLjEpfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsLmV4dGVuZGVkLXJpZ2h0IC5jb250YWluZXItdGwgLnBsb3QtY29udGFpbmVyIC5wbG90LXZlcnRpY2Fse2hlaWdodDpjYWxjKDEwMHZoIC0gdmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSArIHZhcigtLWhlYWRlci10b3AtaGVpZ2h0KSl9LmNhcGliYXJhIC5jb250YWluZXItdGwgZm9vdGVye3dpZHRoOi13ZWJraXQtZml0LWNvbnRlbnQ7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudDtib3R0b206MDttaW4td2lkdGg6MTAwJTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTt6LWluZGV4OjI7Ym94LXNpemluZzpib3JkZXItYm94fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGZvb3RlciAuZm9vdGVyLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjEwMCU7ZGlzcGxheTpmbGV4fS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIGZvb3RlciAuZm9vdGVyLWNvbnRhaW5lciAuZm9vdGVyLWl0ZW17cGFkZGluZzoxMHB4IDJweDt3aWR0aDp2YXIoLS1kYXktd2lkdGgpO2N1cnNvcjpkZWZhdWx0O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OnZhcigtLWl0ZW0taGVpZ2h0KTt0ZXh0LWFsaWduOmNlbnRlcn0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCBmb290ZXJ7YmFja2dyb3VuZDojNzg5MDljO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5jb250YWluZXItdGwuZGFyay10aGVtZSBmb290ZXJ7YmFja2dyb3VuZDojMzEzYjUwO2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYyh2YXIoLS1uYXYtd2lkdGgpICsgdmFyKC0taW5pdGlhbC1uYXYtd2lkdGgpICsgdmFyKC0tZXgtbmF2LXdpZHRoKSArIHZhcigtLWJ0bi1uYXYtd2lkdGgpKTt0b3A6dmFyKC0taGVhZGVyLWhlaWdodCk7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tbmF2LXdpZHRoKSAtIHZhcigtLWluaXRpYWwtbmF2LXdpZHRoKSAtIHZhcigtLWV4LW5hdi13aWR0aCkgLSB2YXIoLS1idG4tbmF2LXdpZHRoKSk7bWF4LWhlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1oZWFkZXItaGVpZ2h0KSk7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWhlYWRlci1oZWlnaHQpKTttYXJnaW4tdG9wOi0xcHh9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5kYXktbW91c2Utb3Zlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO2JvcmRlcjozcHggc29saWQgcmdiYSgyNDUsMTI0LDAsLjUpO2JveC1zaGFkb3c6MCAwIDJweCAjZjU3YzAwLGluc2V0IDAgMCAzcHggI2Y1N2MwMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFzZTtvdmVyZmxvdzp2aXNpYmxlO3dpbGwtY2hhbmdlOnRyYW5zZm9ybX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudGFibGUgLmRheS1tb3VzZS1vdmVyOmFmdGVyLC5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50YWJsZSAuZGF5LW1vdXNlLW92ZXI6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6cmdiYSgyNDUsMTI0LDAsLjEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9ja30uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudGFibGUgLmRheS1tb3VzZS1vdmVyOmFmdGVye3dpZHRoOnZhcigtLWRheS13aWR0aCk7aGVpZ2h0OjEwMHZoO3JpZ2h0Oi00cHg7Ym90dG9tOmNhbGModmFyKC0taXRlbS1oZWlnaHQpIC0gMnB4KX0uY2FwaWJhcmEgLmNvbnRhaW5lci10bCAudGFibGUgLmRheS1tb3VzZS1vdmVyOmJlZm9yZXtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3dpZHRoOjEwMHZ3O3JpZ2h0OmNhbGModmFyKC0tZGF5LXdpZHRoKSAtIDJweCk7Ym90dG9tOi00cHh9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5iYWNrZ3JvdW5kLWdyaWR7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpKjIwKTtoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkqMjApO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MXB4O2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6dmFyKC0tZGF5LXdpZHRoKSB2YXIoLS1pdGVtLWhlaWdodCksY2FsYyh2YXIoLS1kYXktd2lkdGgpKjcpIHZhcigtLWl0ZW0taGVpZ2h0KSxjYWxjKHZhcigtLWRheS13aWR0aCkqNykgdmFyKC0taXRlbS1oZWlnaHQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLHJnYmEoODAsODAsODAsLjMpIDFweCx0cmFuc3BhcmVudCAwKSxsaW5lYXItZ3JhZGllbnQoMGRlZyxyZ2JhKDgwLDgwLDgwLC4zKSAxcHgsdHJhbnNwYXJlbnQgMCksbGluZWFyLWdyYWRpZW50KDkwZGVnLHRyYW5zcGFyZW50IGNhbGModmFyKC0tZGF5LXdpZHRoKSo1KSxyZ2JhKDgwLDgwLDgwLC4xKSAwKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCwwIDAsMCAwfS5jYXBpYmFyYSAuY29udGFpbmVyLXRsIC50YWJsZSAuZHJhdy1ib3h7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5jb250YWluZXItdGwgLnRhYmxlIC5kcmF3LWJveCBjYW52YXN7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowfS5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgLmNvbnRhaW5lci10bCAudGFibGV7dG9wOmNhbGModmFyKC0taGVhZGVyLWhlaWdodCkgKyB2YXIoLS1leC1oZWFkZXItaGVpZ2h0KSl9LmNhcGliYXJhIC5zZWxlY3QtY29udGFpbmVye292ZXJmbG93OnZpc2libGU7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjA7aGVpZ2h0OjB9LmNhcGliYXJhIC5zZWxlY3QtY29udGFpbmVyIC5zZWxlY3RlZC1kYXl7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6aHNsYSgwLDAlLDc0LjElLC40KTtib3gtc2hhZG93Omluc2V0IDAgMCA1cHggaHNsYSgwLDAlLDc0LjElLC44KX0uY2FwaWJhcmEgLnNlbGVjdC1jb250YWluZXIgLnNlbGVjdGVkLWRheVtjYXAtYmFkZ2VdOmFmdGVye2NvbnRlbnQ6YXR0cihjYXAtYmFkZ2UpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTNweDt0b3A6LTNweDtiYWNrZ3JvdW5kOiMxNTY1YzA7Zm9udC1zaXplOi43NWVtO2NvbG9yOiNmZmY7d2lkdGg6MS41ZW07aGVpZ2h0OjEuNWVtO2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6Mjt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo3MDA7cGFkZGluZzoycHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMyl9LmNhcGliYXJhIC5kZXRhaWwtZGF5e21pbi1oZWlnaHQ6NTBweDttaW4td2lkdGg6MjUwcHg7bWF4LXdpZHRoOjQwMHB4O2JvcmRlcjoxcHggc29saWQgZ3JleTtwYWRkaW5nOi43NWVtO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDttYXJnaW46MCAwIDAgMWVtO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NXB4O3RyYW5zaXRpb246YWxsIC4zcyBlYXNlO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxsZWZ0LHRvcDt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS8yKi0xKSk7ei1pbmRleDo0O29wYWNpdHk6MX0uY2FwaWJhcmEgLmRldGFpbC1kYXk6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtiYWNrZ3JvdW5kOmluaGVyaXQ7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExcHg7dG9wOmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzIgKyA3cHgpO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO2JvcmRlci1jb2xvcjpncmV5O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MCAwIDFweCAxcHh9LmNhcGliYXJhIC5kZXRhaWwtZGF5LmRkLWhpZGV7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtcmlnaHQtYXJyb3d7bWFyZ2luOjAgMTZweCAwIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygtMTAwJSAtIDIwcHggLSB2YXIoLS1kYXktd2lkdGgpKSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS8yKi0xKSl9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1yaWdodC1hcnJvdzphZnRlcntib3JkZXItd2lkdGg6MXB4IDFweCAwIDA7bGVmdDp1bnNldDtyaWdodDotMTFweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLWNlaWwtYXJyb3d7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTdweCl9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1jZWlsLWFycm93OmFmdGVye3RvcDo2cHh9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1jZWlsLWFycm93Lmhhcy1yaWdodC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC0xMDAlIC0gMjBweCAtIHZhcigtLWRheS13aWR0aCkpKSB0cmFuc2xhdGVZKC03cHgpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtY2VpbC1hcnJvdy5oYXMtcmlnaHQtYXJyb3c6YWZ0ZXJ7bGVmdDp1bnNldDtyaWdodDotMTFweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLW1pZGRsZS1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKC01MCUgKyB2YXIoLS1pdGVtLWhlaWdodCkvMikpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtbWlkZGxlLWFycm93OmFmdGVye3RvcDpjYWxjKDUwJSAtIDEwcHgpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtbWlkZGxlLWFycm93Lmhhcy1yaWdodC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC0xMDAlIC0gMjBweCAtIHZhcigtLWRheS13aWR0aCkpKSB0cmFuc2xhdGVZKGNhbGMoLTUwJSArIHZhcigtLWl0ZW0taGVpZ2h0KS8yKSl9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1taWRkbGUtYXJyb3cuaGFzLXJpZ2h0LWFycm93OmFmdGVye2xlZnQ6dW5zZXQ7cmlnaHQ6LTExcHh9LmNhcGliYXJhIC5kZXRhaWwtZGF5Lmhhcy1ib3R0b20tYXJyb3d7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYygtMTAwJSArIHZhcigtLWl0ZW0taGVpZ2h0KSkpfS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtYm90dG9tLWFycm93OmFmdGVye3RvcDp1bnNldDtib3R0b206NHB4fS5jYXBpYmFyYSAuZGV0YWlsLWRheS5oYXMtYm90dG9tLWFycm93Lmhhcy1yaWdodC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC0xMDAlIC0gMjBweCAtIHZhcigtLWRheS13aWR0aCkpKSB0cmFuc2xhdGVZKGNhbGMoLTEwMCUgKyB2YXIoLS1pdGVtLWhlaWdodCkpKX0uY2FwaWJhcmEgLmRldGFpbC1kYXkuaGFzLWJvdHRvbS1hcnJvdy5oYXMtcmlnaHQtYXJyb3c6YWZ0ZXJ7bGVmdDp1bnNldDtyaWdodDotMTFweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmhlYWRlci1kZXRhaWwgLnRpdGxle2ZvbnQtc2l6ZToxLjI1ZW07Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206LjI1ZW07bWluLXdpZHRoOjEwZW07bWF4LXdpZHRoOjIwZW07bGluZS1oZWlnaHQ6dW5zZXR9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5oZWFkZXItZGV0YWlsIC5zdWJ0aXRsZXtmb250LXNpemU6Ljg3NWVtO21hcmdpbi1ib3R0b206OHB4O21pbi13aWR0aDoxMGVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWx7bWFyZ2luOjA7ZmxleDowIDAgYXV0b30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlse21hcmdpbjowO2ZvbnQtc2l6ZTouODc1ZW07cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzouNWVtIC41ZW0gLjVlbSAxZW07Ym9yZGVyLXJhZGl1czowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6dW5zZXQ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb257d2lkdGg6OHB4O2hlaWdodDo4cHg7bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnQ7bGVmdDoxcHg7dG9wOjEwcHg7Ym9yZGVyLXJhZGl1czo1MCV9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAubGVmdC1pY29uLmRpYW1vbmR7Ym9yZGVyLXJhZGl1czowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHNrZXcoMTBkZWcsMTBkZWcpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLmxlZnQtaWNvbi5vdXRsaW5lZHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLmxlZnQtaWNvbi50cmlhbmdsZXtib3JkZXItcmFkaXVzOjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgc2tldygxMGRlZywxMGRlZykgdHJhbnNsYXRlKDNweCwzcHgpO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLXdpZHRoOjVweDtib3JkZXItc3R5bGU6c29saWQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24uc2hpZWxke3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czowIDAgNTAlIDUwJX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5uYW1le2ZsZXg6MCAxIDQwJTtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctcmlnaHQ6MWVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb257ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0YXJ0fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2N7ZGlzcGxheTpmbGV4O21hcmdpbi1ib3R0b206M3B4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MuZGVzYy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0YXJ0O3dpZHRoOjEwMCU7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHg7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDttYXJnaW4tYm90dG9tOjA7cGFkZGluZy1ib3R0b206MH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjLmRlc2MtY29sdW1uOmxhc3QtY2hpbGR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MuZGVzYy1jb2x1bW4gLmxhYmVse21hcmdpbi1yaWdodDowfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MgLmxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXg6MSAxIDY1JTtmb250LXdlaWdodDo3MDA7bWFyZ2luLXJpZ2h0Oi41ZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYyAudmFse2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTttYXJnaW4tbGVmdDoxZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYyAucHJlZml4LC5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2MgLnN1ZmZpeHtmb250LXNpemU6Ljg1ZW07ZmxleDowIDAgYXV0b30uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5pdGVtLWRlc2NyaXB0aW9uIC5kZXNjIC52YWx1ZTpub3QoZW1wdHkpe21hcmdpbi1yaWdodDouMmVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLml0ZW0tZGVzY3JpcHRpb24gLmRlc2Mgc3Vwe3RvcDotMWVtIWltcG9ydGFudH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmZsZXh7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQ7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWZsb3c6d3JhcDstbXMtd3JpdGluZy1tb2RlOnRiLWxyO3dyaXRpbmctbW9kZTp2ZXJ0aWNhbC1scjttYXgtaGVpZ2h0OjI1JX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmZsZXggLml0ZW0tZGV0YWlse2ZsZXg6MCAwIGF1dG87bWluLXdpZHRoOjhlbTstbXMtd3JpdGluZy1tb2RlOmxyLXRiO3dyaXRpbmctbW9kZTpob3Jpem9udGFsLXRifS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwuY29sdW1uey1tb3otY29sdW1uczo3ZW0gMztjb2x1bW5zOjdlbSAzO21pbi13aWR0aDozMGVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwuY29sdW1uIC5pdGVtLWRldGFpbHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlse21hcmdpbjo0cHg7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzouNWVtIDFlbTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVufS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5uYW1le2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOi41ZW07Y29sb3I6dmFyKC0tbG9jYWwtY29sb3ItZm9udCxpbmhlcml0KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbCAuaXRlbS1kZXNjcmlwdGlvbiAuZGVzYyAubGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6NzAwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb257bWluLWhlaWdodDoxMHB4O2hlaWdodDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24ub3V0bGluZWR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KX0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsIC5pdGVtLWRldGFpbCAubGVmdC1pY29uLnRyaWFuZ2xle2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlsIC5sZWZ0LWljb24uc2hpZWxke2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsZ3JleSl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5lbGVtZW50cy1kZXRhaWx7cGFkZGluZzouNWVtIDAgLjI1ZW07ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuZWxlbWVudHMtZGV0YWlsIC5uYW1le2ZsZXg6MSAwIDEwMCU7Zm9udC13ZWlnaHQ6NzAwfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuZWxlbWVudHMtZGV0YWlsIC5lbGVtZW50cy1saXN0e21hcmdpbjo0cHggLTRweH0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLmVsZW1lbnRzLWRldGFpbCAuZWxlbWVudHMtbGlzdCAuZWxlbWVudC1kZXRhaWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzouMjVlbSAuODc1ZW07Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6I2ZmZjttYXJnaW46LjI1ZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5hbGVydHtwYWRkaW5nOi41ZW0gMCAuMjVlbSAyZW07cG9zaXRpb246cmVsYXRpdmU7bWluLXdpZHRoOjE1ZW07bWluLXdpZHRoOjEwZW07bWF4LXdpZHRoOjMwZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5hbGVydCAuYWxlcnQtaWNvbnttYXgtd2lkdGg6MmVtO2ZvbnQtc2l6ZToxLjc1ZW07cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDouNWVtO2NvbG9yOmdyZXl9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5hbGVydCAucmVke2NvbG9yOiNmNDQzMzZ9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVye21hcmdpbjowIC0uNzhlbSAtLjc1ZW07Ym9yZGVyOjFweCBzb2xpZCBncmV5O3otaW5kZXg6Mn0uY2FwaWJhcmEgLmRldGFpbC1kYXkgLm1zai1jb250YWluZXIgcHJle3doaXRlLXNwYWNlOnByZS13cmFwO3doaXRlLXNwYWNlOi1tb3otcHJlLXdyYXA7d2hpdGUtc3BhY2U6LXByZS13cmFwO3doaXRlLXNwYWNlOi1vLXByZS13cmFwO3dvcmQtd3JhcDpicmVhay13b3JkfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lciAubXNqe21pbi13aWR0aDoxMGVtO21heC13aWR0aDozMGVtO21hcmdpbjowIDAgLjVlbTtwYWRkaW5nOi43NWVtO2ZvbnQtc2l6ZTouODc1ZW19LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVyIC5tc2otZGV0YWlse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzouMjVlbSAuNWVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lciAubXNqLWRldGFpbCAuZW1haWx7Zm9udC1zaXplOi44NzVlbTtmb250LXN0eWxlOml0YWxpYztvcGFjaXR5Oi41fS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lciAubXNqLWRldGFpbCAuZGF0ZXtmb250LXNpemU6LjcyNWVtfS5jYXBpYmFyYSAuZGV0YWlsLWRheXtjb2xvcjojMzc0NzRmO2JhY2tncm91bmQ6I2ZmZn0uY2FwaWJhcmEgLmRldGFpbC1kYXksLmNhcGliYXJhIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCwuY2FwaWJhcmEgLmRldGFpbC1kYXkgLmxpc3QtZGV0YWlsLmxpc3QgLml0ZW0tZGV0YWlsIC5kZXNjLWNvbHVtbiwuY2FwaWJhcmEgLmRldGFpbC1kYXk6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjIpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAuZWxlbWVudHMtZGV0YWlsIC5lbGVtZW50cy1saXN0IC5lbGVtZW50LWRldGFpbHtiYWNrZ3JvdW5kOnJnYmEoNTUsNzEsNzksLjgpfS5jYXBpYmFyYSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNmZmVjYjM7Ym9yZGVyLWNvbG9yOiNmZmNhMjh9LmNhcGliYXJhIC5kZXRhaWwtZGF5IC5tc2otY29udGFpbmVyIC5tc2otZGV0YWlse2JhY2tncm91bmQ6I2ZmZTA4Mjtib3JkZXItY29sb3I6I2ZmY2EyOH0uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheXtjb2xvcjojZjBmMGYwO2JvcmRlci1jb2xvcjojNDA0ZTY5O2JhY2tncm91bmQ6IzIyMjgzN30uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheTphZnRlcntib3JkZXItY29sb3I6IzQwNGU2OX0uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwgLml0ZW0tZGV0YWlse2JhY2tncm91bmQ6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5kZXRhaWwtZGF5IC5saXN0LWRldGFpbC5saXN0IC5pdGVtLWRldGFpbCwuY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheSAubGlzdC1kZXRhaWwubGlzdCAuaXRlbS1kZXRhaWwgLmRlc2MtY29sdW1ue2JvcmRlci1jb2xvcjojNDA0ZTY5fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5kZXRhaWwtZGF5IC5lbGVtZW50cy1kZXRhaWwgLmVsZW1lbnRzLWxpc3QgLmVsZW1lbnQtZGV0YWlse2JhY2tncm91bmQ6IzI5MzI0M30uY2FwaWJhcmEuZGFyay10aGVtZSAuZGV0YWlsLWRheSAubXNqLWNvbnRhaW5lcntiYWNrZ3JvdW5kOiMyOTMyNDM7Ym9yZGVyLWNvbG9yOnJnYmEoMjUxLDE5Miw0NSwuNCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmRldGFpbC1kYXkgLm1zai1jb250YWluZXIgLm1zai1kZXRhaWx7YmFja2dyb3VuZDpyZ2JhKDI1MSwxOTIsNDUsLjEpfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3otaW5kZXg6MTA7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLGxlZnQsdG9wfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIuY20taGlkZSAuY2FwLWNvbnRleHQtbWVudXt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjB9LmNhcGliYXJhIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudXtwb3NpdGlvbjphYnNvbHV0ZTttaW4td2lkdGg6MjUwcHg7ei1pbmRleDoyO2JvcmRlci1yYWRpdXM6NXB4O2JvcmRlcjoxcHggc29saWQgZ3JleTtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKTtmb250LXNpemU6Ljc1ZW07dHJhbnNpdGlvbjphbGwgLjFzIGxpbmVhcjt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxO3BhZGRpbmc6LjRlbSAwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2FwaWJhcmEgLmNhcC1jb250ZXh0LW1lbnUtY29udGFpbmVyIC5jYXAtY29udGV4dC1tZW51X2l0ZW17cGFkZGluZzouNWVtIDFlbTtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjAsLjIpfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbS5pcy1kaXNhYmxlZHtvcGFjaXR5Oi41O2N1cnNvcjp1bnNldH0uY2FwaWJhcmEgLmNhcC1jb250ZXh0LW1lbnUtY29udGFpbmVyIC5jYXAtY29udGV4dC1tZW51X2l0ZW0uaXMtZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDpub25lfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbS5pcy1kaXZpZGVye2N1cnNvcjp1bnNldDtoZWlnaHQ6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDIwLDIwLDIwLC4yKTtwYWRkaW5nOjA7bWFyZ2luOi4zZW0gMWVtfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbV9pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXg6MCAwIGF1dG87cGFkZGluZy1yaWdodDouNWVtfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnVfaXRlbV9pY29uIHN2Z3t3aWR0aDoxNnB4O2hlaWdodDoxNnB4fS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnV7Y29sb3I6IzM3NDc0Zjtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMik7YmFja2dyb3VuZDojZmZmfS5jYXBpYmFyYSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnUgc3ZnIHBhdGh7ZmlsbDojMzc0NzRmfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAuY2FwLWNvbnRleHQtbWVudXtjb2xvcjojZjBmMGYwO2JvcmRlci1jb2xvcjojNDA0ZTY5O2JhY2tncm91bmQ6IzIyMjgzN30uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWNvbnRleHQtbWVudS1jb250YWluZXIgLmNhcC1jb250ZXh0LW1lbnUgc3ZnIHBhdGh7ZmlsbDojZjBmMGYwfS5jYXBpYmFyYSAuaG91ci1pbnB1dHtib3JkZXI6MXB4IHNvbGlkIGdyZXk7Ym9yZGVyLXJhZGl1czozcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyNHB4O21hcmdpbjo4cHggNHB4O292ZXJmbG93OmhpZGRlbn0uY2FwaWJhcmEgLmhvdXItaW5wdXQgaW5wdXR7d2lkdGg6NTAlO2hlaWdodDppbmhlcml0O2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtmb250LXNpemU6Ljg3NWVtfS5jYXBpYmFyYSAuaG91ci1pbnB1dCBpbnB1dDphY3RpdmUsLmNhcGliYXJhIC5ob3VyLWlucHV0IGlucHV0OmZvY3Vze2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMSl9LmNhcGliYXJhIC5ob3VyLWlucHV0IHNwYW57d2lkdGg6OHB4O3RleHQtYWxpZ246Y2VudGVyfS5jYXBpYmFyYSAuaG91ci1pbnB1dCAuaGh7dGV4dC1hbGlnbjpyaWdodH0uY2FwaWJhcmEgLnRpbWV7Ym9yZGVyLXJhZGl1czo2cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjB9LmNhcGliYXJhIC50aW1lIC5zeW1ib2x7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OmF1dG87d2lkdGg6MjBweDtmb250LXNpemU6MnJlbTt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhIC50aW1lIGlucHV0e2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7d2lkdGg6NjJweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MnJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtwYWRkaW5nOjZweH0uY2FwaWJhcmEgLnRpbWUgaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAudGltZSBpbnB1dDpmb2N1c3t0cmFuc2Zvcm06c2NhbGUoMS4wNil9LmNhcGliYXJhIC50aW1lIGlucHV0OmludmFsaWR7Ym9yZGVyOjJweCBzb2xpZCByZWR9LmNhcGliYXJhIC5idXR0b25zLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNhcGliYXJhIC5idXR0b25zLWdyb3VwIGJ1dHRvbi5jYXAtYnRuLW91dGxpbmV7Ym9yZGVyLXJhZGl1czowO21hcmdpbjowIC0ycHggMCAwfS5jYXBpYmFyYSAuYnV0dG9ucy1ncm91cCBidXR0b24uY2FwLWJ0bi1vdXRsaW5lOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXJhZGl1czo2cHggMCAwIDZweDttYXJnaW4tbGVmdDo0cHh9LmNhcGliYXJhIC5idXR0b25zLWdyb3VwIGJ1dHRvbi5jYXAtYnRuLW91dGxpbmU6bGFzdC1vZi10eXBle2JvcmRlci1yYWRpdXM6MCA2cHggNnB4IDA7bWFyZ2luLXJpZ2h0OjRweH0uY2FwaWJhcmEgLmlucHV0LWJveC10YWItY29udGFpbmVye2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO2ZsZXgtd3JhcDpub3dyYXA7Ym9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDtib3JkZXI6c29saWQgZ3JleTtib3JkZXItd2lkdGg6MnB4IDJweCAwfS5jYXBpYmFyYSAuaW5wdXQtYm94LXRhYi1jb250YWluZXIgLmlucHV0LWJveC10YWJ7ZmxleDoxIDEgYXV0bztwYWRkaW5nOi4zZW0gMWVtO2ZvbnQtc2l6ZTouOWVtO2JvcmRlci1yaWdodDoxcHggc29saWQgZ3JleTtjdXJzb3I6cG9pbnRlcn0uY2FwaWJhcmEgLmlucHV0LWJveC10YWItY29udGFpbmVyIC5pbnB1dC1ib3gtdGFiLmFjdGl2ZXtiYWNrZ3JvdW5kOmhzbGEoMCwwJSw1OC44JSwuMyl9LmNhcGliYXJhIC5pbnB1dC1ib3gtdGFiLWNvbnRhaW5lciAuaW5wdXQtYm94LXRhYjpsYXN0LWNoaWxke2JvcmRlci1yaWdodDpub25lfS5jYXBpYmFyYSAuaW5wdXQtYm94LXRhYi1jb250YWluZXIrLmlucHV0LWJveHtib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4fS5jYXBpYmFyYSAuaW5wdXQtYm94e21hcmdpbjowIDE2cHg7bWluLWhlaWdodDoxODBweDtib3JkZXI6MnB4IHNvbGlkIGdyZXk7Ym9yZGVyLXJhZGl1czo2cHg7b3ZlcmZsb3cteTpzY3JvbGw7cGFkZGluZy1ib3R0b206NjBweDt3aWR0aDoxMDAlO21heC1oZWlnaHQ6MzAwcHh9LmNhcGliYXJhIC5pbnB1dC1ib3ggLnNlYXJjaC1pbnB1dC1jb250YWluZXJ7cGFkZGluZzouM2VtO21heC13aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIGhzbGEoMCwwJSwzOS4yJSwuMyk7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5pbnB1dC1ib3ggLnNlYXJjaC1pbnB1dC1jb250YWluZXIgLnNlYXJjaC1pbnB1dHtib3JkZXI6MXB4IHNvbGlkICM2NDY0NjQ7Ym9yZGVyLXJhZGl1czoxM3B4O2hlaWdodDoyNnB4O3BhZGRpbmc6LjVlbSAxZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtmb250LXNpemU6LjhlbTtjb2xvcjppbmhlcml0fS5jYXBpYmFyYSAuaW5wdXQtYm94IC5zZWFyY2gtaW5wdXQtY29udGFpbmVyIC5zZWFyY2gtaW5wdXQ6LW1vei1wbGFjZWhvbGRlci1zaG93bisuc2VhcmNoLWlucHV0LWNsZWFye2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmlucHV0LWJveCAuc2VhcmNoLWlucHV0LWNvbnRhaW5lciAuc2VhcmNoLWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcisuc2VhcmNoLWlucHV0LWNsZWFye2Rpc3BsYXk6bm9uZX0uY2FwaWJhcmEgLmlucHV0LWJveCAuc2VhcmNoLWlucHV0LWNvbnRhaW5lciAuc2VhcmNoLWlucHV0OnBsYWNlaG9sZGVyLXNob3duKy5zZWFyY2gtaW5wdXQtY2xlYXJ7ZGlzcGxheTpub25lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5zZWFyY2gtaW5wdXQtY29udGFpbmVyIC5zZWFyY2gtaW5wdXQtY2xlYXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MWVtO3RvcDouNGVtO2NvbG9yOmhzbGEoMCwwJSwzOS4yJSwuNik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6bm9uZX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9ue3BhZGRpbmc6LjVlbSAyZW0gLjVlbSAuNWVtO3RleHQtYWxpZ246bGVmdDt3aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIGhzbGEoMCwwJSwzOS4yJSwuMyl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi5oYXMtaWNvbntwYWRkaW5nOi41ZW0gMmVtIC41ZW0gMS41ZW19LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi5jbGlja2VhYmxle2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24uY2xpY2tlYWJsZTpob3ZlciBsYWJlbHtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24uaXMtdGl0bGV7YmFja2dyb3VuZDpoc2xhKDAsMCUsMzkuMiUsLjEpfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24uaXMtdGl0bGUgLm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGV7b3BhY2l0eTouNn0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwe3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjEuNWVtO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOi41ZW07bWFyZ2luOjFlbTtjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6M3B4O3otaW5kZXg6Mjtib3gtc2hhZG93OjAgMnB4IDVweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtmb250LXNpemU6Ljg3NWVtO2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXRpdGxlc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnN0YXJ0O21heC13aWR0aDoxMDAlO2ZsZXg6MCAxIGF1dG99LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2p1c3RpZnktY29udGVudDplbmQ7ZmxleDoxIDAgYXV0bztmb250LXNpemU6MWVtO3BhZGRpbmc6MCAuNWVtfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXN1YnRpdGxlLC5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXRpdGxle3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnVuc2V0O21heC13aWR0aDoxMDAlO2ZsZXgtZ3JvdzoxfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLXN1YnRpdGxle2ZvbnQtc2l6ZTouODc1ZW19LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tc3VmZml4e2ZsZXg6MCAwIGF1dG87Zm9udC1zaXplOi44NzVlbTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24tLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDouNWVtO3RvcDouNzVlbTt3aWR0aDouNzVlbTtoZWlnaHQ6Ljc1ZW07Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixncmV5KTtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1saW5re29wYWNpdHk6LjY7Y29sb3I6IzIxOTZmMztkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDouNWVtO3RvcDouNzVlbX0uY2FwaWJhcmEgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS1saW5rIHN2Z3t3aWR0aDoxOHB4IWltcG9ydGFudDtoZWlnaHQ6MThweCFpbXBvcnRhbnR9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbjpob3ZlciAubWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwe2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dHt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDo0ZW07bWFyZ2luLXJpZ2h0Oi41ZW07Ym9yZGVyOjFweCBzb2xpZCBncmV5O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6aHNsYSgwLDAlLDEwMCUsLjIpO2ZvbnQtc2l6ZToxZW07ZmxleDowIDAgNGVtfS5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuOCl9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tZm9vdGVye21hcmdpbi10b3A6LjI1ZW07ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5jYXBpYmFyYSBzZWxlY3QuaW5wdXQtc2VsZWN0e3BhZGRpbmc6LjNlbSAxZW07d2lkdGg6MTAwJTtmbGV4OjEgMCAxMDAlO2JvcmRlcjoxcHggc29saWQgZ3JleTtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC1hcHBlYXJhbmNlOmF1dG87LW1vei1hcHBlYXJhbmNlOmF1dG87YXBwZWFyYW5jZTphdXRvfS5jYXBpYmFyYSBzZWxlY3QuaW5wdXQtc2VsZWN0IG9wdGlvbntwYWRkaW5nOi4zZW07Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOmluaGVyaXR9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLWxpc3R7bWFyZ2luOjE2cHggMH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24tbGlzdCAuaW5wdXQtc2VjdGlvbi10aXRsZXttYXJnaW4tYm90dG9tOjhweH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24tbGlzdCAuaW5wdXQtc2VjdGlvbnttYXJnaW46MCAxNnB4IDhweH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb257bWFyZ2luOjE2cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LXdyYXA6bm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24udG8tcmlnaHR7YWxpZ24taXRlbXM6ZW5kfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi50by1sZWZ0e2FsaWduLWl0ZW1zOnN0YXJ0fS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAuc21hbGwtY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEwcHg7dG9wOi0xMHB4O3dpZHRoOjEuMmVtO2hlaWdodDoxLjJlbTtmb250LXNpemU6LjllbTtib3JkZXI6MXB4IHNvbGlkICNmZmY7Ym94LXNoYWRvdzoxcHggMXB4IDJweCByZ2JhKDAsMCwwLC40KTt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojZmZmO2JhY2tncm91bmQ6cmVkO2JvcmRlci1yYWRpdXM6NTAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLmlucHV0LXNlY3Rpb24tdGl0bGV7ZmxleDoxIDEgMTAwJTt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLmlucHV0LXNlY3Rpb24tdGl0bGUgYnV0dG9ue21hcmdpbi1sZWZ0OmF1dG87ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC13cmFwOm5vd3JhcH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLmlucHV0LXNlY3Rpb24tbGlua3tmbGV4OjEgMSAxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpiYXNlbGluZTtwYWRkaW5nLXRvcDouMjVlbX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLmlucHV0LXNlY3Rpb24tbGluayBhe2NvbG9yOiMyMTk2ZjM7bWFyZ2luLXRvcDouNzVyZW19LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLmlzLWludmFsaWQgLmlucHV0LWJveCwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24uaXMtaW52YWxpZCBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyOjJweCBzb2xpZCByZWQhaW1wb3J0YW50O2JveC1zaGFkb3c6MCAwIDNweCByZWQhaW1wb3J0YW50fS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5kZW5zZSBpbnB1dC5uYXYtaW5wdXR7d2lkdGg6NTAlO2ZvbnQtc2l6ZToxZW07cGFkZGluZzozcHggNnB4fS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Ym9yZGVyOjJweCBzb2xpZCBoc2xhKDAsMCUsNTAuMiUsLjcpO2JvcmRlci1yYWRpdXM6NnB4O3dpZHRoOjEwMCU7bWluLXdpZHRoOjEzMHB4O21heC13aWR0aDoxNzBweDtmb250LXNpemU6MmVtO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4IDZweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O291dGxpbmU6bm9uZTt0cmFuc2l0aW9uOmFsbCAuMXMgZWFzZTttYXJnaW4tYm90dG9tOjhweH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0OmZvY3Vze2JvcmRlcjoycHggc29saWQgZ3JleTtib3gtc2hhZG93OjAgNHB4IDZweCBoc2xhKDAsMCUsNTAuMiUsLjIpfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQuc21hbGx7Zm9udC1zaXplOjEuM2VtfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGV7Ym9yZGVyOjJweCBzb2xpZCBoc2xhKDAsMCUsNTAuMiUsLjcpO2JvcmRlci1yYWRpdXM6NnB4O3dpZHRoOjcwJTttaW4td2lkdGg6MTMwcHg7cGFkZGluZzozcHggNnB4O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7b3V0bGluZTpub25lO3RyYW5zaXRpb246YWxsIC4xcyBlYXNlO3Bvc2l0aW9uOnJlbGF0aXZlfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXN7Ym9yZGVyOjJweCBzb2xpZCBncmV5O2JveC1zaGFkb3c6MCA0cHggNnB4IGhzbGEoMCwwJSw1MC4yJSwuMil9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSBsYWJlbHtmbGV4OjEgMSBhdXRvfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGUgaW5wdXRbdHlwZT1maWxlXXtkaXNwbGF5Om5vbmV9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5pbnB1dC1zZWN0aW9uLWNvbHt3aWR0aDphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXg6MSAxIDEwJX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gLmlucHV0LXNlY3Rpb24tY29sIGlucHV0Lm5hdi1pbnB1dHttaW4td2lkdGg6dW5zZXQ7d2lkdGg6Y2FsYygxMDAlIC0gMXJlbSk7bWF4LXdpZHRoOjdyZW19LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe291dGxpbmU6bm9uZTtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6MnB4IHNvbGlkIGdyZXk7d2lkdGg6MTAwJTttaW4td2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTttaW4taGVpZ2h0OjEwMHB4O3RyYW5zaXRpb246YWxsIC4xcyBlYXNlO3BhZGRpbmc6OHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDI1NSwxNjAsMCwuMil9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIGlucHV0W3R5cGU9Y2hlY2tib3hde3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5jYXBpYmFyYSAudGltZXtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwxMjgsMCwuNyk7Y29sb3I6Z3JlZW59LmNhcGliYXJhIC50aW1lIC5zeW1ib2wsLmNhcGliYXJhIC50aW1lIGlucHV0e2NvbG9yOiMzNzQ3NGZ9LmNhcGliYXJhIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEgLnRpbWUgaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOmdyZWVuO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxMjgsMCwuMil9LmNhcGliYXJhIC5pbnB1dC1ib3gtdGFiLWNvbnRhaW5lciwuY2FwaWJhcmEgLmlucHV0LWJveC10YWItY29udGFpbmVyIC5pbnB1dC1ib3gtdGFie2JvcmRlci1jb2xvcjpncmVlbn0uY2FwaWJhcmEgLmlucHV0LWJveHtjb2xvcjojMzc0NzRmO2JvcmRlcjoycHggc29saWQgZ3JlZW59LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dDphY3RpdmUsLmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOiNmYWZhZmF9LmNhcGliYXJhIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbi0tdG9vbHRpcHtiYWNrZ3JvdW5kOiNmYWZhZmE7Y29sb3I6IzM3NDc0Zjtib3JkZXI6MXB4IHNvbGlkICMzNzQ3NGZ9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3R7Y29sb3I6IzM3NDc0Zjtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwxMjgsMCwuNyl9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Q6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0OmZvY3Vze2JvcmRlcjoycHggc29saWQgZ3JlZW47Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSgwLDEyOCwwLC4yKX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdCBvcHRpb257YmFja2dyb3VuZDojZmFmYWZhO2NvbG9yOiMzNzQ3NGZ9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24gaW5wdXQubmF2LWlucHV0e2NvbG9yOiMzNzQ3NGY7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMTI4LDAsLjcpfS5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6Zm9jdXMsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDphY3RpdmUsLmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXI6MnB4IHNvbGlkIGdyZWVuO2JveC1zaGFkb3c6MCA0cHggNnB4IHJnYmEoMCwxMjgsMCwuMil9LmNhcGliYXJhIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JhY2tncm91bmQ6cmdiYSgyNTUsMjQ5LDE5NiwuNik7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLC40KX0uY2FwaWJhcmEgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6YWN0aXZlLC5jYXBpYmFyYSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI0OSwxOTYsLjgpO2JveC1zaGFkb3c6MCA0cHggNnB4IHRyYW5zcGFyZW50fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC50aW1le2JvcmRlcjoycHggc29saWQgcmdiYSg2NCw3OCwxMDUsLjcpO2NvbG9yOiM0MDRlNjl9LmNhcGliYXJhLmRhcmstdGhlbWUgLnRpbWUgLnN5bWJvbCwuY2FwaWJhcmEuZGFyay10aGVtZSAudGltZSBpbnB1dHtjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC50aW1lIGlucHV0OmFjdGl2ZSwuY2FwaWJhcmEuZGFyay10aGVtZSAudGltZSBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6IzQwNGU2OTtib3gtc2hhZG93OjAgNHB4IDZweCByZ2JhKDY0LDc4LDEwNSwuMil9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LWJveC10YWItY29udGFpbmVyLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1ib3gtdGFiLWNvbnRhaW5lciAuaW5wdXQtYm94LXRhYntib3JkZXItY29sb3I6IzQwNGU2OX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtYm94e2NvbG9yOiNmMGYwZjA7Ym9yZGVyOjJweCBzb2xpZCAjNDA0ZTY5fS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dHtiYWNrZ3JvdW5kOiM0MDRlNjk7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtYm94IC5taW5pLWlucHV0LXNlY3Rpb24gaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1ib3ggLm1pbmktaW5wdXQtc2VjdGlvbiBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOiMyMjI4Mzd9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LWJveCAubWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwe2JhY2tncm91bmQ6IzIyMjgzNztjb2xvcjojZjBmMGYwO2JvcmRlcjoxcHggc29saWQgI2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBzZWxlY3QuaW5wdXQtc2VsZWN0e2NvbG9yOiNmMGYwZjA7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDY0LDc4LDEwNSwuNyl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24gc2VsZWN0LmlucHV0LXNlbGVjdDpmb2N1c3tib3JkZXI6MnB4IHNvbGlkICM0MDRlNjk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg2NCw3OCwxMDUsLjIpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIHNlbGVjdC5pbnB1dC1zZWxlY3Qgb3B0aW9ue2JhY2tncm91bmQ6IzIyMjgzNztjb2xvcjojZjBmMGYwfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXR7Y29sb3I6I2YwZjBmMDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoNjQsNzgsMTA1LC43KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiAubmF2LWlucHV0LWZpbGU6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIC5uYXYtaW5wdXQtZmlsZTpmb2N1cywuY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbiBpbnB1dC5uYXYtaW5wdXQ6YWN0aXZlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uIGlucHV0Lm5hdi1pbnB1dDpmb2N1c3tib3JkZXI6MnB4IHNvbGlkICM0MDRlNjk7Ym94LXNoYWRvdzowIDRweCA2cHggcmdiYSg2NCw3OCwxMDUsLjIpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5pbnB1dC1zZWN0aW9uLm1zai1pbnB1dC1jb250YWluZXIgdGV4dGFyZWEubXNqe2JhY2tncm91bmQ6cmdiYSgyNTEsMTkyLDQ1LC4xKTtib3JkZXI6MnB4IHNvbGlkICM5ZTllOWU7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuaW5wdXQtc2VjdGlvbi5tc2otaW5wdXQtY29udGFpbmVyIHRleHRhcmVhLm1zajphY3RpdmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmlucHV0LXNlY3Rpb24ubXNqLWlucHV0LWNvbnRhaW5lciB0ZXh0YXJlYS5tc2o6Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1MSwxOTIsNDUsLjMpO2JveC1zaGFkb3c6MCA0cHggNnB4IGhzbGEoMCwwJSw2MiUsLjIpfS5jYXBpYmFyYSBidXR0b257b3V0bGluZTpub25lO2N1cnNvcjpwb2ludGVyfS5jYXBpYmFyYSBidXR0b24uY2FwLXJvdGF0ZSAubWRpOmJlZm9yZSwuY2FwaWJhcmEgYnV0dG9uLmNhcC1yb3RhdGUgc3Zne3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbjpmb2N1cywuY2FwaWJhcmEgLmNhcC1idG4tb3V0bGluZTpmb2N1cywuY2FwaWJhcmEgLmNhcC1idG4tcmFpc2VkOmZvY3VzLC5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZTpmb2N1c3tib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDAsMCwwLC4zKX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbjpkaXNhYmxlZCwuY2FwaWJhcmEgLmNhcC1idG4tb3V0bGluZTpkaXNhYmxlZCwuY2FwaWJhcmEgLmNhcC1idG4tcmFpc2VkOmRpc2FibGVkLC5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZTpkaXNhYmxlZHtvcGFjaXR5Oi42fS5jYXBpYmFyYSBidXR0b24uY2FwLWJ0bi1zbXtmb250LXNpemU6Ljc1ZW07bWFyZ2luOjRweDtwYWRkaW5nOjRweCA4cHh9LmNhcGliYXJhIC5jYXAtYnRuLW91dGxpbmV7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6Z3JleTtib3JkZXI6MnB4IHNvbGlkIGdyZXk7cGFkZGluZzo4cHggMTZweDttYXJnaW46MCA4cHg7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC13ZWlnaHQ6NzAwfS5jYXBpYmFyYSAuY2FwLWJ0bi1vdXRsaW5lLnNlbGVjdGVke2JhY2tncm91bmQ6Z3JleX0uY2FwaWJhcmEgLmNhcC1idG4tcmFpc2Vke2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6OHB4IDE2cHg7bWFyZ2luOjAgOHB4O2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6Z3JleTtib3JkZXI6MnB4IHNvbGlkIGdyZXk7Zm9udC13ZWlnaHQ6NzAwfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDozMnB4O3dpZHRoOjMycHg7b3V0bGluZTpub25lO2N1cnNvcjpwb2ludGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tcmlnaHQ6MTZweDttYXJnaW4tdG9wOjRweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO3BhZGRpbmc6NHB4O2ZvbnQtc2l6ZToxOHB4O2NvbG9yOmdyZXk7Ym9yZGVyLXJhZGl1czo1MCU7cG9zaXRpb246cmVsYXRpdmV9LmNhcGliYXJhIC5jYXAtYnRuLWljb24gc3Zne2ZpbGw6Z3JleX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWhhcy1iYWRnZTphZnRlcntjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LS4yZW07dG9wOi0uMmVtO3dpZHRoOi44ZW07aGVpZ2h0Oi44ZW07YmFja2dyb3VuZDpncmV5O2JvcmRlci1yYWRpdXM6NTAlfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1yYWlzZWR7YmFja2dyb3VuZDojZmZmO2JvcmRlcjpub25lfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1vdXRsaW5le2JvcmRlcjoxcHggc29saWQgZ3JleX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLXRvZ2dsZS1zaWRlYmFye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjEwcHg7ei1pbmRleDoyO21hcmdpbjowfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uIC5tZGl7Zm9udC1zaXplOjI0cHh9LmNhcGliYXJhIC5jYXAtYnRuLWljb24gLmxvYWRpbmctaWNvbntkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowfS5jYXBpYmFyYSAuY2FwLWJ0bi1pY29uLmxvYWRpbmc+Om5vdCgubG9hZGluZy1pY29uKXtkaXNwbGF5Om5vbmV9LmNhcGliYXJhIC5jYXAtYnRuLWljb24ubG9hZGluZyAubG9hZGluZy1pY29ue2Rpc3BsYXk6dW5zZXR9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7b3V0bGluZTpub25lO2N1cnNvcjpwb2ludGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW46NHB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7cGFkZGluZzowO2ZvbnQtc2l6ZToxNHB4fS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZSAubWRpe2ZvbnQtc2l6ZToyNHB4fS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZXtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6bm9uZTtwYWRkaW5nOjB9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoycHg7dG9wOjJweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOmdyZXk7d2lkdGg6MjJweDtoZWlnaHQ6MjJweH0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUgc3Bhbntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjFweDt0b3A6NnB4O3dpZHRoOjEwMCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcn0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUtb3V0bGluZXtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6bm9uZTtwYWRkaW5nOjB9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjJweDt0b3A6M3B4O2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoycHggc29saWQgZ3JleTt3aWR0aDoyMnB4O2hlaWdodDoyMnB4fS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS1vdXRsaW5lIHNwYW57cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxcHg7dG9wOjZweDt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOmdyZXk7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcHtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6bm9uZTtwYWRkaW5nOjB9LmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcDpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4O3RvcDowO2JvcmRlci1yYWRpdXM6MCA1MCUgNTAlIDUwJTtiYWNrZ3JvdW5kOmdyZXk7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC0ycHgsNHB4KSByb3RhdGUoNDVkZWcpfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWRyb3Agc3Bhbntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjZweDt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXJ9LmNhcGliYXJhLmV4dGVuZGVkLXJpZ2h0IFt0b2dnbGUtc2lkZWJhci1yaWdodF0gc3ZnLC5jYXBpYmFyYS5oZWFkZXItZXh0ZW5kZWQgW3RvZ2dsZS1oZWFkZXJdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmNhcGliYXJhIC5jYXAtYnRuLXJhaXNlZHtiYWNrZ3JvdW5kOiMwMGY7Ym9yZGVyOjJweCBzb2xpZCAjMDBmO2NvbG9yOiNmZmZ9LmNhcGliYXJhIC5jYXAtYnRuLW91dGxpbmV7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MnB4IHNvbGlkICMwMGY7Y29sb3I6IzAwZn0uY2FwaWJhcmEgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOiMwMGY7Y29sb3I6I2ZmZn0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGV7Y29sb3I6IzM3NDc0Zn0uY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUsLmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcHtjb2xvcjojZmZmfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZTpiZWZvcmUsLmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcDpiZWZvcmV7YmFja2dyb3VuZDojMzg4ZTNjfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS5pcy1lbXB0eTpiZWZvcmUsLmNhcGliYXJhIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcC5pcy1lbXB0eTpiZWZvcmV7YmFja2dyb3VuZDojNjE2MTYxfS5jYXBpYmFyYSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZS1vdXRsaW5lOmJlZm9yZXtib3JkZXItY29sb3I6IzM4OGUzY30uY2FwaWJhcmEgLmNhcC1idG4taWNvbiwuY2FwaWJhcmEgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUtb3V0bGluZSBzcGFue2NvbG9yOiMzNzQ3NGZ9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1oYXMtYmFkZ2U6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDI0NSwxMjQsMCwuOCl9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZHtiYWNrZ3JvdW5kOnJnYmEoODQsMTEwLDEyMiwuMSk7Ym9yZGVyLWNvbG9yOiM1NDZlN2E7Y29sb3I6IzU0NmU3YX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2VkOmFjdGl2ZXtiYWNrZ3JvdW5kOiM1NDZlN2F9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZDpmb2N1cywuY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2VkOmhvdmVye2JhY2tncm91bmQ6cmdiYSg4NCwxMTAsMTIyLC4zKX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1jb2xvcjojNTQ2ZTdhO2NvbG9yOiM1NDZlN2F9LmNhcGliYXJhIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLW91dGxpbmU6YWN0aXZle2JhY2tncm91bmQ6cmdiYSg4NCwxMTAsMTIyLC4zKX0uY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZTpmb2N1cywuY2FwaWJhcmEgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoODQsMTEwLDEyMiwuMSl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tcmFpc2Vke2JhY2tncm91bmQ6IzQwNGU2OTtib3JkZXI6MnB4IHNvbGlkICNmMGYwZjA7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1vdXRsaW5le2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjJweCBzb2xpZCAjZjBmMGYwO2NvbG9yOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tb3V0bGluZS5zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0MDRlNjk7Y29sb3I6I2YwZjBmMH0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZSwuY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWRyb3B7Y29sb3I6aHNsYSgwLDAlLDk0LjElLC44KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1zaGFwZS5jYXAtYnRuLWNpcmNsZTpiZWZvcmUsLmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1kcm9wOmJlZm9yZXtiYWNrZ3JvdW5kOiMyZTdkMzJ9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUuaXMtZW1wdHk6YmVmb3JlLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tZHJvcC5pcy1lbXB0eTpiZWZvcmV7YmFja2dyb3VuZDojNjE2MTYxfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLXNoYXBlLmNhcC1idG4tY2lyY2xlLW91dGxpbmU6YmVmb3Jle2JvcmRlci1jb2xvcjojMmU3ZDMyfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24sLmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4tc2hhcGUuY2FwLWJ0bi1jaXJjbGUtb3V0bGluZSBzcGFue2NvbG9yOmhzbGEoMCwwJSw5NC4xJSwuOCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWhhcy1iYWRnZTphZnRlcntiYWNrZ3JvdW5kOnJnYmEoNTYsMTQyLDYwLC44KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuY2FwLWJ0bi1pY29uLmNhcC1idG4taWNvbi1yYWlzZWR7YmFja2dyb3VuZDpoc2xhKDAsMCUsOTQuMSUsLjEpO2JvcmRlci1jb2xvcjpoc2xhKDAsMCUsOTQuMSUsLjgpO2NvbG9yOmhzbGEoMCwwJSw5NC4xJSwuOCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2VkOmFjdGl2ZXtiYWNrZ3JvdW5kOiNmMGYwZjB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tcmFpc2VkOmZvY3VzLC5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLXJhaXNlZDpob3ZlcntiYWNrZ3JvdW5kOmhzbGEoMCwwJSw5NC4xJSwuMyl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1jb2xvcjpoc2xhKDAsMCUsOTQuMSUsLjgpO2NvbG9yOmhzbGEoMCwwJSw5NC4xJSwuOCl9LmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZTphY3RpdmV7YmFja2dyb3VuZDpoc2xhKDAsMCUsOTQuMSUsLjEpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5jYXAtYnRuLWljb24uY2FwLWJ0bi1pY29uLW91dGxpbmU6Zm9jdXMsLmNhcGliYXJhLmRhcmstdGhlbWUgLmNhcC1idG4taWNvbi5jYXAtYnRuLWljb24tb3V0bGluZTpob3ZlcntiYWNrZ3JvdW5kOmhzbGEoMCwwJSw5NC4xJSwwKX0uY2FwaWJhcmEgW2NhcC10b29sdGlwXXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30uY2FwaWJhcmEgW2NhcC10b29sdGlwXTpob3ZlcjpiZWZvcmV7cGFkZGluZzo4cHg7b3BhY2l0eToxO2JvcmRlci13aWR0aDoxcHg7aGVpZ2h0OmF1dG99LmNhcGliYXJhIFtjYXAtdG9vbHRpcF06YmVmb3Jle29wYWNpdHk6LjM7aGVpZ2h0OjA7cGFkZGluZzowIDhweDt0ZXh0LWFsaWduOmxlZnQ7b3ZlcmZsb3c6aGlkZGVuO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6Y2FsYygxMDAlICsgMThweCk7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZXgoLTUwJSk7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC43KTtib3JkZXI6MCBzb2xpZCAjMDAwO2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7Y29udGVudDphdHRyKGNhcC10b29sdGlwKTt0ZXh0LXRyYW5zZm9ybTpub25lO21pbi13aWR0aDoxMDBweDt6LWluZGV4OjV9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVye292ZXJmbG93OnZpc2libGU7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjA7aGVpZ2h0OjB9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyOmhvdmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci1jb250YWluZXIgLmxvbmctYmFye29wYWNpdHk6LjN9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3h7d2lkdGg6dmFyKC0tZGF5LXdpZHRoKTttYXgtd2lkdGg6dmFyKC0tZGF5LXdpZHRoKTttaW4td2lkdGg6dmFyKC0tZGF5LXdpZHRoKTtoZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO21heC1oZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO21pbi1oZWlnaHQ6dmFyKC0taXRlbS1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OmhpZGRlbjtjdXJzb3I6ZGVmYXVsdDt0cmFuc2l0aW9uOmJveC1zaGFkb3cgLjJzIGVhc2U7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWxsLWNoYW5nZTpkaXNwbGF5fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94W2RhdGEtaXMtdmlzaWJsZT1mYWxzZV17ZGlzcGxheTpub25lIWltcG9ydGFudH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveDpob3Zlcnt6LWluZGV4OjJ9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3g6aG92ZXIrLmZsb2F0LWJveC1leHQgLmxvbmctYmFye3otaW5kZXg6MjtvcGFjaXR5OjF9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3guaGFzLW1lc3NhZ2U6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7aGVpZ2h0OjA7cmlnaHQ6MDt0b3A6MDtib3JkZXItY29sb3I6cmVkIHJlZCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjZweDt6LWluZGV4OjF9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3guaGFzLWVycm9yczpiZWZvcmV7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjdweDtoZWlnaHQ6N3B4O2xlZnQ6MXB4O3RvcDoxcHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojZDMyZjJmO3otaW5kZXg6MX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90LWNvbnRhaW5lci1ib3R0b20sLmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItbWlkZGxlLC5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QtY29udGFpbmVyLXRvcHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7d2lkdGg6MTAwJTtvdmVyZmxvdzp2aXNpYmxlO2hlaWdodDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QtY29udGFpbmVyLXRvcHt0b3A6MXB4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5kb3QtY29udGFpbmVyLXRvcCAuZG90e2JvcmRlci1yYWRpdXM6MCAwIDUwJSA1MCV9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItbWlkZGxle3RvcDpjYWxjKDUwJSAtIDRweCl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItYm90dG9te2JvdHRvbTo1cHh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC1jb250YWluZXItYm90dG9tIC5kb3R7Ym9yZGVyLXJhZGl1czowIDAgNTAlIDUwJX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90e3dpZHRoOjhweDttaW4td2lkdGg6OHB4O2hlaWdodDo4cHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luOjFweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1sb2NhbC1jb2xvcixoc2xhKDAsMCUsMTAwJSwuOCkpO2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsaHNsYSgwLDAlLDM5LjIlLC41KSl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC5kaWFtb25ke2JvcmRlci1yYWRpdXM6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSBza2V3KDEwZGVnLDEwZGVnKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAuZG90Lm91dGxpbmVke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLmRvdC50cmlhbmdsZXt3aWR0aDowO2hlaWdodDowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHNrZXcoMTBkZWcsMTBkZWcpIHRyYW5zbGF0ZSgxcHgsMXB4KTtib3JkZXItbGVmdDo1cHggc29saWQgdmFyKC0tbG9jYWwtY29sb3IsaHNsYSgwLDAlLDM5LjIlLC44KSk7Ym9yZGVyLWJvdHRvbTo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wOjVweCBzb2xpZCB2YXIoLS1sb2NhbC1jb2xvcixoc2xhKDAsMCUsMzkuMiUsLjgpKTtib3JkZXItcmFkaXVzOjA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGF7d2lkdGg6MTAwJTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTouODc1ZW07dGV4dC1hbGlnbjpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS8yKTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS8yKTttYXJnaW4tYm90dG9tOjJweDtmb250LXdlaWdodDo3MDA7Ym94LXNoYWRvdzppbnNldCAwIDAgMTBweCBoc2xhKDAsMCUsMTAwJSwuMik7Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6dmFyKC0tbG9jYWwtY29sb3ItZm9udCwjZmZmKTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpvcGFjaXR5KDIwJSk7YmFja2Ryb3AtZmlsdGVyOm9wYWNpdHkoMjAlKTtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjQpKTtib3JkZXI6MnB4IHNvbGlkIHZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjIpKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtb3V0bGluZWR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLW91dGxpbmVkOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO29wYWNpdHk6LjM7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigycHgpO2JhY2tkcm9wLWZpbHRlcjpibHVyKDJweCk7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixpbmhlcml0KTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xcHg7dG9wOi0xcHg7d2lkdGg6Y2FsYygxMDAlICsgMnB4KTtoZWlnaHQ6Y2FsYygxMDAlICsgMnB4KTtkaXNwbGF5OmJsb2NrO3otaW5kZXg6LTF9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhcntoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIDEuNXB4KTt3aWR0aDpjYWxjKHZhcigtLWRheS13aWR0aCkgLSA2cHgpO2xpbmUtaGVpZ2h0OjA7Y29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czoxcHg7bWFyZ2luOjAgM3B4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXI6Zmlyc3Qtb2YtdHlwZXttYXJnaW4tdG9wOjNweH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFyLW91dGxpbmVke2hlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gMS41cHgpO3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKSAtIDZweCk7bGluZS1oZWlnaHQ6MDtjb2xvcjp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjFweDttYXJnaW46MCAzcHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhci1vdXRsaW5lZDpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6M3B4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXItb3V0bGluZWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7b3BhY2l0eTouMzstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDJweCk7YmFja2Ryb3AtZmlsdGVyOmJsdXIoMnB4KTtiYWNrZ3JvdW5kOnZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTFweDt0b3A6LTFweDt3aWR0aDpjYWxjKDEwMCUgKyAycHgpO2hlaWdodDpjYWxjKDEwMCUgKyAycHgpO2Rpc3BsYXk6YmxvY2t9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhci1kYXNoZWR7aGVpZ2h0OmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzQgLSAxLjVweCk7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpIC0gNnB4KTtsaW5lLWhlaWdodDowO2NvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MXB4O21hcmdpbjowIDNweDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLmRhdGEuc2hhcGUtYmFyLWRhc2hlZDpmaXJzdC1vZi10eXBle21hcmdpbi10b3A6M3B4fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXItZGFzaGVkOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsaW5oZXJpdCk7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMXB4O3RvcDotMXB4O3dpZHRoOmNhbGMoMTAwJSArIDJweCk7aGVpZ2h0OmNhbGMoMTAwJSArIDJweCk7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtc2l6ZToxMHB4IDEwcHg7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpLHZhcigtLWxvY2FsLWNvbG9yLGluaGVyaXQpIDNweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50IDUwJSl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5yb3dkb3QtLXJvd3tkaXNwbGF5OmZsZXg7bWF4LWhlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gMXB4KTtoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIDFweCk7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpIC0gMnB4KTtsaW5lLWhlaWdodDowO2NvbG9yOnRyYW5zcGFyZW50O21hcmdpbjoxcHg7Ym9yZGVyLWNvbG9yOnZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjIpKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLnJvd2RvdC0tcm93OmZpcnN0LW9mLXR5cGV7bWFyZ2luLXRvcDozcHh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5yb3dkb3QtLXJvdzplbXB0eXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4ucm93ZG90LS1yb3cgLnJvd2RvdC0tZG90e3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoKS80IC0gMnB4KTtoZWlnaHQ6Y2FsYyh2YXIoLS1pdGVtLWhlaWdodCkvNCAtIDJweCk7bWFyZ2luLXJpZ2h0OjFweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyOjNweCBzb2xpZCB2YXIoLS1sb2NhbC1jb2xvcixoc2xhKDAsMCUsMTAwJSwuOCkpO2JhY2tncm91bmQ6dmFyKC0tbG9jYWwtY29sb3IsaHNsYSgwLDAlLDM5LjIlLC44KSk7Ym94LXNoYWRvdzowIDAgMXB4IDFweCByZ2JhKDAsMCwwLC4yKX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCBzcGFuLnJvd2RvdC0tcm93IC5yb3dkb3QtLWRvdC5zaGFwZS1vdXRsaW5lZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwzOS4yJSwuMil9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5yb3dkb3QtLXJvdyAucm93ZG90LS1kb3Quc2hhcGUtcm91bmRlZHtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gLjVweCl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5yb3dkb3QtLXJvdyAucm93ZG90LS1kb3Quc2hhcGUtb3V0bGluZWQtcm91bmRlZHtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3dpZHRoOmNhbGModmFyKC0taXRlbS1oZWlnaHQpLzQgLSAuNXB4KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucGxvdC1mbG9hdGJveC1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6dmlzaWJsZX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCAucGxvdC1mbG9hdGJveC1jb250YWluZXIgLnBsb3QtZmxvYXRib3h7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IC5wbG90LWZsb2F0Ym94LWNvbnRhaW5lciAucGxvdC1mbG9hdGJveC5zdHJpcGV7YmFja2dyb3VuZDpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDUzZGVnLHZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjQpKSx2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSkgNXB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQgMTJweCl9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggLnBsb3QtZmxvYXRib3gtY29udGFpbmVyIC5wbG90LWZsb2F0Ym94LnN0cmlwZS1pbnZlcnNle2JhY2tncm91bmQ6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgxMjdkZWcsdmFyKC0tbG9jYWwtY29sb3IscmdiYSgwLDAsMCwuNCkpLHZhcigtLWxvY2FsLWNvbG9yLHJnYmEoMCwwLDAsLjQpKSA1cHgsdHJhbnNwYXJlbnQgMCx0cmFuc3BhcmVudCAxMnB4KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmljb24tZmxvYXRib3h7d2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgpIC0gMTZweCk7bWFyZ2luOjZweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7b3BhY2l0eTouOH0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmljb24tZmxvYXRib3ggc3ZnIHBhdGh7ZmlsbDp2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSk7ZmlsdGVyOmRyb3Atc2hhZG93KDAgMCAxcHggcmdiYSgwLDAsMCwuMikpfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuaWNvbi1mbG9hdGJveDpob3ZlcntvcGFjaXR5OjF9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0e3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OnZpc2libGU7Y3Vyc29yOmRlZmF1bHQ7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4ycyBlYXNlO3dpbGwtY2hhbmdlOmRpc3BsYXk7cG9pbnRlci1ldmVudHM6bm9uZX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLWRheS13aWR0aCk7dG9wOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7YWxpZ24taXRlbXM6c3RhcnR9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci1jb250YWluZXIgLmxvbmctYmFye3dpZHRoOmNhbGModmFyKC0tZGF5LXdpZHRoLCAwKSp2YXIoLS1sb25nLCAwKSAtIHZhcigtLWRheS13aWR0aCwgMCkqMC41KTttaW4td2lkdGg6Y2FsYyh2YXIoLS1kYXktd2lkdGgsIDApKnZhcigtLWxvbmcsIDApIC0gdmFyKC0tZGF5LXdpZHRoLCAwKSowLjUpO2hlaWdodDpjYWxjKHZhcigtLWl0ZW0taGVpZ2h0KS80IC0gMy41cHgpO2xpbmUtaGVpZ2h0OjA7Y29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZDp2YXIoLS1sb2NhbC1jb2xvcixyZ2JhKDAsMCwwLC40KSk7Ym9yZGVyLXJhZGl1czowIDNweCAzcHggMDttYXJnaW4tbGVmdDotM3B4O21hcmdpbi10b3A6MXB4O21hcmdpbi1ib3R0b206MXB4O29wYWNpdHk6dmFyKC0tbG9jYWwtb3BhY2l0eSwxKTtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjIpO2JvcmRlci1sZWZ0LXdpZHRoOjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94LWV4dCAubG9uZy1iYXItY29udGFpbmVyIC5sb25nLWJhci5zb2xpZHtvcGFjaXR5OjF9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci1jb250YWluZXIgLmxvbmctYmFyOmZpcnN0LW9mLXR5cGV7bWFyZ2luLXRvcDo0cHh9LmNhcGliYXJhIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3g6aG92ZXJ7Ym94LXNoYWRvdzowIDAgMnB4IDdweCByZ2JhKDExMywxODksMjU1LC40KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveDpob3ZlcisuZmxvYXQtYm94LWV4dCAubG9uZy1iYXJ7Ym94LXNoYWRvdzowIDAgMnB4IDRweCByZ2JhKDExMywxODksMjU1LC40KX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCsuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIucmVkLWxpZ2h0e2JhY2tncm91bmQ6I2Y4NDc0N30uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCsuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIueWVsbG93LWxpZ2h0e2JhY2tncm91bmQ6I2ZkZDgzNX0uY2FwaWJhcmEgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCsuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuZ3JlZW4tbGlnaHR7YmFja2dyb3VuZDojMzg5OTNkfS5jYXBpYmFyYSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94IHNwYW4uZGF0YS5zaGFwZS1iYXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjIpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3g6aG92ZXJ7Ym94LXNoYWRvdzowIDAgMnB4IDdweCBoc2xhKDAsMCUsNDcuOCUsLjYpfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3g6aG92ZXIrLmZsb2F0LWJveC1leHQgLmxvbmctYmFye2JveC1zaGFkb3c6MCAwIDJweCA0cHggaHNsYSgwLDAlLDQ3LjglLC42KX0uY2FwaWJhcmEuZGFyay10aGVtZSAuZmxvYXQtYm94LWNvbnRhaW5lciAuZmxvYXQtYm94Ky5mbG9hdC1ib3gtZXh0IC5sb25nLWJhci5yZWQtbGlnaHR7YmFja2dyb3VuZDojYWExYTFhfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3grLmZsb2F0LWJveC1leHQgLmxvbmctYmFyLnllbGxvdy1saWdodHtiYWNrZ3JvdW5kOiNmYmNkMDB9LmNhcGliYXJhLmRhcmstdGhlbWUgLmZsb2F0LWJveC1jb250YWluZXIgLmZsb2F0LWJveCsuZmxvYXQtYm94LWV4dCAubG9uZy1iYXIuZ3JlZW4tbGlnaHR7YmFja2dyb3VuZDojMzg4ZTNjfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5mbG9hdC1ib3gtY29udGFpbmVyIC5mbG9hdC1ib3ggc3Bhbi5kYXRhLnNoYXBlLWJhcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMyl9LmNhcGliYXJhIC5wcm9ncmVzcy1iYXJ7d2lkdGg6MTAwJTtoZWlnaHQ6NHB4O2JhY2tncm91bmQtY29sb3I6aHNsYSgwLDAlLDg2LjclLC4yKTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTowO3RyYW5zaXRpb246aGVpZ2h0IDFzIGVhc2V9LmNhcGliYXJhIC5wcm9ncmVzcy1iYXIuaGlkZS1wcm9ncmVzc3toZWlnaHQ6MH0uY2FwaWJhcmEgLnByb2dyZXNzLWJhcjpiZWZvcmV7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpsb2FkaW5nLWZhc3QxO2FuaW1hdGlvbi1uYW1lOmxvYWRpbmctZmFzdDE7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7LXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGV9LmNhcGliYXJhIC5wcm9ncmVzcy1iYXI6YWZ0ZXIsLmNhcGliYXJhIC5wcm9ncmVzcy1iYXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXCI7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpO3dpZHRoOjYyLjUlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6IzI5MjkyOTstd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjoyczthbmltYXRpb24tZHVyYXRpb246MnN9LmNhcGliYXJhIC5wcm9ncmVzcy1iYXI6YWZ0ZXJ7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpsb2FkaW5nLWZhc3QyO2FuaW1hdGlvbi1uYW1lOmxvYWRpbmctZmFzdDI7LXdlYmtpdC1hbmltYXRpb24tZGVsYXk6MS4zczthbmltYXRpb24tZGVsYXk6MS4zczstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDstd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGU7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZX1zcGFuLm1kaXttaW4td2lkdGg6MTRweDttaW4taGVpZ2h0OjE0cHg7ZGlzcGxheTppbmxpbmUtYmxvY2t9c3Bhbi5tZGkubWRpLXN1YmRpcmVjdG9yeS1hcnJvdy1yaWdodHtjb2xvcjpyZ2JhKDAsMCwwLC4yKX0uY2FwaWJhcmEgLmxpZ2h0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MThweDtoZWlnaHQ6MThweDtmbGV4OjAgMCAxOHB4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbjoxMnB4IDhweDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpO2JhY2tncm91bmQ6dmFyKC0tbGlnaHQtY29sb3IsdW5zZXQpO2JvcmRlci1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuOCl9LmNhcGliYXJhIC5saWdodC5yZWQtbGlnaHR7YmFja2dyb3VuZDojZjg0NzQ3fS5jYXBpYmFyYSAubGlnaHQueWVsbG93LWxpZ2h0e2JhY2tncm91bmQ6I2ZkZDgzNX0uY2FwaWJhcmEgLmxpZ2h0LmdyZWVuLWxpZ2h0e2JhY2tncm91bmQ6IzM4OTkzZH0uY2FwaWJhcmEgLmxpZ2h0LmRpc2FibGVkLWxpZ2h0e2JhY2tncm91bmQ6IzczNzM3M30uY2FwaWJhcmEgLmxpZ2h0LmJsdWUtbGlnaHR7YmFja2dyb3VuZDojMDI3N2JkfS5jYXBpYmFyYS5kYXJrLXRoZW1lIC5saWdodHtib3JkZXItY29sb3I6IzQwNGU2OX0uY2FwaWJhcmEuZGFyay10aGVtZSAubGlnaHQucmVkLWxpZ2h0e2JhY2tncm91bmQ6I2FhMWExYX0uY2FwaWJhcmEuZGFyay10aGVtZSAubGlnaHQueWVsbG93LWxpZ2h0e2JhY2tncm91bmQ6I2ZiY2QwMH0uY2FwaWJhcmEuZGFyay10aGVtZSAubGlnaHQuZ3JlZW4tbGlnaHR7YmFja2dyb3VuZDojMzg4ZTNjfS5jYXBpYmFyYSBzZWxlY3QudGFicy1zZWxlY3R7YmFja2dyb3VuZDpncmV5O2NvbG9yOiNmZmY7Zm9udC1zaXplOjE2cHg7b3V0bGluZTpub25lO3dpZHRoOjEwMHB4O3BhZGRpbmc6M3B4IDE4cHg7Zm9udC13ZWlnaHQ6NzAwO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7bWFyZ2luOjhweDtib3JkZXItcmFkaXVzOjMwcHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyBlYXNlOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZX0uY2FwaWJhcmEgc2VsZWN0LnRhYnMtc2VsZWN0IG9wdGlvbntjb2xvcjpncmV5O2JhY2tncm91bmQ6I2ZmZjtwYWRkaW5nOjE1cHh9LmNhcGliYXJhIHNlbGVjdC50YWJzLXNlbGVjdDphZnRlcntjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6NHB4O2JvcmRlci13aWR0aDo0cHg7Ym9yZGVyLWNvbG9yOiNmZmY7ei1pbmRleDoyfS5jYXBpYmFyYSBzZWxlY3QudGFicy1zZWxlY3QuZGlzYWJsZWR7Y29sb3I6Z3JleX0uY2FwaWJhcmEgc2VsZWN0LnRhYnMtc2VsZWN0OmhvdmVye2JvcmRlci1jb2xvcjpncmV5fVwiLCBcIlwiXSk7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/src/index.js!./node_modules/sass-loader/dist/cjs.js!./src/scss/style.scss\n");
|
|
107
107
|
|
|
108
108
|
/***/ }),
|
|
109
109
|
|
|
@@ -184,7 +184,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _scs
|
|
|
184
184
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
185
185
|
|
|
186
186
|
"use strict";
|
|
187
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Capibara\", function() { return Capibara; });\n/* harmony import */ var _util_domUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/domUtils */ \"./src/util/domUtils.js\");\n/* harmony import */ var _util_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/utils */ \"./src/util/utils.js\");\n/* harmony import */ var _util_tableElements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/tableElements */ \"./src/util/tableElements.js\");\n/* harmony import */ var _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/styleUtils */ \"./src/util/styleUtils.js\");\n\n //import dateUtils from '../util/dateUtils';\n\n\n\n/**\n * Capibara, planilla para despliegue de datos por fecha como GANTT\n * orientado inicialmente a datos diarios de items\n *\n * @author Patricio. M. Rojas. <patricio@irricrops.com>\n */\n\nclass Capibara {\n /**\n * @constructor\n * Instancia variables de planilla Capibara, con configuracion\n * Crea el elemento contenedor {containerElement} segun selector\n *\n * @param {Object} attributes - atributos que se usaran al iniciar la planilla\n * @param {Object} attributes.config - Configuracion de planilla\n */\n constructor({\n config\n }) {\n if (config == null) console.error(\"config no econtrado\");\n this.containerElement = document.querySelector(config.selector);\n if (this.containerElement == null) console.error(\"Elemento dom segun config.selector, no encontrado\");\n this.initialized = false;\n this.$capibara = null;\n this.$elements = {};\n this.tabSelected = null;\n this.$inputsNavRight = [];\n this.$inputsWithReload = [];\n this.$saveCancelBtns = [];\n this.selected = [];\n this.config = config;\n this.lastDataDay = null;\n this.isShowNavExtended = false;\n this.isShowNavInitial = true;\n this.isShowNavButtons = true;\n this.isMobile = false;\n this.lastMousePosition = null;\n this.isVisibleContextMenu = false;\n this.isDisabledInputsNavRight = false;\n }\n /**\n * Inicializa Planilla:\n * - vacia variables necesarias\n * - crea planilla llamando a drawTable\n * - Agrega eventos a planilla\n * - mueve scroll al medio de la tabla\n */\n\n\n init() {\n this.tabSelected = null;\n this.$capibara = null;\n this.$elements = {};\n this.$inputsNavRight = [];\n this.$inputsWithReload = [];\n this.$saveCancelBtns = [];\n this.selected = [];\n this.lastDataDay = null;\n this.isMobile = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].checkIsMobile();\n this.isVisibleContextMenu = false;\n this.setAllCSSVariables();\n this.drawTable();\n this.addEvents();\n this.scrollToMiddle();\n this.toggleSidebarMobile();\n this.initialized = true;\n }\n /**\n * Cambia configuracion de planilla\n *\n * @param {Object} config - Configuracion nueva para planilla\n */\n\n\n setConfig(config) {\n this.config = config;\n }\n /**\n * Crea la planilla\n * agregando todos los elementos en orden dentro\n *\n * @return { DomElement } $capibara - elemento del Dom que contiene toda la planilla\n */\n\n\n drawTable() {\n let config = this.config;\n let initialTab = config.timeline.tabs[0];\n let firstChildren = {};\n\n if (config.data && config.data.length > 0 && config.data[0].children.length > 0) {\n firstChildren = config.data[0].children[0];\n }\n\n let $capibara = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createAgTable(config);\n let $corner = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCorner(config, initialTab);\n let $cornerRight = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCornerRight(config);\n let $headerTop = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderTop(config);\n let $header = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeader(config);\n let $todayLine = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createTodayLine(config);\n let $headerExtended = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderExtended(config);\n let $navLeft = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createNavLeft(config);\n let $cornerFooter = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCornerFooter(config);\n let $footer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createFooter(config);\n let $floatBoxContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createFloatBox(config, initialTab);\n let $selectContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createSelectBoard(config);\n let $plotVerticalContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createPlotVerticalContainer(config);\n let $plotHorizontalContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createPlotHorizontalContainer(config);\n let $detailDay = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createDetailDay(config, firstChildren);\n let {\n elem: $contextMenu,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n config\n });\n this.isVisibleContextMenu = isVisible;\n let $navRight, inputs, inputsWithReload, saveCancelBtns;\n ({\n element: $navRight,\n inputs,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createNavRight(config));\n let $background = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createBackground(config);\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"container-tl\"\n });\n let $dayMouseOver = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"day-mouse-over\"\n });\n let {\n height,\n width\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n let $table = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"table\",\n style: {\n 'width': width + \"px\",\n 'height': height + \"px\"\n }\n });\n $table.appendChild($background);\n $table.appendChild($dayMouseOver);\n $table.appendChild($detailDay);\n $table.appendChild($selectContainer);\n $table.appendChild($floatBoxContainer);\n\n if ($headerExtended) {\n $header.appendChild($headerExtended);\n }\n\n $container.appendChild($header);\n $container.appendChild($plotVerticalContainer);\n $container.appendChild($plotHorizontalContainer);\n $container.appendChild($todayLine);\n $container.appendChild($navLeft);\n $container.appendChild($table);\n if ($cornerFooter) $container.appendChild($cornerFooter);\n if ($footer) $container.appendChild($footer);\n $capibara.appendChild($headerTop);\n $capibara.appendChild($corner);\n $capibara.appendChild($cornerRight);\n $capibara.appendChild($container);\n $capibara.appendChild($navRight);\n if ($contextMenu) $capibara.appendChild($contextMenu);\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n this.$capibara = $capibara;\n this.$elements = {\n $headerTop,\n $detailDay,\n $contextMenu,\n $floatBoxContainer,\n $selectContainer,\n $table,\n $background,\n $plotVerticalContainer,\n $plotHorizontalContainer,\n $dayMouseOver,\n $container,\n $navRight,\n $navLeft,\n $header,\n $todayLine,\n $corner,\n $cornerRight\n };\n this.containerElement.innerHTML = \"\";\n this.containerElement.appendChild($capibara);\n this.selectTab(initialTab);\n return $capibara;\n }\n /**\n * Cambia el modo oscuro, segun el estado actual\n */\n\n\n toggleDark() {\n this.setDark(!Boolean(this.config.timeline.dark));\n }\n /**\n * Cambia el modo oscuro, segun parametro\n *\n * @param {Boolean} [isDark = false] - indica si se activa el modo oscuro o no\n */\n\n\n setDark(isDark = false) {\n let darkClassName = \"dark-theme\";\n this.config.timeline.dark = isDark;\n\n if (isDark) {\n this.$capibara.classList.add(darkClassName);\n } else {\n this.$capibara.classList.remove(darkClassName);\n }\n }\n /**\n * Cambia el tema de color secundario, segun parametro\n * -Quita todos los posibles colores de la planilla, obteniendolos de Tabs\n * -Agrega el color enviado por parametro como clase del domElement $capibara\n *\n * @param {String} color - color, como nombre de clase, para agregar \n */\n\n\n changeColorTheme(color) {\n this.config.timeline.tabs.forEach(tab => {\n this.$capibara.classList.remove(tab.color);\n });\n this.$capibara.classList.add(color);\n }\n /**\n * Selecciona tab en planilla\n * si redraw == true , redibuja navRight y floatBox\n * ya que son inputs y esteticas personalizadas por Tab\n *\n * @param {Object} tab - tab, obtenida desde configuracion\n * @param {Boolean} [redraw=true] - opcion de redibujado\n */\n\n\n selectTab(tab, redraw = true) {\n if (tab) {\n this.tabSelected = tab;\n this.cleanMultiInput();\n\n if (redraw) {\n this.redraw({\n headerTop: true,\n cornerLeft: true,\n navLeft: true,\n navRight: true,\n floatBox: true\n });\n }\n\n this.changeColorTheme(tab.color);\n this.$capibara.dispatchEvent(new CustomEvent(\"selectTab\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tabSelected: this.tabSelected\n }\n }));\n } else {\n console.error(\"tab no encontrada\");\n }\n }\n\n selectLegend(evt) {\n let legend = evt.detail.legend;\n evt.detail.$legend.classList.toggle(\"active\");\n\n if (legend) {\n legend.active = !legend.active;\n }\n\n this.redraw({\n floatBox: true,\n detailDay: true\n });\n }\n /**\n * muestra alternadamente los sidebar initial y extended\n */\n\n\n toggleSidebar() {\n this.setShowNavInitial(!this.isShowNavInitial);\n\n if (!this.isMobile) {\n this.setShowNavExtended(!this.isShowNavExtended);\n } else {\n let cornerInputTitles = this.$elements.$corner.querySelector(\".input-titles\");\n\n if (cornerInputTitles) {\n cornerInputTitles.style.display = this.isShowNavInitial ? \"none\" : \"flex\";\n }\n }\n\n this.refreshScrollUtilsVars();\n }\n /**\n * Oculta nav initial , extended y buttons\n */\n\n\n hideSidebars() {\n this.setShowNavInitial(false);\n this.setShowNavExtended(false);\n this.setShowNavButtons(false);\n }\n /**\n * Muestra/Oculta Sidebar inicial\n */\n\n\n setShowNavInitial(isShowNavInitial) {\n this.isShowNavInitial = isShowNavInitial;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(this.config, this.isShowNavInitial, this.tabSelected);\n }\n /**\n * Muestra/Oculta Sidebar extendido\n */\n\n\n setShowNavExtended(isShowNavExtended) {\n this.isShowNavExtended = isShowNavExtended;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(this.config, this.isShowNavExtended, this.tabSelected);\n }\n /**\n * Muestra/Oculta Sidebar buttons\n */\n\n\n setShowNavButtons(isShowNavButtons) {\n this.isShowNavButtons = isShowNavButtons;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftButtonsStyle(this.config, this.isShowNavButtons, this.tabSelected);\n }\n /**\n * Muestra/oculta Sidebar Derecho\n */\n\n\n toggleSidebarRight() {\n let isHidden = !this.$capibara.classList.contains(\"extended-right\");\n this.setVisibleSidebarRight(!isHidden);\n this.refreshScrollUtilsVars();\n }\n /**\n * Modifica la opcion de mostrar y ocultar sidebar derecho\n *\n * @param {Boolean} [show = true] - indica si debe mostrarse u ocultarse\n */\n\n\n setVisibleSidebarRight(show = true) {\n let fn = show ? \"add\" : \"remove\";\n this.$capibara.classList[fn](\"extended-right\");\n }\n /**\n * Muestra/oculta Header extendido (inputs)\n */\n\n\n toggleHeader() {\n this.$capibara.classList.toggle(\"header-extended\");\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n /**\n * Muestra/oculta barra de carga de planilla \n * Si se llama sin parametros, por defecto muestra el loading derecho\n * que corresponde al sidebar-right\n *\n * @param {String} [position = \"right\"] - escoge loading, puede ser \"left\" | \"right\"\n * @param {Boolean} [show = true] - indica si mostrar u ocultar loading\n */\n\n\n loading(position = \"right\", show = true) {\n let fn = show ? \"remove\" : \"add\";\n let element = this.$capibara.querySelector(\".progress-bar-\" + position);\n element.classList[fn](\"hide-progress\");\n }\n\n setDisableInputsNavRight(isDisabled = true) {\n this.isDisabledInputsNavRight = isDisabled;\n this.$inputsNavRight.forEach($inputContainer => {\n let $inputs = $inputContainer.querySelectorAll(\"input\");\n $inputs.forEach($i => {\n $i.setAttribute(\"disabled\", isDisabled);\n });\n });\n let btns = this.$saveCancelBtns.querySelectorAll(\"button\");\n btns.forEach(btn => {\n btn.setAttribute(\"disabled\", isDisabled);\n });\n }\n /**\n * Busca un boton segun selector, y le agrega la clase \"loading\"\n * y deshabilita el boton\n *\n * @param { String } [ selector = '[cap-btn-calendar]' ] - selector de boton\n * @param { Boolean } [isLoading = true] - define si esta cargando o no\n */\n\n\n loadingBtn(selector = \"[cap-btn-calendar]\", isLoading = true) {\n let element = this.$capibara.querySelector(selector);\n\n if (element) {\n let fn = isLoading ? \"add\" : \"remove\";\n element.classList[fn](\"loading\");\n\n if (isLoading) {\n element.setAttribute(\"disabled\", \"\");\n } else {\n element.removeAttribute(\"disabled\");\n }\n }\n }\n /**\n * Crea Evento de guardado de los inputs del Sidebar Right\n * obtiene todos los valores de los inputs registrados en this.$inputs y \n * los retorna creando el evento \"save\"\n *\n */\n\n\n saveInputsNavRight() {\n let inputValues = [];\n let isValid = this.validateInputsNavRight();\n\n if (!isValid) {\n return;\n }\n\n this.setDisableInputsNavRight(true);\n this.$inputsNavRight.forEach($input => {\n let key = $input.getAttribute(\"input-key\");\n let inputConfig = this.tabSelected.inputs.find(t => t.key == key);\n\n if (inputConfig) {\n inputValues.push({\n key: key,\n inputConfig: inputConfig,\n el: $input,\n value: this.getInputValue($input, inputConfig)\n });\n }\n });\n this.$capibara.dispatchEvent(new CustomEvent(\"save\", {\n bubbles: true,\n cancelable: false,\n detail: {\n inputValues: inputValues,\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n }\n\n validateInputsNavRight() {\n let isFormValid = true;\n this.$inputsNavRight.forEach($input => {\n let isInputValid = true;\n let key = $input.getAttribute(\"input-key\");\n let inputConfig = this.tabSelected.inputs.find(t => t.key == key);\n\n if (inputConfig) {\n let value = this.getInputValue($input, inputConfig);\n\n if (inputConfig.required) {\n if (value === \"\" || value === null || value.length == 0) {\n isFormValid = false;\n isInputValid = false;\n }\n }\n\n if (inputConfig.validation && !inputConfig.validation({\n value,\n inputConfig,\n $input\n })) {\n isFormValid = false;\n isInputValid = false;\n }\n\n if (!isInputValid) {\n $input.classList.add(\"is-invalid\");\n } else {\n $input.classList.remove(\"is-invalid\");\n }\n }\n });\n return isFormValid;\n }\n /**\n * Cancela formulario de sidebar right\n */\n\n\n cancelMultiInput() {\n this.$capibara.dispatchEvent(new CustomEvent(\"cancel\", {\n bubbles: true,\n cancelable: false,\n detail: {\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n this.cleanMultiInput();\n }\n /**\n * Limpia el formulario en el sidebar right\n * oculta el sidebar right\n */\n\n\n cleanMultiInput() {\n this.$capibara.classList.remove(\"extended-right\");\n this.selected = [];\n this.redrawSelection();\n }\n /**\n * Obtiene el valor de un input\n *\n * @param {Object} elem - elemento del dom que representa al input, no necesariamente input\n * @param {Object} config - configuracion de input\n * @return {*} valor del Input\n */\n\n\n getInputValue(elem, inputConfig) {\n let value = null;\n let inputElement = null;\n let inputsElement = null;\n\n switch (inputConfig.type) {\n case 'custom':\n value = inputConfig.getValue ? inputConfig.getValue({\n elem,\n props: inputConfig\n }) : null;\n break;\n\n case 'time':\n let hhElement = elem.querySelector(\".hour\");\n let mmElement = elem.querySelector(\".minutes\");\n let hhValue = hhElement.value;\n let mmValue = mmElement.value;\n\n if (hhValue) {\n hhValue = parseFloat(hhValue);\n }\n\n if (mmValue) {\n mmValue = parseFloat(mmValue);\n }\n\n value = {\n hh: hhValue,\n mm: mmValue\n };\n break;\n\n case 'message':\n case 'textarea':\n inputElement = elem.querySelector(\"textarea\");\n value = inputElement.value || '';\n break;\n\n case \"inputList\":\n let valuesInputs = [];\n inputsElement = elem.querySelectorAll(\"input[type='number']\");\n inputsElement.forEach(inputElement => {\n let valueInput = inputElement.value;\n\n if (valueInput) {\n valueInput = parseFloat(valueInput);\n }\n\n let label = inputElement.getAttribute(\"input-label\");\n let id = inputElement.getAttribute(\"input-id\");\n valuesInputs.push({\n label: label,\n value: valueInput,\n id: id\n });\n });\n value = valuesInputs;\n break;\n\n case 'number':\n case 'float':\n inputElement = elem.querySelector(\"input[type='number']\");\n value = inputElement.value;\n\n if (value) {\n value = parseFloat(value);\n }\n\n break;\n\n case 'checkbox':\n inputElement = elem.querySelector(\"input[type='checkbox']\");\n value = inputElement.checked;\n break;\n\n case 'select':\n inputElement = elem.querySelector(\"select.input-select\");\n let inputValue = inputElement.value;\n value = inputConfig.options.find(o => o.id == inputValue);\n break;\n\n case 'file':\n inputElement = elem.querySelector(\"input[type='file']\");\n value = inputElement.files;\n break;\n\n case 'input-box':\n inputsElement = elem.querySelectorAll(\".mini-input-section input\");\n value = [];\n inputsElement.forEach(i => {\n let v = i.value;\n\n if (v) {\n v = parseFloat(v);\n }\n\n value.push({\n id: i.getAttribute(\"input-id\"),\n key: i.getAttribute(\"input-key\"),\n value: v\n });\n });\n break;\n\n case 'data-list':\n inputsElement = elem.querySelectorAll(\".mini-input-section\");\n value = [];\n inputsElement.forEach(i => {\n let v = i.getAttribute(\"data-value\");\n\n if (v) {\n v = parseFloat(v);\n }\n\n value.push({\n id: i.getAttribute(\"data-id\"),\n key: i.getAttribute(\"data-key\"),\n value: v || null\n });\n });\n break;\n\n case 'title':\n //no es realmente un input, es solo un texto\n //no es necesario obtener valores de aqui\n break;\n\n case 'text':\n default:\n inputElement = elem.querySelector(\"input\");\n\n if (inputElement) {\n value = inputElement.value;\n }\n\n }\n\n return value;\n }\n /**\n * Funcion llamada al pasar sobre un item del sidebar izquierdo, \n * para mostrar un detalle del item\n * \n * El detalle del item se ancla de manera superior o inferior dependiendo de \n * la posicion el mouse en pantalla, para no salir del campo visual \n *\n *\n * @param {Object} evt - Evento retornado por un mouseover\n */\n\n\n overNavItem(evt) {\n let pos = evt.detail.pos;\n let item = evt.detail.item; //let dataDay = evt.detail.data;\n\n let $detail = this.$elements.$navLeft.querySelector(\".detail-nav-item\");\n\n if ($detail.classList.contains(\"hide\")) {\n $detail.classList.remove(\"hide\");\n }\n\n ;\n $detail.innerHTML = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDetailNavItemContent(item);\n\n if (pos.yPercent > 50) {\n //mayor a 50%\n if (!$detail.classList.contains(\"to-bottom\")) {\n $detail.classList.add(\"to-bottom\");\n }\n } else {\n if ($detail.classList.contains(\"to-bottom\")) {\n $detail.classList.remove(\"to-bottom\");\n }\n }\n\n $detail.style.top = pos.top + \"px\";\n }\n /**\n * Oculta detalle de item en sidebar izquierdo \n *\n * @param {Object} evt - Evento retornado por un mouseover\n */\n\n\n leaveNavItem() {\n this.$elements.$navLeft.querySelector(\".detail-nav-item\").classList.add(\"hide\");\n }\n /**\n * Captura evento mousemove de floatBoxContainer\n * para refrescar la posicion y detener posteriores eventos\n *\n * @param {Object} evt - Evento de mousemove\n */\n\n\n mouseMoveOnFlexBoxContainer(evt) {\n let position = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n this.refreshDetailDayPosition(position);\n evt.preventDefault();\n }\n /**\n * Captura evento mouseleave de floatBoxContainer\n * para ocultar detailDay\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n mouseLeaveOnFloatBoxContainer(evt) {\n this.hideDetailDay();\n evt.preventDefault();\n }\n /**\n * Captura el evento mousemove en $table, para indicar la posicion de $dayMouseOver\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n mouseMoveOnTable(evt) {\n if (this.isVisibleContextMenu) return;\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n\n if (this.lastMousePosition == null || this.lastMousePosition.left != pos.left || this.lastMousePosition.top != pos.top) {\n this.$elements.$dayMouseOver.style.transform = \"translate(\" + pos.left + \"px ,\" + pos.top + \"px)\";\n evt.preventDefault();\n this.lastMousePosition = pos;\n }\n }\n\n rightClickOnCapibara(evt) {\n if (this.config.timeline.contextMenu) {\n this.hideDetailDay();\n evt.preventDefault();\n }\n }\n\n rightClickOnTable(evt) {\n if (this.config.timeline.contextMenu) {\n this.hideDetailDay();\n this.showContextMenuOnTable(evt);\n evt.preventDefault();\n }\n }\n\n showContextMenuOnTable(evt) {\n let date = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getDayByEvent(this.config, evt, this.$elements.$table);\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemByEvent(this.config, evt, this.$elements.$table);\n\n if (this.isVisibleContextMenu) {\n this.hideContextMenu();\n return;\n } //let position = utils.eventToPosition(this.config, evt, this.$elements.$table);\n\n\n let {\n elem: $elem,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n tabSelected: this.tabSelected,\n $capibaraElem: this.$capibara,\n config: this.config,\n evt,\n //position,\n date,\n item,\n selected: this.selected,\n name: \"onTable\"\n });\n\n if ($elem) {\n this.isVisibleContextMenu = isVisible;\n this.$elements.$contextMenu.replaceWith($elem);\n this.$elements.$contextMenu = $elem;\n }\n\n if (isVisible) {\n evt.preventDefault();\n }\n }\n /**\n * Captura el evento click en $table, para seleccionar dias\n * los dias seleccionados se registran en this.selected[]\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n clickOnTable(evt) {\n let date = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getDayByEvent(this.config, evt, this.$elements.$table);\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemByEvent(this.config, evt, this.$elements.$table);\n if (item == null) return; // cuano se selecciona un espacio no seleccionable\n //si es mobile, no selecciona, solo muestra detalles\n\n let dataByDate = _.find(item.data, {\n date\n });\n\n if (this.isMobile && dataByDate) {\n if ((!dataByDate.message || dataByDate.message.value == null) && Object.entries(dataByDate.values).length === 0) return;\n this.focusOnFloatBox({\n pos,\n evt\n });\n return;\n }\n\n if (!this.isSelectable({\n item,\n date,\n dataByDate\n })) {\n this.$capibara.dispatchEvent(new CustomEvent(\"selectNoSelectable\", {\n bubbles: true,\n cancelable: false,\n detail: {\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n return; // cuando se selecciona un espacio no seleccionable\n }\n\n let eventName = \"deselectDay\";\n\n if (this.toggleSelect(date, item, pos)) {\n eventName = \"selectDay\";\n }\n\n this.$capibara.dispatchEvent(new CustomEvent(eventName, {\n bubbles: true,\n cancelable: false,\n detail: {\n config: this.config,\n lastSelection: {\n date,\n item,\n pos\n },\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n }\n\n toggleSelect(date, item, pos) {\n if (this.isSelected(date, item)) {\n this.deselect(date, item);\n return false;\n } else {\n this.select(date, item, pos);\n return true;\n }\n }\n\n isSelected(date, item) {\n let index = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].indexSelectedDay(this.selected, {\n date,\n item\n });\n return index > -1;\n }\n\n isSelectable({\n item,\n date,\n dataByDate\n }) {\n if (!this.config.timeline.selectable) {\n return false;\n }\n\n if (this.config.timeline.noFutureSelectable) {\n let d = new Date(date);\n let today = new Date();\n\n if (d > today) {\n return false;\n }\n }\n\n let itemIsSelectable = true;\n\n if (this.tabSelected && this.tabSelected.selectableIfHas) {\n if (!item.values[this.tabSelected.selectableIfHas]) {\n itemIsSelectable = false;\n }\n }\n\n return itemIsSelectable;\n }\n\n redrawSelection() {\n this.checkClassSidebarExtendedRight();\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawSelectBoard(this.$elements.$selectContainer, this.selected);\n }\n\n deselect(date, item, redraw = true) {\n if (this.isSelected(date, item)) {\n let index = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].indexSelectedDay(this.selected, {\n date,\n item\n });\n this.selected.splice(index, 1);\n }\n\n this.setIndexToSelected();\n\n if (redraw) {\n this.redrawSelection();\n }\n }\n\n select(date, item, pos, redraw = true) {\n if (!this.isSelected(date, item)) {\n this.selected.push({\n index: 0,\n date,\n item,\n pos\n });\n let dataDay = null;\n\n if (item.data) {\n dataDay = item.data.find(d => {\n return d.date == date;\n });\n } // si es el primer item seleccionado, se autorrellena el formulario de navRight\n\n\n if (this.selected.length == 1) {\n this.$elements.$cornerRight = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawCornerRight(this.$elements.$cornerRight, this.config, this.tabSelected);\n let {\n inputs,\n element,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavRight(this.config, this.$elements.$navRight, this.selected, this.tabSelected, dataDay, this.selected[0]);\n this.$elements.$navRight = element;\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n }\n }\n\n let focused = false;\n this.$inputsNavRight.forEach(inputNavRight => {\n if (!focused) {\n let validInputs = inputNavRight.querySelectorAll(\"input\");\n\n if (validInputs && validInputs.length > 0) {\n let firstValidInput = _.first(validInputs);\n\n window.setTimeout(function () {\n firstValidInput.focus();\n }, 0);\n focused = true;\n }\n }\n });\n this.setIndexToSelected();\n\n if (redraw) {\n this.redrawSelection();\n }\n }\n\n setIndexToSelected() {\n this.selected.forEach((s, index) => {\n s.index = index + 1;\n });\n }\n\n isSelectedAllDate(date) {\n let isAllSelected = true;\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n if (!this.isSelected(date, item)) {\n isAllSelected = false;\n }\n });\n });\n return isAllSelected;\n }\n\n selectByDate(date) {\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n this.selectByItemDate(date, item, false);\n });\n });\n }\n\n deselectByDate(date) {\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n this.deselectByItemDate(date, item, false);\n });\n });\n }\n\n selectByItemDate(date, item, redraw = true) {\n if (!this.isSelected(date, item)) {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItemDate(this.config, item, date);\n this.select(date, item, pos, redraw);\n }\n }\n\n deselectByItemDate(date, item, redraw = true) {\n if (this.isSelected(date, item)) {\n this.deselect(date, item, redraw);\n }\n }\n\n checkClassSidebarExtendedRight() {\n if (this.selected.length > 0) {\n this.$capibara.classList.add(\"extended-right\");\n } else {\n this.$capibara.classList.remove(\"extended-right\");\n }\n }\n\n /**\n * oculta detailDay en el dom, usando la clase dd-hide\n */\n hideDetailDay() {\n this.$elements.$detailDay.classList.add(\"dd-hide\");\n }\n\n hideContextMenu() {\n if (this.$elements.$contextMenu) {\n this.$elements.$contextMenu.classList.add(\"cm-hide\");\n }\n\n this.isVisibleContextMenu = false;\n }\n\n refreshScrollUtilsVars() {\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollLeft = this.$elements.$container.scrollLeft;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollTop = this.$elements.$container.scrollTop;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollWidth = this.$elements.$container.scrollWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollHeight = this.$elements.$container.scrollHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.boundingClientTable = this.$elements.$table.getBoundingClientRect();\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.boundingClientContainer = this.$elements.$container.getBoundingClientRect();\n }\n\n refreshVirtualScrollVars() {\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerWidth = this.$elements.$container.clientWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerHeight = this.$elements.$container.clientHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.navWidth = this.$elements.$navLeft.clientWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.headerHeight = this.$elements.$header.clientHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\"));\n }\n\n refreshVirtualScroll() {\n let $floatBoxList = this.$elements.$floatBoxContainer.querySelectorAll(\".float-box\");\n $floatBoxList.forEach(f => {\n if (this.isVisibleFloatBoxElement(f)) {\n f.setAttribute(\"data-is-visible\", true);\n } else {\n f.setAttribute(\"data-is-visible\", false);\n }\n });\n }\n\n isVisibleFloatBoxElement(f) {\n let containerWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerWidth;\n let containerHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerHeight;\n let navWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.navWidth;\n let headerHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.headerHeight;\n let dayWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.dayWidth;\n let itemHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.itemHeight;\n let scrollLeft = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollLeft;\n let scrollTop = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollTop;\n let margin = dayWidth;\n let left = parseFloat(f.style.left);\n let top = parseFloat(f.style.top);\n let visibleWidth = containerWidth - navWidth;\n let visibleHeight = containerHeight - headerHeight;\n let isVisibleLeft = left > scrollLeft - dayWidth - margin;\n let isVisibleRight = left < scrollLeft + visibleWidth + dayWidth + margin;\n let isVisibleTop = top > scrollTop - itemHeight - margin;\n let isVisibleBottom = top < scrollTop + visibleHeight + itemHeight + margin;\n return isVisibleLeft && isVisibleRight && isVisibleTop && isVisibleBottom;\n }\n\n onScrollContainer() {\n if (!this.refreshVirtualScrollDebounced) {\n this.refreshVirtualScrollDebounced = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].throttle(this.refreshVirtualScroll.bind(this), 100, {\n leading: true,\n trailing: true\n });\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollDebounced();\n this.hideContextMenu();\n }\n /**\n * Muestra Detail dialog y Refresca su posicion \n * usando el evento del mouse\n *\n * @param {Object} evt - evento de mousemove, para posiciones en pantalla\n */\n\n\n refreshDetailDayPosition(position) {\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\"));\n this.$elements.$detailDay.style.top = position.top + \"px\";\n this.$elements.$detailDay.style.left = position.left + dayWidth + \"px\";\n let yPositionClass = \"has-top-arrow\";\n let xPositionClass = \"\"; //condicion para primeras 3 filas\n\n if (position.topClient <= itemHeight * 3) {\n yPositionClass = \"has-ceil-arrow\";\n } else if (position.yPercent > 20 && position.yPercent <= 70) {\n //entre 20 y 50 %\n yPositionClass = \"has-middle-arrow\";\n } else if (position.yPercent > 70) {\n yPositionClass = \"has-bottom-arrow\";\n }\n\n if (position.xPercent > 30) {\n xPositionClass = \"has-right-arrow\";\n } //quita dd-hide, sobreescribiendo todas las clases\n\n\n this.$elements.$detailDay.className = \"detail-day \" + yPositionClass + \" \" + xPositionClass;\n }\n /**\n * Captura evento click en boton para abrir arbol, en sidebar izquierdo\n *\n * @param {Object} evt - objeto evento click\n */\n\n\n clickNavLeftTreeIcon() {\n this.redraw({\n floatBox: true\n });\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n /**\n * Captura evento mouseover sobre elemento floatBox\n * usada para mostrar detalle de dia/item del floatbox\n */\n\n\n mouseOverFloatBox(evt, force) {\n let item = evt.detail.item;\n let dataDay = evt.detail.data; //verifica que sean dias distintos, comparandolo con el anterior,\n // para no crear nuevamente el mismo detail-day, con los mismos datos\n\n if (dataDay !== this.lastDataDay || force) {\n let newDDContentString = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawDetailDay(this.config, item, dataDay, this.tabSelected);\n\n if (newDDContentString) {\n this.$elements.$detailDay.innerHTML = newDDContentString;\n }\n\n this.lastDataDay = dataDay;\n }\n }\n\n clickDateHeader(evt) {\n let date = evt.detail.date;\n this.toggleSelectByDate(date);\n this.redrawSelection();\n }\n\n toggleSelectByDate(date) {\n if (this.isSelectedAllDate(date)) {\n this.deselectByDate(date);\n } else {\n this.selectByDate(date);\n }\n\n this.selected = this.selected.sort((s, n) => {\n return new Date(s.date) - new Date(n.date);\n });\n this.setIndexToSelected();\n }\n\n contextMenuDateHeader(evt) {\n let left = evt.detail.clientX;\n let top = evt.detail.clientY - this.$capibara.getBoundingClientRect().top;\n let date = evt.detail.date;\n const target = evt.detail.$elem;\n let {\n elem: $elem,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n tabSelected: this.tabSelected,\n target,\n $capibaraElem: this.$capibara,\n config: this.config,\n selected: this.selected,\n date,\n left,\n top,\n name: \"onDateHeader\"\n });\n\n if ($elem) {\n this.isVisibleContextMenu = isVisible;\n this.$elements.$contextMenu.replaceWith($elem);\n this.$elements.$contextMenu = $elem;\n }\n }\n /**\n * Captura evento window resize\n * para verificar si es mobile o no\n */\n\n\n onWindowResize() {\n if (this.initialized) {\n let oldValue = this.isMobile;\n let newValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].checkIsMobile();\n\n if (oldValue != newValue) {\n this.isMobile = newValue;\n this.toggleSidebarMobile();\n this.setAllCSSVariables();\n this.redraw({\n floatBox: true,\n navLeft: true\n });\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n }\n /**\n * Cambia sidebar para mobile, segun variable this.isMobile\n */\n\n\n toggleSidebarMobile() {\n if (this.isMobile) {\n this.setShowNavInitial(false);\n this.setShowNavExtended(false);\n this.setShowNavButtons(false);\n this.setEditable(false);\n this.setSelectable(false);\n } else {\n this.setShowNavInitial(true);\n this.setShowNavExtended(false);\n this.setShowNavButtons(true);\n this.setEditable(true);\n this.setSelectable(true);\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n\n setEditable(newEditable) {\n if (this.config.timeline.editable != newEditable) {\n this.config.timeline.editable = newEditable;\n this.redraw({\n navLeft: true,\n header: true\n });\n }\n }\n\n setSelectable(newSelectable) {\n if (this.config.timeline.selectable != newSelectable) {\n this.config.timeline.selectable = newSelectable;\n this.cleanMultiInput();\n }\n }\n\n focusOnFloatBox({\n pos,\n evt\n }) {\n if (this.isMobile) {\n let containerWidth = this.$elements.$container.clientWidth;\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n let navWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--nav-width\"));\n let left = pos.left - containerWidth + 1.5 * dayWidth + navWidth; //let containerHeight = this.$elements.$container.clientHeight;\n\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\")); //let headerHeight = parseFloat(utils.getCSSVariable(this.config, \"--header-height\"));\n\n let top = pos.top - 0.5 * itemHeight;\n let position = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n this.refreshDetailDayPosition({ ...position,\n topClient: position.yInnerPercent >= 70 ? position.topClient : 0,\n // fuerza posicion de arrow en detailday\n xPercent: position.x < 4 ? 0 : 100 // fuerza arrow right\n\n });\n this.$elements.$container.scroll({\n top,\n left,\n behavior: 'smooth'\n });\n }\n }\n\n refreshInputsWithReload({\n detail\n }) {\n this.$inputsWithReload = this.$inputsWithReload.map(({\n $input,\n config\n }) => {\n let lastSelection = detail && detail.lastSelection ? detail.lastSelection : null;\n let newInput = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createInput(config, null, lastSelection, detail.selected);\n $input.parentElement.replaceChild(newInput, $input);\n let index = this.$inputsNavRight.indexOf($input);\n\n if (index >= 0) {\n this.$inputsNavRight[index] = newInput;\n }\n\n return {\n $input: newInput,\n config\n };\n });\n }\n /**\n * Agrega eventos a los elementos del dom de la planilla\n * usando el objecto $capibara\n */\n\n\n addEvents() {\n this.$capibara.addEventListener(\"click\", this.hideContextMenu.bind(this));\n this.$capibara.addEventListener(\"contextmenu\", this.rightClickOnCapibara.bind(this));\n this.$capibara.addEventListener(\"toggleDark\", this.toggleDark.bind(this));\n this.$capibara.addEventListener(\"toggleHeader\", this.toggleHeader.bind(this));\n this.$capibara.addEventListener(\"toggleSidebar\", this.toggleSidebar.bind(this));\n this.$capibara.addEventListener(\"toggleSidebarRight\", this.toggleSidebarRight.bind(this));\n this.$capibara.addEventListener(\"saveMultiInput\", this.saveInputsNavRight.bind(this));\n this.$capibara.addEventListener(\"cancelMultiInput\", this.cancelMultiInput.bind(this));\n this.$capibara.addEventListener(\"overNavItem\", this.overNavItem.bind(this));\n this.$capibara.addEventListener(\"leaveNavItem\", this.leaveNavItem.bind(this));\n this.$capibara.addEventListener(\"clickNavLeftTreeIcon\", this.clickNavLeftTreeIcon.bind(this));\n this.$capibara.addEventListener(\"mouseOverFloatBox\", this.mouseOverFloatBox.bind(this));\n this.$capibara.addEventListener(\"selectTabHeader\", e => {\n this.selectTab(e.detail.tab);\n });\n this.$capibara.addEventListener(\"selectLegendHeader\", this.selectLegend.bind(this));\n this.$capibara.addEventListener(\"selectDay\", this.refreshInputsWithReload.bind(this));\n this.$capibara.addEventListener(\"deselectDay\", this.refreshInputsWithReload.bind(this));\n this.$elements.$floatBoxContainer.addEventListener(\"mousemove\", this.mouseMoveOnFlexBoxContainer.bind(this));\n this.$elements.$floatBoxContainer.addEventListener(\"mouseleave\", this.mouseLeaveOnFloatBoxContainer.bind(this));\n this.$elements.$table.addEventListener(\"mousemove\", this.mouseMoveOnTable.bind(this));\n this.$elements.$table.addEventListener(\"click\", this.clickOnTable.bind(this));\n this.$elements.$table.addEventListener(\"contextmenu\", this.rightClickOnTable.bind(this));\n this.$elements.$container.addEventListener(\"scroll\", this.onScrollContainer.bind(this));\n this.$elements.$container.addEventListener(\"clickDate\", this.clickDateHeader.bind(this));\n this.$elements.$container.addEventListener(\"contextMenuDate\", this.contextMenuDateHeader.bind(this));\n window.addEventListener('resize', this.onWindowResize.bind(this));\n }\n /**\n * Funcion para redibujar partes de la planilla, indicado segun parametro\n *\n * options : {\n * floatBox: Boolean,\n * plots: Boolean,\n * header: Boolean,\n * navLeft: Boolean,\n * navRight: Boolean,\n * }\n *\n *\n * @param {Object} options - objecto de configuracion\n */\n\n\n redraw(options) {\n if (options.floatBox) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawFloatBox(this.config, this.tabSelected, this.$elements.$floatBoxContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawBackground(this.config, this.$elements.$background);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotVerticalContainer(this.config, this.$elements.$plotVerticalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotHorizontalContainer(this.config, this.$elements.$plotHorizontalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawTodayLine(this.config, this.$elements.$todayLine);\n }\n\n if (options.plots) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotVerticalContainer(this.config, this.$elements.$plotVerticalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotHorizontalContainer(this.config, this.$elements.$plotHorizontalContainer);\n }\n\n if (options.header) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawHeader(this.config, this.$elements.$header);\n\n if (this.config.timeline.header.extend.enabled !== false) {\n let $headerExtended = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderExtended(this.config);\n\n if ($headerExtended) {\n this.$elements.$header.append($headerExtended);\n }\n }\n }\n\n if (options.headerTop) {\n this.$elements.$headerTop = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawHeaderTop(this.config, this.tabSelected, this.$elements.$headerTop);\n }\n\n if (options.detailDay) {\n this.hideDetailDay();\n this.lastDataDay = null;\n }\n\n if (options.navLeft) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavLeft(this.$elements.$navLeft, this.config, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavStyle(this.config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(this.config, this.isShowNavInitial, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(this.config, this.isShowNavExtended, this.tabSelected);\n }\n\n if (options.cornerLeft) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawCorner(this.$elements.$corner, this.config, this.tabSelected);\n }\n\n if (options.navRight) {\n let {\n inputs,\n element,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavRight(this.config, this.$elements.$navRight, this.selected, this.tabSelected);\n this.$elements.$navRight = element;\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n /**\n * Mueve el Scroll de la planilla al inicio\n */\n\n\n scrollToStart() {\n this.$elements.$container.scrollLeft = 0;\n }\n /**\n * Mueve el Scroll de la planilla al inicio\n */\n\n\n scrollToEnd() {\n this.$elements.$container.scrollLeft = this.$elements.$container.scrollWidth;\n }\n /**\n * Mueve el Scroll de la planilla a la tercera parte\n * TODO mejorar logica de esta funcion\n */\n\n\n scrollToMiddle() {\n this.$elements.$container.scrollLeft = this.$elements.$container.scrollWidth / 3;\n }\n /**\n * Fija las variables de CSs segun Config\n */\n\n\n setAllCSSVariables() {\n let config = this.config; //styleUtils.cleanStyle(config);\n\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setHeaderStyle(config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavStyle(config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(config, this.isShowNavInitial, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(config, this.isShowNavExtended, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftButtonsStyle(config, this.isShowNavButtons, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setTableStyle(config);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2NhcGliYXJhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvbGliL2NhcGliYXJhLmpzPzBmMGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvbSAgICAgICAgICAgZnJvbSAnLi4vdXRpbC9kb21VdGlscyc7XG5pbXBvcnQgdXRpbHMgICAgICAgICBmcm9tICcuLi91dGlsL3V0aWxzJztcbi8vaW1wb3J0IGRhdGVVdGlscyAgICAgZnJvbSAnLi4vdXRpbC9kYXRlVXRpbHMnO1xuaW1wb3J0IHRhYmxlRWxlbWVudHMgZnJvbSAnLi4vdXRpbC90YWJsZUVsZW1lbnRzJztcbmltcG9ydCBzdHlsZVV0aWxzICAgIGZyb20gJy4uL3V0aWwvc3R5bGVVdGlscyc7XG5cbi8qKlxuICogQ2FwaWJhcmEsIHBsYW5pbGxhIHBhcmEgZGVzcGxpZWd1ZSBkZSBkYXRvcyBwb3IgZmVjaGEgY29tbyBHQU5UVFxuICogb3JpZW50YWRvIGluaWNpYWxtZW50ZSBhIGRhdG9zIGRpYXJpb3MgZGUgaXRlbXNcbiAqXG4gKiBAYXV0aG9yIFBhdHJpY2lvLiBNLiBSb2phcy4gPHBhdHJpY2lvQGlycmljcm9wcy5jb20+XG4gKi9cbmV4cG9ydCBjbGFzcyBDYXBpYmFyYXtcblxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogSW5zdGFuY2lhIHZhcmlhYmxlcyBkZSBwbGFuaWxsYSBDYXBpYmFyYSwgY29uIGNvbmZpZ3VyYWNpb25cbiAgICogQ3JlYSBlbCBlbGVtZW50byBjb250ZW5lZG9yIHtjb250YWluZXJFbGVtZW50fSBzZWd1biBzZWxlY3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlcyAtIGF0cmlidXRvcyBxdWUgc2UgdXNhcmFuIGFsIGluaWNpYXIgbGEgcGxhbmlsbGFcbiAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXMuY29uZmlnIC0gQ29uZmlndXJhY2lvbiBkZSBwbGFuaWxsYVxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ30pe1xuICAgIGlmKGNvbmZpZyA9PSBudWxsKSBjb25zb2xlLmVycm9yKFwiY29uZmlnIG5vIGVjb250cmFkb1wiKTtcblxuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY29uZmlnLnNlbGVjdG9yKTtcblxuICAgIGlmKHRoaXMuY29udGFpbmVyRWxlbWVudCA9PSBudWxsKSBjb25zb2xlLmVycm9yKFwiRWxlbWVudG8gZG9tIHNlZ3VuIGNvbmZpZy5zZWxlY3Rvciwgbm8gZW5jb250cmFkb1wiKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgICAgICAgICAgICAgID0gZmFsc2U7XG4gICAgdGhpcy4kY2FwaWJhcmEgICAgICAgICAgICAgICAgPSBudWxsO1xuICAgIHRoaXMuJGVsZW1lbnRzICAgICAgICAgICAgICAgID0ge307XG4gICAgdGhpcy50YWJTZWxlY3RlZCAgICAgICAgICAgICAgPSBudWxsO1xuICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0ICAgICAgICAgID0gW107XG4gICAgdGhpcy4kaW5wdXRzV2l0aFJlbG9hZCAgICAgICAgPSBbXTtcbiAgICB0aGlzLiRzYXZlQ2FuY2VsQnRucyAgICAgICAgICA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWQgICAgICAgICAgICAgICAgID0gW107XG4gICAgdGhpcy5jb25maWcgICAgICAgICAgICAgICAgICAgPSBjb25maWc7XG4gICAgdGhpcy5sYXN0RGF0YURheSAgICAgICAgICAgICAgPSBudWxsO1xuICAgIHRoaXMuaXNTaG93TmF2RXh0ZW5kZWQgICAgICAgID0gZmFsc2U7XG4gICAgdGhpcy5pc1Nob3dOYXZJbml0aWFsICAgICAgICAgPSB0cnVlO1xuICAgIHRoaXMuaXNTaG93TmF2QnV0dG9ucyAgICAgICAgID0gdHJ1ZTtcbiAgICB0aGlzLmlzTW9iaWxlICAgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgIHRoaXMubGFzdE1vdXNlUG9zaXRpb24gICAgICAgID0gbnVsbDtcbiAgICB0aGlzLmlzVmlzaWJsZUNvbnRleHRNZW51ICAgICA9IGZhbHNlO1xuICAgIHRoaXMuaXNEaXNhYmxlZElucHV0c05hdlJpZ2h0ID0gZmFsc2U7XG5cbiAgfVxuXG5cblxuXG5cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBQbGFuaWxsYTpcbiAgICogIC0gdmFjaWEgdmFyaWFibGVzIG5lY2VzYXJpYXNcbiAgICogIC0gY3JlYSBwbGFuaWxsYSBsbGFtYW5kbyBhIGRyYXdUYWJsZVxuICAgKiAgLSBBZ3JlZ2EgZXZlbnRvcyBhIHBsYW5pbGxhXG4gICAqICAtIG11ZXZlIHNjcm9sbCBhbCBtZWRpbyBkZSBsYSB0YWJsYVxuICAgKi9cbiAgaW5pdCgpe1xuXG4gICAgdGhpcy50YWJTZWxlY3RlZCAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy4kY2FwaWJhcmEgICAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy4kZWxlbWVudHMgICAgICAgICAgICA9IHt9O1xuICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0ICAgICAgPSBbXTtcbiAgICB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkICAgID0gW107XG4gICAgdGhpcy4kc2F2ZUNhbmNlbEJ0bnMgICAgICA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWQgICAgICAgICAgICAgPSBbXTtcbiAgICB0aGlzLmxhc3REYXRhRGF5ICAgICAgICAgID0gbnVsbDtcbiAgICB0aGlzLmlzTW9iaWxlICAgICAgICAgICAgID0gdXRpbHMuY2hlY2tJc01vYmlsZSgpO1xuICAgIHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUgPSBmYWxzZTtcblxuICAgIHRoaXMuc2V0QWxsQ1NTVmFyaWFibGVzKCk7XG4gICAgdGhpcy5kcmF3VGFibGUoKTtcbiAgICB0aGlzLmFkZEV2ZW50cygpO1xuICAgIHRoaXMuc2Nyb2xsVG9NaWRkbGUoKTtcbiAgICB0aGlzLnRvZ2dsZVNpZGViYXJNb2JpbGUoKTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQ2FtYmlhIGNvbmZpZ3VyYWNpb24gZGUgcGxhbmlsbGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gbnVldmEgcGFyYSBwbGFuaWxsYVxuICAgKi9cbiAgc2V0Q29uZmlnKGNvbmZpZyl7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDcmVhIGxhIHBsYW5pbGxhXG4gICAqIGFncmVnYW5kbyB0b2RvcyBsb3MgZWxlbWVudG9zIGVuIG9yZGVuIGRlbnRyb1xuICAgKlxuICAgKiBAcmV0dXJuIHsgRG9tRWxlbWVudCB9ICRjYXBpYmFyYSAtIGVsZW1lbnRvIGRlbCBEb20gcXVlIGNvbnRpZW5lIHRvZGEgbGEgcGxhbmlsbGFcbiAgICovXG4gIGRyYXdUYWJsZSgpe1xuXG4gICAgbGV0IGNvbmZpZyAgICAgICAgPSB0aGlzLmNvbmZpZ1xuICAgIGxldCBpbml0aWFsVGFiICAgID0gY29uZmlnLnRpbWVsaW5lLnRhYnNbMF07XG4gICAgbGV0IGZpcnN0Q2hpbGRyZW4gPSB7fTtcblxuICAgIGlmKGNvbmZpZy5kYXRhICAmJiBjb25maWcuZGF0YS5sZW5ndGggPiAwICYmIGNvbmZpZy5kYXRhWzBdLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgZmlyc3RDaGlsZHJlbiA9IGNvbmZpZy5kYXRhWzBdLmNoaWxkcmVuWzBdO1xuICAgIH1cblxuICAgIGxldCAkY2FwaWJhcmEgICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUFnVGFibGUoY29uZmlnKTtcbiAgICBsZXQgJGNvcm5lciAgICAgICAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVDb3JuZXIoY29uZmlnLCBpbml0aWFsVGFiKTtcbiAgICBsZXQgJGNvcm5lclJpZ2h0ICAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVDb3JuZXJSaWdodChjb25maWcpO1xuICAgIGxldCAkaGVhZGVyVG9wICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUhlYWRlclRvcChjb25maWcpO1xuICAgIGxldCAkaGVhZGVyICAgICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUhlYWRlcihjb25maWcpO1xuICAgIGxldCAkdG9kYXlMaW5lICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZVRvZGF5TGluZShjb25maWcpO1xuICAgIGxldCAkaGVhZGVyRXh0ZW5kZWQgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUhlYWRlckV4dGVuZGVkKGNvbmZpZyk7XG4gICAgbGV0ICRuYXZMZWZ0ICAgICAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlTmF2TGVmdChjb25maWcpXG4gICAgbGV0ICRjb3JuZXJGb290ZXIgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlQ29ybmVyRm9vdGVyKGNvbmZpZyk7XG4gICAgbGV0ICRmb290ZXIgICAgICAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlRm9vdGVyKGNvbmZpZyk7XG4gICAgbGV0ICRmbG9hdEJveENvbnRhaW5lciAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlRmxvYXRCb3goY29uZmlnLCBpbml0aWFsVGFiKTtcbiAgICBsZXQgJHNlbGVjdENvbnRhaW5lciAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVTZWxlY3RCb2FyZChjb25maWcpO1xuICAgIGxldCAkcGxvdFZlcnRpY2FsQ29udGFpbmVyICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZVBsb3RWZXJ0aWNhbENvbnRhaW5lcihjb25maWcpO1xuICAgIGxldCAkcGxvdEhvcml6b250YWxDb250YWluZXIgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZVBsb3RIb3Jpem9udGFsQ29udGFpbmVyKGNvbmZpZyk7XG4gICAgbGV0ICRkZXRhaWxEYXkgICAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlRGV0YWlsRGF5KGNvbmZpZywgZmlyc3RDaGlsZHJlbik7XG5cbiAgICBsZXQgeyBlbGVtOiRjb250ZXh0TWVudSwgaXNWaXNpYmxlIH0gID0gdGFibGVFbGVtZW50cy5jcmVhdGVDb250ZXh0TWVudSh7Y29uZmlnfSk7XG4gICAgdGhpcy5pc1Zpc2libGVDb250ZXh0TWVudSA9IGlzVmlzaWJsZTtcblxuICAgIGxldCAkbmF2UmlnaHQsIGlucHV0cywgaW5wdXRzV2l0aFJlbG9hZCwgc2F2ZUNhbmNlbEJ0bnM7XG4gICAgKHtlbGVtZW50OiRuYXZSaWdodCwgaW5wdXRzLCBpbnB1dHNXaXRoUmVsb2FkLCBzYXZlQ2FuY2VsQnRuc30gPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZU5hdlJpZ2h0KGNvbmZpZykpO1xuXG4gICAgbGV0ICRiYWNrZ3JvdW5kICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUJhY2tncm91bmQoY29uZmlnKTtcbiAgICBsZXQgJGNvbnRhaW5lciAgICAgICA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOlwiY29udGFpbmVyLXRsXCJ9KTtcbiAgICBsZXQgJGRheU1vdXNlT3ZlciAgICA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRheS1tb3VzZS1vdmVyXCJ9KTtcblxuICAgIGxldCB7aGVpZ2h0LCB3aWR0aCB9ID0gdXRpbHMuZ2V0VGFibGVEaW1lbnNpb25zKGNvbmZpZyk7XG4gICAgbGV0ICR0YWJsZSAgICAgICAgICAgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0YWJsZVwiLCBzdHlsZTp7XG4gICAgICAnd2lkdGgnOiB3aWR0aCtcInB4XCIsXG4gICAgICAnaGVpZ2h0JzogaGVpZ2h0K1wicHhcIlxuICAgIH19KTtcblxuICAgICR0YWJsZS5hcHBlbmRDaGlsZCgkYmFja2dyb3VuZCk7XG4gICAgJHRhYmxlLmFwcGVuZENoaWxkKCRkYXlNb3VzZU92ZXIpO1xuICAgICR0YWJsZS5hcHBlbmRDaGlsZCgkZGV0YWlsRGF5KTtcbiAgICAkdGFibGUuYXBwZW5kQ2hpbGQoJHNlbGVjdENvbnRhaW5lcik7XG4gICAgJHRhYmxlLmFwcGVuZENoaWxkKCRmbG9hdEJveENvbnRhaW5lciApO1xuXG4gICAgaWYoJGhlYWRlckV4dGVuZGVkKXtcbiAgICAgICRoZWFkZXIuYXBwZW5kQ2hpbGQoJGhlYWRlckV4dGVuZGVkKTtcbiAgICB9XG5cbiAgICAkY29udGFpbmVyLmFwcGVuZENoaWxkKCRoZWFkZXIpO1xuICAgICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJHBsb3RWZXJ0aWNhbENvbnRhaW5lcik7XG4gICAgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkcGxvdEhvcml6b250YWxDb250YWluZXIpO1xuICAgICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJHRvZGF5TGluZSk7XG4gICAgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkbmF2TGVmdCk7XG4gICAgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkdGFibGUpO1xuXG4gICAgaWYoJGNvcm5lckZvb3RlcikgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkY29ybmVyRm9vdGVyKTtcblxuICAgIGlmKCRmb290ZXIpICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJGZvb3Rlcik7XG5cbiAgICAkY2FwaWJhcmEuYXBwZW5kQ2hpbGQoJGhlYWRlclRvcCk7XG4gICAgJGNhcGliYXJhLmFwcGVuZENoaWxkKCRjb3JuZXIpO1xuICAgICRjYXBpYmFyYS5hcHBlbmRDaGlsZCgkY29ybmVyUmlnaHQpO1xuICAgICRjYXBpYmFyYS5hcHBlbmRDaGlsZCgkY29udGFpbmVyKTtcbiAgICAkY2FwaWJhcmEuYXBwZW5kQ2hpbGQoJG5hdlJpZ2h0KTtcbiAgICBpZigkY29udGV4dE1lbnUpICRjYXBpYmFyYS5hcHBlbmRDaGlsZCgkY29udGV4dE1lbnUpO1xuXG5cbiAgICB0aGlzLiRpbnB1dHNOYXZSaWdodCAgID0gaW5wdXRzO1xuICAgIHRoaXMuJGlucHV0c1dpdGhSZWxvYWQgPSBpbnB1dHNXaXRoUmVsb2FkO1xuICAgIHRoaXMuJHNhdmVDYW5jZWxCdG5zID0gc2F2ZUNhbmNlbEJ0bnM7XG4gICAgdGhpcy4kY2FwaWJhcmEgPSAkY2FwaWJhcmE7XG4gICAgdGhpcy4kZWxlbWVudHMgPSB7XG4gICAgICAkaGVhZGVyVG9wLFxuICAgICAgJGRldGFpbERheSxcbiAgICAgICRjb250ZXh0TWVudSxcbiAgICAgICRmbG9hdEJveENvbnRhaW5lcixcbiAgICAgICRzZWxlY3RDb250YWluZXIsXG4gICAgICAkdGFibGUsXG4gICAgICAkYmFja2dyb3VuZCxcbiAgICAgICRwbG90VmVydGljYWxDb250YWluZXIsXG4gICAgICAkcGxvdEhvcml6b250YWxDb250YWluZXIsXG4gICAgICAkZGF5TW91c2VPdmVyLFxuICAgICAgJGNvbnRhaW5lcixcbiAgICAgICRuYXZSaWdodCxcbiAgICAgICRuYXZMZWZ0LFxuICAgICAgJGhlYWRlcixcbiAgICAgICR0b2RheUxpbmUsXG4gICAgICAkY29ybmVyLFxuICAgICAgJGNvcm5lclJpZ2h0XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmlubmVySFRNTCA9IFwiXCI7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKCRjYXBpYmFyYSk7XG4gICAgdGhpcy5zZWxlY3RUYWIoaW5pdGlhbFRhYik7XG5cbiAgICByZXR1cm4gJGNhcGliYXJhO1xuICB9XG5cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIENhbWJpYSBlbCBtb2RvIG9zY3Vybywgc2VndW4gZWwgZXN0YWRvIGFjdHVhbFxuICAgKi9cbiAgdG9nZ2xlRGFyaygpe1xuICAgIHRoaXMuc2V0RGFyayghQm9vbGVhbih0aGlzLmNvbmZpZy50aW1lbGluZS5kYXJrKSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDYW1iaWEgZWwgbW9kbyBvc2N1cm8sIHNlZ3VuIHBhcmFtZXRyb1xuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtpc0RhcmsgPSBmYWxzZV0gLSBpbmRpY2Egc2kgc2UgYWN0aXZhIGVsIG1vZG8gb3NjdXJvIG8gbm9cbiAgICovXG4gIHNldERhcmsoIGlzRGFyayA9IGZhbHNlKXtcbiAgICBsZXQgZGFya0NsYXNzTmFtZSA9IFwiZGFyay10aGVtZVwiO1xuICAgIHRoaXMuY29uZmlnLnRpbWVsaW5lLmRhcmsgPSBpc0Rhcms7XG5cbiAgICBpZihpc0Rhcmspe1xuICAgICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LmFkZChkYXJrQ2xhc3NOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LnJlbW92ZShkYXJrQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENhbWJpYSBlbCB0ZW1hIGRlIGNvbG9yIHNlY3VuZGFyaW8sIHNlZ3VuIHBhcmFtZXRyb1xuICAgKiAgLVF1aXRhIHRvZG9zIGxvcyBwb3NpYmxlcyBjb2xvcmVzIGRlIGxhIHBsYW5pbGxhLCBvYnRlbmllbmRvbG9zIGRlIFRhYnNcbiAgICogIC1BZ3JlZ2EgZWwgY29sb3IgZW52aWFkbyBwb3IgcGFyYW1ldHJvIGNvbW8gY2xhc2UgZGVsIGRvbUVsZW1lbnQgJGNhcGliYXJhXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb2xvciAtIGNvbG9yLCBjb21vIG5vbWJyZSBkZSBjbGFzZSwgcGFyYSBhZ3JlZ2FyIFxuICAgKi9cbiAgY2hhbmdlQ29sb3JUaGVtZShjb2xvcil7XG4gICAgdGhpcy5jb25maWcudGltZWxpbmUudGFicy5mb3JFYWNoKHRhYiA9PiB7XG4gICAgICB0aGlzLiRjYXBpYmFyYS5jbGFzc0xpc3QucmVtb3ZlKHRhYi5jb2xvcik7XG4gICAgfSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LmFkZChjb2xvcik7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFNlbGVjY2lvbmEgdGFiIGVuIHBsYW5pbGxhXG4gICAqIHNpIHJlZHJhdyA9PSB0cnVlICwgcmVkaWJ1amEgbmF2UmlnaHQgeSBmbG9hdEJveFxuICAgKiB5YSBxdWUgc29uIGlucHV0cyB5IGVzdGV0aWNhcyBwZXJzb25hbGl6YWRhcyBwb3IgVGFiXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0YWIgLSB0YWIsIG9idGVuaWRhIGRlc2RlIGNvbmZpZ3VyYWNpb25cbiAgICogQHBhcmFtIHtCb29sZWFufSBbcmVkcmF3PXRydWVdIC0gb3BjaW9uIGRlIHJlZGlidWphZG9cbiAgICovXG4gIHNlbGVjdFRhYih0YWIsIHJlZHJhdyA9IHRydWUpe1xuICAgIGlmKHRhYil7XG4gICAgICB0aGlzLnRhYlNlbGVjdGVkID0gdGFiO1xuXG4gICAgICB0aGlzLmNsZWFuTXVsdGlJbnB1dCgpO1xuXG4gICAgICBpZihyZWRyYXcpe1xuICAgICAgICB0aGlzLnJlZHJhdyh7XG4gICAgICAgICAgaGVhZGVyVG9wOnRydWUsXG4gICAgICAgICAgY29ybmVyTGVmdDogdHJ1ZSxcbiAgICAgICAgICBuYXZMZWZ0OiB0cnVlLFxuICAgICAgICAgIG5hdlJpZ2h0OiB0cnVlLFxuICAgICAgICAgIGZsb2F0Qm94OnRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGFuZ2VDb2xvclRoZW1lKHRhYi5jb2xvcik7XG5cbiAgICAgIHRoaXMuJGNhcGliYXJhLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwic2VsZWN0VGFiXCIsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGRldGFpbDp7XG4gICAgICAgICAgdGFiU2VsZWN0ZWQgOiB0aGlzLnRhYlNlbGVjdGVkXG4gICAgICAgIH1cbiAgICAgIH0pKTtcblxuICAgIH1lbHNle1xuICAgICAgY29uc29sZS5lcnJvcihcInRhYiBubyBlbmNvbnRyYWRhXCIpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdExlZ2VuZChldnQpe1xuICAgIGxldCBsZWdlbmQgPSBldnQuZGV0YWlsLmxlZ2VuZDtcbiAgICBldnQuZGV0YWlsLiRsZWdlbmQuY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcbiAgICBpZihsZWdlbmQpe1xuICAgICAgbGVnZW5kLmFjdGl2ZSA9ICFsZWdlbmQuYWN0aXZlO1xuICAgIH1cblxuICAgIHRoaXMucmVkcmF3KHtcbiAgICAgIGZsb2F0Qm94OiB0cnVlLFxuICAgICAgZGV0YWlsRGF5OiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogbXVlc3RyYSBhbHRlcm5hZGFtZW50ZSBsb3Mgc2lkZWJhciBpbml0aWFsIHkgZXh0ZW5kZWRcbiAgICovXG4gIHRvZ2dsZVNpZGViYXIoKXtcbiAgICB0aGlzLnNldFNob3dOYXZJbml0aWFsKCF0aGlzLmlzU2hvd05hdkluaXRpYWwpO1xuICAgIGlmKCF0aGlzLmlzTW9iaWxlKXtcbiAgICAgIHRoaXMuc2V0U2hvd05hdkV4dGVuZGVkKCF0aGlzLmlzU2hvd05hdkV4dGVuZGVkKTtcbiAgICB9ZWxzZXtcbiAgICAgIGxldCBjb3JuZXJJbnB1dFRpdGxlcyA9IHRoaXMuJGVsZW1lbnRzLiRjb3JuZXIucXVlcnlTZWxlY3RvcihcIi5pbnB1dC10aXRsZXNcIik7XG4gICAgICBpZihjb3JuZXJJbnB1dFRpdGxlcyl7XG4gICAgICAgIGNvcm5lcklucHV0VGl0bGVzLnN0eWxlLmRpc3BsYXkgPSB0aGlzLmlzU2hvd05hdkluaXRpYWwgPyBcIm5vbmVcIjogXCJmbGV4XCI7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jdWx0YSBuYXYgaW5pdGlhbCAsIGV4dGVuZGVkIHkgYnV0dG9uc1xuICAgKi9cbiAgaGlkZVNpZGViYXJzKCl7XG4gICAgdGhpcy5zZXRTaG93TmF2SW5pdGlhbChmYWxzZSk7XG4gICAgdGhpcy5zZXRTaG93TmF2RXh0ZW5kZWQoZmFsc2UpO1xuICAgIHRoaXMuc2V0U2hvd05hdkJ1dHRvbnMoZmFsc2UpO1xuICB9XG5cblxuICAvKipcbiAgICogTXVlc3RyYS9PY3VsdGEgU2lkZWJhciBpbmljaWFsXG4gICAqL1xuICBzZXRTaG93TmF2SW5pdGlhbChpc1Nob3dOYXZJbml0aWFsKXtcbiAgICB0aGlzLmlzU2hvd05hdkluaXRpYWwgID0gaXNTaG93TmF2SW5pdGlhbDtcbiAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRJbml0aWFsU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2SW5pdGlhbCwgdGhpcy50YWJTZWxlY3RlZCk7XG4gIH1cblxuICAvKipcbiAgICogTXVlc3RyYS9PY3VsdGEgU2lkZWJhciBleHRlbmRpZG9cbiAgICovXG4gIHNldFNob3dOYXZFeHRlbmRlZChpc1Nob3dOYXZFeHRlbmRlZCl7XG4gICAgdGhpcy5pc1Nob3dOYXZFeHRlbmRlZCA9IGlzU2hvd05hdkV4dGVuZGVkO1xuICAgIHN0eWxlVXRpbHMuc2V0TmF2TGVmdEV4dGVuZGVkU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2RXh0ZW5kZWQsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvT2N1bHRhIFNpZGViYXIgYnV0dG9uc1xuICAgKi9cbiAgc2V0U2hvd05hdkJ1dHRvbnMoaXNTaG93TmF2QnV0dG9ucyl7XG4gICAgdGhpcy5pc1Nob3dOYXZCdXR0b25zID0gaXNTaG93TmF2QnV0dG9ucztcbiAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRCdXR0b25zU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2QnV0dG9ucywgdGhpcy50YWJTZWxlY3RlZCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvb2N1bHRhIFNpZGViYXIgRGVyZWNob1xuICAgKi9cbiAgdG9nZ2xlU2lkZWJhclJpZ2h0KCl7XG4gICAgbGV0IGlzSGlkZGVuID0gIXRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5jb250YWlucyhcImV4dGVuZGVkLXJpZ2h0XCIpO1xuICAgIHRoaXMuc2V0VmlzaWJsZVNpZGViYXJSaWdodCghaXNIaWRkZW4pO1xuICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWNhIGxhIG9wY2lvbiBkZSBtb3N0cmFyIHkgb2N1bHRhciBzaWRlYmFyIGRlcmVjaG9cbiAgICpcbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gW3Nob3cgPSB0cnVlXSAtIGluZGljYSBzaSBkZWJlIG1vc3RyYXJzZSB1IG9jdWx0YXJzZVxuICAgKi9cbiAgc2V0VmlzaWJsZVNpZGViYXJSaWdodChzaG93ID0gdHJ1ZSl7XG4gICAgbGV0IGZuID0gc2hvdyA/IFwiYWRkXCIgOiBcInJlbW92ZVwiO1xuICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdFtmbl0oXCJleHRlbmRlZC1yaWdodFwiKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvb2N1bHRhIEhlYWRlciBleHRlbmRpZG8gKGlucHV0cylcbiAgICovXG4gIHRvZ2dsZUhlYWRlcigpe1xuICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC50b2dnbGUoXCJoZWFkZXItZXh0ZW5kZWRcIik7XG4gICAgdGhpcy5yZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogTXVlc3RyYS9vY3VsdGEgYmFycmEgZGUgY2FyZ2EgZGUgcGxhbmlsbGEgXG4gICAqIFNpIHNlIGxsYW1hIHNpbiBwYXJhbWV0cm9zLCBwb3IgZGVmZWN0byBtdWVzdHJhIGVsIGxvYWRpbmcgZGVyZWNob1xuICAgKiBxdWUgY29ycmVzcG9uZGUgYWwgc2lkZWJhci1yaWdodFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW3Bvc2l0aW9uID0gXCJyaWdodFwiXSAtIGVzY29nZSBsb2FkaW5nLCBwdWVkZSBzZXIgXCJsZWZ0XCIgfCBcInJpZ2h0XCJcbiAgICogQHBhcmFtIHtCb29sZWFufSBbc2hvdyA9IHRydWVdIC0gaW5kaWNhIHNpIG1vc3RyYXIgdSBvY3VsdGFyIGxvYWRpbmdcbiAgICovXG4gIGxvYWRpbmcocG9zaXRpb24gPSBcInJpZ2h0XCIsIHNob3cgPSB0cnVlKXtcbiAgICBsZXQgZm4gICAgICA9IHNob3cgPyBcInJlbW92ZVwiIDogXCJhZGRcIjtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuJGNhcGliYXJhLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZ3Jlc3MtYmFyLVwiK3Bvc2l0aW9uKTtcbiAgICBlbGVtZW50LmNsYXNzTGlzdFtmbl0oXCJoaWRlLXByb2dyZXNzXCIpO1xuICB9XG5cblxuXG4gIHNldERpc2FibGVJbnB1dHNOYXZSaWdodChpc0Rpc2FibGVkID0gdHJ1ZSl7XG4gICAgdGhpcy5pc0Rpc2FibGVkSW5wdXRzTmF2UmlnaHQgPSBpc0Rpc2FibGVkO1xuICAgIFxuICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0LmZvckVhY2goJGlucHV0Q29udGFpbmVyID0+IHtcbiAgICAgIGxldCAkaW5wdXRzID0gJGlucHV0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFwiKTtcbiAgICAgICRpbnB1dHMuZm9yRWFjaCgkaSA9PiB7XG4gICAgICAgICRpLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIGlzRGlzYWJsZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgbGV0IGJ0bnMgPSB0aGlzLiRzYXZlQ2FuY2VsQnRucy5xdWVyeVNlbGVjdG9yQWxsKFwiYnV0dG9uXCIpO1xuXG4gICAgYnRucy5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBpc0Rpc2FibGVkKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEJ1c2NhIHVuIGJvdG9uIHNlZ3VuIHNlbGVjdG9yLCB5IGxlIGFncmVnYSBsYSBjbGFzZSBcImxvYWRpbmdcIlxuICAgKiB5IGRlc2hhYmlsaXRhIGVsIGJvdG9uXG4gICAqXG4gICAqIEBwYXJhbSB7IFN0cmluZyB9IFsgc2VsZWN0b3IgPSAnW2NhcC1idG4tY2FsZW5kYXJdJyBdIC0gc2VsZWN0b3IgZGUgYm90b25cbiAgICogQHBhcmFtIHsgQm9vbGVhbiB9IFtpc0xvYWRpbmcgID0gdHJ1ZV0gLSBkZWZpbmUgc2kgZXN0YSBjYXJnYW5kbyBvIG5vXG4gICAqL1xuICBsb2FkaW5nQnRuKHNlbGVjdG9yPSBcIltjYXAtYnRuLWNhbGVuZGFyXVwiLCBpc0xvYWRpbmcgPSB0cnVlKXtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuJGNhcGliYXJhLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIGlmKGVsZW1lbnQpe1xuICAgICAgbGV0IGZuID0gaXNMb2FkaW5nID8gXCJhZGRcIiA6IFwicmVtb3ZlXCI7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdFtmbl0oXCJsb2FkaW5nXCIpO1xuICAgICAgaWYoaXNMb2FkaW5nKXtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLFwiXCIpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuXG5cbiAgLyoqXG4gICAqIENyZWEgRXZlbnRvIGRlIGd1YXJkYWRvIGRlIGxvcyBpbnB1dHMgZGVsIFNpZGViYXIgUmlnaHRcbiAgICogb2J0aWVuZSB0b2RvcyBsb3MgdmFsb3JlcyBkZSBsb3MgaW5wdXRzIHJlZ2lzdHJhZG9zIGVuIHRoaXMuJGlucHV0cyB5IFxuICAgKiBsb3MgcmV0b3JuYSBjcmVhbmRvIGVsIGV2ZW50byBcInNhdmVcIlxuICAgKlxuICAgKi9cbiAgc2F2ZUlucHV0c05hdlJpZ2h0KCl7XG5cbiAgICBsZXQgaW5wdXRWYWx1ZXMgPSBbXTtcblxuICAgIGxldCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUlucHV0c05hdlJpZ2h0KCk7XG5cbiAgICBpZighaXNWYWxpZCl7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXREaXNhYmxlSW5wdXRzTmF2UmlnaHQodHJ1ZSk7XG5cbiAgICB0aGlzLiRpbnB1dHNOYXZSaWdodC5mb3JFYWNoKCRpbnB1dCA9PiB7XG4gICAgICBsZXQga2V5ID0gJGlucHV0LmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgIGxldCBpbnB1dENvbmZpZyA9IHRoaXMudGFiU2VsZWN0ZWQuaW5wdXRzLmZpbmQodCA9PiB0LmtleSA9PSBrZXkpO1xuICAgICAgaWYoaW5wdXRDb25maWcpe1xuICAgICAgICBpbnB1dFZhbHVlcy5wdXNoKHtcbiAgICAgICAgICBrZXkgICAgICAgICA6IGtleSxcbiAgICAgICAgICBpbnB1dENvbmZpZyA6IGlucHV0Q29uZmlnLFxuICAgICAgICAgIGVsICAgICAgICAgIDogJGlucHV0LFxuICAgICAgICAgIHZhbHVlICAgICAgIDogdGhpcy5nZXRJbnB1dFZhbHVlKCRpbnB1dCwgaW5wdXRDb25maWcpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG5cbiAgICB0aGlzLiRjYXBpYmFyYS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNhdmVcIiwge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgZGV0YWlsOntcbiAgICAgICAgaW5wdXRWYWx1ZXMgOiBpbnB1dFZhbHVlcyxcbiAgICAgICAgc2VsZWN0ZWQgICAgOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0YWJTZWxlY3RlZCA6IHRoaXMudGFiU2VsZWN0ZWRcbiAgICAgIH1cbiAgICB9KSk7XG5cblxuICB9XG5cbiAgdmFsaWRhdGVJbnB1dHNOYXZSaWdodCgpe1xuICAgIGxldCBpc0Zvcm1WYWxpZCA9IHRydWU7XG4gICAgdGhpcy4kaW5wdXRzTmF2UmlnaHQuZm9yRWFjaCgkaW5wdXQgPT4ge1xuICAgICAgbGV0IGlzSW5wdXRWYWxpZCA9IHRydWU7XG4gICAgICBsZXQga2V5ID0gJGlucHV0LmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgIGxldCBpbnB1dENvbmZpZyA9IHRoaXMudGFiU2VsZWN0ZWQuaW5wdXRzLmZpbmQodCA9PiB0LmtleSA9PSBrZXkpO1xuICAgICAgaWYoaW5wdXRDb25maWcpe1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldElucHV0VmFsdWUoJGlucHV0LCBpbnB1dENvbmZpZyk7XG4gICAgICAgIGlmKGlucHV0Q29uZmlnLnJlcXVpcmVkKXtcbiAgICAgICAgICBpZih2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICBpc0Zvcm1WYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgaXNJbnB1dFZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoaW5wdXRDb25maWcudmFsaWRhdGlvbiAmJiAhaW5wdXRDb25maWcudmFsaWRhdGlvbih7dmFsdWUgLCBpbnB1dENvbmZpZywgJGlucHV0fSkgKXtcbiAgICAgICAgICBpc0Zvcm1WYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIGlzSW5wdXRWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzSW5wdXRWYWxpZCl7XG4gICAgICAgICAgJGlucHV0LmNsYXNzTGlzdC5hZGQoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAkaW5wdXQuY2xhc3NMaXN0LnJlbW92ZShcImlzLWludmFsaWRcIik7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzRm9ybVZhbGlkIDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENhbmNlbGEgZm9ybXVsYXJpbyBkZSBzaWRlYmFyIHJpZ2h0XG4gICAqL1xuICBjYW5jZWxNdWx0aUlucHV0KCl7XG4gICAgdGhpcy4kY2FwaWJhcmEuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJjYW5jZWxcIiwge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgZGV0YWlsOntcbiAgICAgICAgc2VsZWN0ZWQgICAgOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0YWJTZWxlY3RlZCA6IHRoaXMudGFiU2VsZWN0ZWRcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgdGhpcy5jbGVhbk11bHRpSW5wdXQoKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogTGltcGlhIGVsIGZvcm11bGFyaW8gZW4gZWwgc2lkZWJhciByaWdodFxuICAgKiBvY3VsdGEgZWwgc2lkZWJhciByaWdodFxuICAgKi9cbiAgY2xlYW5NdWx0aUlucHV0KCl7XG4gICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LnJlbW92ZShcImV4dGVuZGVkLXJpZ2h0XCIpO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgICB0aGlzLnJlZHJhd1NlbGVjdGlvbigpO1xuICB9XG5cblxuXG5cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCB2YWxvciBkZSB1biBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZWxlbSAtIGVsZW1lbnRvIGRlbCBkb20gcXVlIHJlcHJlc2VudGEgYWwgaW5wdXQsIG5vIG5lY2VzYXJpYW1lbnRlIGlucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBjb25maWd1cmFjaW9uIGRlIGlucHV0XG4gICAqIEByZXR1cm4geyp9IHZhbG9yIGRlbCBJbnB1dFxuICAgKi9cbiAgZ2V0SW5wdXRWYWx1ZShlbGVtLCBpbnB1dENvbmZpZyl7XG4gICAgbGV0IHZhbHVlICAgICAgICAgPSBudWxsO1xuICAgIGxldCBpbnB1dEVsZW1lbnQgID0gbnVsbDtcbiAgICBsZXQgaW5wdXRzRWxlbWVudCA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKGlucHV0Q29uZmlnLnR5cGUpIHtcblxuICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgdmFsdWUgPSBpbnB1dENvbmZpZy5nZXRWYWx1ZSA/IGlucHV0Q29uZmlnLmdldFZhbHVlKHtlbGVtLCBwcm9wczogaW5wdXRDb25maWd9KSA6IG51bGw7XG4gICAgICBicmVhaztcblxuICAgICAgY2FzZSAndGltZSc6XG4gICAgICAgIGxldCBoaEVsZW1lbnQ9IGVsZW0ucXVlcnlTZWxlY3RvcihcIi5ob3VyXCIpO1xuICAgICAgICBsZXQgbW1FbGVtZW50PSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCIubWludXRlc1wiKTtcbiAgICAgICAgbGV0IGhoVmFsdWUgPSBoaEVsZW1lbnQudmFsdWU7XG4gICAgICAgIGxldCBtbVZhbHVlID0gbW1FbGVtZW50LnZhbHVlO1xuICAgICAgICBpZihoaFZhbHVlKXtcbiAgICAgICAgICBoaFZhbHVlID0gcGFyc2VGbG9hdChoaFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZihtbVZhbHVlKXtcbiAgICAgICAgICBtbVZhbHVlID0gcGFyc2VGbG9hdChtbVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IHtoaDpoaFZhbHVlLCBtbTogbW1WYWx1ZX07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdtZXNzYWdlJzpcbiAgICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgaW5wdXRFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwidGV4dGFyZWFcIik7XG4gICAgICAgIHZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlIHx8ICcnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImlucHV0TGlzdFwiOlxuICAgICAgICBsZXQgdmFsdWVzSW5wdXRzID0gW107XG4gICAgICAgIGlucHV0c0VsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFt0eXBlPSdudW1iZXInXVwiKTtcbiAgICAgICAgaW5wdXRzRWxlbWVudC5mb3JFYWNoKGlucHV0RWxlbWVudCA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlSW5wdXQgPSBpbnB1dEVsZW1lbnQudmFsdWU7XG4gICAgICAgICAgaWYodmFsdWVJbnB1dCl7XG4gICAgICAgICAgICB2YWx1ZUlucHV0ID0gcGFyc2VGbG9hdCh2YWx1ZUlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGxhYmVsID0gaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZShcImlucHV0LWxhYmVsXCIpO1xuICAgICAgICAgIGxldCBpZCA9IGlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1pZFwiKTtcbiAgICAgICAgICB2YWx1ZXNJbnB1dHMucHVzaCh7bGFiZWw6bGFiZWwsIHZhbHVlOnZhbHVlSW5wdXQgLCBpZDogaWR9KTtcbiAgICAgICAgfSlcbiAgICAgICAgdmFsdWUgPSB2YWx1ZXNJbnB1dHM7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICBpbnB1dEVsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFt0eXBlPSdudW1iZXInXVwiKTtcbiAgICAgICAgdmFsdWUgPSBpbnB1dEVsZW1lbnQudmFsdWU7XG4gICAgICAgIGlmKHZhbHVlKXtcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdjaGVja2JveCc6XG4gICAgICAgIGlucHV0RWxlbWVudCA9IGVsZW0ucXVlcnlTZWxlY3RvcihcImlucHV0W3R5cGU9J2NoZWNrYm94J11cIik7XG4gICAgICAgIHZhbHVlID0gaW5wdXRFbGVtZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBpbnB1dEVsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3QuaW5wdXQtc2VsZWN0XCIpO1xuICAgICAgICBsZXQgaW5wdXRWYWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZTtcbiAgICAgICAgdmFsdWUgPSBpbnB1dENvbmZpZy5vcHRpb25zLmZpbmQobyA9PiBvLmlkID09IGlucHV0VmFsdWUpXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdmaWxlJzpcbiAgICAgICAgaW5wdXRFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbdHlwZT0nZmlsZSddXCIpO1xuICAgICAgICB2YWx1ZSA9IGlucHV0RWxlbWVudC5maWxlcztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2lucHV0LWJveCc6XG4gICAgICAgIGlucHV0c0VsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWluaS1pbnB1dC1zZWN0aW9uIGlucHV0XCIpO1xuICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICBpbnB1dHNFbGVtZW50LmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgbGV0IHYgPSBpLnZhbHVlO1xuICAgICAgICAgIGlmKHYpe1xuICAgICAgICAgICAgdiA9IHBhcnNlRmxvYXQodik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlLnB1c2goe1xuICAgICAgICAgICAgaWQgICAgOiBpLmdldEF0dHJpYnV0ZShcImlucHV0LWlkXCIpLFxuICAgICAgICAgICAga2V5ICAgOiBpLmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKSxcbiAgICAgICAgICAgIHZhbHVlIDogdixcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRhLWxpc3QnOlx0XG4gICAgICAgIGlucHV0c0VsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWluaS1pbnB1dC1zZWN0aW9uXCIpO1xuICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICBpbnB1dHNFbGVtZW50LmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgbGV0IHYgPSBpLmdldEF0dHJpYnV0ZShcImRhdGEtdmFsdWVcIilcbiAgICAgICAgICBpZih2KXtcbiAgICAgICAgICAgIHYgPSBwYXJzZUZsb2F0KHYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZS5wdXNoKHtcbiAgICAgICAgICAgIGlkICAgIDogaS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpLFxuICAgICAgICAgICAga2V5ICAgOiBpLmdldEF0dHJpYnV0ZShcImRhdGEta2V5XCIpLFxuICAgICAgICAgICAgdmFsdWUgOiB2IHx8IG51bGwsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGl0bGUnOlxuICAgICAgICAvL25vIGVzIHJlYWxtZW50ZSB1biBpbnB1dCwgZXMgc29sbyB1biB0ZXh0b1xuICAgICAgICAvL25vIGVzIG5lY2VzYXJpbyBvYnRlbmVyIHZhbG9yZXMgZGUgYXF1aVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnB1dEVsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICAgICAgaWYoaW5wdXRFbGVtZW50KXtcbiAgICAgICAgICB2YWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG5cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIEZ1bmNpb24gbGxhbWFkYSBhbCBwYXNhciBzb2JyZSB1biBpdGVtIGRlbCBzaWRlYmFyIGl6cXVpZXJkbywgXG4gICAqIHBhcmEgbW9zdHJhciB1biBkZXRhbGxlIGRlbCBpdGVtXG4gICAqIFxuICAgKiBFbCBkZXRhbGxlIGRlbCBpdGVtIHNlIGFuY2xhIGRlIG1hbmVyYSBzdXBlcmlvciBvIGluZmVyaW9yIGRlcGVuZGllbmRvIGRlIFxuICAgKiBsYSBwb3NpY2lvbiBlbCBtb3VzZSBlbiBwYW50YWxsYSwgcGFyYSBubyBzYWxpciBkZWwgY2FtcG8gdmlzdWFsIFxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZ0IC0gIEV2ZW50byByZXRvcm5hZG8gcG9yIHVuIG1vdXNlb3ZlclxuICAgKi9cbiAgb3Zlck5hdkl0ZW0oZXZ0KXtcbiAgICBsZXQgcG9zICAgICA9IGV2dC5kZXRhaWwucG9zO1xuICAgIGxldCBpdGVtICAgID0gZXZ0LmRldGFpbC5pdGVtO1xuICAgIC8vbGV0IGRhdGFEYXkgPSBldnQuZGV0YWlsLmRhdGE7XG4gICAgbGV0ICRkZXRhaWwgPSB0aGlzLiRlbGVtZW50cy4kbmF2TGVmdC5xdWVyeVNlbGVjdG9yKFwiLmRldGFpbC1uYXYtaXRlbVwiKTtcblxuICAgIGlmKCRkZXRhaWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZVwiKSl7XG4gICAgICAkZGV0YWlsLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlXCIpO1xuICAgIH07XG5cbiAgICAkZGV0YWlsLmlubmVySFRNTCA9IHRhYmxlRWxlbWVudHMuZ2V0RGV0YWlsTmF2SXRlbUNvbnRlbnQoaXRlbSk7XG5cbiAgICBpZihwb3MueVBlcmNlbnQgPiA1MCl7IC8vbWF5b3IgYSA1MCVcbiAgICAgIGlmKCEkZGV0YWlsLmNsYXNzTGlzdC5jb250YWlucyhcInRvLWJvdHRvbVwiKSl7XG4gICAgICAgICRkZXRhaWwuY2xhc3NMaXN0LmFkZChcInRvLWJvdHRvbVwiKTtcbiAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgIGlmKCRkZXRhaWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwidG8tYm90dG9tXCIpKXtcbiAgICAgICAgJGRldGFpbC5jbGFzc0xpc3QucmVtb3ZlKFwidG8tYm90dG9tXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgICRkZXRhaWwuc3R5bGUudG9wID0gcG9zLnRvcCtcInB4XCI7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBPY3VsdGEgZGV0YWxsZSBkZSBpdGVtIGVuIHNpZGViYXIgaXpxdWllcmRvIFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZ0IC0gIEV2ZW50byByZXRvcm5hZG8gcG9yIHVuIG1vdXNlb3ZlclxuICAgKi9cbiAgbGVhdmVOYXZJdGVtKCl7XG4gICAgdGhpcy4kZWxlbWVudHMuJG5hdkxlZnQucXVlcnlTZWxlY3RvcihcIi5kZXRhaWwtbmF2LWl0ZW1cIikuY2xhc3NMaXN0LmFkZChcImhpZGVcIik7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDYXB0dXJhIGV2ZW50byBtb3VzZW1vdmUgZGUgZmxvYXRCb3hDb250YWluZXJcbiAgICogcGFyYSByZWZyZXNjYXIgbGEgcG9zaWNpb24geSBkZXRlbmVyIHBvc3RlcmlvcmVzIGV2ZW50b3NcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtIEV2ZW50byBkZSBtb3VzZW1vdmVcbiAgICovXG4gIG1vdXNlTW92ZU9uRmxleEJveENvbnRhaW5lcihldnQpe1xuICAgIGxldCBwb3NpdGlvbiA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbih0aGlzLmNvbmZpZywgZXZ0LCB0aGlzLiRlbGVtZW50cy4kdGFibGUpO1xuICAgIHRoaXMucmVmcmVzaERldGFpbERheVBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJhIGV2ZW50byBtb3VzZWxlYXZlIGRlIGZsb2F0Qm94Q29udGFpbmVyXG4gICAqIHBhcmEgb2N1bHRhciBkZXRhaWxEYXlcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtIEV2ZW50byBkZSBtb3VzZWxlYXZlXG4gICAqL1xuICBtb3VzZUxlYXZlT25GbG9hdEJveENvbnRhaW5lcihldnQpe1xuICAgIHRoaXMuaGlkZURldGFpbERheSgpO1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cblxuICAvKipcbiAgICogQ2FwdHVyYSBlbCBldmVudG8gbW91c2Vtb3ZlIGVuICR0YWJsZSwgcGFyYSBpbmRpY2FyIGxhIHBvc2ljaW9uIGRlICRkYXlNb3VzZU92ZXJcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtIEV2ZW50byBkZSBtb3VzZWxlYXZlXG4gICAqL1xuICBtb3VzZU1vdmVPblRhYmxlKGV2dCl7XG4gICAgaWYodGhpcy5pc1Zpc2libGVDb250ZXh0TWVudSkgcmV0dXJuO1xuICAgIGxldCBwb3MgPSB1dGlscy5ldmVudFRvUG9zaXRpb24odGhpcy5jb25maWcsIGV2dCwgdGhpcy4kZWxlbWVudHMuJHRhYmxlKTtcbiAgICBpZih0aGlzLmxhc3RNb3VzZVBvc2l0aW9uID09IG51bGwgfHwgXG4gICAgICB0aGlzLmxhc3RNb3VzZVBvc2l0aW9uLmxlZnQgIT0gcG9zLmxlZnQgfHxcbiAgICAgIHRoaXMubGFzdE1vdXNlUG9zaXRpb24udG9wICE9IHBvcy50b3BcbiAgICApe1xuICAgICAgdGhpcy4kZWxlbWVudHMuJGRheU1vdXNlT3Zlci5zdHlsZS50cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIitwb3MubGVmdCtcInB4ICxcIitwb3MudG9wK1wicHgpXCI7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMubGFzdE1vdXNlUG9zaXRpb24gPSBwb3M7XG4gICAgfVxuICB9O1xuXG5cblxuICByaWdodENsaWNrT25DYXBpYmFyYShldnQpe1xuICAgIGlmKHRoaXMuY29uZmlnLnRpbWVsaW5lLmNvbnRleHRNZW51KXtcbiAgICAgIHRoaXMuaGlkZURldGFpbERheSgpO1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9O1xuXG4gIHJpZ2h0Q2xpY2tPblRhYmxlKGV2dCl7XG4gICAgaWYodGhpcy5jb25maWcudGltZWxpbmUuY29udGV4dE1lbnUpe1xuICAgICAgdGhpcy5oaWRlRGV0YWlsRGF5KCk7XG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudU9uVGFibGUoZXZ0KTtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfTtcblxuICBzaG93Q29udGV4dE1lbnVPblRhYmxlKGV2dCl7XG5cbiAgICBsZXQgZGF0ZSAgPSB1dGlscy5nZXREYXlCeUV2ZW50KHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG4gICAgbGV0IGl0ZW0gID0gdXRpbHMuZ2V0SXRlbUJ5RXZlbnQodGhpcy5jb25maWcsIGV2dCwgdGhpcy4kZWxlbWVudHMuJHRhYmxlKTtcblxuICAgIGlmKHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUpIHtcbiAgICAgIHRoaXMuaGlkZUNvbnRleHRNZW51KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9sZXQgcG9zaXRpb24gPSB1dGlscy5ldmVudFRvUG9zaXRpb24odGhpcy5jb25maWcsIGV2dCwgdGhpcy4kZWxlbWVudHMuJHRhYmxlKTtcbiAgICBsZXQgeyBlbGVtOiRlbGVtLCBpc1Zpc2libGUgfSA9IHRhYmxlRWxlbWVudHMuY3JlYXRlQ29udGV4dE1lbnUoe1xuICAgICAgdGFiU2VsZWN0ZWQ6IHRoaXMudGFiU2VsZWN0ZWQsXG4gICAgICAkY2FwaWJhcmFFbGVtIDogdGhpcy4kY2FwaWJhcmEsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgZXZ0LFxuICAgICAgLy9wb3NpdGlvbixcbiAgICAgIGRhdGUsXG4gICAgICBpdGVtLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICBuYW1lOiBcIm9uVGFibGVcIlxuICAgIH0pO1xuXG4gICAgaWYoJGVsZW0pe1xuICAgICAgdGhpcy5pc1Zpc2libGVDb250ZXh0TWVudSA9IGlzVmlzaWJsZTtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRjb250ZXh0TWVudS5yZXBsYWNlV2l0aCgkZWxlbSk7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kY29udGV4dE1lbnUgPSAkZWxlbTtcbiAgICB9XG4gICAgaWYoaXNWaXNpYmxlKXtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgIH1cblxuICAvKipcbiAgICogQ2FwdHVyYSBlbCBldmVudG8gY2xpY2sgZW4gJHRhYmxlLCBwYXJhIHNlbGVjY2lvbmFyIGRpYXNcbiAgICogbG9zIGRpYXMgc2VsZWNjaW9uYWRvcyBzZSByZWdpc3RyYW4gZW4gdGhpcy5zZWxlY3RlZFtdXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBFdmVudG8gZGUgbW91c2VsZWF2ZVxuICAgKi9cbiAgY2xpY2tPblRhYmxlKGV2dCl7XG5cbiAgICBsZXQgZGF0ZSAgPSB1dGlscy5nZXREYXlCeUV2ZW50KHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG4gICAgbGV0IHBvcyAgID0gdXRpbHMuZXZlbnRUb1Bvc2l0aW9uKHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG4gICAgbGV0IGl0ZW0gID0gdXRpbHMuZ2V0SXRlbUJ5RXZlbnQodGhpcy5jb25maWcsIGV2dCwgdGhpcy4kZWxlbWVudHMuJHRhYmxlKTtcblxuICAgIGlmKGl0ZW0gPT0gbnVsbCkgcmV0dXJuOyAvLyBjdWFubyBzZSBzZWxlY2Npb25hIHVuIGVzcGFjaW8gbm8gc2VsZWNjaW9uYWJsZVxuXG4gICAgLy9zaSBlcyBtb2JpbGUsIG5vIHNlbGVjY2lvbmEsIHNvbG8gbXVlc3RyYSBkZXRhbGxlc1xuICAgIGxldCBkYXRhQnlEYXRlID0gXy5maW5kKGl0ZW0uZGF0YSwge2RhdGV9KTtcbiAgICBpZih0aGlzLmlzTW9iaWxlICYmIGRhdGFCeURhdGUpe1xuICAgICAgaWYoKCFkYXRhQnlEYXRlLm1lc3NhZ2UgfHwgZGF0YUJ5RGF0ZS5tZXNzYWdlLnZhbHVlID09IG51bGwpICYmIE9iamVjdC5lbnRyaWVzKGRhdGFCeURhdGUudmFsdWVzKS5sZW5ndGggPT09IDAgKSByZXR1cm47XG4gICAgICB0aGlzLmZvY3VzT25GbG9hdEJveCh7cG9zLCBldnR9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZighdGhpcy5pc1NlbGVjdGFibGUoe2l0ZW0sIGRhdGUsIGRhdGFCeURhdGV9KSl7XG4gICAgICB0aGlzLiRjYXBpYmFyYS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNlbGVjdE5vU2VsZWN0YWJsZVwiLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICBkZXRhaWw6e1xuICAgICAgICAgIHNlbGVjdGVkICAgIDogdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgICB0YWJTZWxlY3RlZCA6IHRoaXMudGFiU2VsZWN0ZWRcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuOyAvLyBjdWFuZG8gc2Ugc2VsZWNjaW9uYSB1biBlc3BhY2lvIG5vIHNlbGVjY2lvbmFibGVcbiAgICB9IFxuXG4gICAgbGV0IGV2ZW50TmFtZSA9IFwiZGVzZWxlY3REYXlcIjtcblxuICAgIGlmKHRoaXMudG9nZ2xlU2VsZWN0KGRhdGUsIGl0ZW0sIHBvcykpe1xuICAgICAgZXZlbnROYW1lID0gXCJzZWxlY3REYXlcIjtcbiAgICB9XG5cbiAgICB0aGlzLiRjYXBpYmFyYS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgIGRldGFpbDp7XG4gICAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICAgIGxhc3RTZWxlY3Rpb24gOiB7ZGF0ZSwgaXRlbSwgcG9zfSxcbiAgICAgICAgc2VsZWN0ZWQgICAgOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0YWJTZWxlY3RlZCA6IHRoaXMudGFiU2VsZWN0ZWRcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgfTtcblxuXG5cblxuXG4gIHRvZ2dsZVNlbGVjdChkYXRlLCBpdGVtLCBwb3Mpe1xuICAgIGlmKHRoaXMuaXNTZWxlY3RlZChkYXRlLCBpdGVtKSl7XG4gICAgICB0aGlzLmRlc2VsZWN0KGRhdGUsIGl0ZW0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5zZWxlY3QoZGF0ZSwgaXRlbSwgcG9zKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuXG5cblxuXG4gIGlzU2VsZWN0ZWQoZGF0ZSwgaXRlbSl7XG4gICAgbGV0IGluZGV4ID0gdXRpbHMuaW5kZXhTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkLCB7ZGF0ZSwgaXRlbX0pO1xuICAgIHJldHVybiBpbmRleCA+IC0xO1xuICB9O1xuXG5cblxuICBpc1NlbGVjdGFibGUoe2l0ZW0sIGRhdGUsIGRhdGFCeURhdGV9KXtcblxuICAgIGlmKCF0aGlzLmNvbmZpZy50aW1lbGluZS5zZWxlY3RhYmxlKXtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZih0aGlzLmNvbmZpZy50aW1lbGluZS5ub0Z1dHVyZVNlbGVjdGFibGUpe1xuICAgICAgbGV0IGQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgIGxldCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICBpZihkID4gdG9kYXkpe1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGl0ZW1Jc1NlbGVjdGFibGUgPSB0cnVlO1xuICAgIGlmKHRoaXMudGFiU2VsZWN0ZWQgJiYgdGhpcy50YWJTZWxlY3RlZC5zZWxlY3RhYmxlSWZIYXMpe1xuICAgICAgaWYoIWl0ZW0udmFsdWVzW3RoaXMudGFiU2VsZWN0ZWQuc2VsZWN0YWJsZUlmSGFzXSl7XG4gICAgICAgIGl0ZW1Jc1NlbGVjdGFibGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1Jc1NlbGVjdGFibGU7XG4gIH07XG5cbiAgcmVkcmF3U2VsZWN0aW9uKCl7XG4gICAgICB0aGlzLmNoZWNrQ2xhc3NTaWRlYmFyRXh0ZW5kZWRSaWdodCgpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdTZWxlY3RCb2FyZCh0aGlzLiRlbGVtZW50cy4kc2VsZWN0Q29udGFpbmVyLCB0aGlzLnNlbGVjdGVkKTtcbiAgfTtcblxuXG5cblxuXG5cbiAgZGVzZWxlY3QoZGF0ZSwgaXRlbSwgcmVkcmF3ID0gdHJ1ZSl7XG4gICAgaWYodGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pICApe1xuICAgICAgbGV0IGluZGV4ID0gdXRpbHMuaW5kZXhTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkLCB7ZGF0ZSwgaXRlbX0pO1xuICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SW5kZXhUb1NlbGVjdGVkKCk7XG5cbiAgICBpZihyZWRyYXcpe1xuICAgICAgdGhpcy5yZWRyYXdTZWxlY3Rpb24oKVxuICAgIH1cbiAgfTtcblxuXG5cblxuXG5cblxuICBzZWxlY3QoZGF0ZSwgaXRlbSwgcG9zLCByZWRyYXcgPSB0cnVlKXtcbiAgICBpZighdGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pKXtcblxuICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHtcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIGRhdGUsXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIHBvcyxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgZGF0YURheSA9IG51bGw7XG4gICAgICBpZihpdGVtLmRhdGEpe1xuICAgICAgICBkYXRhRGF5ID0gaXRlbS5kYXRhLmZpbmQoZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGQuZGF0ZSA9PSBkYXRlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gc2kgZXMgZWwgcHJpbWVyIGl0ZW0gc2VsZWNjaW9uYWRvLCBzZSBhdXRvcnJlbGxlbmEgZWwgZm9ybXVsYXJpbyBkZSBuYXZSaWdodFxuICAgICAgaWYodGhpcy5zZWxlY3RlZC5sZW5ndGggPT0gMSl7XG5cbiAgICAgICAgdGhpcy4kZWxlbWVudHMuJGNvcm5lclJpZ2h0ID0gdGFibGVFbGVtZW50cy5yZWRyYXdDb3JuZXJSaWdodCh0aGlzLiRlbGVtZW50cy4kY29ybmVyUmlnaHQsIHRoaXMuY29uZmlnLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICAgICAgbGV0IHtpbnB1dHMsIGVsZW1lbnQsIGlucHV0c1dpdGhSZWxvYWQsIHNhdmVDYW5jZWxCdG5zfSA9IHRhYmxlRWxlbWVudHMucmVkcmF3TmF2UmlnaHQodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiRuYXZSaWdodCwgdGhpcy5zZWxlY3RlZCwgdGhpcy50YWJTZWxlY3RlZCwgZGF0YURheSwgdGhpcy5zZWxlY3RlZFswXSk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnRzLiRuYXZSaWdodCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0ID0gaW5wdXRzO1xuICAgICAgICB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkID0gaW5wdXRzV2l0aFJlbG9hZDtcbiAgICAgICAgdGhpcy4kc2F2ZUNhbmNlbEJ0bnMgPSBzYXZlQ2FuY2VsQnRucztcbiAgICAgIH1cblxuICAgIH1cblxuXG4gICAgbGV0IGZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLiRpbnB1dHNOYXZSaWdodC5mb3JFYWNoKGlucHV0TmF2UmlnaHQgPT4ge1xuICAgICAgaWYoIWZvY3VzZWQpe1xuICAgICAgICBsZXQgdmFsaWRJbnB1dHMgPSBpbnB1dE5hdlJpZ2h0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFwiKTtcbiAgICAgICAgaWYodmFsaWRJbnB1dHMgJiYgdmFsaWRJbnB1dHMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgbGV0IGZpcnN0VmFsaWRJbnB1dCA9IF8uZmlyc3QodmFsaWRJbnB1dHMpO1xuXG4gICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBcbiAgICAgICAgICAgIGZpcnN0VmFsaWRJbnB1dC5mb2N1cygpO1xuICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgICAgZm9jdXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5zZXRJbmRleFRvU2VsZWN0ZWQoKTtcblxuICAgIGlmKHJlZHJhdyl7XG4gICAgICB0aGlzLnJlZHJhd1NlbGVjdGlvbigpXG4gICAgfVxuICB9O1xuXG5cbiAgc2V0SW5kZXhUb1NlbGVjdGVkKCl7XG4gICAgdGhpcy5zZWxlY3RlZC5mb3JFYWNoKChzLCBpbmRleCkgPT4ge1xuICAgICAgcy5pbmRleCA9IGluZGV4KzE7XG4gICAgfSlcbiAgfTtcblxuXG4gIGlzU2VsZWN0ZWRBbGxEYXRlKGRhdGUpe1xuICAgIGxldCBpc0FsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLmNvbmZpZy5kYXRhLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZighdGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pKXtcbiAgICAgICAgICBpc0FsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBpc0FsbFNlbGVjdGVkO1xuICB9O1xuXG4gIHNlbGVjdEJ5RGF0ZShkYXRlKXtcbiAgICB0aGlzLmNvbmZpZy5kYXRhLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdEJ5SXRlbURhdGUoZGF0ZSwgaXRlbSwgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgZGVzZWxlY3RCeURhdGUoZGF0ZSl7XG4gICAgdGhpcy5jb25maWcuZGF0YS5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgdGhpcy5kZXNlbGVjdEJ5SXRlbURhdGUoZGF0ZSwgaXRlbSwgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgc2VsZWN0QnlJdGVtRGF0ZShkYXRlLCBpdGVtLCByZWRyYXcgPSB0cnVlKXtcbiAgICBpZighdGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pKXtcbiAgICAgIGxldCBwb3MgPSB1dGlscy5nZXRQb3NpdGlvbkJ5SXRlbURhdGUodGhpcy5jb25maWcsIGl0ZW0sIGRhdGUpO1xuICAgICAgdGhpcy5zZWxlY3QoZGF0ZSwgaXRlbSwgcG9zLCByZWRyYXcpO1xuICAgIH1cbiAgfTtcblxuXG4gIGRlc2VsZWN0QnlJdGVtRGF0ZShkYXRlLCBpdGVtLCByZWRyYXcgPSB0cnVlKXtcbiAgICBpZih0aGlzLmlzU2VsZWN0ZWQoZGF0ZSwgaXRlbSkpe1xuICAgICAgdGhpcy5kZXNlbGVjdChkYXRlLCBpdGVtLCByZWRyYXcpO1xuICAgIH1cbiAgfTtcblxuXG5cblxuXG5cbiAgY2hlY2tDbGFzc1NpZGViYXJFeHRlbmRlZFJpZ2h0KCl7XG4gICAgaWYodGhpcy5zZWxlY3RlZC5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5hZGQoXCJleHRlbmRlZC1yaWdodFwiKTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5yZW1vdmUoXCJleHRlbmRlZC1yaWdodFwiKTtcbiAgICB9XG5cbiAgfTtcblxuXG5cblxuICAvKipcbiAgICogb2N1bHRhIGRldGFpbERheSBlbiBlbCBkb20sIHVzYW5kbyBsYSBjbGFzZSBkZC1oaWRlXG4gICAqL1xuICBoaWRlRGV0YWlsRGF5KCl7XG4gICAgdGhpcy4kZWxlbWVudHMuJGRldGFpbERheS5jbGFzc0xpc3QuYWRkKFwiZGQtaGlkZVwiKTtcbiAgfTtcblxuICBoaWRlQ29udGV4dE1lbnUoKXtcbiAgICBpZih0aGlzLiRlbGVtZW50cy4kY29udGV4dE1lbnUpe1xuICAgICAgdGhpcy4kZWxlbWVudHMuJGNvbnRleHRNZW51LmNsYXNzTGlzdC5hZGQoXCJjbS1oaWRlXCIpO1xuICAgIH1cbiAgICB0aGlzLmlzVmlzaWJsZUNvbnRleHRNZW51ID0gZmFsc2U7XG4gIH07XG5cblxuICByZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCl7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuc2Nyb2xsTGVmdCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsTGVmdDtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5zY3JvbGxUb3AgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbFRvcDtcblxuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLnNjcm9sbFdpZHRoID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5zY3JvbGxXaWR0aDtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5zY3JvbGxIZWlnaHQgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbEhlaWdodDtcblxuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLmJvdW5kaW5nQ2xpZW50VGFibGUgPSB0aGlzLiRlbGVtZW50cy4kdGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuYm91bmRpbmdDbGllbnRDb250YWluZXIgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG5cbiAgcmVmcmVzaFZpcnR1YWxTY3JvbGxWYXJzKCl7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuY29udGFpbmVyV2lkdGggPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuY2xpZW50SGVpZ2h0O1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLm5hdldpZHRoID0gdGhpcy4kZWxlbWVudHMuJG5hdkxlZnQuY2xpZW50V2lkdGg7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuaGVhZGVySGVpZ2h0ID0gdGhpcy4kZWxlbWVudHMuJGhlYWRlci5jbGllbnRIZWlnaHQ7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuZGF5V2lkdGggPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0tZGF5LXdpZHRoXCIpKTtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5pdGVtSGVpZ2h0ID0gcGFyc2VGbG9hdCh1dGlscy5nZXRDU1NWYXJpYWJsZSh0aGlzLmNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpKTtcbiAgfVxuXG4gIHJlZnJlc2hWaXJ0dWFsU2Nyb2xsKCl7XG4gICAgbGV0ICRmbG9hdEJveExpc3QgPSB0aGlzLiRlbGVtZW50cy4kZmxvYXRCb3hDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5mbG9hdC1ib3hcIik7XG4gICAgJGZsb2F0Qm94TGlzdC5mb3JFYWNoKGYgPT57XG4gICAgICBpZih0aGlzLmlzVmlzaWJsZUZsb2F0Qm94RWxlbWVudChmKSl7XG4gICAgICAgIGYuc2V0QXR0cmlidXRlKFwiZGF0YS1pcy12aXNpYmxlXCIsIHRydWUpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGYuc2V0QXR0cmlidXRlKFwiZGF0YS1pcy12aXNpYmxlXCIsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaXNWaXNpYmxlRmxvYXRCb3hFbGVtZW50KGYpe1xuICAgIGxldCBjb250YWluZXJXaWR0aCA9IHV0aWxzLnRhYmxlUG9zaXRpb25zLmNvbnRhaW5lcldpZHRoO1xuICAgIGxldCBjb250YWluZXJIZWlnaHQgPSB1dGlscy50YWJsZVBvc2l0aW9ucy5jb250YWluZXJIZWlnaHQ7XG4gICAgbGV0IG5hdldpZHRoID0gdXRpbHMudGFibGVQb3NpdGlvbnMubmF2V2lkdGg7XG4gICAgbGV0IGhlYWRlckhlaWdodCA9IHV0aWxzLnRhYmxlUG9zaXRpb25zLmhlYWRlckhlaWdodDtcbiAgICBsZXQgZGF5V2lkdGggPSB1dGlscy50YWJsZVBvc2l0aW9ucy5kYXlXaWR0aDtcbiAgICBsZXQgaXRlbUhlaWdodCA9IHV0aWxzLnRhYmxlUG9zaXRpb25zLml0ZW1IZWlnaHQ7XG4gICAgbGV0IHNjcm9sbExlZnQgPSB1dGlscy50YWJsZVBvc2l0aW9ucy5zY3JvbGxMZWZ0O1xuICAgIGxldCBzY3JvbGxUb3AgPSB1dGlscy50YWJsZVBvc2l0aW9ucy5zY3JvbGxUb3A7XG5cbiAgICBsZXQgbWFyZ2luID0gZGF5V2lkdGg7XG4gICAgbGV0IGxlZnQgPSBwYXJzZUZsb2F0KGYuc3R5bGUubGVmdCk7XG4gICAgbGV0IHRvcCA9IHBhcnNlRmxvYXQoZi5zdHlsZS50b3ApO1xuXG4gICAgbGV0IHZpc2libGVXaWR0aCA9IGNvbnRhaW5lcldpZHRoIC0gbmF2V2lkdGggO1xuICAgIGxldCB2aXNpYmxlSGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0IC0gaGVhZGVySGVpZ2h0O1xuXG4gICAgbGV0IGlzVmlzaWJsZUxlZnQgPSAgbGVmdCA+IHNjcm9sbExlZnQgLSBkYXlXaWR0aCAtIG1hcmdpbjtcbiAgICBsZXQgaXNWaXNpYmxlUmlnaHQgPSBsZWZ0IDwgKCBzY3JvbGxMZWZ0ICsgdmlzaWJsZVdpZHRoICsgZGF5V2lkdGggKyBtYXJnaW4pO1xuICAgIGxldCBpc1Zpc2libGVUb3AgPSB0b3AgPiAoc2Nyb2xsVG9wIC0gaXRlbUhlaWdodCAtIG1hcmdpbik7XG4gICAgbGV0IGlzVmlzaWJsZUJvdHRvbSA9IHRvcCA8IChzY3JvbGxUb3AgKyB2aXNpYmxlSGVpZ2h0ICsgaXRlbUhlaWdodCArIG1hcmdpbik7XG5cbiAgICByZXR1cm4gaXNWaXNpYmxlTGVmdCAmJiBpc1Zpc2libGVSaWdodCAmJiBpc1Zpc2libGVUb3AgJiYgaXNWaXNpYmxlQm90dG9tO1xuICB9XG5cblxuICBvblNjcm9sbENvbnRhaW5lcigpe1xuICAgIGlmKCF0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsRGVib3VuY2VkKXtcbiAgICAgIHRoaXMucmVmcmVzaFZpcnR1YWxTY3JvbGxEZWJvdW5jZWQgPSB1dGlscy50aHJvdHRsZSh0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsLmJpbmQodGhpcyksIDEwMCwgXG4gICAgICAgIHtsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogdHJ1ZX0pO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hTY3JvbGxVdGlsc1ZhcnMoKTtcbiAgICB0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsRGVib3VuY2VkKCk7XG4gICAgdGhpcy5oaWRlQ29udGV4dE1lbnUoKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogTXVlc3RyYSBEZXRhaWwgZGlhbG9nIHkgUmVmcmVzY2Egc3UgcG9zaWNpb24gXG4gICAqIHVzYW5kbyBlbCBldmVudG8gZGVsIG1vdXNlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBldmVudG8gZGUgbW91c2Vtb3ZlLCBwYXJhIHBvc2ljaW9uZXMgZW4gcGFudGFsbGFcbiAgICovXG4gIHJlZnJlc2hEZXRhaWxEYXlQb3NpdGlvbihwb3NpdGlvbil7XG4gICAgbGV0IGRheVdpZHRoID0gcGFyc2VGbG9hdCh1dGlscy5nZXRDU1NWYXJpYWJsZSh0aGlzLmNvbmZpZywgXCItLWRheS13aWR0aFwiKSk7XG4gICAgbGV0IGl0ZW1IZWlnaHQgPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0taXRlbS1oZWlnaHRcIikpO1xuXG4gICAgdGhpcy4kZWxlbWVudHMuJGRldGFpbERheS5zdHlsZS50b3AgID0gcG9zaXRpb24udG9wICsgXCJweFwiO1xuICAgIHRoaXMuJGVsZW1lbnRzLiRkZXRhaWxEYXkuc3R5bGUubGVmdCA9IHBvc2l0aW9uLmxlZnQgKyBkYXlXaWR0aCArIFwicHhcIjtcblxuICAgIGxldCB5UG9zaXRpb25DbGFzcyA9IFwiaGFzLXRvcC1hcnJvd1wiO1xuICAgIGxldCB4UG9zaXRpb25DbGFzcyA9IFwiXCI7XG5cbiAgICAvL2NvbmRpY2lvbiBwYXJhIHByaW1lcmFzIDMgZmlsYXNcbiAgICBpZihwb3NpdGlvbi50b3BDbGllbnQgPD0gaXRlbUhlaWdodCAqMyApe1xuICAgICAgeVBvc2l0aW9uQ2xhc3MgPSBcImhhcy1jZWlsLWFycm93XCI7XG4gICAgfWVsc2UgaWYoIHBvc2l0aW9uLnlQZXJjZW50ID4gMjAgJiZcbiAgICAgIHBvc2l0aW9uLnlQZXJjZW50IDw9IDcwKXsgLy9lbnRyZSAyMCB5IDUwICVcbiAgICAgIHlQb3NpdGlvbkNsYXNzID0gXCJoYXMtbWlkZGxlLWFycm93XCI7XG4gICAgfWVsc2UgaWYocG9zaXRpb24ueVBlcmNlbnQgPiA3MCl7XG4gICAgICB5UG9zaXRpb25DbGFzcyA9IFwiaGFzLWJvdHRvbS1hcnJvd1wiO1xuICAgIH1cblxuICAgIGlmKHBvc2l0aW9uLnhQZXJjZW50ID4gMzAgKXtcbiAgICAgIHhQb3NpdGlvbkNsYXNzID0gXCJoYXMtcmlnaHQtYXJyb3dcIjtcbiAgICB9XG5cbiAgICAvL3F1aXRhIGRkLWhpZGUsIHNvYnJlZXNjcmliaWVuZG8gdG9kYXMgbGFzIGNsYXNlc1xuICAgIHRoaXMuJGVsZW1lbnRzLiRkZXRhaWxEYXkuY2xhc3NOYW1lID0gXCJkZXRhaWwtZGF5IFwiKyB5UG9zaXRpb25DbGFzcyArIFwiIFwiICsgeFBvc2l0aW9uQ2xhc3M7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZXZlbnRvIGNsaWNrIGVuIGJvdG9uIHBhcmEgYWJyaXIgYXJib2wsIGVuIHNpZGViYXIgaXpxdWllcmRvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBvYmpldG8gZXZlbnRvIGNsaWNrXG4gICAqL1xuICBjbGlja05hdkxlZnRUcmVlSWNvbigpe1xuICAgIHRoaXMucmVkcmF3KHtcbiAgICAgIGZsb2F0Qm94OiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5yZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQ2FwdHVyYSBldmVudG8gbW91c2VvdmVyIHNvYnJlIGVsZW1lbnRvIGZsb2F0Qm94XG4gICAqIHVzYWRhIHBhcmEgbW9zdHJhciBkZXRhbGxlIGRlIGRpYS9pdGVtIGRlbCBmbG9hdGJveFxuICAgKi9cbiAgbW91c2VPdmVyRmxvYXRCb3goZXZ0LCBmb3JjZSl7XG4gICAgICBsZXQgaXRlbSAgICA9IGV2dC5kZXRhaWwuaXRlbTtcbiAgICAgIGxldCBkYXRhRGF5ID0gZXZ0LmRldGFpbC5kYXRhO1xuXG4gICAgICAvL3ZlcmlmaWNhIHF1ZSBzZWFuIGRpYXMgZGlzdGludG9zLCBjb21wYXJhbmRvbG8gY29uIGVsIGFudGVyaW9yLFxuICAgICAgLy8gcGFyYSBubyBjcmVhciBudWV2YW1lbnRlIGVsIG1pc21vIGRldGFpbC1kYXksIGNvbiBsb3MgbWlzbW9zIGRhdG9zXG4gICAgICBpZihkYXRhRGF5ICE9PSB0aGlzLmxhc3REYXRhRGF5IHx8IGZvcmNlKXtcbiAgICAgICAgbGV0IG5ld0REQ29udGVudFN0cmluZyA9IHRhYmxlRWxlbWVudHMucmVkcmF3RGV0YWlsRGF5KHRoaXMuY29uZmlnLCBpdGVtLCBkYXRhRGF5LCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICAgICAgaWYobmV3RERDb250ZW50U3RyaW5nKXtcbiAgICAgICAgICB0aGlzLiRlbGVtZW50cy4kZGV0YWlsRGF5LmlubmVySFRNTCA9IG5ld0REQ29udGVudFN0cmluZztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhc3REYXRhRGF5ID0gZGF0YURheTtcbiAgICAgIH1cbiAgfVxuXG4gIGNsaWNrRGF0ZUhlYWRlcihldnQpe1xuICAgIGxldCBkYXRlID0gZXZ0LmRldGFpbC5kYXRlO1xuICAgIHRoaXMudG9nZ2xlU2VsZWN0QnlEYXRlKGRhdGUpO1xuICAgIHRoaXMucmVkcmF3U2VsZWN0aW9uKCk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RCeURhdGUoZGF0ZSl7XG4gICAgaWYodGhpcy5pc1NlbGVjdGVkQWxsRGF0ZShkYXRlKSl7XG4gICAgICB0aGlzLmRlc2VsZWN0QnlEYXRlKGRhdGUpO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5zZWxlY3RCeURhdGUoZGF0ZSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLnNvcnQoKHMsIG4pID0+IHtcbiAgICAgIHJldHVybiAobmV3IERhdGUocy5kYXRlKSkgLSAobmV3IERhdGUobi5kYXRlKSk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXRJbmRleFRvU2VsZWN0ZWQoKTtcbiAgfVxuXG5cbiAgY29udGV4dE1lbnVEYXRlSGVhZGVyKGV2dCl7XG4gICAgbGV0IGxlZnQgPSBldnQuZGV0YWlsLmNsaWVudFg7XG4gICAgbGV0IHRvcCA9IGV2dC5kZXRhaWwuY2xpZW50WSAtIHRoaXMuJGNhcGliYXJhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICBsZXQgZGF0ZSA9IGV2dC5kZXRhaWwuZGF0ZTtcbiAgICBjb25zdCB0YXJnZXQgPSBldnQuZGV0YWlsLiRlbGVtO1xuXG4gICAgbGV0IHsgZWxlbTokZWxlbSwgaXNWaXNpYmxlIH0gPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUNvbnRleHRNZW51KHtcbiAgICAgIHRhYlNlbGVjdGVkOiB0aGlzLnRhYlNlbGVjdGVkLFxuICAgICAgdGFyZ2V0LFxuICAgICAgJGNhcGliYXJhRWxlbTogdGhpcy4kY2FwaWJhcmEsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICBkYXRlLFxuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIG5hbWU6IFwib25EYXRlSGVhZGVyXCJcbiAgICB9KTtcblxuICAgIGlmKCRlbGVtKXtcbiAgICAgIHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUgPSBpc1Zpc2libGU7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kY29udGV4dE1lbnUucmVwbGFjZVdpdGgoJGVsZW0pO1xuICAgICAgdGhpcy4kZWxlbWVudHMuJGNvbnRleHRNZW51ID0gJGVsZW07XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyYSBldmVudG8gd2luZG93IHJlc2l6ZVxuICAgKiBwYXJhIHZlcmlmaWNhciBzaSBlcyBtb2JpbGUgbyBub1xuICAgKi9cbiAgb25XaW5kb3dSZXNpemUoKXtcbiAgICBpZih0aGlzLmluaXRpYWxpemVkKXtcbiAgICAgIGxldCBvbGRWYWx1ZSA9IHRoaXMuaXNNb2JpbGU7XG4gICAgICBsZXQgbmV3VmFsdWUgPSB1dGlscy5jaGVja0lzTW9iaWxlKCk7XG4gICAgICBpZihvbGRWYWx1ZSAhPSBuZXdWYWx1ZSApe1xuICAgICAgICB0aGlzLmlzTW9iaWxlID0gbmV3VmFsdWU7XG4gICAgICAgIHRoaXMudG9nZ2xlU2lkZWJhck1vYmlsZSgpO1xuICAgICAgICB0aGlzLnNldEFsbENTU1ZhcmlhYmxlcygpO1xuICAgICAgICB0aGlzLnJlZHJhdyh7IGZsb2F0Qm94OnRydWUsIG5hdkxlZnQ6dHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICAgICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FtYmlhIHNpZGViYXIgcGFyYSBtb2JpbGUsIHNlZ3VuIHZhcmlhYmxlIHRoaXMuaXNNb2JpbGVcbiAgICovXG4gIHRvZ2dsZVNpZGViYXJNb2JpbGUoKXtcbiAgICAgIGlmKHRoaXMuaXNNb2JpbGUpe1xuICAgICAgICB0aGlzLnNldFNob3dOYXZJbml0aWFsKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRTaG93TmF2RXh0ZW5kZWQoZmFsc2UpO1xuICAgICAgICB0aGlzLnNldFNob3dOYXZCdXR0b25zKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRFZGl0YWJsZShmYWxzZSk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0YWJsZShmYWxzZSk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5zZXRTaG93TmF2SW5pdGlhbCh0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRTaG93TmF2RXh0ZW5kZWQoZmFsc2UpO1xuICAgICAgICB0aGlzLnNldFNob3dOYXZCdXR0b25zKHRydWUpO1xuICAgICAgICB0aGlzLnNldEVkaXRhYmxlKHRydWUpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGFibGUodHJ1ZSk7XG4gICAgICB9XG4gICAgdGhpcy5yZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKTtcbiAgfVxuXG4gIHNldEVkaXRhYmxlKG5ld0VkaXRhYmxlKXtcbiAgICBpZih0aGlzLmNvbmZpZy50aW1lbGluZS5lZGl0YWJsZSAhPSBuZXdFZGl0YWJsZSl7XG4gICAgICB0aGlzLmNvbmZpZy50aW1lbGluZS5lZGl0YWJsZSA9IG5ld0VkaXRhYmxlO1xuICAgICAgdGhpcy5yZWRyYXcoe25hdkxlZnQ6dHJ1ZSwgaGVhZGVyOnRydWV9KTtcbiAgICB9XG4gIH1cblxuICBzZXRTZWxlY3RhYmxlKG5ld1NlbGVjdGFibGUpe1xuICAgIGlmKHRoaXMuY29uZmlnLnRpbWVsaW5lLnNlbGVjdGFibGUgIT0gbmV3U2VsZWN0YWJsZSl7XG4gICAgICB0aGlzLmNvbmZpZy50aW1lbGluZS5zZWxlY3RhYmxlID0gbmV3U2VsZWN0YWJsZTtcbiAgICAgIHRoaXMuY2xlYW5NdWx0aUlucHV0KCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNPbkZsb2F0Qm94KHtwb3MsIGV2dH0pe1xuICAgIGlmKHRoaXMuaXNNb2JpbGUpe1xuICAgICAgbGV0IGNvbnRhaW5lcldpZHRoID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5jbGllbnRXaWR0aDtcbiAgICAgIGxldCBkYXlXaWR0aCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1kYXktd2lkdGhcIikpO1xuICAgICAgbGV0IG5hdldpZHRoID0gcGFyc2VGbG9hdCh1dGlscy5nZXRDU1NWYXJpYWJsZSh0aGlzLmNvbmZpZywgXCItLW5hdi13aWR0aFwiKSk7XG4gICAgICBsZXQgbGVmdCA9IHBvcy5sZWZ0IC0gY29udGFpbmVyV2lkdGggKyAxLjUgKiBkYXlXaWR0aCArIG5hdldpZHRoO1xuXG4gICAgICAvL2xldCBjb250YWluZXJIZWlnaHQgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgICAgIGxldCBpdGVtSGVpZ2h0ID0gcGFyc2VGbG9hdCh1dGlscy5nZXRDU1NWYXJpYWJsZSh0aGlzLmNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpKTtcbiAgICAgIC8vbGV0IGhlYWRlckhlaWdodCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1oZWFkZXItaGVpZ2h0XCIpKTtcbiAgICAgIGxldCB0b3AgPSBwb3MudG9wIC0gMC41ICogaXRlbUhlaWdodDtcblxuICAgICAgbGV0IHBvc2l0aW9uID0gdXRpbHMuZXZlbnRUb1Bvc2l0aW9uKHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG4gICAgICB0aGlzLnJlZnJlc2hEZXRhaWxEYXlQb3NpdGlvbih7XG4gICAgICAgIC4uLnBvc2l0aW9uLFxuICAgICAgICB0b3BDbGllbnQgOiBwb3NpdGlvbi55SW5uZXJQZXJjZW50ID49IDcwID8gcG9zaXRpb24udG9wQ2xpZW50IDogMCwgLy8gZnVlcnphIHBvc2ljaW9uIGRlIGFycm93IGVuIGRldGFpbGRheVxuICAgICAgICB4UGVyY2VudCAgOiBwb3NpdGlvbi54IDwgNCA/IDA6IDEwMCAgLy8gZnVlcnphIGFycm93IHJpZ2h0XG4gICAgICB9KTtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsKHtcbiAgICAgICAgdG9wLCBsZWZ0LFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgIH0pO1xuXG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaElucHV0c1dpdGhSZWxvYWQoe2RldGFpbH0pe1xuICAgIHRoaXMuJGlucHV0c1dpdGhSZWxvYWQgPSB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkLm1hcCgoeyAkaW5wdXQsIGNvbmZpZ30pID0+IHtcbiAgICAgIGxldCBsYXN0U2VsZWN0aW9uID0gZGV0YWlsICYmIGRldGFpbC5sYXN0U2VsZWN0aW9uID8gZGV0YWlsLmxhc3RTZWxlY3Rpb24gOiBudWxsO1xuICAgICAgbGV0IG5ld0lucHV0ID0gdGFibGVFbGVtZW50cy5jcmVhdGVJbnB1dChjb25maWcsIG51bGwsIGxhc3RTZWxlY3Rpb24sIGRldGFpbC5zZWxlY3RlZCk7XG4gICAgICAkaW5wdXQucGFyZW50RWxlbWVudC5yZXBsYWNlQ2hpbGQobmV3SW5wdXQsICRpbnB1dCk7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLiRpbnB1dHNOYXZSaWdodC5pbmRleE9mKCRpbnB1dCk7XG4gICAgICBpZihpbmRleCA+PSAwKXtcbiAgICAgICAgdGhpcy4kaW5wdXRzTmF2UmlnaHRbaW5kZXhdID0gbmV3SW5wdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4geyRpbnB1dDogbmV3SW5wdXQsIGNvbmZpZ31cbiAgICB9KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQWdyZWdhIGV2ZW50b3MgYSBsb3MgZWxlbWVudG9zIGRlbCBkb20gZGUgbGEgcGxhbmlsbGFcbiAgICogdXNhbmRvIGVsIG9iamVjdG8gJGNhcGliYXJhXG4gICAqL1xuICBhZGRFdmVudHMoKXtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiAgICAgICAgICAgICAgICAsIHRoaXMuaGlkZUNvbnRleHRNZW51LmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiICAgICAgICAgICwgdGhpcy5yaWdodENsaWNrT25DYXBpYmFyYS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlRGFya1wiICAgICAgICAgICAsIHRoaXMudG9nZ2xlRGFyay5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlSGVhZGVyXCIgICAgICAgICAsIHRoaXMudG9nZ2xlSGVhZGVyLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b2dnbGVTaWRlYmFyXCIgICAgICAgICwgdGhpcy50b2dnbGVTaWRlYmFyLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b2dnbGVTaWRlYmFyUmlnaHRcIiAgICwgdGhpcy50b2dnbGVTaWRlYmFyUmlnaHQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcInNhdmVNdWx0aUlucHV0XCIgICAgICAgLCB0aGlzLnNhdmVJbnB1dHNOYXZSaWdodC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwiY2FuY2VsTXVsdGlJbnB1dFwiICAgICAsIHRoaXMuY2FuY2VsTXVsdGlJbnB1dC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwib3Zlck5hdkl0ZW1cIiAgICAgICAgICAsIHRoaXMub3Zlck5hdkl0ZW0uYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcImxlYXZlTmF2SXRlbVwiICAgICAgICAgLCB0aGlzLmxlYXZlTmF2SXRlbS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tOYXZMZWZ0VHJlZUljb25cIiAsIHRoaXMuY2xpY2tOYXZMZWZ0VHJlZUljb24uYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlT3ZlckZsb2F0Qm94XCIgICAgLCB0aGlzLm1vdXNlT3ZlckZsb2F0Qm94LmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3RUYWJIZWFkZXJcIiAgICAgICwgZSA9PiB7IHRoaXMuc2VsZWN0VGFiKGUuZGV0YWlsLnRhYik7IH0pO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3RMZWdlbmRIZWFkZXJcIiAgICwgdGhpcy5zZWxlY3RMZWdlbmQuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0RGF5XCIgICAsIHRoaXMucmVmcmVzaElucHV0c1dpdGhSZWxvYWQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcImRlc2VsZWN0RGF5XCIgICAsIHRoaXMucmVmcmVzaElucHV0c1dpdGhSZWxvYWQuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLiRlbGVtZW50cy4kZmxvYXRCb3hDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLm1vdXNlTW92ZU9uRmxleEJveENvbnRhaW5lci5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRlbGVtZW50cy4kZmxvYXRCb3hDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgdGhpcy5tb3VzZUxlYXZlT25GbG9hdEJveENvbnRhaW5lci5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMuJGVsZW1lbnRzLiR0YWJsZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHRoaXMubW91c2VNb3ZlT25UYWJsZS5iaW5kKHRoaXMpICk7XG4gICAgdGhpcy4kZWxlbWVudHMuJHRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmNsaWNrT25UYWJsZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRlbGVtZW50cy4kdGFibGUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMucmlnaHRDbGlja09uVGFibGUuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5vblNjcm9sbENvbnRhaW5lci5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrRGF0ZVwiLCB0aGlzLmNsaWNrRGF0ZUhlYWRlci5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0TWVudURhdGVcIiwgdGhpcy5jb250ZXh0TWVudURhdGVIZWFkZXIuYmluZCh0aGlzKSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJyx0aGlzLm9uV2luZG93UmVzaXplLmJpbmQodGhpcykpO1xuXG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEZ1bmNpb24gcGFyYSByZWRpYnVqYXIgcGFydGVzIGRlIGxhIHBsYW5pbGxhLCBpbmRpY2FkbyBzZWd1biBwYXJhbWV0cm9cbiAgICpcbiAgICogICAgb3B0aW9ucyA6IHtcbiAgICogICAgICAgICAgICBmbG9hdEJveDogQm9vbGVhbixcbiAgICogICAgICAgICAgICBwbG90czogQm9vbGVhbixcbiAgICogICAgICAgICAgICBoZWFkZXI6IEJvb2xlYW4sXG4gICAqICAgICAgICAgICAgbmF2TGVmdDogQm9vbGVhbixcbiAgICogICAgICAgICAgICBuYXZSaWdodDogQm9vbGVhbixcbiAgICogICAgfVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9iamVjdG8gZGUgY29uZmlndXJhY2lvblxuICAgKi9cbiAgcmVkcmF3KG9wdGlvbnMpe1xuXG4gICAgaWYob3B0aW9ucy5mbG9hdEJveCl7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd0Zsb2F0Qm94KHRoaXMuY29uZmlnLCB0aGlzLnRhYlNlbGVjdGVkLCB0aGlzLiRlbGVtZW50cy4kZmxvYXRCb3hDb250YWluZXIpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdCYWNrZ3JvdW5kKHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kYmFja2dyb3VuZCk7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd1Bsb3RWZXJ0aWNhbENvbnRhaW5lcih0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJHBsb3RWZXJ0aWNhbENvbnRhaW5lcik7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd1Bsb3RIb3Jpem9udGFsQ29udGFpbmVyKHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kcGxvdEhvcml6b250YWxDb250YWluZXIpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdUb2RheUxpbmUodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiR0b2RheUxpbmUpO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMucGxvdHMpe1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdQbG90VmVydGljYWxDb250YWluZXIodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiRwbG90VmVydGljYWxDb250YWluZXIpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdQbG90SG9yaXpvbnRhbENvbnRhaW5lcih0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJHBsb3RIb3Jpem9udGFsQ29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmhlYWRlcil7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd0hlYWRlcih0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJGhlYWRlcik7XG4gICAgICBpZih0aGlzLmNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmVuYWJsZWQgIT09IGZhbHNlKXtcbiAgICAgICAgbGV0ICRoZWFkZXJFeHRlbmRlZCA9IHRhYmxlRWxlbWVudHMuY3JlYXRlSGVhZGVyRXh0ZW5kZWQodGhpcy5jb25maWcpO1xuICAgICAgICBpZigkaGVhZGVyRXh0ZW5kZWQpe1xuICAgICAgICAgIHRoaXMuJGVsZW1lbnRzLiRoZWFkZXIuYXBwZW5kKCRoZWFkZXJFeHRlbmRlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmhlYWRlclRvcCl7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kaGVhZGVyVG9wID0gdGFibGVFbGVtZW50cy5yZWRyYXdIZWFkZXJUb3AodGhpcy5jb25maWcsIHRoaXMudGFiU2VsZWN0ZWQsIHRoaXMuJGVsZW1lbnRzLiRoZWFkZXJUb3ApO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMuZGV0YWlsRGF5KXtcbiAgICAgIHRoaXMuaGlkZURldGFpbERheSgpO1xuICAgICAgdGhpcy5sYXN0RGF0YURheSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy5uYXZMZWZ0KXtcbiAgICAgIHRhYmxlRWxlbWVudHMucmVkcmF3TmF2TGVmdCh0aGlzLiRlbGVtZW50cy4kbmF2TGVmdCwgdGhpcy5jb25maWcsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICAgICAgc3R5bGVVdGlscy5zZXROYXZTdHlsZSh0aGlzLmNvbmZpZyk7XG4gICAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRJbml0aWFsU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2SW5pdGlhbCwgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRFeHRlbmRlZFN0eWxlKHRoaXMuY29uZmlnLCB0aGlzLmlzU2hvd05hdkV4dGVuZGVkLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmNvcm5lckxlZnQpe1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdDb3JuZXIodGhpcy4kZWxlbWVudHMuJGNvcm5lciwgdGhpcy5jb25maWcsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMubmF2UmlnaHQpe1xuICAgICAgICBsZXQge2lucHV0cywgZWxlbWVudCwgaW5wdXRzV2l0aFJlbG9hZCwgc2F2ZUNhbmNlbEJ0bnN9ICAgID0gdGFibGVFbGVtZW50cy5yZWRyYXdOYXZSaWdodCh0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJG5hdlJpZ2h0LCB0aGlzLnNlbGVjdGVkICwgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnRzLiRuYXZSaWdodCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0ICAgICA9IGlucHV0cztcbiAgICAgICAgdGhpcy4kaW5wdXRzV2l0aFJlbG9hZCA9IGlucHV0c1dpdGhSZWxvYWQ7XG4gICAgICAgIHRoaXMuJHNhdmVDYW5jZWxCdG5zID0gc2F2ZUNhbmNlbEJ0bnM7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKTtcblxuICB9XG5cblxuICAvKipcbiAgICogTXVldmUgZWwgU2Nyb2xsIGRlIGxhIHBsYW5pbGxhIGFsIGluaWNpb1xuICAgKi9cbiAgc2Nyb2xsVG9TdGFydCgpe1xuICAgIHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsTGVmdCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogTXVldmUgZWwgU2Nyb2xsIGRlIGxhIHBsYW5pbGxhIGFsIGluaWNpb1xuICAgKi9cbiAgc2Nyb2xsVG9FbmQoKXtcbiAgICB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbExlZnQgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbFdpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIE11ZXZlIGVsIFNjcm9sbCBkZSBsYSBwbGFuaWxsYSBhIGxhIHRlcmNlcmEgcGFydGVcbiAgICogVE9ETyBtZWpvcmFyIGxvZ2ljYSBkZSBlc3RhIGZ1bmNpb25cbiAgICovXG4gIHNjcm9sbFRvTWlkZGxlKCl7XG4gICAgdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5zY3JvbGxMZWZ0ID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5zY3JvbGxXaWR0aCAvIDM7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEZpamEgbGFzIHZhcmlhYmxlcyBkZSBDU3Mgc2VndW4gQ29uZmlnXG4gICAqL1xuICBzZXRBbGxDU1NWYXJpYWJsZXMoKXtcbiAgICBsZXQgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgLy9zdHlsZVV0aWxzLmNsZWFuU3R5bGUoY29uZmlnKTtcbiAgICBzdHlsZVV0aWxzLnNldEhlYWRlclN0eWxlKGNvbmZpZyk7XG4gICAgc3R5bGVVdGlscy5zZXROYXZTdHlsZShjb25maWcpO1xuICAgIHN0eWxlVXRpbHMuc2V0TmF2TGVmdEluaXRpYWxTdHlsZShjb25maWcsIHRoaXMuaXNTaG93TmF2SW5pdGlhbCwgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgc3R5bGVVdGlscy5zZXROYXZMZWZ0RXh0ZW5kZWRTdHlsZShjb25maWcsIHRoaXMuaXNTaG93TmF2RXh0ZW5kZWQsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICAgIHN0eWxlVXRpbHMuc2V0TmF2TGVmdEJ1dHRvbnNTdHlsZShjb25maWcsIHRoaXMuaXNTaG93TmF2QnV0dG9ucywgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgc3R5bGVVdGlscy5zZXRUYWJsZVN0eWxlKGNvbmZpZyk7XG4gIH1cblxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFvQkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUhBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFIQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVFBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUEzR0E7QUFDQTtBQTRHQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBSEE7QUFXQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUpBO0FBS0E7QUFDQTtBQUFBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqK0NBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/lib/capibara.js\n");
|
|
187
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Capibara\", function() { return Capibara; });\n/* harmony import */ var _util_domUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/domUtils */ \"./src/util/domUtils.js\");\n/* harmony import */ var _util_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/utils */ \"./src/util/utils.js\");\n/* harmony import */ var _util_tableElements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/tableElements */ \"./src/util/tableElements.js\");\n/* harmony import */ var _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/styleUtils */ \"./src/util/styleUtils.js\");\n\n //import dateUtils from '../util/dateUtils';\n\n\n\n/**\n * Capibara, planilla para despliegue de datos por fecha como GANTT\n * orientado inicialmente a datos diarios de items\n *\n * @author Patricio. M. Rojas. <patricio@irricrops.com>\n */\n\nclass Capibara {\n /**\n * @constructor\n * Instancia variables de planilla Capibara, con configuracion\n * Crea el elemento contenedor {containerElement} segun selector\n *\n * @param {Object} attributes - atributos que se usaran al iniciar la planilla\n * @param {Object} attributes.config - Configuracion de planilla\n */\n constructor({\n config\n }) {\n if (config == null) console.error(\"config no econtrado\");\n this.containerElement = document.querySelector(config.selector);\n if (this.containerElement == null) console.error(\"Elemento dom segun config.selector, no encontrado\");\n this.initialized = false;\n this.$capibara = null;\n this.$elements = {};\n this.tabSelected = null;\n this.$inputsNavRight = [];\n this.$inputsWithReload = [];\n this.$saveCancelBtns = [];\n this.selected = [];\n this.config = config;\n this.lastDataDay = null;\n this.isShowNavExtended = false;\n this.isShowNavInitial = true;\n this.isShowNavButtons = true;\n this.isMobile = false;\n this.lastMousePosition = null;\n this.isVisibleContextMenu = false;\n this.isDisabledInputsNavRight = false;\n }\n /**\n * Inicializa Planilla:\n * - vacia variables necesarias\n * - crea planilla llamando a drawTable\n * - Agrega eventos a planilla\n * - mueve scroll al medio de la tabla\n */\n\n\n init() {\n this.tabSelected = null;\n this.$capibara = null;\n this.$elements = {};\n this.$inputsNavRight = [];\n this.$inputsWithReload = [];\n this.$saveCancelBtns = [];\n this.selected = [];\n this.lastDataDay = null;\n this.isMobile = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].checkIsMobile();\n this.isVisibleContextMenu = false;\n this.setAllCSSVariables();\n this.drawTable();\n this.addEvents();\n this.scrollToMiddle();\n this.toggleSidebarMobile();\n this.initialized = true;\n }\n /**\n * Cambia configuracion de planilla\n *\n * @param {Object} config - Configuracion nueva para planilla\n */\n\n\n setConfig(config) {\n this.config = config;\n }\n /**\n * Crea la planilla\n * agregando todos los elementos en orden dentro\n *\n * @return { DomElement } $capibara - elemento del Dom que contiene toda la planilla\n */\n\n\n drawTable() {\n let config = this.config;\n let initialTab = config.timeline.tabs[0];\n let firstChildren = {};\n\n if (config.data && config.data.length > 0 && config.data[0].children.length > 0) {\n firstChildren = config.data[0].children[0];\n }\n\n let $capibara = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createAgTable(config);\n let $corner = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCorner(config, initialTab);\n let $cornerRight = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCornerRight(config);\n let $headerTop = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderTop(config);\n let $header = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeader(config);\n let $todayLine = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createTodayLine(config);\n let $headerExtended = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderExtended(config);\n let $navLeft = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createNavLeft(config);\n let $cornerFooter = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createCornerFooter(config);\n let $footer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createFooter(config);\n let $floatBoxContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createFloatBox(config, initialTab);\n let $selectContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createSelectBoard(config);\n let $plotVerticalContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createPlotVerticalContainer(config);\n let $plotHorizontalContainer = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createPlotHorizontalContainer(config);\n let $detailDay = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createDetailDay(config, firstChildren);\n let {\n elem: $contextMenu,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n config\n });\n this.isVisibleContextMenu = isVisible;\n let $navRight, inputs, inputsWithReload, saveCancelBtns;\n ({\n element: $navRight,\n inputs,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createNavRight(config));\n let $background = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createBackground(config);\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"container-tl\"\n });\n let $dayMouseOver = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"day-mouse-over\"\n });\n let {\n height,\n width\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n let $table = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"table\",\n style: {\n 'width': width + \"px\",\n 'height': height + \"px\"\n }\n });\n $table.appendChild($background);\n $table.appendChild($dayMouseOver);\n $table.appendChild($detailDay);\n $table.appendChild($selectContainer);\n $table.appendChild($floatBoxContainer);\n\n if ($headerExtended) {\n $header.appendChild($headerExtended);\n }\n\n $container.appendChild($header);\n $container.appendChild($plotVerticalContainer);\n $container.appendChild($plotHorizontalContainer);\n $container.appendChild($todayLine);\n $container.appendChild($navLeft);\n $container.appendChild($table);\n if ($cornerFooter) $container.appendChild($cornerFooter);\n if ($footer) $container.appendChild($footer);\n $capibara.appendChild($headerTop);\n $capibara.appendChild($corner);\n $capibara.appendChild($cornerRight);\n $capibara.appendChild($container);\n $capibara.appendChild($navRight);\n if ($contextMenu) $capibara.appendChild($contextMenu);\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n this.$capibara = $capibara;\n this.$elements = {\n $headerTop,\n $detailDay,\n $contextMenu,\n $floatBoxContainer,\n $selectContainer,\n $table,\n $background,\n $plotVerticalContainer,\n $plotHorizontalContainer,\n $dayMouseOver,\n $container,\n $navRight,\n $navLeft,\n $header,\n $todayLine,\n $corner,\n $cornerRight\n };\n this.containerElement.innerHTML = \"\";\n this.containerElement.appendChild($capibara);\n this.selectTab(initialTab);\n return $capibara;\n }\n /**\n * Cambia el modo oscuro, segun el estado actual\n */\n\n\n toggleDark() {\n this.setDark(!Boolean(this.config.timeline.dark));\n }\n /**\n * Cambia el modo oscuro, segun parametro\n *\n * @param {Boolean} [isDark = false] - indica si se activa el modo oscuro o no\n */\n\n\n setDark(isDark = false) {\n let darkClassName = \"dark-theme\";\n this.config.timeline.dark = isDark;\n\n if (isDark) {\n this.$capibara.classList.add(darkClassName);\n } else {\n this.$capibara.classList.remove(darkClassName);\n }\n }\n /**\n * Cambia el tema de color secundario, segun parametro\n * -Quita todos los posibles colores de la planilla, obteniendolos de Tabs\n * -Agrega el color enviado por parametro como clase del domElement $capibara\n *\n * @param {String} color - color, como nombre de clase, para agregar \n */\n\n\n changeColorTheme(color) {\n this.config.timeline.tabs.forEach(tab => {\n this.$capibara.classList.remove(tab.color);\n });\n this.$capibara.classList.add(color);\n }\n /**\n * Selecciona tab en planilla\n * si redraw == true , redibuja navRight y floatBox\n * ya que son inputs y esteticas personalizadas por Tab\n *\n * @param {Object} tab - tab, obtenida desde configuracion\n * @param {Boolean} [redraw=true] - opcion de redibujado\n */\n\n\n selectTab(tab, redraw = true) {\n if (tab) {\n this.tabSelected = tab;\n this.cleanMultiInput();\n\n if (redraw) {\n this.redraw({\n headerTop: true,\n cornerLeft: true,\n navLeft: true,\n navRight: true,\n floatBox: true\n });\n }\n\n this.changeColorTheme(tab.color);\n this.$capibara.dispatchEvent(new CustomEvent(\"selectTab\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tabSelected: this.tabSelected\n }\n }));\n } else {\n console.error(\"tab no encontrada\");\n }\n }\n\n selectLegend(evt) {\n let legend = evt.detail.legend;\n evt.detail.$legend.classList.toggle(\"active\");\n\n if (legend) {\n legend.active = !legend.active;\n }\n\n this.redraw({\n floatBox: true,\n detailDay: true\n });\n }\n /**\n * muestra alternadamente los sidebar initial y extended\n */\n\n\n toggleSidebar() {\n this.setShowNavInitial(!this.isShowNavInitial);\n\n if (!this.isMobile) {\n this.setShowNavExtended(!this.isShowNavExtended);\n } else {\n let cornerInputTitles = this.$elements.$corner.querySelector(\".input-titles\");\n\n if (cornerInputTitles) {\n cornerInputTitles.style.display = this.isShowNavInitial ? \"none\" : \"flex\";\n }\n }\n\n this.refreshScrollUtilsVars();\n }\n /**\n * Oculta nav initial , extended y buttons\n */\n\n\n hideSidebars() {\n this.setShowNavInitial(false);\n this.setShowNavExtended(false);\n this.setShowNavButtons(false);\n }\n /**\n * Muestra/Oculta Sidebar inicial\n */\n\n\n setShowNavInitial(isShowNavInitial) {\n this.isShowNavInitial = isShowNavInitial;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(this.config, this.isShowNavInitial, this.tabSelected);\n }\n /**\n * Muestra/Oculta Sidebar extendido\n */\n\n\n setShowNavExtended(isShowNavExtended) {\n this.isShowNavExtended = isShowNavExtended;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(this.config, this.isShowNavExtended, this.tabSelected);\n }\n /**\n * Muestra/Oculta Sidebar buttons\n */\n\n\n setShowNavButtons(isShowNavButtons) {\n this.isShowNavButtons = isShowNavButtons;\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftButtonsStyle(this.config, this.isShowNavButtons, this.tabSelected);\n }\n /**\n * Muestra/oculta Sidebar Derecho\n */\n\n\n toggleSidebarRight() {\n let isHidden = !this.$capibara.classList.contains(\"extended-right\");\n this.setVisibleSidebarRight(!isHidden);\n this.refreshScrollUtilsVars();\n }\n /**\n * Modifica la opcion de mostrar y ocultar sidebar derecho\n *\n * @param {Boolean} [show = true] - indica si debe mostrarse u ocultarse\n */\n\n\n setVisibleSidebarRight(show = true) {\n let fn = show ? \"add\" : \"remove\";\n this.$capibara.classList[fn](\"extended-right\");\n }\n /**\n * Muestra/oculta Header extendido (inputs)\n */\n\n\n toggleHeader() {\n this.$capibara.classList.toggle(\"header-extended\");\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n /**\n * Muestra/oculta barra de carga de planilla \n * Si se llama sin parametros, por defecto muestra el loading derecho\n * que corresponde al sidebar-right\n *\n * @param {String} [position = \"right\"] - escoge loading, puede ser \"left\" | \"right\"\n * @param {Boolean} [show = true] - indica si mostrar u ocultar loading\n */\n\n\n loading(position = \"right\", show = true) {\n let fn = show ? \"remove\" : \"add\";\n let element = this.$capibara.querySelector(\".progress-bar-\" + position);\n element.classList[fn](\"hide-progress\");\n }\n\n setDisableInputsNavRight(isDisabled = true) {\n this.isDisabledInputsNavRight = isDisabled;\n this.$inputsNavRight.forEach($inputContainer => {\n let $inputs = $inputContainer.querySelectorAll(\"input\");\n $inputs.forEach($i => {\n $i.setAttribute(\"disabled\", isDisabled);\n });\n });\n let btns = this.$saveCancelBtns.querySelectorAll(\"button\");\n btns.forEach(btn => {\n btn.setAttribute(\"disabled\", isDisabled);\n });\n }\n /**\n * Busca un boton segun selector, y le agrega la clase \"loading\"\n * y deshabilita el boton\n *\n * @param { String } [ selector = '[cap-btn-calendar]' ] - selector de boton\n * @param { Boolean } [isLoading = true] - define si esta cargando o no\n */\n\n\n loadingBtn(selector = \"[cap-btn-calendar]\", isLoading = true) {\n let element = this.$capibara.querySelector(selector);\n\n if (element) {\n let fn = isLoading ? \"add\" : \"remove\";\n element.classList[fn](\"loading\");\n\n if (isLoading) {\n element.setAttribute(\"disabled\", \"\");\n } else {\n element.removeAttribute(\"disabled\");\n }\n }\n }\n /**\n * Crea Evento de guardado de los inputs del Sidebar Right\n * obtiene todos los valores de los inputs registrados en this.$inputs y \n * los retorna creando el evento \"save\"\n *\n */\n\n\n saveInputsNavRight() {\n let inputValues = [];\n let isValid = this.validateInputsNavRight();\n\n if (!isValid) {\n return;\n }\n\n this.setDisableInputsNavRight(true);\n this.$inputsNavRight.forEach($input => {\n let key = $input.getAttribute(\"input-key\");\n let inputConfig = this.tabSelected.inputs.find(t => t.key == key);\n\n if (inputConfig) {\n inputValues.push({\n key: key,\n inputConfig: inputConfig,\n el: $input,\n value: this.getInputValue($input, inputConfig)\n });\n }\n });\n this.$capibara.dispatchEvent(new CustomEvent(\"save\", {\n bubbles: true,\n cancelable: false,\n detail: {\n inputValues: inputValues,\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n }\n\n validateInputsNavRight() {\n let isFormValid = true;\n this.$inputsNavRight.forEach($input => {\n let isInputValid = true;\n let key = $input.getAttribute(\"input-key\");\n let inputConfig = this.tabSelected.inputs.find(t => t.key == key);\n\n if (inputConfig) {\n let value = this.getInputValue($input, inputConfig);\n\n if (inputConfig.required) {\n if (value === \"\" || value === null || value.length == 0) {\n isFormValid = false;\n isInputValid = false;\n }\n }\n\n if (inputConfig.validation && !inputConfig.validation({\n value,\n inputConfig,\n $input\n })) {\n isFormValid = false;\n isInputValid = false;\n }\n\n if (!isInputValid) {\n $input.classList.add(\"is-invalid\");\n } else {\n $input.classList.remove(\"is-invalid\");\n }\n }\n });\n return isFormValid;\n }\n /**\n * Cancela formulario de sidebar right\n */\n\n\n cancelMultiInput() {\n this.$capibara.dispatchEvent(new CustomEvent(\"cancel\", {\n bubbles: true,\n cancelable: false,\n detail: {\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n this.cleanMultiInput();\n }\n /**\n * Limpia el formulario en el sidebar right\n * oculta el sidebar right\n */\n\n\n cleanMultiInput() {\n this.$capibara.classList.remove(\"extended-right\");\n this.selected = [];\n this.redrawSelection();\n }\n /**\n * Obtiene el valor de un input\n *\n * @param {Object} elem - elemento del dom que representa al input, no necesariamente input\n * @param {Object} config - configuracion de input\n * @return {*} valor del Input\n */\n\n\n getInputValue(elem, inputConfig) {\n let value = null;\n let inputElement = null;\n let inputsElement = null;\n\n switch (inputConfig.type) {\n case 'custom':\n value = inputConfig.getValue ? inputConfig.getValue({\n elem,\n props: inputConfig\n }) : null;\n break;\n\n case 'time':\n let hhElement = elem.querySelector(\".hour\");\n let mmElement = elem.querySelector(\".minutes\");\n let hhValue = hhElement.value;\n let mmValue = mmElement.value;\n\n if (hhValue) {\n hhValue = parseFloat(hhValue);\n }\n\n if (mmValue) {\n mmValue = parseFloat(mmValue);\n }\n\n value = {\n hh: hhValue,\n mm: mmValue\n };\n break;\n\n case 'message':\n case 'textarea':\n inputElement = elem.querySelector(\"textarea\");\n value = inputElement.value || '';\n break;\n\n case \"inputList\":\n let valuesInputs = [];\n inputsElement = elem.querySelectorAll(\"input[type='number']\");\n inputsElement.forEach(inputElement => {\n let valueInput = inputElement.value;\n\n if (valueInput) {\n valueInput = parseFloat(valueInput);\n }\n\n let label = inputElement.getAttribute(\"input-label\");\n let id = inputElement.getAttribute(\"input-id\");\n valuesInputs.push({\n label: label,\n value: valueInput,\n id: id\n });\n });\n value = valuesInputs;\n break;\n\n case 'number':\n case 'float':\n inputElement = elem.querySelector(\"input[type='number']\");\n value = inputElement.value;\n\n if (value) {\n value = parseFloat(value);\n }\n\n break;\n\n case 'checkbox':\n inputElement = elem.querySelector(\"input[type='checkbox']\");\n value = inputElement.checked;\n break;\n\n case 'select':\n inputElement = elem.querySelector(\"select.input-select\");\n let inputValue = inputElement.value;\n value = inputConfig.options.find(o => o.id == inputValue);\n break;\n\n case 'file':\n inputElement = elem.querySelector(\"input[type='file']\");\n value = inputElement.files;\n break;\n\n case 'input-box':\n inputsElement = elem.querySelectorAll(\".mini-input-section input\");\n value = [];\n inputsElement.forEach(i => {\n let v = i.value;\n\n if (v) {\n v = parseFloat(v);\n }\n\n value.push({\n id: i.getAttribute(\"input-id\"),\n key: i.getAttribute(\"input-key\"),\n value: v\n });\n });\n break;\n\n case 'data-list':\n inputsElement = elem.querySelectorAll(\".mini-input-section\");\n value = [];\n inputsElement.forEach(i => {\n let v = i.getAttribute(\"data-value\");\n\n if (v) {\n v = parseFloat(v);\n }\n\n value.push({\n id: i.getAttribute(\"data-id\"),\n key: i.getAttribute(\"data-key\"),\n value: v || null\n });\n });\n break;\n\n case 'title':\n //no es realmente un input, es solo un texto\n //no es necesario obtener valores de aqui\n break;\n\n case 'text':\n default:\n inputElement = elem.querySelector(\"input\");\n\n if (inputElement) {\n value = inputElement.value;\n }\n\n }\n\n return value;\n }\n /**\n * Funcion llamada al pasar sobre un item del sidebar izquierdo, \n * para mostrar un detalle del item\n * \n * El detalle del item se ancla de manera superior o inferior dependiendo de \n * la posicion el mouse en pantalla, para no salir del campo visual \n *\n *\n * @param {Object} evt - Evento retornado por un mouseover\n */\n\n\n overNavItem(evt) {\n let pos = evt.detail.pos;\n let item = evt.detail.item; //let dataDay = evt.detail.data;\n\n let $detail = this.$elements.$navLeft.querySelector(\".detail-nav-item\");\n\n if ($detail.classList.contains(\"hide\")) {\n $detail.classList.remove(\"hide\");\n }\n\n ;\n $detail.innerHTML = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDetailNavItemContent(item);\n\n if (pos.yPercent > 50) {\n //mayor a 50%\n if (!$detail.classList.contains(\"to-bottom\")) {\n $detail.classList.add(\"to-bottom\");\n }\n } else {\n if ($detail.classList.contains(\"to-bottom\")) {\n $detail.classList.remove(\"to-bottom\");\n }\n }\n\n $detail.style.top = pos.top + \"px\";\n }\n /**\n * Oculta detalle de item en sidebar izquierdo \n *\n * @param {Object} evt - Evento retornado por un mouseover\n */\n\n\n leaveNavItem() {\n this.$elements.$navLeft.querySelector(\".detail-nav-item\").classList.add(\"hide\");\n }\n /**\n * Captura evento mousemove de floatBoxContainer\n * para refrescar la posicion y detener posteriores eventos\n *\n * @param {Object} evt - Evento de mousemove\n */\n\n\n mouseMoveOnFlexBoxContainer(evt) {\n let position = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n this.refreshDetailDayPosition(position);\n evt.preventDefault();\n }\n /**\n * Captura evento mouseleave de floatBoxContainer\n * para ocultar detailDay\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n mouseLeaveOnFloatBoxContainer(evt) {\n this.hideDetailDay();\n evt.preventDefault();\n }\n /**\n * Captura el evento mousemove en $table, para indicar la posicion de $dayMouseOver\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n mouseMoveOnTable(evt) {\n if (this.isVisibleContextMenu) return;\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n\n if (this.lastMousePosition == null || this.lastMousePosition.left != pos.left || this.lastMousePosition.top != pos.top) {\n this.$elements.$dayMouseOver.style.transform = \"translate(\" + pos.left + \"px ,\" + pos.top + \"px)\";\n evt.preventDefault();\n this.lastMousePosition = pos;\n }\n }\n\n rightClickOnCapibara(evt) {\n if (this.config.timeline.contextMenu) {\n this.hideDetailDay();\n evt.preventDefault();\n }\n }\n\n rightClickOnTable(evt) {\n if (this.config.timeline.contextMenu) {\n this.hideDetailDay();\n this.showContextMenuOnTable(evt);\n evt.preventDefault();\n }\n }\n\n showContextMenuOnTable(evt) {\n let date = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getDayByEvent(this.config, evt, this.$elements.$table);\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemByEvent(this.config, evt, this.$elements.$table);\n\n if (this.isVisibleContextMenu) {\n this.hideContextMenu();\n return;\n } //let position = utils.eventToPosition(this.config, evt, this.$elements.$table);\n\n\n let {\n elem: $elem,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n tabSelected: this.tabSelected,\n $capibaraElem: this.$capibara,\n config: this.config,\n evt,\n //position,\n date,\n item,\n selected: this.selected,\n name: \"onTable\"\n });\n\n if ($elem) {\n this.isVisibleContextMenu = isVisible;\n this.$elements.$contextMenu.replaceWith($elem);\n this.$elements.$contextMenu = $elem;\n }\n\n if (isVisible) {\n evt.preventDefault();\n }\n }\n /**\n * Captura el evento click en $table, para seleccionar dias\n * los dias seleccionados se registran en this.selected[]\n *\n * @param {Object} evt - Evento de mouseleave\n */\n\n\n clickOnTable(evt) {\n let date = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getDayByEvent(this.config, evt, this.$elements.$table);\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemByEvent(this.config, evt, this.$elements.$table); //if(item == null) return; // cuano se selecciona un espacio no seleccionable\n //si es mobile, no selecciona, solo muestra detalles\n\n let dataByDate = _.find(item.data, {\n date\n });\n\n if (this.isMobile && dataByDate) {\n if ((!dataByDate.message || dataByDate.message.value == null) && Object.entries(dataByDate.values).length === 0) return;\n this.focusOnFloatBox({\n pos,\n evt\n });\n return;\n }\n\n if (!this.isSelectable({\n item,\n date,\n dataByDate\n })) {\n this.$capibara.dispatchEvent(new CustomEvent(\"selectNoSelectable\", {\n bubbles: true,\n cancelable: false,\n detail: {\n selected: this.selected,\n tabSelected: this.tabSelected,\n lastSelection: {\n date,\n item,\n pos\n }\n }\n }));\n return; // cuando se selecciona un espacio no seleccionable\n }\n\n let eventName = \"deselectDay\";\n\n if (this.toggleSelect(date, item, pos)) {\n eventName = \"selectDay\";\n }\n\n this.$capibara.dispatchEvent(new CustomEvent(eventName, {\n bubbles: true,\n cancelable: false,\n detail: {\n config: this.config,\n lastSelection: {\n date,\n item,\n pos\n },\n selected: this.selected,\n tabSelected: this.tabSelected\n }\n }));\n }\n\n toggleSelect(date, item, pos) {\n if (this.isSelected(date, item)) {\n this.deselect(date, item);\n return false;\n } else {\n this.select(date, item, pos);\n return true;\n }\n }\n\n isSelected(date, item) {\n let index = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].indexSelectedDay(this.selected, {\n date,\n item\n });\n return index > -1;\n }\n\n isSelectable({\n item,\n date,\n dataByDate\n }) {\n if (!this.config.timeline.selectable) {\n return false;\n }\n\n if (item.selectable === false) {\n return false;\n }\n\n if (this.config.timeline.noFutureSelectable) {\n let d = new Date(date);\n let today = new Date();\n\n if (d > today) {\n return false;\n }\n }\n\n let itemIsSelectable = true;\n\n if (this.tabSelected && this.tabSelected.selectableIfHas) {\n if (!item.values[this.tabSelected.selectableIfHas]) {\n itemIsSelectable = false;\n }\n }\n\n return itemIsSelectable;\n }\n\n redrawSelection() {\n this.checkClassSidebarExtendedRight();\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawSelectBoard(this.$elements.$selectContainer, this.selected);\n }\n\n deselect(date, item, redraw = true) {\n if (this.isSelected(date, item)) {\n let index = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].indexSelectedDay(this.selected, {\n date,\n item\n });\n this.selected.splice(index, 1);\n }\n\n this.setIndexToSelected();\n\n if (redraw) {\n this.redrawSelection();\n }\n }\n\n select(date, item, pos, redraw = true, refreshForm = true) {\n if (!this.isSelected(date, item)) {\n this.selected.push({\n index: 0,\n date,\n item,\n pos\n });\n let dataDay = null;\n\n if (item.data) {\n dataDay = item.data.find(d => {\n return d.date == date;\n });\n } // si es el primer item seleccionado, se autorrellena el formulario de navRight\n\n\n if (this.selected.length == 1 && refreshForm) {\n this.redraw({\n cornerRight: true\n });\n let {\n inputs,\n element,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavRight(this.config, this.$elements.$navRight, this.selected, this.tabSelected, dataDay, this.selected[0]);\n this.$elements.$navRight = element;\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n }\n }\n\n let focused = false;\n this.$inputsNavRight.forEach(inputNavRight => {\n if (!focused) {\n let validInputs = inputNavRight.querySelectorAll(\"input\");\n\n if (validInputs && validInputs.length > 0) {\n let firstValidInput = _.first(validInputs);\n\n window.setTimeout(function () {\n firstValidInput.focus();\n }, 0);\n focused = true;\n }\n }\n });\n this.setIndexToSelected();\n\n if (redraw) {\n this.redrawSelection();\n }\n }\n\n setIndexToSelected() {\n this.selected.forEach((s, index) => {\n s.index = index + 1;\n });\n }\n\n isSelectedAllDate(date) {\n let isAllSelected = true;\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n if (!this.isSelected(date, item)) {\n isAllSelected = false;\n }\n });\n });\n return isAllSelected;\n }\n\n selectByDate(date) {\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n this.selectByItemDate(date, item, false);\n });\n });\n }\n\n deselectByDate(date) {\n this.config.data.forEach(parent => {\n parent.children.forEach(item => {\n this.deselectByItemDate(date, item, false);\n });\n });\n }\n\n selectByItemDate(date, item, redraw = true, refreshForm = true) {\n if (!this.isSelected(date, item)) {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItemDate(this.config, item, date);\n this.select(date, item, pos, redraw, refreshForm);\n }\n }\n\n deselectByItemDate(date, item, redraw = true) {\n if (this.isSelected(date, item)) {\n this.deselect(date, item, redraw);\n }\n }\n\n deselectAll(redraw = false) {\n this.selected = [];\n\n if (redraw) {\n this.redrawSelection();\n }\n }\n\n checkClassSidebarExtendedRight() {\n if (this.selected.length > 0) {\n this.$capibara.classList.add(\"extended-right\");\n } else {\n this.$capibara.classList.remove(\"extended-right\");\n }\n }\n\n /**\n * oculta detailDay en el dom, usando la clase dd-hide\n */\n hideDetailDay() {\n this.$elements.$detailDay.classList.add(\"dd-hide\");\n }\n\n hideContextMenu() {\n if (this.$elements.$contextMenu) {\n this.$elements.$contextMenu.classList.add(\"cm-hide\");\n }\n\n this.isVisibleContextMenu = false;\n }\n\n refreshScrollUtilsVars() {\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollLeft = this.$elements.$container.scrollLeft;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollTop = this.$elements.$container.scrollTop;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollWidth = this.$elements.$container.scrollWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollHeight = this.$elements.$container.scrollHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.boundingClientTable = this.$elements.$table.getBoundingClientRect();\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.boundingClientContainer = this.$elements.$container.getBoundingClientRect();\n }\n\n refreshVirtualScrollVars() {\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerWidth = this.$elements.$container.clientWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerHeight = this.$elements.$container.clientHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.navWidth = this.$elements.$navLeft.clientWidth;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.headerHeight = this.$elements.$header.clientHeight;\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\"));\n }\n\n refreshVirtualScroll() {\n let $floatBoxList = this.$elements.$floatBoxContainer.querySelectorAll(\".float-box\");\n $floatBoxList.forEach(f => {\n if (this.isVisibleFloatBoxElement(f)) {\n f.setAttribute(\"data-is-visible\", true);\n } else {\n f.setAttribute(\"data-is-visible\", false);\n }\n });\n }\n\n isVisibleFloatBoxElement(f) {\n let containerWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerWidth;\n let containerHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.containerHeight;\n let navWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.navWidth;\n let headerHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.headerHeight;\n let dayWidth = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.dayWidth;\n let itemHeight = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.itemHeight;\n let scrollLeft = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollLeft;\n let scrollTop = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].tablePositions.scrollTop;\n let margin = dayWidth;\n let left = parseFloat(f.style.left);\n let top = parseFloat(f.style.top);\n let visibleWidth = containerWidth - navWidth;\n let visibleHeight = containerHeight - headerHeight;\n let isVisibleLeft = left > scrollLeft - dayWidth - margin;\n let isVisibleRight = left < scrollLeft + visibleWidth + dayWidth + margin;\n let isVisibleTop = top > scrollTop - itemHeight - margin;\n let isVisibleBottom = top < scrollTop + visibleHeight + itemHeight + margin;\n return isVisibleLeft && isVisibleRight && isVisibleTop && isVisibleBottom;\n }\n\n onScrollContainer() {\n if (!this.refreshVirtualScrollDebounced) {\n this.refreshVirtualScrollDebounced = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].throttle(this.refreshVirtualScroll.bind(this), 100, {\n leading: true,\n trailing: true\n });\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollDebounced();\n this.hideContextMenu();\n }\n /**\n * Muestra Detail dialog y Refresca su posicion \n * usando el evento del mouse\n *\n * @param {Object} evt - evento de mousemove, para posiciones en pantalla\n */\n\n\n refreshDetailDayPosition(position) {\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\"));\n this.$elements.$detailDay.style.top = position.top + \"px\";\n this.$elements.$detailDay.style.left = position.left + dayWidth + \"px\";\n let yPositionClass = \"has-top-arrow\";\n let xPositionClass = \"\"; //condicion para primeras 3 filas\n\n if (position.topClient <= itemHeight * 3) {\n yPositionClass = \"has-ceil-arrow\";\n } else if (position.yPercent > 20 && position.yPercent <= 70) {\n //entre 20 y 50 %\n yPositionClass = \"has-middle-arrow\";\n } else if (position.yPercent > 70) {\n yPositionClass = \"has-bottom-arrow\";\n }\n\n if (position.xPercent > 30) {\n xPositionClass = \"has-right-arrow\";\n } //quita dd-hide, sobreescribiendo todas las clases\n\n\n this.$elements.$detailDay.className = \"detail-day \" + yPositionClass + \" \" + xPositionClass;\n }\n /**\n * Captura evento click en boton para abrir arbol, en sidebar izquierdo\n *\n * @param {Object} evt - objeto evento click\n */\n\n\n clickNavLeftTreeIcon() {\n this.redraw({\n floatBox: true\n });\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n /**\n * Captura evento mouseover sobre elemento floatBox\n * usada para mostrar detalle de dia/item del floatbox\n */\n\n\n mouseOverFloatBox(evt, force) {\n let item = evt.detail.item;\n let dataDay = evt.detail.data; //verifica que sean dias distintos, comparandolo con el anterior,\n // para no crear nuevamente el mismo detail-day, con los mismos datos\n\n if (dataDay !== this.lastDataDay || force) {\n let newDDContentString = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawDetailDay(this.config, item, dataDay, this.tabSelected);\n\n if (newDDContentString) {\n this.$elements.$detailDay.innerHTML = newDDContentString;\n }\n\n this.lastDataDay = dataDay;\n }\n }\n\n clickDateHeader(evt) {\n let date = evt.detail.date;\n this.toggleSelectByDate(date);\n this.redrawSelection();\n }\n\n toggleSelectByDate(date) {\n if (this.isSelectedAllDate(date)) {\n this.deselectByDate(date);\n } else {\n this.selectByDate(date);\n }\n\n this.selected = this.selected.sort((s, n) => {\n return new Date(s.date) - new Date(n.date);\n });\n this.setIndexToSelected();\n }\n\n contextMenuDateHeader(evt) {\n let left = evt.detail.clientX;\n let top = evt.detail.clientY - this.$capibara.getBoundingClientRect().top;\n let date = evt.detail.date;\n const target = evt.detail.$elem;\n let {\n elem: $elem,\n isVisible\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createContextMenu({\n tabSelected: this.tabSelected,\n target,\n $capibaraElem: this.$capibara,\n config: this.config,\n selected: this.selected,\n date,\n left,\n top,\n name: \"onDateHeader\"\n });\n\n if ($elem) {\n this.isVisibleContextMenu = isVisible;\n this.$elements.$contextMenu.replaceWith($elem);\n this.$elements.$contextMenu = $elem;\n }\n }\n /**\n * Captura evento window resize\n * para verificar si es mobile o no\n */\n\n\n onWindowResize() {\n if (this.initialized) {\n let oldValue = this.isMobile;\n let newValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].checkIsMobile();\n\n if (oldValue != newValue) {\n this.isMobile = newValue;\n this.toggleSidebarMobile();\n this.setAllCSSVariables();\n this.redraw({\n floatBox: true,\n navLeft: true\n });\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n }\n /**\n * Cambia sidebar para mobile, segun variable this.isMobile\n */\n\n\n toggleSidebarMobile() {\n if (this.isMobile) {\n this.setShowNavInitial(false);\n this.setShowNavExtended(false);\n this.setShowNavButtons(false);\n this.setEditable(false);\n this.setSelectable(false);\n } else {\n this.setShowNavInitial(true);\n this.setShowNavExtended(false);\n this.setShowNavButtons(true);\n this.setEditable(true);\n this.setSelectable(true);\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n\n setEditable(newEditable) {\n if (this.config.timeline.editable != newEditable) {\n this.config.timeline.editable = newEditable;\n this.redraw({\n navLeft: true,\n header: true\n });\n }\n }\n\n setSelectable(newSelectable) {\n if (this.config.timeline.selectable != newSelectable) {\n this.config.timeline.selectable = newSelectable;\n this.cleanMultiInput();\n }\n }\n\n focusOnFloatBox({\n pos,\n evt\n }) {\n if (this.isMobile) {\n let containerWidth = this.$elements.$container.clientWidth;\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--day-width\"));\n let navWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--nav-width\"));\n let left = pos.left - containerWidth + 1.5 * dayWidth + navWidth; //let containerHeight = this.$elements.$container.clientHeight;\n\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(this.config, \"--item-height\")); //let headerHeight = parseFloat(utils.getCSSVariable(this.config, \"--header-height\"));\n\n let top = pos.top - 0.5 * itemHeight;\n let position = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPosition(this.config, evt, this.$elements.$table);\n this.refreshDetailDayPosition({ ...position,\n topClient: position.yInnerPercent >= 70 ? position.topClient : 0,\n // fuerza posicion de arrow en detailday\n xPercent: position.x < 4 ? 0 : 100 // fuerza arrow right\n\n });\n this.$elements.$container.scroll({\n top,\n left,\n behavior: 'smooth'\n });\n }\n }\n\n refreshInputsWithReload({\n detail\n }) {\n this.$inputsWithReload = this.$inputsWithReload.map(({\n $input,\n config\n }) => {\n let lastSelection = detail && detail.lastSelection ? detail.lastSelection : null;\n let newInput = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createInput(config, null, lastSelection, detail.selected);\n $input.parentElement.replaceChild(newInput, $input);\n let index = this.$inputsNavRight.indexOf($input);\n\n if (index >= 0) {\n this.$inputsNavRight[index] = newInput;\n }\n\n return {\n $input: newInput,\n config\n };\n });\n }\n /**\n * Agrega eventos a los elementos del dom de la planilla\n * usando el objecto $capibara\n */\n\n\n addEvents() {\n this.$capibara.addEventListener(\"click\", this.hideContextMenu.bind(this));\n this.$capibara.addEventListener(\"contextmenu\", this.rightClickOnCapibara.bind(this));\n this.$capibara.addEventListener(\"toggleDark\", this.toggleDark.bind(this));\n this.$capibara.addEventListener(\"toggleHeader\", this.toggleHeader.bind(this));\n this.$capibara.addEventListener(\"toggleSidebar\", this.toggleSidebar.bind(this));\n this.$capibara.addEventListener(\"toggleSidebarRight\", this.toggleSidebarRight.bind(this));\n this.$capibara.addEventListener(\"saveMultiInput\", this.saveInputsNavRight.bind(this));\n this.$capibara.addEventListener(\"cancelMultiInput\", this.cancelMultiInput.bind(this));\n this.$capibara.addEventListener(\"overNavItem\", this.overNavItem.bind(this));\n this.$capibara.addEventListener(\"leaveNavItem\", this.leaveNavItem.bind(this));\n this.$capibara.addEventListener(\"clickNavLeftTreeIcon\", this.clickNavLeftTreeIcon.bind(this));\n this.$capibara.addEventListener(\"mouseOverFloatBox\", this.mouseOverFloatBox.bind(this));\n this.$capibara.addEventListener(\"selectTabHeader\", e => {\n this.selectTab(e.detail.tab);\n });\n this.$capibara.addEventListener(\"selectLegendHeader\", this.selectLegend.bind(this));\n this.$capibara.addEventListener(\"selectDay\", this.refreshInputsWithReload.bind(this));\n this.$capibara.addEventListener(\"deselectDay\", this.refreshInputsWithReload.bind(this));\n this.$elements.$floatBoxContainer.addEventListener(\"mousemove\", this.mouseMoveOnFlexBoxContainer.bind(this));\n this.$elements.$floatBoxContainer.addEventListener(\"mouseleave\", this.mouseLeaveOnFloatBoxContainer.bind(this));\n this.$elements.$table.addEventListener(\"mousemove\", this.mouseMoveOnTable.bind(this));\n this.$elements.$table.addEventListener(\"click\", this.clickOnTable.bind(this));\n this.$elements.$table.addEventListener(\"contextmenu\", this.rightClickOnTable.bind(this));\n this.$elements.$container.addEventListener(\"scroll\", this.onScrollContainer.bind(this));\n this.$elements.$container.addEventListener(\"clickDate\", this.clickDateHeader.bind(this));\n this.$elements.$container.addEventListener(\"contextMenuDate\", this.contextMenuDateHeader.bind(this));\n window.addEventListener('resize', this.onWindowResize.bind(this));\n }\n /**\n * Funcion para redibujar partes de la planilla, indicado segun parametro\n *\n * options : {\n * floatBox: Boolean,\n * plots: Boolean,\n * header: Boolean,\n * navLeft: Boolean,\n * navRight: Boolean,\n * }\n *\n *\n * @param {Object} options - objecto de configuracion\n */\n\n\n redraw(options) {\n if (options.floatBox) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawFloatBox(this.config, this.tabSelected, this.$elements.$floatBoxContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawBackground(this.config, this.$elements.$background);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotVerticalContainer(this.config, this.$elements.$plotVerticalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotHorizontalContainer(this.config, this.$elements.$plotHorizontalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawTodayLine(this.config, this.$elements.$todayLine);\n }\n\n if (options.plots) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotVerticalContainer(this.config, this.$elements.$plotVerticalContainer);\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawPlotHorizontalContainer(this.config, this.$elements.$plotHorizontalContainer);\n }\n\n if (options.header) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawHeader(this.config, this.$elements.$header);\n\n if (this.config.timeline.header.extend.enabled !== false) {\n let $headerExtended = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].createHeaderExtended(this.config);\n\n if ($headerExtended) {\n this.$elements.$header.append($headerExtended);\n }\n }\n }\n\n if (options.headerTop) {\n this.$elements.$headerTop = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawHeaderTop(this.config, this.tabSelected, this.$elements.$headerTop);\n }\n\n if (options.detailDay) {\n this.hideDetailDay();\n this.lastDataDay = null;\n }\n\n if (options.navLeft) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavLeft(this.$elements.$navLeft, this.config, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavStyle(this.config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(this.config, this.isShowNavInitial, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(this.config, this.isShowNavExtended, this.tabSelected);\n }\n\n if (options.cornerLeft) {\n _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawCorner(this.$elements.$corner, this.config, this.tabSelected);\n }\n\n if (options.cornerRight) {\n this.$elements.$cornerRight = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawCornerRight(this.$elements.$cornerRight, this.config, this.tabSelected);\n }\n\n if (options.navRight) {\n let {\n inputs,\n element,\n inputsWithReload,\n saveCancelBtns\n } = _util_tableElements__WEBPACK_IMPORTED_MODULE_2__[\"default\"].redrawNavRight(this.config, this.$elements.$navRight, this.selected, this.tabSelected);\n this.$elements.$navRight = element;\n this.$inputsNavRight = inputs;\n this.$inputsWithReload = inputsWithReload;\n this.$saveCancelBtns = saveCancelBtns;\n }\n\n this.refreshScrollUtilsVars();\n this.refreshVirtualScrollVars();\n }\n /**\n * Mueve el Scroll de la planilla al inicio\n */\n\n\n scrollToStart() {\n this.$elements.$container.scrollLeft = 0;\n }\n /**\n * Mueve el Scroll de la planilla al inicio\n */\n\n\n scrollToEnd() {\n this.$elements.$container.scrollLeft = this.$elements.$container.scrollWidth;\n }\n /**\n * Mueve el Scroll de la planilla a la tercera parte\n * TODO mejorar logica de esta funcion\n */\n\n\n scrollToMiddle() {\n this.$elements.$container.scrollLeft = this.$elements.$container.scrollWidth / 3;\n }\n /**\n * Fija las variables de CSs segun Config\n */\n\n\n setAllCSSVariables() {\n let config = this.config; //styleUtils.cleanStyle(config);\n\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setHeaderStyle(config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavStyle(config);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftInitialStyle(config, this.isShowNavInitial, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftExtendedStyle(config, this.isShowNavExtended, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setNavLeftButtonsStyle(config, this.isShowNavButtons, this.tabSelected);\n _util_styleUtils__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setTableStyle(config);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2NhcGliYXJhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvbGliL2NhcGliYXJhLmpzPzBmMGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvbSAgICAgICAgICAgZnJvbSAnLi4vdXRpbC9kb21VdGlscyc7XG5pbXBvcnQgdXRpbHMgICAgICAgICBmcm9tICcuLi91dGlsL3V0aWxzJztcbi8vaW1wb3J0IGRhdGVVdGlscyAgICAgZnJvbSAnLi4vdXRpbC9kYXRlVXRpbHMnO1xuaW1wb3J0IHRhYmxlRWxlbWVudHMgZnJvbSAnLi4vdXRpbC90YWJsZUVsZW1lbnRzJztcbmltcG9ydCBzdHlsZVV0aWxzICAgIGZyb20gJy4uL3V0aWwvc3R5bGVVdGlscyc7XG5cbi8qKlxuICogQ2FwaWJhcmEsIHBsYW5pbGxhIHBhcmEgZGVzcGxpZWd1ZSBkZSBkYXRvcyBwb3IgZmVjaGEgY29tbyBHQU5UVFxuICogb3JpZW50YWRvIGluaWNpYWxtZW50ZSBhIGRhdG9zIGRpYXJpb3MgZGUgaXRlbXNcbiAqXG4gKiBAYXV0aG9yIFBhdHJpY2lvLiBNLiBSb2phcy4gPHBhdHJpY2lvQGlycmljcm9wcy5jb20+XG4gKi9cbmV4cG9ydCBjbGFzcyBDYXBpYmFyYXtcblxuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogSW5zdGFuY2lhIHZhcmlhYmxlcyBkZSBwbGFuaWxsYSBDYXBpYmFyYSwgY29uIGNvbmZpZ3VyYWNpb25cbiAgICogQ3JlYSBlbCBlbGVtZW50byBjb250ZW5lZG9yIHtjb250YWluZXJFbGVtZW50fSBzZWd1biBzZWxlY3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlcyAtIGF0cmlidXRvcyBxdWUgc2UgdXNhcmFuIGFsIGluaWNpYXIgbGEgcGxhbmlsbGFcbiAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXMuY29uZmlnIC0gQ29uZmlndXJhY2lvbiBkZSBwbGFuaWxsYVxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ30pe1xuICAgIGlmKGNvbmZpZyA9PSBudWxsKSBjb25zb2xlLmVycm9yKFwiY29uZmlnIG5vIGVjb250cmFkb1wiKTtcblxuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY29uZmlnLnNlbGVjdG9yKTtcblxuICAgIGlmKHRoaXMuY29udGFpbmVyRWxlbWVudCA9PSBudWxsKSBjb25zb2xlLmVycm9yKFwiRWxlbWVudG8gZG9tIHNlZ3VuIGNvbmZpZy5zZWxlY3Rvciwgbm8gZW5jb250cmFkb1wiKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgICAgICAgICAgICAgID0gZmFsc2U7XG4gICAgdGhpcy4kY2FwaWJhcmEgICAgICAgICAgICAgICAgPSBudWxsO1xuICAgIHRoaXMuJGVsZW1lbnRzICAgICAgICAgICAgICAgID0ge307XG4gICAgdGhpcy50YWJTZWxlY3RlZCAgICAgICAgICAgICAgPSBudWxsO1xuICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0ICAgICAgICAgID0gW107XG4gICAgdGhpcy4kaW5wdXRzV2l0aFJlbG9hZCAgICAgICAgPSBbXTtcbiAgICB0aGlzLiRzYXZlQ2FuY2VsQnRucyAgICAgICAgICA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWQgICAgICAgICAgICAgICAgID0gW107XG4gICAgdGhpcy5jb25maWcgICAgICAgICAgICAgICAgICAgPSBjb25maWc7XG4gICAgdGhpcy5sYXN0RGF0YURheSAgICAgICAgICAgICAgPSBudWxsO1xuICAgIHRoaXMuaXNTaG93TmF2RXh0ZW5kZWQgICAgICAgID0gZmFsc2U7XG4gICAgdGhpcy5pc1Nob3dOYXZJbml0aWFsICAgICAgICAgPSB0cnVlO1xuICAgIHRoaXMuaXNTaG93TmF2QnV0dG9ucyAgICAgICAgID0gdHJ1ZTtcbiAgICB0aGlzLmlzTW9iaWxlICAgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgIHRoaXMubGFzdE1vdXNlUG9zaXRpb24gICAgICAgID0gbnVsbDtcbiAgICB0aGlzLmlzVmlzaWJsZUNvbnRleHRNZW51ICAgICA9IGZhbHNlO1xuICAgIHRoaXMuaXNEaXNhYmxlZElucHV0c05hdlJpZ2h0ID0gZmFsc2U7XG5cbiAgfVxuXG5cblxuXG5cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBQbGFuaWxsYTpcbiAgICogIC0gdmFjaWEgdmFyaWFibGVzIG5lY2VzYXJpYXNcbiAgICogIC0gY3JlYSBwbGFuaWxsYSBsbGFtYW5kbyBhIGRyYXdUYWJsZVxuICAgKiAgLSBBZ3JlZ2EgZXZlbnRvcyBhIHBsYW5pbGxhXG4gICAqICAtIG11ZXZlIHNjcm9sbCBhbCBtZWRpbyBkZSBsYSB0YWJsYVxuICAgKi9cbiAgaW5pdCgpe1xuXG4gICAgdGhpcy50YWJTZWxlY3RlZCAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy4kY2FwaWJhcmEgICAgICAgICAgICA9IG51bGw7XG4gICAgdGhpcy4kZWxlbWVudHMgICAgICAgICAgICA9IHt9O1xuICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0ICAgICAgPSBbXTtcbiAgICB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkICAgID0gW107XG4gICAgdGhpcy4kc2F2ZUNhbmNlbEJ0bnMgICAgICA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWQgICAgICAgICAgICAgPSBbXTtcbiAgICB0aGlzLmxhc3REYXRhRGF5ICAgICAgICAgID0gbnVsbDtcbiAgICB0aGlzLmlzTW9iaWxlICAgICAgICAgICAgID0gdXRpbHMuY2hlY2tJc01vYmlsZSgpO1xuICAgIHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUgPSBmYWxzZTtcblxuICAgIHRoaXMuc2V0QWxsQ1NTVmFyaWFibGVzKCk7XG4gICAgdGhpcy5kcmF3VGFibGUoKTtcbiAgICB0aGlzLmFkZEV2ZW50cygpO1xuICAgIHRoaXMuc2Nyb2xsVG9NaWRkbGUoKTtcbiAgICB0aGlzLnRvZ2dsZVNpZGViYXJNb2JpbGUoKTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQ2FtYmlhIGNvbmZpZ3VyYWNpb24gZGUgcGxhbmlsbGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gbnVldmEgcGFyYSBwbGFuaWxsYVxuICAgKi9cbiAgc2V0Q29uZmlnKGNvbmZpZyl7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDcmVhIGxhIHBsYW5pbGxhXG4gICAqIGFncmVnYW5kbyB0b2RvcyBsb3MgZWxlbWVudG9zIGVuIG9yZGVuIGRlbnRyb1xuICAgKlxuICAgKiBAcmV0dXJuIHsgRG9tRWxlbWVudCB9ICRjYXBpYmFyYSAtIGVsZW1lbnRvIGRlbCBEb20gcXVlIGNvbnRpZW5lIHRvZGEgbGEgcGxhbmlsbGFcbiAgICovXG4gIGRyYXdUYWJsZSgpe1xuXG4gICAgbGV0IGNvbmZpZyAgICAgICAgPSB0aGlzLmNvbmZpZ1xuICAgIGxldCBpbml0aWFsVGFiICAgID0gY29uZmlnLnRpbWVsaW5lLnRhYnNbMF07XG4gICAgbGV0IGZpcnN0Q2hpbGRyZW4gPSB7fTtcblxuICAgIGlmKGNvbmZpZy5kYXRhICAmJiBjb25maWcuZGF0YS5sZW5ndGggPiAwICYmIGNvbmZpZy5kYXRhWzBdLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuICAgICAgZmlyc3RDaGlsZHJlbiA9IGNvbmZpZy5kYXRhWzBdLmNoaWxkcmVuWzBdO1xuICAgIH1cblxuICAgIGxldCAkY2FwaWJhcmEgICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUFnVGFibGUoY29uZmlnKTtcbiAgICBsZXQgJGNvcm5lciAgICAgICAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVDb3JuZXIoY29uZmlnLCBpbml0aWFsVGFiKTtcbiAgICBsZXQgJGNvcm5lclJpZ2h0ICAgICAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVDb3JuZXJSaWdodChjb25maWcpO1xuICAgIGxldCAkaGVhZGVyVG9wICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUhlYWRlclRvcChjb25maWcpO1xuICAgIGxldCAkaGVhZGVyICAgICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUhlYWRlcihjb25maWcpO1xuICAgIGxldCAkdG9kYXlMaW5lICAgICAgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZVRvZGF5TGluZShjb25maWcpO1xuICAgIGxldCAkaGVhZGVyRXh0ZW5kZWQgICAgICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUhlYWRlckV4dGVuZGVkKGNvbmZpZyk7XG4gICAgbGV0ICRuYXZMZWZ0ICAgICAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlTmF2TGVmdChjb25maWcpXG4gICAgbGV0ICRjb3JuZXJGb290ZXIgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlQ29ybmVyRm9vdGVyKGNvbmZpZyk7XG4gICAgbGV0ICRmb290ZXIgICAgICAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlRm9vdGVyKGNvbmZpZyk7XG4gICAgbGV0ICRmbG9hdEJveENvbnRhaW5lciAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlRmxvYXRCb3goY29uZmlnLCBpbml0aWFsVGFiKTtcbiAgICBsZXQgJHNlbGVjdENvbnRhaW5lciAgICAgICAgID0gdGFibGVFbGVtZW50cy5jcmVhdGVTZWxlY3RCb2FyZChjb25maWcpO1xuICAgIGxldCAkcGxvdFZlcnRpY2FsQ29udGFpbmVyICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZVBsb3RWZXJ0aWNhbENvbnRhaW5lcihjb25maWcpO1xuICAgIGxldCAkcGxvdEhvcml6b250YWxDb250YWluZXIgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZVBsb3RIb3Jpem9udGFsQ29udGFpbmVyKGNvbmZpZyk7XG4gICAgbGV0ICRkZXRhaWxEYXkgICAgICAgICAgICAgICA9IHRhYmxlRWxlbWVudHMuY3JlYXRlRGV0YWlsRGF5KGNvbmZpZywgZmlyc3RDaGlsZHJlbik7XG5cbiAgICBsZXQgeyBlbGVtOiRjb250ZXh0TWVudSwgaXNWaXNpYmxlIH0gID0gdGFibGVFbGVtZW50cy5jcmVhdGVDb250ZXh0TWVudSh7Y29uZmlnfSk7XG4gICAgdGhpcy5pc1Zpc2libGVDb250ZXh0TWVudSA9IGlzVmlzaWJsZTtcblxuICAgIGxldCAkbmF2UmlnaHQsIGlucHV0cywgaW5wdXRzV2l0aFJlbG9hZCwgc2F2ZUNhbmNlbEJ0bnM7XG4gICAgKHtlbGVtZW50OiRuYXZSaWdodCwgaW5wdXRzLCBpbnB1dHNXaXRoUmVsb2FkLCBzYXZlQ2FuY2VsQnRuc30gPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZU5hdlJpZ2h0KGNvbmZpZykpO1xuXG4gICAgbGV0ICRiYWNrZ3JvdW5kICAgICAgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUJhY2tncm91bmQoY29uZmlnKTtcbiAgICBsZXQgJGNvbnRhaW5lciAgICAgICA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOlwiY29udGFpbmVyLXRsXCJ9KTtcbiAgICBsZXQgJGRheU1vdXNlT3ZlciAgICA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRheS1tb3VzZS1vdmVyXCJ9KTtcblxuICAgIGxldCB7aGVpZ2h0LCB3aWR0aCB9ID0gdXRpbHMuZ2V0VGFibGVEaW1lbnNpb25zKGNvbmZpZyk7XG4gICAgbGV0ICR0YWJsZSAgICAgICAgICAgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0YWJsZVwiLCBzdHlsZTp7XG4gICAgICAnd2lkdGgnOiB3aWR0aCtcInB4XCIsXG4gICAgICAnaGVpZ2h0JzogaGVpZ2h0K1wicHhcIlxuICAgIH19KTtcblxuICAgICR0YWJsZS5hcHBlbmRDaGlsZCgkYmFja2dyb3VuZCk7XG4gICAgJHRhYmxlLmFwcGVuZENoaWxkKCRkYXlNb3VzZU92ZXIpO1xuICAgICR0YWJsZS5hcHBlbmRDaGlsZCgkZGV0YWlsRGF5KTtcbiAgICAkdGFibGUuYXBwZW5kQ2hpbGQoJHNlbGVjdENvbnRhaW5lcik7XG4gICAgJHRhYmxlLmFwcGVuZENoaWxkKCRmbG9hdEJveENvbnRhaW5lciApO1xuXG4gICAgaWYoJGhlYWRlckV4dGVuZGVkKXtcbiAgICAgICRoZWFkZXIuYXBwZW5kQ2hpbGQoJGhlYWRlckV4dGVuZGVkKTtcbiAgICB9XG5cbiAgICAkY29udGFpbmVyLmFwcGVuZENoaWxkKCRoZWFkZXIpO1xuICAgICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJHBsb3RWZXJ0aWNhbENvbnRhaW5lcik7XG4gICAgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkcGxvdEhvcml6b250YWxDb250YWluZXIpO1xuICAgICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJHRvZGF5TGluZSk7XG4gICAgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkbmF2TGVmdCk7XG4gICAgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkdGFibGUpO1xuXG4gICAgaWYoJGNvcm5lckZvb3RlcikgJGNvbnRhaW5lci5hcHBlbmRDaGlsZCgkY29ybmVyRm9vdGVyKTtcblxuICAgIGlmKCRmb290ZXIpICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJGZvb3Rlcik7XG5cbiAgICAkY2FwaWJhcmEuYXBwZW5kQ2hpbGQoJGhlYWRlclRvcCk7XG4gICAgJGNhcGliYXJhLmFwcGVuZENoaWxkKCRjb3JuZXIpO1xuICAgICRjYXBpYmFyYS5hcHBlbmRDaGlsZCgkY29ybmVyUmlnaHQpO1xuICAgICRjYXBpYmFyYS5hcHBlbmRDaGlsZCgkY29udGFpbmVyKTtcbiAgICAkY2FwaWJhcmEuYXBwZW5kQ2hpbGQoJG5hdlJpZ2h0KTtcbiAgICBpZigkY29udGV4dE1lbnUpICRjYXBpYmFyYS5hcHBlbmRDaGlsZCgkY29udGV4dE1lbnUpO1xuXG5cbiAgICB0aGlzLiRpbnB1dHNOYXZSaWdodCAgID0gaW5wdXRzO1xuICAgIHRoaXMuJGlucHV0c1dpdGhSZWxvYWQgPSBpbnB1dHNXaXRoUmVsb2FkO1xuICAgIHRoaXMuJHNhdmVDYW5jZWxCdG5zID0gc2F2ZUNhbmNlbEJ0bnM7XG4gICAgdGhpcy4kY2FwaWJhcmEgPSAkY2FwaWJhcmE7XG4gICAgdGhpcy4kZWxlbWVudHMgPSB7XG4gICAgICAkaGVhZGVyVG9wLFxuICAgICAgJGRldGFpbERheSxcbiAgICAgICRjb250ZXh0TWVudSxcbiAgICAgICRmbG9hdEJveENvbnRhaW5lcixcbiAgICAgICRzZWxlY3RDb250YWluZXIsXG4gICAgICAkdGFibGUsXG4gICAgICAkYmFja2dyb3VuZCxcbiAgICAgICRwbG90VmVydGljYWxDb250YWluZXIsXG4gICAgICAkcGxvdEhvcml6b250YWxDb250YWluZXIsXG4gICAgICAkZGF5TW91c2VPdmVyLFxuICAgICAgJGNvbnRhaW5lcixcbiAgICAgICRuYXZSaWdodCxcbiAgICAgICRuYXZMZWZ0LFxuICAgICAgJGhlYWRlcixcbiAgICAgICR0b2RheUxpbmUsXG4gICAgICAkY29ybmVyLFxuICAgICAgJGNvcm5lclJpZ2h0XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmlubmVySFRNTCA9IFwiXCI7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKCRjYXBpYmFyYSk7XG4gICAgdGhpcy5zZWxlY3RUYWIoaW5pdGlhbFRhYik7XG5cbiAgICByZXR1cm4gJGNhcGliYXJhO1xuICB9XG5cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIENhbWJpYSBlbCBtb2RvIG9zY3Vybywgc2VndW4gZWwgZXN0YWRvIGFjdHVhbFxuICAgKi9cbiAgdG9nZ2xlRGFyaygpe1xuICAgIHRoaXMuc2V0RGFyayghQm9vbGVhbih0aGlzLmNvbmZpZy50aW1lbGluZS5kYXJrKSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDYW1iaWEgZWwgbW9kbyBvc2N1cm8sIHNlZ3VuIHBhcmFtZXRyb1xuICAgKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtpc0RhcmsgPSBmYWxzZV0gLSBpbmRpY2Egc2kgc2UgYWN0aXZhIGVsIG1vZG8gb3NjdXJvIG8gbm9cbiAgICovXG4gIHNldERhcmsoIGlzRGFyayA9IGZhbHNlKXtcbiAgICBsZXQgZGFya0NsYXNzTmFtZSA9IFwiZGFyay10aGVtZVwiO1xuICAgIHRoaXMuY29uZmlnLnRpbWVsaW5lLmRhcmsgPSBpc0Rhcms7XG5cbiAgICBpZihpc0Rhcmspe1xuICAgICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LmFkZChkYXJrQ2xhc3NOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LnJlbW92ZShkYXJrQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENhbWJpYSBlbCB0ZW1hIGRlIGNvbG9yIHNlY3VuZGFyaW8sIHNlZ3VuIHBhcmFtZXRyb1xuICAgKiAgLVF1aXRhIHRvZG9zIGxvcyBwb3NpYmxlcyBjb2xvcmVzIGRlIGxhIHBsYW5pbGxhLCBvYnRlbmllbmRvbG9zIGRlIFRhYnNcbiAgICogIC1BZ3JlZ2EgZWwgY29sb3IgZW52aWFkbyBwb3IgcGFyYW1ldHJvIGNvbW8gY2xhc2UgZGVsIGRvbUVsZW1lbnQgJGNhcGliYXJhXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb2xvciAtIGNvbG9yLCBjb21vIG5vbWJyZSBkZSBjbGFzZSwgcGFyYSBhZ3JlZ2FyIFxuICAgKi9cbiAgY2hhbmdlQ29sb3JUaGVtZShjb2xvcil7XG4gICAgdGhpcy5jb25maWcudGltZWxpbmUudGFicy5mb3JFYWNoKHRhYiA9PiB7XG4gICAgICB0aGlzLiRjYXBpYmFyYS5jbGFzc0xpc3QucmVtb3ZlKHRhYi5jb2xvcik7XG4gICAgfSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LmFkZChjb2xvcik7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFNlbGVjY2lvbmEgdGFiIGVuIHBsYW5pbGxhXG4gICAqIHNpIHJlZHJhdyA9PSB0cnVlICwgcmVkaWJ1amEgbmF2UmlnaHQgeSBmbG9hdEJveFxuICAgKiB5YSBxdWUgc29uIGlucHV0cyB5IGVzdGV0aWNhcyBwZXJzb25hbGl6YWRhcyBwb3IgVGFiXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0YWIgLSB0YWIsIG9idGVuaWRhIGRlc2RlIGNvbmZpZ3VyYWNpb25cbiAgICogQHBhcmFtIHtCb29sZWFufSBbcmVkcmF3PXRydWVdIC0gb3BjaW9uIGRlIHJlZGlidWphZG9cbiAgICovXG4gIHNlbGVjdFRhYih0YWIsIHJlZHJhdyA9IHRydWUpe1xuICAgIGlmKHRhYil7XG4gICAgICB0aGlzLnRhYlNlbGVjdGVkID0gdGFiO1xuXG4gICAgICB0aGlzLmNsZWFuTXVsdGlJbnB1dCgpO1xuXG4gICAgICBpZihyZWRyYXcpe1xuICAgICAgICB0aGlzLnJlZHJhdyh7XG4gICAgICAgICAgaGVhZGVyVG9wOnRydWUsXG4gICAgICAgICAgY29ybmVyTGVmdDogdHJ1ZSxcbiAgICAgICAgICBuYXZMZWZ0OiB0cnVlLFxuICAgICAgICAgIG5hdlJpZ2h0OiB0cnVlLFxuICAgICAgICAgIGZsb2F0Qm94OnRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGFuZ2VDb2xvclRoZW1lKHRhYi5jb2xvcik7XG5cbiAgICAgIHRoaXMuJGNhcGliYXJhLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwic2VsZWN0VGFiXCIsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGRldGFpbDp7XG4gICAgICAgICAgdGFiU2VsZWN0ZWQgOiB0aGlzLnRhYlNlbGVjdGVkXG4gICAgICAgIH1cbiAgICAgIH0pKTtcblxuICAgIH1lbHNle1xuICAgICAgY29uc29sZS5lcnJvcihcInRhYiBubyBlbmNvbnRyYWRhXCIpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdExlZ2VuZChldnQpe1xuICAgIGxldCBsZWdlbmQgPSBldnQuZGV0YWlsLmxlZ2VuZDtcbiAgICBldnQuZGV0YWlsLiRsZWdlbmQuY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcbiAgICBpZihsZWdlbmQpe1xuICAgICAgbGVnZW5kLmFjdGl2ZSA9ICFsZWdlbmQuYWN0aXZlO1xuICAgIH1cblxuICAgIHRoaXMucmVkcmF3KHtcbiAgICAgIGZsb2F0Qm94OiB0cnVlLFxuICAgICAgZGV0YWlsRGF5OiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogbXVlc3RyYSBhbHRlcm5hZGFtZW50ZSBsb3Mgc2lkZWJhciBpbml0aWFsIHkgZXh0ZW5kZWRcbiAgICovXG4gIHRvZ2dsZVNpZGViYXIoKXtcbiAgICB0aGlzLnNldFNob3dOYXZJbml0aWFsKCF0aGlzLmlzU2hvd05hdkluaXRpYWwpO1xuICAgIGlmKCF0aGlzLmlzTW9iaWxlKXtcbiAgICAgIHRoaXMuc2V0U2hvd05hdkV4dGVuZGVkKCF0aGlzLmlzU2hvd05hdkV4dGVuZGVkKTtcbiAgICB9ZWxzZXtcbiAgICAgIGxldCBjb3JuZXJJbnB1dFRpdGxlcyA9IHRoaXMuJGVsZW1lbnRzLiRjb3JuZXIucXVlcnlTZWxlY3RvcihcIi5pbnB1dC10aXRsZXNcIik7XG4gICAgICBpZihjb3JuZXJJbnB1dFRpdGxlcyl7XG4gICAgICAgIGNvcm5lcklucHV0VGl0bGVzLnN0eWxlLmRpc3BsYXkgPSB0aGlzLmlzU2hvd05hdkluaXRpYWwgPyBcIm5vbmVcIjogXCJmbGV4XCI7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jdWx0YSBuYXYgaW5pdGlhbCAsIGV4dGVuZGVkIHkgYnV0dG9uc1xuICAgKi9cbiAgaGlkZVNpZGViYXJzKCl7XG4gICAgdGhpcy5zZXRTaG93TmF2SW5pdGlhbChmYWxzZSk7XG4gICAgdGhpcy5zZXRTaG93TmF2RXh0ZW5kZWQoZmFsc2UpO1xuICAgIHRoaXMuc2V0U2hvd05hdkJ1dHRvbnMoZmFsc2UpO1xuICB9XG5cblxuICAvKipcbiAgICogTXVlc3RyYS9PY3VsdGEgU2lkZWJhciBpbmljaWFsXG4gICAqL1xuICBzZXRTaG93TmF2SW5pdGlhbChpc1Nob3dOYXZJbml0aWFsKXtcbiAgICB0aGlzLmlzU2hvd05hdkluaXRpYWwgID0gaXNTaG93TmF2SW5pdGlhbDtcbiAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRJbml0aWFsU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2SW5pdGlhbCwgdGhpcy50YWJTZWxlY3RlZCk7XG4gIH1cblxuICAvKipcbiAgICogTXVlc3RyYS9PY3VsdGEgU2lkZWJhciBleHRlbmRpZG9cbiAgICovXG4gIHNldFNob3dOYXZFeHRlbmRlZChpc1Nob3dOYXZFeHRlbmRlZCl7XG4gICAgdGhpcy5pc1Nob3dOYXZFeHRlbmRlZCA9IGlzU2hvd05hdkV4dGVuZGVkO1xuICAgIHN0eWxlVXRpbHMuc2V0TmF2TGVmdEV4dGVuZGVkU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2RXh0ZW5kZWQsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvT2N1bHRhIFNpZGViYXIgYnV0dG9uc1xuICAgKi9cbiAgc2V0U2hvd05hdkJ1dHRvbnMoaXNTaG93TmF2QnV0dG9ucyl7XG4gICAgdGhpcy5pc1Nob3dOYXZCdXR0b25zID0gaXNTaG93TmF2QnV0dG9ucztcbiAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRCdXR0b25zU3R5bGUodGhpcy5jb25maWcsIHRoaXMuaXNTaG93TmF2QnV0dG9ucywgdGhpcy50YWJTZWxlY3RlZCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvb2N1bHRhIFNpZGViYXIgRGVyZWNob1xuICAgKi9cbiAgdG9nZ2xlU2lkZWJhclJpZ2h0KCl7XG4gICAgbGV0IGlzSGlkZGVuID0gIXRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC5jb250YWlucyhcImV4dGVuZGVkLXJpZ2h0XCIpO1xuICAgIHRoaXMuc2V0VmlzaWJsZVNpZGViYXJSaWdodCghaXNIaWRkZW4pO1xuICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWNhIGxhIG9wY2lvbiBkZSBtb3N0cmFyIHkgb2N1bHRhciBzaWRlYmFyIGRlcmVjaG9cbiAgICpcbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gW3Nob3cgPSB0cnVlXSAtIGluZGljYSBzaSBkZWJlIG1vc3RyYXJzZSB1IG9jdWx0YXJzZVxuICAgKi9cbiAgc2V0VmlzaWJsZVNpZGViYXJSaWdodChzaG93ID0gdHJ1ZSl7XG4gICAgbGV0IGZuID0gc2hvdyA/IFwiYWRkXCIgOiBcInJlbW92ZVwiO1xuICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdFtmbl0oXCJleHRlbmRlZC1yaWdodFwiKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIE11ZXN0cmEvb2N1bHRhIEhlYWRlciBleHRlbmRpZG8gKGlucHV0cylcbiAgICovXG4gIHRvZ2dsZUhlYWRlcigpe1xuICAgIHRoaXMuJGNhcGliYXJhLmNsYXNzTGlzdC50b2dnbGUoXCJoZWFkZXItZXh0ZW5kZWRcIik7XG4gICAgdGhpcy5yZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbFZhcnMoKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogTXVlc3RyYS9vY3VsdGEgYmFycmEgZGUgY2FyZ2EgZGUgcGxhbmlsbGEgXG4gICAqIFNpIHNlIGxsYW1hIHNpbiBwYXJhbWV0cm9zLCBwb3IgZGVmZWN0byBtdWVzdHJhIGVsIGxvYWRpbmcgZGVyZWNob1xuICAgKiBxdWUgY29ycmVzcG9uZGUgYWwgc2lkZWJhci1yaWdodFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW3Bvc2l0aW9uID0gXCJyaWdodFwiXSAtIGVzY29nZSBsb2FkaW5nLCBwdWVkZSBzZXIgXCJsZWZ0XCIgfCBcInJpZ2h0XCJcbiAgICogQHBhcmFtIHtCb29sZWFufSBbc2hvdyA9IHRydWVdIC0gaW5kaWNhIHNpIG1vc3RyYXIgdSBvY3VsdGFyIGxvYWRpbmdcbiAgICovXG4gIGxvYWRpbmcocG9zaXRpb24gPSBcInJpZ2h0XCIsIHNob3cgPSB0cnVlKXtcbiAgICBsZXQgZm4gICAgICA9IHNob3cgPyBcInJlbW92ZVwiIDogXCJhZGRcIjtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuJGNhcGliYXJhLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZ3Jlc3MtYmFyLVwiK3Bvc2l0aW9uKTtcbiAgICBlbGVtZW50LmNsYXNzTGlzdFtmbl0oXCJoaWRlLXByb2dyZXNzXCIpO1xuICB9XG5cblxuXG4gIHNldERpc2FibGVJbnB1dHNOYXZSaWdodChpc0Rpc2FibGVkID0gdHJ1ZSl7XG4gICAgdGhpcy5pc0Rpc2FibGVkSW5wdXRzTmF2UmlnaHQgPSBpc0Rpc2FibGVkO1xuICAgIFxuICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0LmZvckVhY2goJGlucHV0Q29udGFpbmVyID0+IHtcbiAgICAgIGxldCAkaW5wdXRzID0gJGlucHV0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFwiKTtcbiAgICAgICRpbnB1dHMuZm9yRWFjaCgkaSA9PiB7XG4gICAgICAgICRpLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIGlzRGlzYWJsZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgbGV0IGJ0bnMgPSB0aGlzLiRzYXZlQ2FuY2VsQnRucy5xdWVyeVNlbGVjdG9yQWxsKFwiYnV0dG9uXCIpO1xuXG4gICAgYnRucy5mb3JFYWNoKGJ0biA9PiB7XG4gICAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCBpc0Rpc2FibGVkKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEJ1c2NhIHVuIGJvdG9uIHNlZ3VuIHNlbGVjdG9yLCB5IGxlIGFncmVnYSBsYSBjbGFzZSBcImxvYWRpbmdcIlxuICAgKiB5IGRlc2hhYmlsaXRhIGVsIGJvdG9uXG4gICAqXG4gICAqIEBwYXJhbSB7IFN0cmluZyB9IFsgc2VsZWN0b3IgPSAnW2NhcC1idG4tY2FsZW5kYXJdJyBdIC0gc2VsZWN0b3IgZGUgYm90b25cbiAgICogQHBhcmFtIHsgQm9vbGVhbiB9IFtpc0xvYWRpbmcgID0gdHJ1ZV0gLSBkZWZpbmUgc2kgZXN0YSBjYXJnYW5kbyBvIG5vXG4gICAqL1xuICBsb2FkaW5nQnRuKHNlbGVjdG9yPSBcIltjYXAtYnRuLWNhbGVuZGFyXVwiLCBpc0xvYWRpbmcgPSB0cnVlKXtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuJGNhcGliYXJhLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIGlmKGVsZW1lbnQpe1xuICAgICAgbGV0IGZuID0gaXNMb2FkaW5nID8gXCJhZGRcIiA6IFwicmVtb3ZlXCI7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdFtmbl0oXCJsb2FkaW5nXCIpO1xuICAgICAgaWYoaXNMb2FkaW5nKXtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLFwiXCIpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuXG5cbiAgLyoqXG4gICAqIENyZWEgRXZlbnRvIGRlIGd1YXJkYWRvIGRlIGxvcyBpbnB1dHMgZGVsIFNpZGViYXIgUmlnaHRcbiAgICogb2J0aWVuZSB0b2RvcyBsb3MgdmFsb3JlcyBkZSBsb3MgaW5wdXRzIHJlZ2lzdHJhZG9zIGVuIHRoaXMuJGlucHV0cyB5IFxuICAgKiBsb3MgcmV0b3JuYSBjcmVhbmRvIGVsIGV2ZW50byBcInNhdmVcIlxuICAgKlxuICAgKi9cbiAgc2F2ZUlucHV0c05hdlJpZ2h0KCl7XG5cbiAgICBsZXQgaW5wdXRWYWx1ZXMgPSBbXTtcblxuICAgIGxldCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUlucHV0c05hdlJpZ2h0KCk7XG5cbiAgICBpZighaXNWYWxpZCl7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXREaXNhYmxlSW5wdXRzTmF2UmlnaHQodHJ1ZSk7XG5cbiAgICB0aGlzLiRpbnB1dHNOYXZSaWdodC5mb3JFYWNoKCRpbnB1dCA9PiB7XG4gICAgICBsZXQga2V5ID0gJGlucHV0LmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgIGxldCBpbnB1dENvbmZpZyA9IHRoaXMudGFiU2VsZWN0ZWQuaW5wdXRzLmZpbmQodCA9PiB0LmtleSA9PSBrZXkpO1xuICAgICAgaWYoaW5wdXRDb25maWcpe1xuICAgICAgICBpbnB1dFZhbHVlcy5wdXNoKHtcbiAgICAgICAgICBrZXkgICAgICAgICA6IGtleSxcbiAgICAgICAgICBpbnB1dENvbmZpZyA6IGlucHV0Q29uZmlnLFxuICAgICAgICAgIGVsICAgICAgICAgIDogJGlucHV0LFxuICAgICAgICAgIHZhbHVlICAgICAgIDogdGhpcy5nZXRJbnB1dFZhbHVlKCRpbnB1dCwgaW5wdXRDb25maWcpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG5cbiAgICB0aGlzLiRjYXBpYmFyYS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNhdmVcIiwge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgZGV0YWlsOntcbiAgICAgICAgaW5wdXRWYWx1ZXMgOiBpbnB1dFZhbHVlcyxcbiAgICAgICAgc2VsZWN0ZWQgICAgOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0YWJTZWxlY3RlZCA6IHRoaXMudGFiU2VsZWN0ZWRcbiAgICAgIH1cbiAgICB9KSk7XG5cblxuICB9XG5cbiAgdmFsaWRhdGVJbnB1dHNOYXZSaWdodCgpe1xuICAgIGxldCBpc0Zvcm1WYWxpZCA9IHRydWU7XG4gICAgdGhpcy4kaW5wdXRzTmF2UmlnaHQuZm9yRWFjaCgkaW5wdXQgPT4ge1xuICAgICAgbGV0IGlzSW5wdXRWYWxpZCA9IHRydWU7XG4gICAgICBsZXQga2V5ID0gJGlucHV0LmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgIGxldCBpbnB1dENvbmZpZyA9IHRoaXMudGFiU2VsZWN0ZWQuaW5wdXRzLmZpbmQodCA9PiB0LmtleSA9PSBrZXkpO1xuICAgICAgaWYoaW5wdXRDb25maWcpe1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldElucHV0VmFsdWUoJGlucHV0LCBpbnB1dENvbmZpZyk7XG4gICAgICAgIGlmKGlucHV0Q29uZmlnLnJlcXVpcmVkKXtcbiAgICAgICAgICBpZih2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICBpc0Zvcm1WYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgaXNJbnB1dFZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoaW5wdXRDb25maWcudmFsaWRhdGlvbiAmJiAhaW5wdXRDb25maWcudmFsaWRhdGlvbih7dmFsdWUgLCBpbnB1dENvbmZpZywgJGlucHV0fSkgKXtcbiAgICAgICAgICBpc0Zvcm1WYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIGlzSW5wdXRWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzSW5wdXRWYWxpZCl7XG4gICAgICAgICAgJGlucHV0LmNsYXNzTGlzdC5hZGQoXCJpcy1pbnZhbGlkXCIpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAkaW5wdXQuY2xhc3NMaXN0LnJlbW92ZShcImlzLWludmFsaWRcIik7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzRm9ybVZhbGlkIDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENhbmNlbGEgZm9ybXVsYXJpbyBkZSBzaWRlYmFyIHJpZ2h0XG4gICAqL1xuICBjYW5jZWxNdWx0aUlucHV0KCl7XG4gICAgdGhpcy4kY2FwaWJhcmEuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJjYW5jZWxcIiwge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgZGV0YWlsOntcbiAgICAgICAgc2VsZWN0ZWQgICAgOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0YWJTZWxlY3RlZCA6IHRoaXMudGFiU2VsZWN0ZWRcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgdGhpcy5jbGVhbk11bHRpSW5wdXQoKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogTGltcGlhIGVsIGZvcm11bGFyaW8gZW4gZWwgc2lkZWJhciByaWdodFxuICAgKiBvY3VsdGEgZWwgc2lkZWJhciByaWdodFxuICAgKi9cbiAgY2xlYW5NdWx0aUlucHV0KCl7XG4gICAgdGhpcy4kY2FwaWJhcmEuY2xhc3NMaXN0LnJlbW92ZShcImV4dGVuZGVkLXJpZ2h0XCIpO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgICB0aGlzLnJlZHJhd1NlbGVjdGlvbigpO1xuICB9XG5cblxuXG5cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCB2YWxvciBkZSB1biBpbnB1dFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZWxlbSAtIGVsZW1lbnRvIGRlbCBkb20gcXVlIHJlcHJlc2VudGEgYWwgaW5wdXQsIG5vIG5lY2VzYXJpYW1lbnRlIGlucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBjb25maWd1cmFjaW9uIGRlIGlucHV0XG4gICAqIEByZXR1cm4geyp9IHZhbG9yIGRlbCBJbnB1dFxuICAgKi9cbiAgZ2V0SW5wdXRWYWx1ZShlbGVtLCBpbnB1dENvbmZpZyl7XG4gICAgbGV0IHZhbHVlICAgICAgICAgPSBudWxsO1xuICAgIGxldCBpbnB1dEVsZW1lbnQgID0gbnVsbDtcbiAgICBsZXQgaW5wdXRzRWxlbWVudCA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKGlucHV0Q29uZmlnLnR5cGUpIHtcblxuICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgdmFsdWUgPSBpbnB1dENvbmZpZy5nZXRWYWx1ZSA/IGlucHV0Q29uZmlnLmdldFZhbHVlKHtlbGVtLCBwcm9wczogaW5wdXRDb25maWd9KSA6IG51bGw7XG4gICAgICBicmVhaztcblxuICAgICAgY2FzZSAndGltZSc6XG4gICAgICAgIGxldCBoaEVsZW1lbnQ9IGVsZW0ucXVlcnlTZWxlY3RvcihcIi5ob3VyXCIpO1xuICAgICAgICBsZXQgbW1FbGVtZW50PSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCIubWludXRlc1wiKTtcbiAgICAgICAgbGV0IGhoVmFsdWUgPSBoaEVsZW1lbnQudmFsdWU7XG4gICAgICAgIGxldCBtbVZhbHVlID0gbW1FbGVtZW50LnZhbHVlO1xuICAgICAgICBpZihoaFZhbHVlKXtcbiAgICAgICAgICBoaFZhbHVlID0gcGFyc2VGbG9hdChoaFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZihtbVZhbHVlKXtcbiAgICAgICAgICBtbVZhbHVlID0gcGFyc2VGbG9hdChtbVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IHtoaDpoaFZhbHVlLCBtbTogbW1WYWx1ZX07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdtZXNzYWdlJzpcbiAgICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgaW5wdXRFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwidGV4dGFyZWFcIik7XG4gICAgICAgIHZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlIHx8ICcnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImlucHV0TGlzdFwiOlxuICAgICAgICBsZXQgdmFsdWVzSW5wdXRzID0gW107XG4gICAgICAgIGlucHV0c0VsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFt0eXBlPSdudW1iZXInXVwiKTtcbiAgICAgICAgaW5wdXRzRWxlbWVudC5mb3JFYWNoKGlucHV0RWxlbWVudCA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlSW5wdXQgPSBpbnB1dEVsZW1lbnQudmFsdWU7XG4gICAgICAgICAgaWYodmFsdWVJbnB1dCl7XG4gICAgICAgICAgICB2YWx1ZUlucHV0ID0gcGFyc2VGbG9hdCh2YWx1ZUlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGxhYmVsID0gaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZShcImlucHV0LWxhYmVsXCIpO1xuICAgICAgICAgIGxldCBpZCA9IGlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1pZFwiKTtcbiAgICAgICAgICB2YWx1ZXNJbnB1dHMucHVzaCh7bGFiZWw6bGFiZWwsIHZhbHVlOnZhbHVlSW5wdXQgLCBpZDogaWR9KTtcbiAgICAgICAgfSlcbiAgICAgICAgdmFsdWUgPSB2YWx1ZXNJbnB1dHM7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICBpbnB1dEVsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFt0eXBlPSdudW1iZXInXVwiKTtcbiAgICAgICAgdmFsdWUgPSBpbnB1dEVsZW1lbnQudmFsdWU7XG4gICAgICAgIGlmKHZhbHVlKXtcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdjaGVja2JveCc6XG4gICAgICAgIGlucHV0RWxlbWVudCA9IGVsZW0ucXVlcnlTZWxlY3RvcihcImlucHV0W3R5cGU9J2NoZWNrYm94J11cIik7XG4gICAgICAgIHZhbHVlID0gaW5wdXRFbGVtZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBpbnB1dEVsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3QuaW5wdXQtc2VsZWN0XCIpO1xuICAgICAgICBsZXQgaW5wdXRWYWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZTtcbiAgICAgICAgdmFsdWUgPSBpbnB1dENvbmZpZy5vcHRpb25zLmZpbmQobyA9PiBvLmlkID09IGlucHV0VmFsdWUpXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdmaWxlJzpcbiAgICAgICAgaW5wdXRFbGVtZW50ID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbdHlwZT0nZmlsZSddXCIpO1xuICAgICAgICB2YWx1ZSA9IGlucHV0RWxlbWVudC5maWxlcztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2lucHV0LWJveCc6XG4gICAgICAgIGlucHV0c0VsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWluaS1pbnB1dC1zZWN0aW9uIGlucHV0XCIpO1xuICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICBpbnB1dHNFbGVtZW50LmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgbGV0IHYgPSBpLnZhbHVlO1xuICAgICAgICAgIGlmKHYpe1xuICAgICAgICAgICAgdiA9IHBhcnNlRmxvYXQodik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlLnB1c2goe1xuICAgICAgICAgICAgaWQgICAgOiBpLmdldEF0dHJpYnV0ZShcImlucHV0LWlkXCIpLFxuICAgICAgICAgICAga2V5ICAgOiBpLmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKSxcbiAgICAgICAgICAgIHZhbHVlIDogdixcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRhLWxpc3QnOlx0XG4gICAgICAgIGlucHV0c0VsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWluaS1pbnB1dC1zZWN0aW9uXCIpO1xuICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICBpbnB1dHNFbGVtZW50LmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgbGV0IHYgPSBpLmdldEF0dHJpYnV0ZShcImRhdGEtdmFsdWVcIilcbiAgICAgICAgICBpZih2KXtcbiAgICAgICAgICAgIHYgPSBwYXJzZUZsb2F0KHYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZS5wdXNoKHtcbiAgICAgICAgICAgIGlkICAgIDogaS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpLFxuICAgICAgICAgICAga2V5ICAgOiBpLmdldEF0dHJpYnV0ZShcImRhdGEta2V5XCIpLFxuICAgICAgICAgICAgdmFsdWUgOiB2IHx8IG51bGwsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGl0bGUnOlxuICAgICAgICAvL25vIGVzIHJlYWxtZW50ZSB1biBpbnB1dCwgZXMgc29sbyB1biB0ZXh0b1xuICAgICAgICAvL25vIGVzIG5lY2VzYXJpbyBvYnRlbmVyIHZhbG9yZXMgZGUgYXF1aVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnB1dEVsZW1lbnQgPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICAgICAgaWYoaW5wdXRFbGVtZW50KXtcbiAgICAgICAgICB2YWx1ZSA9IGlucHV0RWxlbWVudC52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG5cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIEZ1bmNpb24gbGxhbWFkYSBhbCBwYXNhciBzb2JyZSB1biBpdGVtIGRlbCBzaWRlYmFyIGl6cXVpZXJkbywgXG4gICAqIHBhcmEgbW9zdHJhciB1biBkZXRhbGxlIGRlbCBpdGVtXG4gICAqIFxuICAgKiBFbCBkZXRhbGxlIGRlbCBpdGVtIHNlIGFuY2xhIGRlIG1hbmVyYSBzdXBlcmlvciBvIGluZmVyaW9yIGRlcGVuZGllbmRvIGRlIFxuICAgKiBsYSBwb3NpY2lvbiBlbCBtb3VzZSBlbiBwYW50YWxsYSwgcGFyYSBubyBzYWxpciBkZWwgY2FtcG8gdmlzdWFsIFxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZ0IC0gIEV2ZW50byByZXRvcm5hZG8gcG9yIHVuIG1vdXNlb3ZlclxuICAgKi9cbiAgb3Zlck5hdkl0ZW0oZXZ0KXtcbiAgICBsZXQgcG9zICAgICA9IGV2dC5kZXRhaWwucG9zO1xuICAgIGxldCBpdGVtICAgID0gZXZ0LmRldGFpbC5pdGVtO1xuICAgIC8vbGV0IGRhdGFEYXkgPSBldnQuZGV0YWlsLmRhdGE7XG4gICAgbGV0ICRkZXRhaWwgPSB0aGlzLiRlbGVtZW50cy4kbmF2TGVmdC5xdWVyeVNlbGVjdG9yKFwiLmRldGFpbC1uYXYtaXRlbVwiKTtcblxuICAgIGlmKCRkZXRhaWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZVwiKSl7XG4gICAgICAkZGV0YWlsLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlXCIpO1xuICAgIH07XG5cbiAgICAkZGV0YWlsLmlubmVySFRNTCA9IHRhYmxlRWxlbWVudHMuZ2V0RGV0YWlsTmF2SXRlbUNvbnRlbnQoaXRlbSk7XG5cbiAgICBpZihwb3MueVBlcmNlbnQgPiA1MCl7IC8vbWF5b3IgYSA1MCVcbiAgICAgIGlmKCEkZGV0YWlsLmNsYXNzTGlzdC5jb250YWlucyhcInRvLWJvdHRvbVwiKSl7XG4gICAgICAgICRkZXRhaWwuY2xhc3NMaXN0LmFkZChcInRvLWJvdHRvbVwiKTtcbiAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgIGlmKCRkZXRhaWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwidG8tYm90dG9tXCIpKXtcbiAgICAgICAgJGRldGFpbC5jbGFzc0xpc3QucmVtb3ZlKFwidG8tYm90dG9tXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgICRkZXRhaWwuc3R5bGUudG9wID0gcG9zLnRvcCtcInB4XCI7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBPY3VsdGEgZGV0YWxsZSBkZSBpdGVtIGVuIHNpZGViYXIgaXpxdWllcmRvIFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZ0IC0gIEV2ZW50byByZXRvcm5hZG8gcG9yIHVuIG1vdXNlb3ZlclxuICAgKi9cbiAgbGVhdmVOYXZJdGVtKCl7XG4gICAgdGhpcy4kZWxlbWVudHMuJG5hdkxlZnQucXVlcnlTZWxlY3RvcihcIi5kZXRhaWwtbmF2LWl0ZW1cIikuY2xhc3NMaXN0LmFkZChcImhpZGVcIik7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDYXB0dXJhIGV2ZW50byBtb3VzZW1vdmUgZGUgZmxvYXRCb3hDb250YWluZXJcbiAgICogcGFyYSByZWZyZXNjYXIgbGEgcG9zaWNpb24geSBkZXRlbmVyIHBvc3RlcmlvcmVzIGV2ZW50b3NcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtIEV2ZW50byBkZSBtb3VzZW1vdmVcbiAgICovXG4gIG1vdXNlTW92ZU9uRmxleEJveENvbnRhaW5lcihldnQpe1xuICAgIGxldCBwb3NpdGlvbiA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbih0aGlzLmNvbmZpZywgZXZ0LCB0aGlzLiRlbGVtZW50cy4kdGFibGUpO1xuICAgIHRoaXMucmVmcmVzaERldGFpbERheVBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJhIGV2ZW50byBtb3VzZWxlYXZlIGRlIGZsb2F0Qm94Q29udGFpbmVyXG4gICAqIHBhcmEgb2N1bHRhciBkZXRhaWxEYXlcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtIEV2ZW50byBkZSBtb3VzZWxlYXZlXG4gICAqL1xuICBtb3VzZUxlYXZlT25GbG9hdEJveENvbnRhaW5lcihldnQpe1xuICAgIHRoaXMuaGlkZURldGFpbERheSgpO1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cblxuICAvKipcbiAgICogQ2FwdHVyYSBlbCBldmVudG8gbW91c2Vtb3ZlIGVuICR0YWJsZSwgcGFyYSBpbmRpY2FyIGxhIHBvc2ljaW9uIGRlICRkYXlNb3VzZU92ZXJcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtIEV2ZW50byBkZSBtb3VzZWxlYXZlXG4gICAqL1xuICBtb3VzZU1vdmVPblRhYmxlKGV2dCl7XG4gICAgaWYodGhpcy5pc1Zpc2libGVDb250ZXh0TWVudSkgcmV0dXJuO1xuICAgIGxldCBwb3MgPSB1dGlscy5ldmVudFRvUG9zaXRpb24odGhpcy5jb25maWcsIGV2dCwgdGhpcy4kZWxlbWVudHMuJHRhYmxlKTtcbiAgICBpZih0aGlzLmxhc3RNb3VzZVBvc2l0aW9uID09IG51bGwgfHwgXG4gICAgICB0aGlzLmxhc3RNb3VzZVBvc2l0aW9uLmxlZnQgIT0gcG9zLmxlZnQgfHxcbiAgICAgIHRoaXMubGFzdE1vdXNlUG9zaXRpb24udG9wICE9IHBvcy50b3BcbiAgICApe1xuICAgICAgdGhpcy4kZWxlbWVudHMuJGRheU1vdXNlT3Zlci5zdHlsZS50cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIitwb3MubGVmdCtcInB4ICxcIitwb3MudG9wK1wicHgpXCI7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMubGFzdE1vdXNlUG9zaXRpb24gPSBwb3M7XG4gICAgfVxuICB9O1xuXG5cblxuICByaWdodENsaWNrT25DYXBpYmFyYShldnQpe1xuICAgIGlmKHRoaXMuY29uZmlnLnRpbWVsaW5lLmNvbnRleHRNZW51KXtcbiAgICAgIHRoaXMuaGlkZURldGFpbERheSgpO1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9O1xuXG4gIHJpZ2h0Q2xpY2tPblRhYmxlKGV2dCl7XG4gICAgaWYodGhpcy5jb25maWcudGltZWxpbmUuY29udGV4dE1lbnUpe1xuICAgICAgdGhpcy5oaWRlRGV0YWlsRGF5KCk7XG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudU9uVGFibGUoZXZ0KTtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfTtcblxuICBzaG93Q29udGV4dE1lbnVPblRhYmxlKGV2dCl7XG5cbiAgICBsZXQgZGF0ZSAgPSB1dGlscy5nZXREYXlCeUV2ZW50KHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG4gICAgbGV0IGl0ZW0gID0gdXRpbHMuZ2V0SXRlbUJ5RXZlbnQodGhpcy5jb25maWcsIGV2dCwgdGhpcy4kZWxlbWVudHMuJHRhYmxlKTtcblxuICAgIGlmKHRoaXMuaXNWaXNpYmxlQ29udGV4dE1lbnUpIHtcbiAgICAgIHRoaXMuaGlkZUNvbnRleHRNZW51KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9sZXQgcG9zaXRpb24gPSB1dGlscy5ldmVudFRvUG9zaXRpb24odGhpcy5jb25maWcsIGV2dCwgdGhpcy4kZWxlbWVudHMuJHRhYmxlKTtcbiAgICBsZXQgeyBlbGVtOiRlbGVtLCBpc1Zpc2libGUgfSA9IHRhYmxlRWxlbWVudHMuY3JlYXRlQ29udGV4dE1lbnUoe1xuICAgICAgdGFiU2VsZWN0ZWQ6IHRoaXMudGFiU2VsZWN0ZWQsXG4gICAgICAkY2FwaWJhcmFFbGVtIDogdGhpcy4kY2FwaWJhcmEsXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgZXZ0LFxuICAgICAgLy9wb3NpdGlvbixcbiAgICAgIGRhdGUsXG4gICAgICBpdGVtLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICBuYW1lOiBcIm9uVGFibGVcIlxuICAgIH0pO1xuXG4gICAgaWYoJGVsZW0pe1xuICAgICAgdGhpcy5pc1Zpc2libGVDb250ZXh0TWVudSA9IGlzVmlzaWJsZTtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRjb250ZXh0TWVudS5yZXBsYWNlV2l0aCgkZWxlbSk7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kY29udGV4dE1lbnUgPSAkZWxlbTtcbiAgICB9XG4gICAgaWYoaXNWaXNpYmxlKXtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgIH1cblxuICAvKipcbiAgICogQ2FwdHVyYSBlbCBldmVudG8gY2xpY2sgZW4gJHRhYmxlLCBwYXJhIHNlbGVjY2lvbmFyIGRpYXNcbiAgICogbG9zIGRpYXMgc2VsZWNjaW9uYWRvcyBzZSByZWdpc3RyYW4gZW4gdGhpcy5zZWxlY3RlZFtdXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBFdmVudG8gZGUgbW91c2VsZWF2ZVxuICAgKi9cbiAgY2xpY2tPblRhYmxlKGV2dCl7XG5cbiAgICBsZXQgZGF0ZSAgPSB1dGlscy5nZXREYXlCeUV2ZW50KHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG4gICAgbGV0IHBvcyAgID0gdXRpbHMuZXZlbnRUb1Bvc2l0aW9uKHRoaXMuY29uZmlnLCBldnQsIHRoaXMuJGVsZW1lbnRzLiR0YWJsZSk7XG4gICAgbGV0IGl0ZW0gID0gdXRpbHMuZ2V0SXRlbUJ5RXZlbnQodGhpcy5jb25maWcsIGV2dCwgdGhpcy4kZWxlbWVudHMuJHRhYmxlKTtcblxuICAgIC8vaWYoaXRlbSA9PSBudWxsKSByZXR1cm47IC8vIGN1YW5vIHNlIHNlbGVjY2lvbmEgdW4gZXNwYWNpbyBubyBzZWxlY2Npb25hYmxlXG5cbiAgICAvL3NpIGVzIG1vYmlsZSwgbm8gc2VsZWNjaW9uYSwgc29sbyBtdWVzdHJhIGRldGFsbGVzXG4gICAgbGV0IGRhdGFCeURhdGUgPSBfLmZpbmQoaXRlbS5kYXRhLCB7ZGF0ZX0pO1xuICAgIGlmKHRoaXMuaXNNb2JpbGUgJiYgZGF0YUJ5RGF0ZSl7XG4gICAgICBpZigoIWRhdGFCeURhdGUubWVzc2FnZSB8fCBkYXRhQnlEYXRlLm1lc3NhZ2UudmFsdWUgPT0gbnVsbCkgJiYgT2JqZWN0LmVudHJpZXMoZGF0YUJ5RGF0ZS52YWx1ZXMpLmxlbmd0aCA9PT0gMCApIHJldHVybjtcbiAgICAgIHRoaXMuZm9jdXNPbkZsb2F0Qm94KHtwb3MsIGV2dH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmKCF0aGlzLmlzU2VsZWN0YWJsZSh7aXRlbSwgZGF0ZSwgZGF0YUJ5RGF0ZX0pKXtcbiAgICAgIHRoaXMuJGNhcGliYXJhLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwic2VsZWN0Tm9TZWxlY3RhYmxlXCIsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIGRldGFpbDp7XG4gICAgICAgICAgc2VsZWN0ZWQgICAgOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgICAgIHRhYlNlbGVjdGVkIDogdGhpcy50YWJTZWxlY3RlZCxcbiAgICAgICAgICBsYXN0U2VsZWN0aW9uIDoge2RhdGUsIGl0ZW0sIHBvc30sXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIHJldHVybjsgLy8gY3VhbmRvIHNlIHNlbGVjY2lvbmEgdW4gZXNwYWNpbyBubyBzZWxlY2Npb25hYmxlXG4gICAgfSBcblxuICAgIGxldCBldmVudE5hbWUgPSBcImRlc2VsZWN0RGF5XCI7XG5cbiAgICBpZih0aGlzLnRvZ2dsZVNlbGVjdChkYXRlLCBpdGVtLCBwb3MpKXtcbiAgICAgIGV2ZW50TmFtZSA9IFwic2VsZWN0RGF5XCI7XG4gICAgfVxuXG4gICAgdGhpcy4kY2FwaWJhcmEuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICBkZXRhaWw6e1xuICAgICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgICBsYXN0U2VsZWN0aW9uIDoge2RhdGUsIGl0ZW0sIHBvc30sXG4gICAgICAgIHNlbGVjdGVkICAgIDogdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGFiU2VsZWN0ZWQgOiB0aGlzLnRhYlNlbGVjdGVkXG4gICAgICB9XG4gICAgfSkpO1xuXG4gIH07XG5cblxuXG5cblxuICB0b2dnbGVTZWxlY3QoZGF0ZSwgaXRlbSwgcG9zKXtcbiAgICBpZih0aGlzLmlzU2VsZWN0ZWQoZGF0ZSwgaXRlbSkpe1xuICAgICAgdGhpcy5kZXNlbGVjdChkYXRlLCBpdGVtKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuc2VsZWN0KGRhdGUsIGl0ZW0sIHBvcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cblxuXG5cblxuICBpc1NlbGVjdGVkKGRhdGUsIGl0ZW0pe1xuICAgIGxldCBpbmRleCA9IHV0aWxzLmluZGV4U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZCwge2RhdGUsIGl0ZW19KTtcbiAgICByZXR1cm4gaW5kZXggPiAtMTtcbiAgfTtcblxuXG5cbiAgaXNTZWxlY3RhYmxlKHtpdGVtLCBkYXRlLCBkYXRhQnlEYXRlfSl7XG5cbiAgICBpZighdGhpcy5jb25maWcudGltZWxpbmUuc2VsZWN0YWJsZSl7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYoaXRlbS5zZWxlY3RhYmxlID09PSBmYWxzZSl7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYodGhpcy5jb25maWcudGltZWxpbmUubm9GdXR1cmVTZWxlY3RhYmxlKXtcbiAgICAgIGxldCBkID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgaWYoZCA+IHRvZGF5KXtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpdGVtSXNTZWxlY3RhYmxlID0gdHJ1ZTtcbiAgICBpZih0aGlzLnRhYlNlbGVjdGVkICYmIHRoaXMudGFiU2VsZWN0ZWQuc2VsZWN0YWJsZUlmSGFzKXtcbiAgICAgIGlmKCFpdGVtLnZhbHVlc1t0aGlzLnRhYlNlbGVjdGVkLnNlbGVjdGFibGVJZkhhc10pe1xuICAgICAgICBpdGVtSXNTZWxlY3RhYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtSXNTZWxlY3RhYmxlO1xuICB9O1xuXG4gIHJlZHJhd1NlbGVjdGlvbigpe1xuICAgICAgdGhpcy5jaGVja0NsYXNzU2lkZWJhckV4dGVuZGVkUmlnaHQoKTtcbiAgICAgIHRhYmxlRWxlbWVudHMucmVkcmF3U2VsZWN0Qm9hcmQodGhpcy4kZWxlbWVudHMuJHNlbGVjdENvbnRhaW5lciwgdGhpcy5zZWxlY3RlZCk7XG4gIH07XG5cblxuXG5cblxuXG4gIGRlc2VsZWN0KGRhdGUsIGl0ZW0sIHJlZHJhdyA9IHRydWUpe1xuICAgIGlmKHRoaXMuaXNTZWxlY3RlZChkYXRlLCBpdGVtKSAgKXtcbiAgICAgIGxldCBpbmRleCA9IHV0aWxzLmluZGV4U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZCwge2RhdGUsIGl0ZW19KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEluZGV4VG9TZWxlY3RlZCgpO1xuXG4gICAgaWYocmVkcmF3KXtcbiAgICAgIHRoaXMucmVkcmF3U2VsZWN0aW9uKClcbiAgICB9XG4gIH07XG5cblxuXG5cblxuXG5cbiAgc2VsZWN0KGRhdGUsIGl0ZW0sIHBvcywgcmVkcmF3ID0gdHJ1ZSwgcmVmcmVzaEZvcm0gPSB0cnVlKXtcbiAgICBpZighdGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pKXtcblxuICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHtcbiAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgIGRhdGUsXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIHBvcyxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgZGF0YURheSA9IG51bGw7XG4gICAgICBpZihpdGVtLmRhdGEpe1xuICAgICAgICBkYXRhRGF5ID0gaXRlbS5kYXRhLmZpbmQoZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGQuZGF0ZSA9PSBkYXRlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gc2kgZXMgZWwgcHJpbWVyIGl0ZW0gc2VsZWNjaW9uYWRvLCBzZSBhdXRvcnJlbGxlbmEgZWwgZm9ybXVsYXJpbyBkZSBuYXZSaWdodFxuICAgICAgaWYodGhpcy5zZWxlY3RlZC5sZW5ndGggPT0gMSAmJiByZWZyZXNoRm9ybSl7XG4gICAgICAgIHRoaXMucmVkcmF3KHtcbiAgICAgICAgICBjb3JuZXJSaWdodDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCB7aW5wdXRzLCBlbGVtZW50LCBpbnB1dHNXaXRoUmVsb2FkLCBzYXZlQ2FuY2VsQnRuc30gPSB0YWJsZUVsZW1lbnRzLnJlZHJhd05hdlJpZ2h0KHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kbmF2UmlnaHQsIHRoaXMuc2VsZWN0ZWQsIHRoaXMudGFiU2VsZWN0ZWQsIGRhdGFEYXksIHRoaXMuc2VsZWN0ZWRbMF0pO1xuICAgICAgICB0aGlzLiRlbGVtZW50cy4kbmF2UmlnaHQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLiRpbnB1dHNOYXZSaWdodCA9IGlucHV0cztcbiAgICAgICAgdGhpcy4kaW5wdXRzV2l0aFJlbG9hZCA9IGlucHV0c1dpdGhSZWxvYWQ7XG4gICAgICAgIHRoaXMuJHNhdmVDYW5jZWxCdG5zID0gc2F2ZUNhbmNlbEJ0bnM7XG4gICAgICB9XG5cbiAgICB9XG5cblxuICAgIGxldCBmb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy4kaW5wdXRzTmF2UmlnaHQuZm9yRWFjaChpbnB1dE5hdlJpZ2h0ID0+IHtcbiAgICAgIGlmKCFmb2N1c2VkKXtcbiAgICAgICAgbGV0IHZhbGlkSW5wdXRzID0gaW5wdXROYXZSaWdodC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIik7XG4gICAgICAgIGlmKHZhbGlkSW5wdXRzICYmIHZhbGlkSW5wdXRzLmxlbmd0aCA+IDApe1xuICAgICAgICAgIGxldCBmaXJzdFZhbGlkSW5wdXQgPSBfLmZpcnN0KHZhbGlkSW5wdXRzKTtcblxuICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgXG4gICAgICAgICAgICBmaXJzdFZhbGlkSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICB9LCAwKTtcblxuICAgICAgICAgIGZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuc2V0SW5kZXhUb1NlbGVjdGVkKCk7XG5cbiAgICBpZihyZWRyYXcpe1xuICAgICAgdGhpcy5yZWRyYXdTZWxlY3Rpb24oKVxuICAgIH1cbiAgfTtcblxuXG4gIHNldEluZGV4VG9TZWxlY3RlZCgpe1xuICAgIHRoaXMuc2VsZWN0ZWQuZm9yRWFjaCgocywgaW5kZXgpID0+IHtcbiAgICAgIHMuaW5kZXggPSBpbmRleCsxO1xuICAgIH0pXG4gIH07XG5cblxuICBpc1NlbGVjdGVkQWxsRGF0ZShkYXRlKXtcbiAgICBsZXQgaXNBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5jb25maWcuZGF0YS5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYoIXRoaXMuaXNTZWxlY3RlZChkYXRlLCBpdGVtKSl7XG4gICAgICAgICAgaXNBbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gaXNBbGxTZWxlY3RlZDtcbiAgfTtcblxuICBzZWxlY3RCeURhdGUoZGF0ZSl7XG4gICAgdGhpcy5jb25maWcuZGF0YS5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RCeUl0ZW1EYXRlKGRhdGUsIGl0ZW0sIGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIGRlc2VsZWN0QnlEYXRlKGRhdGUpe1xuICAgIHRoaXMuY29uZmlnLmRhdGEuZm9yRWFjaChwYXJlbnQgPT4ge1xuICAgICAgcGFyZW50LmNoaWxkcmVuLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIHRoaXMuZGVzZWxlY3RCeUl0ZW1EYXRlKGRhdGUsIGl0ZW0sIGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHNlbGVjdEJ5SXRlbURhdGUoZGF0ZSwgaXRlbSwgcmVkcmF3ID0gdHJ1ZSwgcmVmcmVzaEZvcm0gPSB0cnVlKXtcbiAgICBpZighdGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pKXtcbiAgICAgIGxldCBwb3MgPSB1dGlscy5nZXRQb3NpdGlvbkJ5SXRlbURhdGUodGhpcy5jb25maWcsIGl0ZW0sIGRhdGUpO1xuICAgICAgdGhpcy5zZWxlY3QoZGF0ZSwgaXRlbSwgcG9zLCByZWRyYXcsIHJlZnJlc2hGb3JtKTtcbiAgICB9XG4gIH07XG5cblxuICBkZXNlbGVjdEJ5SXRlbURhdGUoZGF0ZSwgaXRlbSwgcmVkcmF3ID0gdHJ1ZSl7XG4gICAgaWYodGhpcy5pc1NlbGVjdGVkKGRhdGUsIGl0ZW0pKXtcbiAgICAgIHRoaXMuZGVzZWxlY3QoZGF0ZSwgaXRlbSwgcmVkcmF3KTtcbiAgICB9XG4gIH07XG5cbiAgZGVzZWxlY3RBbGwocmVkcmF3ID0gZmFsc2Upe1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBbXTtcbiAgICBpZihyZWRyYXcpe1xuICAgICAgdGhpcy5yZWRyYXdTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH07XG5cblxuXG5cblxuXG4gIGNoZWNrQ2xhc3NTaWRlYmFyRXh0ZW5kZWRSaWdodCgpe1xuICAgIGlmKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID4gMCl7XG4gICAgICB0aGlzLiRjYXBpYmFyYS5jbGFzc0xpc3QuYWRkKFwiZXh0ZW5kZWQtcmlnaHRcIik7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLiRjYXBpYmFyYS5jbGFzc0xpc3QucmVtb3ZlKFwiZXh0ZW5kZWQtcmlnaHRcIik7XG4gICAgfVxuXG4gIH07XG5cblxuXG5cbiAgLyoqXG4gICAqIG9jdWx0YSBkZXRhaWxEYXkgZW4gZWwgZG9tLCB1c2FuZG8gbGEgY2xhc2UgZGQtaGlkZVxuICAgKi9cbiAgaGlkZURldGFpbERheSgpe1xuICAgIHRoaXMuJGVsZW1lbnRzLiRkZXRhaWxEYXkuY2xhc3NMaXN0LmFkZChcImRkLWhpZGVcIik7XG4gIH07XG5cbiAgaGlkZUNvbnRleHRNZW51KCl7XG4gICAgaWYodGhpcy4kZWxlbWVudHMuJGNvbnRleHRNZW51KXtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRjb250ZXh0TWVudS5jbGFzc0xpc3QuYWRkKFwiY20taGlkZVwiKTtcbiAgICB9XG4gICAgdGhpcy5pc1Zpc2libGVDb250ZXh0TWVudSA9IGZhbHNlO1xuICB9O1xuXG5cbiAgcmVmcmVzaFNjcm9sbFV0aWxzVmFycygpe1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLnNjcm9sbExlZnQgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbExlZnQ7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuc2Nyb2xsVG9wID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5zY3JvbGxUb3A7XG5cbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5zY3JvbGxXaWR0aCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsV2lkdGg7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuc2Nyb2xsSGVpZ2h0ID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG5cbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5ib3VuZGluZ0NsaWVudFRhYmxlID0gdGhpcy4kZWxlbWVudHMuJHRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLmJvdW5kaW5nQ2xpZW50Q29udGFpbmVyID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfVxuXG4gIHJlZnJlc2hWaXJ0dWFsU2Nyb2xsVmFycygpe1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLmNvbnRhaW5lcldpZHRoID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5jbGllbnRXaWR0aDtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5jb250YWluZXJIZWlnaHQgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgICB1dGlscy50YWJsZVBvc2l0aW9ucy5uYXZXaWR0aCA9IHRoaXMuJGVsZW1lbnRzLiRuYXZMZWZ0LmNsaWVudFdpZHRoO1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLmhlYWRlckhlaWdodCA9IHRoaXMuJGVsZW1lbnRzLiRoZWFkZXIuY2xpZW50SGVpZ2h0O1xuICAgIHV0aWxzLnRhYmxlUG9zaXRpb25zLmRheVdpZHRoID0gcGFyc2VGbG9hdCh1dGlscy5nZXRDU1NWYXJpYWJsZSh0aGlzLmNvbmZpZywgXCItLWRheS13aWR0aFwiKSk7XG4gICAgdXRpbHMudGFibGVQb3NpdGlvbnMuaXRlbUhlaWdodCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1pdGVtLWhlaWdodFwiKSk7XG4gIH1cblxuICByZWZyZXNoVmlydHVhbFNjcm9sbCgpe1xuICAgIGxldCAkZmxvYXRCb3hMaXN0ID0gdGhpcy4kZWxlbWVudHMuJGZsb2F0Qm94Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxvYXQtYm94XCIpO1xuICAgICRmbG9hdEJveExpc3QuZm9yRWFjaChmID0+e1xuICAgICAgaWYodGhpcy5pc1Zpc2libGVGbG9hdEJveEVsZW1lbnQoZikpe1xuICAgICAgICBmLnNldEF0dHJpYnV0ZShcImRhdGEtaXMtdmlzaWJsZVwiLCB0cnVlKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBmLnNldEF0dHJpYnV0ZShcImRhdGEtaXMtdmlzaWJsZVwiLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGlzVmlzaWJsZUZsb2F0Qm94RWxlbWVudChmKXtcbiAgICBsZXQgY29udGFpbmVyV2lkdGggPSB1dGlscy50YWJsZVBvc2l0aW9ucy5jb250YWluZXJXaWR0aDtcbiAgICBsZXQgY29udGFpbmVySGVpZ2h0ID0gdXRpbHMudGFibGVQb3NpdGlvbnMuY29udGFpbmVySGVpZ2h0O1xuICAgIGxldCBuYXZXaWR0aCA9IHV0aWxzLnRhYmxlUG9zaXRpb25zLm5hdldpZHRoO1xuICAgIGxldCBoZWFkZXJIZWlnaHQgPSB1dGlscy50YWJsZVBvc2l0aW9ucy5oZWFkZXJIZWlnaHQ7XG4gICAgbGV0IGRheVdpZHRoID0gdXRpbHMudGFibGVQb3NpdGlvbnMuZGF5V2lkdGg7XG4gICAgbGV0IGl0ZW1IZWlnaHQgPSB1dGlscy50YWJsZVBvc2l0aW9ucy5pdGVtSGVpZ2h0O1xuICAgIGxldCBzY3JvbGxMZWZ0ID0gdXRpbHMudGFibGVQb3NpdGlvbnMuc2Nyb2xsTGVmdDtcbiAgICBsZXQgc2Nyb2xsVG9wID0gdXRpbHMudGFibGVQb3NpdGlvbnMuc2Nyb2xsVG9wO1xuXG4gICAgbGV0IG1hcmdpbiA9IGRheVdpZHRoO1xuICAgIGxldCBsZWZ0ID0gcGFyc2VGbG9hdChmLnN0eWxlLmxlZnQpO1xuICAgIGxldCB0b3AgPSBwYXJzZUZsb2F0KGYuc3R5bGUudG9wKTtcblxuICAgIGxldCB2aXNpYmxlV2lkdGggPSBjb250YWluZXJXaWR0aCAtIG5hdldpZHRoIDtcbiAgICBsZXQgdmlzaWJsZUhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAtIGhlYWRlckhlaWdodDtcblxuICAgIGxldCBpc1Zpc2libGVMZWZ0ID0gIGxlZnQgPiBzY3JvbGxMZWZ0IC0gZGF5V2lkdGggLSBtYXJnaW47XG4gICAgbGV0IGlzVmlzaWJsZVJpZ2h0ID0gbGVmdCA8ICggc2Nyb2xsTGVmdCArIHZpc2libGVXaWR0aCArIGRheVdpZHRoICsgbWFyZ2luKTtcbiAgICBsZXQgaXNWaXNpYmxlVG9wID0gdG9wID4gKHNjcm9sbFRvcCAtIGl0ZW1IZWlnaHQgLSBtYXJnaW4pO1xuICAgIGxldCBpc1Zpc2libGVCb3R0b20gPSB0b3AgPCAoc2Nyb2xsVG9wICsgdmlzaWJsZUhlaWdodCArIGl0ZW1IZWlnaHQgKyBtYXJnaW4pO1xuXG4gICAgcmV0dXJuIGlzVmlzaWJsZUxlZnQgJiYgaXNWaXNpYmxlUmlnaHQgJiYgaXNWaXNpYmxlVG9wICYmIGlzVmlzaWJsZUJvdHRvbTtcbiAgfVxuXG5cbiAgb25TY3JvbGxDb250YWluZXIoKXtcbiAgICBpZighdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbERlYm91bmNlZCl7XG4gICAgICB0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsRGVib3VuY2VkID0gdXRpbHMudGhyb3R0bGUodGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbC5iaW5kKHRoaXMpLCAxMDAsIFxuICAgICAgICB7bGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IHRydWV9KTtcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoU2Nyb2xsVXRpbHNWYXJzKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlydHVhbFNjcm9sbERlYm91bmNlZCgpO1xuICAgIHRoaXMuaGlkZUNvbnRleHRNZW51KCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIE11ZXN0cmEgRGV0YWlsIGRpYWxvZyB5IFJlZnJlc2NhIHN1IHBvc2ljaW9uIFxuICAgKiB1c2FuZG8gZWwgZXZlbnRvIGRlbCBtb3VzZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZ0IC0gZXZlbnRvIGRlIG1vdXNlbW92ZSwgcGFyYSBwb3NpY2lvbmVzIGVuIHBhbnRhbGxhXG4gICAqL1xuICByZWZyZXNoRGV0YWlsRGF5UG9zaXRpb24ocG9zaXRpb24pe1xuICAgIGxldCBkYXlXaWR0aCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1kYXktd2lkdGhcIikpO1xuICAgIGxldCBpdGVtSGVpZ2h0ID0gcGFyc2VGbG9hdCh1dGlscy5nZXRDU1NWYXJpYWJsZSh0aGlzLmNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpKTtcblxuICAgIHRoaXMuJGVsZW1lbnRzLiRkZXRhaWxEYXkuc3R5bGUudG9wICA9IHBvc2l0aW9uLnRvcCArIFwicHhcIjtcbiAgICB0aGlzLiRlbGVtZW50cy4kZGV0YWlsRGF5LnN0eWxlLmxlZnQgPSBwb3NpdGlvbi5sZWZ0ICsgZGF5V2lkdGggKyBcInB4XCI7XG5cbiAgICBsZXQgeVBvc2l0aW9uQ2xhc3MgPSBcImhhcy10b3AtYXJyb3dcIjtcbiAgICBsZXQgeFBvc2l0aW9uQ2xhc3MgPSBcIlwiO1xuXG4gICAgLy9jb25kaWNpb24gcGFyYSBwcmltZXJhcyAzIGZpbGFzXG4gICAgaWYocG9zaXRpb24udG9wQ2xpZW50IDw9IGl0ZW1IZWlnaHQgKjMgKXtcbiAgICAgIHlQb3NpdGlvbkNsYXNzID0gXCJoYXMtY2VpbC1hcnJvd1wiO1xuICAgIH1lbHNlIGlmKCBwb3NpdGlvbi55UGVyY2VudCA+IDIwICYmXG4gICAgICBwb3NpdGlvbi55UGVyY2VudCA8PSA3MCl7IC8vZW50cmUgMjAgeSA1MCAlXG4gICAgICB5UG9zaXRpb25DbGFzcyA9IFwiaGFzLW1pZGRsZS1hcnJvd1wiO1xuICAgIH1lbHNlIGlmKHBvc2l0aW9uLnlQZXJjZW50ID4gNzApe1xuICAgICAgeVBvc2l0aW9uQ2xhc3MgPSBcImhhcy1ib3R0b20tYXJyb3dcIjtcbiAgICB9XG5cbiAgICBpZihwb3NpdGlvbi54UGVyY2VudCA+IDMwICl7XG4gICAgICB4UG9zaXRpb25DbGFzcyA9IFwiaGFzLXJpZ2h0LWFycm93XCI7XG4gICAgfVxuXG4gICAgLy9xdWl0YSBkZC1oaWRlLCBzb2JyZWVzY3JpYmllbmRvIHRvZGFzIGxhcyBjbGFzZXNcbiAgICB0aGlzLiRlbGVtZW50cy4kZGV0YWlsRGF5LmNsYXNzTmFtZSA9IFwiZGV0YWlsLWRheSBcIisgeVBvc2l0aW9uQ2xhc3MgKyBcIiBcIiArIHhQb3NpdGlvbkNsYXNzO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBDYXB0dXJhIGV2ZW50byBjbGljayBlbiBib3RvbiBwYXJhIGFicmlyIGFyYm9sLCBlbiBzaWRlYmFyIGl6cXVpZXJkb1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZ0IC0gb2JqZXRvIGV2ZW50byBjbGlja1xuICAgKi9cbiAgY2xpY2tOYXZMZWZ0VHJlZUljb24oKXtcbiAgICB0aGlzLnJlZHJhdyh7XG4gICAgICBmbG9hdEJveDogdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICAgIHRoaXMucmVmcmVzaFZpcnR1YWxTY3JvbGxWYXJzKCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZXZlbnRvIG1vdXNlb3ZlciBzb2JyZSBlbGVtZW50byBmbG9hdEJveFxuICAgKiB1c2FkYSBwYXJhIG1vc3RyYXIgZGV0YWxsZSBkZSBkaWEvaXRlbSBkZWwgZmxvYXRib3hcbiAgICovXG4gIG1vdXNlT3ZlckZsb2F0Qm94KGV2dCwgZm9yY2Upe1xuICAgICAgbGV0IGl0ZW0gICAgPSBldnQuZGV0YWlsLml0ZW07XG4gICAgICBsZXQgZGF0YURheSA9IGV2dC5kZXRhaWwuZGF0YTtcblxuICAgICAgLy92ZXJpZmljYSBxdWUgc2VhbiBkaWFzIGRpc3RpbnRvcywgY29tcGFyYW5kb2xvIGNvbiBlbCBhbnRlcmlvcixcbiAgICAgIC8vIHBhcmEgbm8gY3JlYXIgbnVldmFtZW50ZSBlbCBtaXNtbyBkZXRhaWwtZGF5LCBjb24gbG9zIG1pc21vcyBkYXRvc1xuICAgICAgaWYoZGF0YURheSAhPT0gdGhpcy5sYXN0RGF0YURheSB8fCBmb3JjZSl7XG4gICAgICAgIGxldCBuZXdERENvbnRlbnRTdHJpbmcgPSB0YWJsZUVsZW1lbnRzLnJlZHJhd0RldGFpbERheSh0aGlzLmNvbmZpZywgaXRlbSwgZGF0YURheSwgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgICAgIGlmKG5ld0REQ29udGVudFN0cmluZyl7XG4gICAgICAgICAgdGhpcy4kZWxlbWVudHMuJGRldGFpbERheS5pbm5lckhUTUwgPSBuZXdERENvbnRlbnRTdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0RGF0YURheSA9IGRhdGFEYXk7XG4gICAgICB9XG4gIH1cblxuICBjbGlja0RhdGVIZWFkZXIoZXZ0KXtcbiAgICBsZXQgZGF0ZSA9IGV2dC5kZXRhaWwuZGF0ZTtcbiAgICB0aGlzLnRvZ2dsZVNlbGVjdEJ5RGF0ZShkYXRlKTtcbiAgICB0aGlzLnJlZHJhd1NlbGVjdGlvbigpO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0QnlEYXRlKGRhdGUpe1xuICAgIGlmKHRoaXMuaXNTZWxlY3RlZEFsbERhdGUoZGF0ZSkpe1xuICAgICAgdGhpcy5kZXNlbGVjdEJ5RGF0ZShkYXRlKTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuc2VsZWN0QnlEYXRlKGRhdGUpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZC5zb3J0KChzLCBuKSA9PiB7XG4gICAgICByZXR1cm4gKG5ldyBEYXRlKHMuZGF0ZSkpIC0gKG5ldyBEYXRlKG4uZGF0ZSkpO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0SW5kZXhUb1NlbGVjdGVkKCk7XG4gIH1cblxuXG4gIGNvbnRleHRNZW51RGF0ZUhlYWRlcihldnQpe1xuICAgIGxldCBsZWZ0ID0gZXZ0LmRldGFpbC5jbGllbnRYO1xuICAgIGxldCB0b3AgPSBldnQuZGV0YWlsLmNsaWVudFkgLSB0aGlzLiRjYXBpYmFyYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgbGV0IGRhdGUgPSBldnQuZGV0YWlsLmRhdGU7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZ0LmRldGFpbC4kZWxlbTtcblxuICAgIGxldCB7IGVsZW06JGVsZW0sIGlzVmlzaWJsZSB9ID0gdGFibGVFbGVtZW50cy5jcmVhdGVDb250ZXh0TWVudSh7XG4gICAgICB0YWJTZWxlY3RlZDogdGhpcy50YWJTZWxlY3RlZCxcbiAgICAgIHRhcmdldCxcbiAgICAgICRjYXBpYmFyYUVsZW06IHRoaXMuJGNhcGliYXJhLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgZGF0ZSxcbiAgICAgIGxlZnQsXG4gICAgICB0b3AsXG4gICAgICBuYW1lOiBcIm9uRGF0ZUhlYWRlclwiXG4gICAgfSk7XG5cbiAgICBpZigkZWxlbSl7XG4gICAgICB0aGlzLmlzVmlzaWJsZUNvbnRleHRNZW51ID0gaXNWaXNpYmxlO1xuICAgICAgdGhpcy4kZWxlbWVudHMuJGNvbnRleHRNZW51LnJlcGxhY2VXaXRoKCRlbGVtKTtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRjb250ZXh0TWVudSA9ICRlbGVtO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmEgZXZlbnRvIHdpbmRvdyByZXNpemVcbiAgICogcGFyYSB2ZXJpZmljYXIgc2kgZXMgbW9iaWxlIG8gbm9cbiAgICovXG4gIG9uV2luZG93UmVzaXplKCl7XG4gICAgaWYodGhpcy5pbml0aWFsaXplZCl7XG4gICAgICBsZXQgb2xkVmFsdWUgPSB0aGlzLmlzTW9iaWxlO1xuICAgICAgbGV0IG5ld1ZhbHVlID0gdXRpbHMuY2hlY2tJc01vYmlsZSgpO1xuICAgICAgaWYob2xkVmFsdWUgIT0gbmV3VmFsdWUgKXtcbiAgICAgICAgdGhpcy5pc01vYmlsZSA9IG5ld1ZhbHVlO1xuICAgICAgICB0aGlzLnRvZ2dsZVNpZGViYXJNb2JpbGUoKTtcbiAgICAgICAgdGhpcy5zZXRBbGxDU1NWYXJpYWJsZXMoKTtcbiAgICAgICAgdGhpcy5yZWRyYXcoeyBmbG9hdEJveDp0cnVlLCBuYXZMZWZ0OnRydWUgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2hTY3JvbGxVdGlsc1ZhcnMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFZpcnR1YWxTY3JvbGxWYXJzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbWJpYSBzaWRlYmFyIHBhcmEgbW9iaWxlLCBzZWd1biB2YXJpYWJsZSB0aGlzLmlzTW9iaWxlXG4gICAqL1xuICB0b2dnbGVTaWRlYmFyTW9iaWxlKCl7XG4gICAgICBpZih0aGlzLmlzTW9iaWxlKXtcbiAgICAgICAgdGhpcy5zZXRTaG93TmF2SW5pdGlhbChmYWxzZSk7XG4gICAgICAgIHRoaXMuc2V0U2hvd05hdkV4dGVuZGVkKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRTaG93TmF2QnV0dG9ucyhmYWxzZSk7XG4gICAgICAgIHRoaXMuc2V0RWRpdGFibGUoZmFsc2UpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGFibGUoZmFsc2UpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMuc2V0U2hvd05hdkluaXRpYWwodHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0U2hvd05hdkV4dGVuZGVkKGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRTaG93TmF2QnV0dG9ucyh0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRFZGl0YWJsZSh0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RhYmxlKHRydWUpO1xuICAgICAgfVxuICAgIHRoaXMucmVmcmVzaFNjcm9sbFV0aWxzVmFycygpO1xuICAgIHRoaXMucmVmcmVzaFZpcnR1YWxTY3JvbGxWYXJzKCk7XG4gIH1cblxuICBzZXRFZGl0YWJsZShuZXdFZGl0YWJsZSl7XG4gICAgaWYodGhpcy5jb25maWcudGltZWxpbmUuZWRpdGFibGUgIT0gbmV3RWRpdGFibGUpe1xuICAgICAgdGhpcy5jb25maWcudGltZWxpbmUuZWRpdGFibGUgPSBuZXdFZGl0YWJsZTtcbiAgICAgIHRoaXMucmVkcmF3KHtuYXZMZWZ0OnRydWUsIGhlYWRlcjp0cnVlfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0U2VsZWN0YWJsZShuZXdTZWxlY3RhYmxlKXtcbiAgICBpZih0aGlzLmNvbmZpZy50aW1lbGluZS5zZWxlY3RhYmxlICE9IG5ld1NlbGVjdGFibGUpe1xuICAgICAgdGhpcy5jb25maWcudGltZWxpbmUuc2VsZWN0YWJsZSA9IG5ld1NlbGVjdGFibGU7XG4gICAgICB0aGlzLmNsZWFuTXVsdGlJbnB1dCgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzT25GbG9hdEJveCh7cG9zLCBldnR9KXtcbiAgICBpZih0aGlzLmlzTW9iaWxlKXtcbiAgICAgIGxldCBjb250YWluZXJXaWR0aCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICBsZXQgZGF5V2lkdGggPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0tZGF5LXdpZHRoXCIpKTtcbiAgICAgIGxldCBuYXZXaWR0aCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1uYXYtd2lkdGhcIikpO1xuICAgICAgbGV0IGxlZnQgPSBwb3MubGVmdCAtIGNvbnRhaW5lcldpZHRoICsgMS41ICogZGF5V2lkdGggKyBuYXZXaWR0aDtcblxuICAgICAgLy9sZXQgY29udGFpbmVySGVpZ2h0ID0gdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICBsZXQgaXRlbUhlaWdodCA9IHBhcnNlRmxvYXQodXRpbHMuZ2V0Q1NTVmFyaWFibGUodGhpcy5jb25maWcsIFwiLS1pdGVtLWhlaWdodFwiKSk7XG4gICAgICAvL2xldCBoZWFkZXJIZWlnaHQgPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKHRoaXMuY29uZmlnLCBcIi0taGVhZGVyLWhlaWdodFwiKSk7XG4gICAgICBsZXQgdG9wID0gcG9zLnRvcCAtIDAuNSAqIGl0ZW1IZWlnaHQ7XG5cbiAgICAgIGxldCBwb3NpdGlvbiA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbih0aGlzLmNvbmZpZywgZXZ0LCB0aGlzLiRlbGVtZW50cy4kdGFibGUpO1xuICAgICAgdGhpcy5yZWZyZXNoRGV0YWlsRGF5UG9zaXRpb24oe1xuICAgICAgICAuLi5wb3NpdGlvbixcbiAgICAgICAgdG9wQ2xpZW50IDogcG9zaXRpb24ueUlubmVyUGVyY2VudCA+PSA3MCA/IHBvc2l0aW9uLnRvcENsaWVudCA6IDAsIC8vIGZ1ZXJ6YSBwb3NpY2lvbiBkZSBhcnJvdyBlbiBkZXRhaWxkYXlcbiAgICAgICAgeFBlcmNlbnQgIDogcG9zaXRpb24ueCA8IDQgPyAwOiAxMDAgIC8vIGZ1ZXJ6YSBhcnJvdyByaWdodFxuICAgICAgfSk7XG4gICAgICB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbCh7XG4gICAgICAgIHRvcCwgbGVmdCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICB9KTtcblxuICAgIH1cbiAgfVxuXG4gIHJlZnJlc2hJbnB1dHNXaXRoUmVsb2FkKHtkZXRhaWx9KXtcbiAgICB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkID0gdGhpcy4kaW5wdXRzV2l0aFJlbG9hZC5tYXAoKHsgJGlucHV0LCBjb25maWd9KSA9PiB7XG4gICAgICBsZXQgbGFzdFNlbGVjdGlvbiA9IGRldGFpbCAmJiBkZXRhaWwubGFzdFNlbGVjdGlvbiA/IGRldGFpbC5sYXN0U2VsZWN0aW9uIDogbnVsbDtcbiAgICAgIGxldCBuZXdJbnB1dCA9IHRhYmxlRWxlbWVudHMuY3JlYXRlSW5wdXQoY29uZmlnLCBudWxsLCBsYXN0U2VsZWN0aW9uLCBkZXRhaWwuc2VsZWN0ZWQpO1xuICAgICAgJGlucHV0LnBhcmVudEVsZW1lbnQucmVwbGFjZUNoaWxkKG5ld0lucHV0LCAkaW5wdXQpO1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy4kaW5wdXRzTmF2UmlnaHQuaW5kZXhPZigkaW5wdXQpO1xuICAgICAgaWYoaW5kZXggPj0gMCl7XG4gICAgICAgIHRoaXMuJGlucHV0c05hdlJpZ2h0W2luZGV4XSA9IG5ld0lucHV0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHskaW5wdXQ6IG5ld0lucHV0LCBjb25maWd9XG4gICAgfSk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEFncmVnYSBldmVudG9zIGEgbG9zIGVsZW1lbnRvcyBkZWwgZG9tIGRlIGxhIHBsYW5pbGxhXG4gICAqIHVzYW5kbyBlbCBvYmplY3RvICRjYXBpYmFyYVxuICAgKi9cbiAgYWRkRXZlbnRzKCl7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIgICAgICAgICAgICAgICAgLCB0aGlzLmhpZGVDb250ZXh0TWVudS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiAgICAgICAgICAsIHRoaXMucmlnaHRDbGlja09uQ2FwaWJhcmEuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcInRvZ2dsZURhcmtcIiAgICAgICAgICAgLCB0aGlzLnRvZ2dsZURhcmsuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcInRvZ2dsZUhlYWRlclwiICAgICAgICAgLCB0aGlzLnRvZ2dsZUhlYWRlci5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlU2lkZWJhclwiICAgICAgICAsIHRoaXMudG9nZ2xlU2lkZWJhci5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlU2lkZWJhclJpZ2h0XCIgICAsIHRoaXMudG9nZ2xlU2lkZWJhclJpZ2h0LmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJzYXZlTXVsdGlJbnB1dFwiICAgICAgICwgdGhpcy5zYXZlSW5wdXRzTmF2UmlnaHQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcImNhbmNlbE11bHRpSW5wdXRcIiAgICAgLCB0aGlzLmNhbmNlbE11bHRpSW5wdXQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcIm92ZXJOYXZJdGVtXCIgICAgICAgICAgLCB0aGlzLm92ZXJOYXZJdGVtLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJsZWF2ZU5hdkl0ZW1cIiAgICAgICAgICwgdGhpcy5sZWF2ZU5hdkl0ZW0uYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrTmF2TGVmdFRyZWVJY29uXCIgLCB0aGlzLmNsaWNrTmF2TGVmdFRyZWVJY29uLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZU92ZXJGbG9hdEJveFwiICAgICwgdGhpcy5tb3VzZU92ZXJGbG9hdEJveC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0VGFiSGVhZGVyXCIgICAgICAsIGUgPT4geyB0aGlzLnNlbGVjdFRhYihlLmRldGFpbC50YWIpOyB9KTtcbiAgICB0aGlzLiRjYXBpYmFyYS5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0TGVnZW5kSGVhZGVyXCIgICAsIHRoaXMuc2VsZWN0TGVnZW5kLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy4kY2FwaWJhcmEuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdERheVwiICAgLCB0aGlzLnJlZnJlc2hJbnB1dHNXaXRoUmVsb2FkLmJpbmQodGhpcykpO1xuICAgIHRoaXMuJGNhcGliYXJhLmFkZEV2ZW50TGlzdGVuZXIoXCJkZXNlbGVjdERheVwiICAgLCB0aGlzLnJlZnJlc2hJbnB1dHNXaXRoUmVsb2FkLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy4kZWxlbWVudHMuJGZsb2F0Qm94Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5tb3VzZU1vdmVPbkZsZXhCb3hDb250YWluZXIuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kZWxlbWVudHMuJGZsb2F0Qm94Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIHRoaXMubW91c2VMZWF2ZU9uRmxvYXRCb3hDb250YWluZXIuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLiRlbGVtZW50cy4kdGFibGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLm1vdXNlTW92ZU9uVGFibGUuYmluZCh0aGlzKSApO1xuICAgIHRoaXMuJGVsZW1lbnRzLiR0YWJsZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5jbGlja09uVGFibGUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kZWxlbWVudHMuJHRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLnJpZ2h0Q2xpY2tPblRhYmxlLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25TY3JvbGxDb250YWluZXIuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja0RhdGVcIiwgdGhpcy5jbGlja0RhdGVIZWFkZXIuYmluZCh0aGlzKSk7XG4gICAgdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dE1lbnVEYXRlXCIsIHRoaXMuY29udGV4dE1lbnVEYXRlSGVhZGVyLmJpbmQodGhpcykpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsdGhpcy5vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpKTtcblxuICB9XG5cblxuXG4gIC8qKlxuICAgKiBGdW5jaW9uIHBhcmEgcmVkaWJ1amFyIHBhcnRlcyBkZSBsYSBwbGFuaWxsYSwgaW5kaWNhZG8gc2VndW4gcGFyYW1ldHJvXG4gICAqXG4gICAqICAgIG9wdGlvbnMgOiB7XG4gICAqICAgICAgICAgICAgZmxvYXRCb3g6IEJvb2xlYW4sXG4gICAqICAgICAgICAgICAgcGxvdHM6IEJvb2xlYW4sXG4gICAqICAgICAgICAgICAgaGVhZGVyOiBCb29sZWFuLFxuICAgKiAgICAgICAgICAgIG5hdkxlZnQ6IEJvb2xlYW4sXG4gICAqICAgICAgICAgICAgbmF2UmlnaHQ6IEJvb2xlYW4sXG4gICAqICAgIH1cbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvYmplY3RvIGRlIGNvbmZpZ3VyYWNpb25cbiAgICovXG4gIHJlZHJhdyhvcHRpb25zKXtcblxuICAgIGlmKG9wdGlvbnMuZmxvYXRCb3gpe1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdGbG9hdEJveCh0aGlzLmNvbmZpZywgdGhpcy50YWJTZWxlY3RlZCwgdGhpcy4kZWxlbWVudHMuJGZsb2F0Qm94Q29udGFpbmVyKTtcbiAgICAgIHRhYmxlRWxlbWVudHMucmVkcmF3QmFja2dyb3VuZCh0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJGJhY2tncm91bmQpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdQbG90VmVydGljYWxDb250YWluZXIodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiRwbG90VmVydGljYWxDb250YWluZXIpO1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdQbG90SG9yaXpvbnRhbENvbnRhaW5lcih0aGlzLmNvbmZpZywgdGhpcy4kZWxlbWVudHMuJHBsb3RIb3Jpem9udGFsQ29udGFpbmVyKTtcbiAgICAgIHRhYmxlRWxlbWVudHMucmVkcmF3VG9kYXlMaW5lKHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kdG9kYXlMaW5lKTtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLnBsb3RzKXtcbiAgICAgIHRhYmxlRWxlbWVudHMucmVkcmF3UGxvdFZlcnRpY2FsQ29udGFpbmVyKHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kcGxvdFZlcnRpY2FsQ29udGFpbmVyKTtcbiAgICAgIHRhYmxlRWxlbWVudHMucmVkcmF3UGxvdEhvcml6b250YWxDb250YWluZXIodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiRwbG90SG9yaXpvbnRhbENvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy5oZWFkZXIpe1xuICAgICAgdGFibGVFbGVtZW50cy5yZWRyYXdIZWFkZXIodGhpcy5jb25maWcsIHRoaXMuJGVsZW1lbnRzLiRoZWFkZXIpO1xuICAgICAgaWYodGhpcy5jb25maWcudGltZWxpbmUuaGVhZGVyLmV4dGVuZC5lbmFibGVkICE9PSBmYWxzZSl7XG4gICAgICAgIGxldCAkaGVhZGVyRXh0ZW5kZWQgPSB0YWJsZUVsZW1lbnRzLmNyZWF0ZUhlYWRlckV4dGVuZGVkKHRoaXMuY29uZmlnKTtcbiAgICAgICAgaWYoJGhlYWRlckV4dGVuZGVkKXtcbiAgICAgICAgICB0aGlzLiRlbGVtZW50cy4kaGVhZGVyLmFwcGVuZCgkaGVhZGVyRXh0ZW5kZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy5oZWFkZXJUb3Ape1xuICAgICAgdGhpcy4kZWxlbWVudHMuJGhlYWRlclRvcCA9IHRhYmxlRWxlbWVudHMucmVkcmF3SGVhZGVyVG9wKHRoaXMuY29uZmlnLCB0aGlzLnRhYlNlbGVjdGVkLCB0aGlzLiRlbGVtZW50cy4kaGVhZGVyVG9wKTtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmRldGFpbERheSl7XG4gICAgICB0aGlzLmhpZGVEZXRhaWxEYXkoKTtcbiAgICAgIHRoaXMubGFzdERhdGFEYXkgPSBudWxsO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMubmF2TGVmdCl7XG4gICAgICB0YWJsZUVsZW1lbnRzLnJlZHJhd05hdkxlZnQodGhpcy4kZWxlbWVudHMuJG5hdkxlZnQsIHRoaXMuY29uZmlnLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICAgIHN0eWxlVXRpbHMuc2V0TmF2U3R5bGUodGhpcy5jb25maWcpO1xuICAgICAgc3R5bGVVdGlscy5zZXROYXZMZWZ0SW5pdGlhbFN0eWxlKHRoaXMuY29uZmlnLCB0aGlzLmlzU2hvd05hdkluaXRpYWwsIHRoaXMudGFiU2VsZWN0ZWQpO1xuICAgICAgc3R5bGVVdGlscy5zZXROYXZMZWZ0RXh0ZW5kZWRTdHlsZSh0aGlzLmNvbmZpZywgdGhpcy5pc1Nob3dOYXZFeHRlbmRlZCwgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy5jb3JuZXJMZWZ0KXtcbiAgICAgIHRhYmxlRWxlbWVudHMucmVkcmF3Q29ybmVyKHRoaXMuJGVsZW1lbnRzLiRjb3JuZXIsIHRoaXMuY29uZmlnLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmNvcm5lclJpZ2h0KXtcbiAgICAgIHRoaXMuJGVsZW1lbnRzLiRjb3JuZXJSaWdodCA9IHRhYmxlRWxlbWVudHMucmVkcmF3Q29ybmVyUmlnaHQodGhpcy4kZWxlbWVudHMuJGNvcm5lclJpZ2h0LCB0aGlzLmNvbmZpZywgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy5uYXZSaWdodCl7XG4gICAgICAgIGxldCB7aW5wdXRzLCBlbGVtZW50LCBpbnB1dHNXaXRoUmVsb2FkLCBzYXZlQ2FuY2VsQnRuc30gPSB0YWJsZUVsZW1lbnRzLnJlZHJhd05hdlJpZ2h0KHRoaXMuY29uZmlnLCB0aGlzLiRlbGVtZW50cy4kbmF2UmlnaHQsIHRoaXMuc2VsZWN0ZWQgLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy4kZWxlbWVudHMuJG5hdlJpZ2h0ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy4kaW5wdXRzTmF2UmlnaHQgICAgID0gaW5wdXRzO1xuICAgICAgICB0aGlzLiRpbnB1dHNXaXRoUmVsb2FkID0gaW5wdXRzV2l0aFJlbG9hZDtcbiAgICAgICAgdGhpcy4kc2F2ZUNhbmNlbEJ0bnMgPSBzYXZlQ2FuY2VsQnRucztcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hTY3JvbGxVdGlsc1ZhcnMoKTtcbiAgICB0aGlzLnJlZnJlc2hWaXJ0dWFsU2Nyb2xsVmFycygpO1xuXG4gIH1cblxuXG4gIC8qKlxuICAgKiBNdWV2ZSBlbCBTY3JvbGwgZGUgbGEgcGxhbmlsbGEgYWwgaW5pY2lvXG4gICAqL1xuICBzY3JvbGxUb1N0YXJ0KCl7XG4gICAgdGhpcy4kZWxlbWVudHMuJGNvbnRhaW5lci5zY3JvbGxMZWZ0ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWV2ZSBlbCBTY3JvbGwgZGUgbGEgcGxhbmlsbGEgYWwgaW5pY2lvXG4gICAqL1xuICBzY3JvbGxUb0VuZCgpe1xuICAgIHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsTGVmdCA9IHRoaXMuJGVsZW1lbnRzLiRjb250YWluZXIuc2Nyb2xsV2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogTXVldmUgZWwgU2Nyb2xsIGRlIGxhIHBsYW5pbGxhIGEgbGEgdGVyY2VyYSBwYXJ0ZVxuICAgKiBUT0RPIG1lam9yYXIgbG9naWNhIGRlIGVzdGEgZnVuY2lvblxuICAgKi9cbiAgc2Nyb2xsVG9NaWRkbGUoKXtcbiAgICB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbExlZnQgPSB0aGlzLiRlbGVtZW50cy4kY29udGFpbmVyLnNjcm9sbFdpZHRoIC8gMztcbiAgfVxuXG5cblxuICAvKipcbiAgICogRmlqYSBsYXMgdmFyaWFibGVzIGRlIENTcyBzZWd1biBDb25maWdcbiAgICovXG4gIHNldEFsbENTU1ZhcmlhYmxlcygpe1xuICAgIGxldCBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICAvL3N0eWxlVXRpbHMuY2xlYW5TdHlsZShjb25maWcpO1xuICAgIHN0eWxlVXRpbHMuc2V0SGVhZGVyU3R5bGUoY29uZmlnKTtcbiAgICBzdHlsZVV0aWxzLnNldE5hdlN0eWxlKGNvbmZpZyk7XG4gICAgc3R5bGVVdGlscy5zZXROYXZMZWZ0SW5pdGlhbFN0eWxlKGNvbmZpZywgdGhpcy5pc1Nob3dOYXZJbml0aWFsLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICBzdHlsZVV0aWxzLnNldE5hdkxlZnRFeHRlbmRlZFN0eWxlKGNvbmZpZywgdGhpcy5pc1Nob3dOYXZFeHRlbmRlZCwgdGhpcy50YWJTZWxlY3RlZCk7XG4gICAgc3R5bGVVdGlscy5zZXROYXZMZWZ0QnV0dG9uc1N0eWxlKGNvbmZpZywgdGhpcy5pc1Nob3dOYXZCdXR0b25zLCB0aGlzLnRhYlNlbGVjdGVkKTtcbiAgICBzdHlsZVV0aWxzLnNldFRhYmxlU3R5bGUoY29uZmlnKTtcbiAgfVxuXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpCQTtBQW9CQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUhBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBUUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQTNHQTtBQUNBO0FBNEdBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBSEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFKQTtBQUhBO0FBV0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBSkE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbC9DQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/lib/capibara.js\n");
|
|
188
188
|
|
|
189
189
|
/***/ }),
|
|
190
190
|
|
|
@@ -255,7 +255,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _uti
|
|
|
255
255
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
256
256
|
|
|
257
257
|
"use strict";
|
|
258
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util_domUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/domUtils */ \"./src/util/domUtils.js\");\n/* harmony import */ var _util_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/utils */ \"./src/util/utils.js\");\n/* harmony import */ var _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/dateUtils */ \"./src/util/dateUtils.js\");\n/* harmony import */ var _util_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/icons */ \"./src/util/icons.js\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * Crea elemento Table\n * Contendrá los elementos que apareceran dentro de la tabla de planilla\n * Se Usa para :\n * - Agregar background con patron estilo tabla\n * - Agregar dayMouseOver, div que indica posicion de mouse\n * - Agregar DetailDay, para detalles de datos en tabla\n * - Agregar SelectedContainer, para dias seleccionados\n * - Agregar FloatBoxContainer, para visualizacion de datos en tabla\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom creado\n */\n createAgTable(config) {\n let e = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"capibara\"\n });\n\n if (config.timeline.dark) {\n e.classList.add(\"dark-theme\");\n }\n\n if (config.timeline.header.extend.isShow) {\n e.classList.add(\"header-extended\");\n }\n\n return e;\n },\n\n /**\n * Recrea Background, que es el fondo grid, como tabla\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento relacionado, donde se cre el background\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawBackground(config, $elem) {\n return this.createBackground(config, $elem);\n },\n\n /**\n * Crea y posiciona fondo de tabla\n * Este fondo contiene un patron de CSS que le da la apariencia de tabla\n * por lo cual se debe reposicionar segun la fecha de inicio, para hacer\n * calzar los fines de semana\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} [$elem = null] - Elemento background, si es null, lo crea\n * @return {Object} elemento Dom Background\n */\n createBackground(config, $elem = null) {\n let {\n height,\n width,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n let start = new Date(config.timeline.start);\n let end = new Date(config.timeline.end);\n end.setTime(end.getTime() + _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].dayInMilliseconds); // add 24 hours\n\n let dCorrected = new Date(start.valueOf() + start.getTimezoneOffset() * 60000);\n let weekDay = dCorrected.getDay();\n let diffWeekDays = (weekDay - 1) * dayWidth * -1;\n $elem = $elem || _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"background-grid\"\n });\n $elem.style[\"background-position\"] = diffWeekDays + \"px 0, 0 0, \" + diffWeekDays + \"px 0\";\n $elem.style.width = width + \"px\";\n $elem.style.height = height + 1 + \"px\";\n return $elem;\n },\n\n /**\n * Crea Plot Container Vertical\n * Los plots son elementos que agregan secciones de fondo en la planilla\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom plotVerticalContainer\n */\n createPlotVerticalContainer(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"plot-vertical-container\"\n });\n return this.redrawPlotVerticalContainer(config, $elem);\n },\n\n createPlotHorizontalContainer(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"plot-horizontal-container\"\n });\n return this.redrawPlotHorizontalContainer(config, $elem);\n },\n\n /**\n * Recrea plotVerticalContainer, usando elemento existente\n * usa un elemento existente para usar la funcion para redibujar el elemento\n *\n * Los Plots se insertan como divs, con posicion especificada,\n * con ancho de dia\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea plotVerticalContainer\n * @return {Object} Elemento Dom plotVerticalContainer\n */\n redrawPlotVerticalContainer(config, $elem) {\n $elem.innerHTML = \"\";\n\n if (config.timeline.plots && config.timeline.plots.vertical) {\n let {\n height,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n config.timeline.plots.vertical.forEach(p => {\n let diffDays = Math.floor(_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, p.date));\n let left = diffDays * dayWidth;\n let plot = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"plot-vertical\", p.className || \"\"],\n style: {\n \"margin-left\": left + \"px\",\n height: height + \"px\"\n }\n });\n $elem.appendChild(plot);\n });\n }\n\n return $elem;\n },\n\n redrawPlotHorizontalContainer(config, $elem) {\n $elem.innerHTML = \"\";\n\n if (config.timeline.plots && config.timeline.plots.horizontal) {\n let {\n width,\n itemHeight\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n config.timeline.plots.horizontal.forEach(p => {\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, p.idNode, p.typeNode);\n let topPosition = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item, \"parent\");\n let plot = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"plot-horizontal\", p.className || \"\"],\n style: {\n \"margin-top\": topPosition * itemHeight + \"px\",\n width: width + \"px\"\n }\n });\n $elem.appendChild(plot);\n });\n }\n\n return $elem;\n },\n\n /**\n * Crea Corner Izquierdo\n * Se usa para :\n * - titulos relacionados con los datos del sidebar izquierdo\n * - titulos para inputs de header, absolute a la derecha\n * - boton para mostrar/ocultar sidebar izquierdo\n * - promedios\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner\n */\n createCorner(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"corner\"\n });\n return this.redrawCorner($elem, config, tab);\n },\n\n redrawCorner($elem, config, tab = null) {\n let labelsInitialCorner = config.timeline.nav.left.initial.vars.filter(v => v.onlyTab == undefined || v.onlyTab && tab && v.onlyTab == tab.key).map(d => `<span class=\"item-col\">${d.label}</span>`).join(\"\");\n let labelsExtendCorner = config.timeline.nav.left.extend.vars.filter(v => v.onlyTab == undefined || v.onlyTab && tab && v.onlyTab == tab.key).map(d => `<span class=\"item-col\">${d.label}</span>`).join(\"\");\n let labelsHeaderExtend = config.timeline.header.extend.data.map(d => {\n if (d.isHidden) return \"\";\n let avg = \"\";\n let tooltip = \"\";\n let className = \"\";\n let isAccent = d.isAccent;\n\n if (d.average) {\n avg = ` <span class=\"average \"> ( <span> <span class=\"symbol\">x̄</span> ${d.average} </span>) </span> `;\n tooltip = `cap-tooltip=\"Promedio ${d.label} : ${d.average} ${d.suffix || \"\"}\"`;\n }\n\n if (d.color) {\n if (isAccent) {\n className = d.color ? \"c-\" + d.color + \"--background\" : \"\";\n } else {\n className = d.color ? \"c-\" + d.color + \"--text \" : \"\";\n }\n }\n\n return `<div class=\"input-title-container ${isAccent ? \"input-title--accent\" : \"\"} ${d.isPersistent ? \"persistent\" : \"\"}\">\n <span ${tooltip} class=\"input-title ${className}\">\n ${avg}\n ${d.label}\n </span>\n\n </div>`;\n }).join(\"\");\n let toggleSidebarBtnString = `\n <button toggle-sidebar class=\"cap-btn-icon cap-btn-icon-raised cap-btn-toggle-sidebar \">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronRight}\n </button> `;\n\n if (config.timeline.nav.left.hideToggleSidebarButton) {\n toggleSidebarBtnString = \"\";\n }\n\n let template = `<div>\n\n ${toggleSidebarBtnString}\n <div class=\"corner-title\">\n <span class=\"bottom-text\">\n ${config.timeline.corner.left.label}\n </span>\n </div>\n\n <div class=\"initial-corner\">\n <div class=\"initial-corner-title\">\n <span class=\"bottom-container hide\">\n ${config.timeline.corner.initial.label}\n </span>\n\n <div class=\"bottom-container\">\n ${labelsInitialCorner}\n </div>\n\n </div>\n </div>\n\n\n <div class=\"extend-corner\">\n <div class=\"ex-corner-title\">\n <span class=\"bottom-container hide\">\n ${config.timeline.corner.extend.label}\n </span>\n\n <div class=\"bottom-container\">\n ${labelsExtendCorner}\n </div>\n\n </div>\n </div>\n\n\n <div class=\"cap-btn-nav-corner\">\n <div class=\"input-titles\">\n ${labelsHeaderExtend}\n </div>\n </div>\n\n <div class=\"progress-bar progress-bar-left hide-progress\"></div>\n\n </div>`;\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(template);\n $elem.innerHTML = \"\";\n $elem.append(r);\n let toggleSidebar = $elem.querySelector(\"[toggle-sidebar]\");\n\n if (toggleSidebar) {\n toggleSidebar.addEventListener(\"click\", e => {\n r.dispatchEvent(new CustomEvent(\"toggleSidebar\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n return $elem;\n },\n\n /**\n * Crea Corner Derecho\n * Se usa para :\n * - titulos relacionados con los datos del sidebar Derecho\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom corner\n */\n createCornerRight(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"corner\", \"right\"]\n });\n return this.redrawCornerRight($elem, config, tab);\n },\n\n redrawCornerRight($el, config, tab = null) {\n let label = \"\";\n\n if (config.timeline.corner.right.label) {\n ` <span>\n ${config.timeline.corner.right.label}\n </span>`;\n }\n\n let str = `\n <div class=\"corner-title\">\n ${label}\n <div class=\"btn-container\"></div>\n </div>\n <div class=\"progress-bar progress-bar-right hide-progress\"></div>\n `;\n $el.innerHTML = str.trim();\n let $btnContainer = $el.querySelector(\".btn-container\");\n\n if (config.timeline.corner.right.buttons) {\n config.timeline.corner.right.buttons.forEach(btn => {\n let isEnabled = btn.getIsEnabled ? btn.getIsEnabled() : true;\n\n if (isEnabled) {\n let $btn = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <button class=\"corner-btn cap-btn-raised\">\n ${btn.label || \"\"}\n </button> `);\n\n if (btn.onClick) {\n $btn.addEventListener(\"click\", btn.onClick);\n }\n\n $btnContainer.appendChild($btn);\n }\n });\n }\n\n if (config.timeline.corner.right.inputs) {\n config.timeline.corner.right.inputs.forEach(input => {\n let $input = this.createCornerRightInput({\n inputConfig: input\n });\n $btnContainer.appendChild($btn);\n });\n }\n\n return $el;\n },\n\n createCornerRightInput({\n inputConfig,\n dataDay = null,\n daySelected = null\n }) {\n let r = null;\n\n switch (inputConfig.type) {\n case \"autocomplete-crud\":\n r = this.createCornerRightInputAutocompleteCrud({\n inputConfig,\n dataDay,\n daySelected\n });\n break;\n }\n\n return r;\n },\n\n createCornerRightInputAutocompleteCrud({\n inputConfig,\n dataDay,\n daySelected\n }) {\n let elem = \"test\";\n return elem;\n },\n\n /**\n * Crea Header Top\n * Se usa para :\n * - Manejo de tabs\n * - Botones de navegación y selección de fecha\n * - Boton toggle Dark mode\n * - Boton toggle Header extended\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom\n */\n createHeaderTop(config, tabSelected = null) {\n return this.redrawHeaderTop(config, tabSelected, _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\"));\n },\n\n redrawHeaderTop(config, tabSelected = null, $elem) {\n let str = `\n <div class=\"header-top\">`;\n\n if (config.timeline.tabs) {\n let showTabs = true;\n\n if (config.timeline.tabs.filter(t => !t.isHidden).length == 0) {\n showTabs = false;\n }\n\n if (showTabs) {\n str += ` <div class=\"tab-select-container c-d-desktop-none c-d-mobile-flex\">\n <select class=\"tabs-select\" >`;\n config.timeline.tabs.forEach(tab => {\n if (!tab.isHidden) {\n str += ` <option ${tab == tabSelected ? 'selected=\"selected\"' : \"\"} value=\"${tab.id}\"> ${tab.label} </option>`;\n }\n });\n str += `</select> </div>`;\n str += ` <div class=\"tabs-container c-d-desktop-flex c-d-mobile-none\">`;\n config.timeline.tabs.forEach(tab => {\n if (!tab.isHidden) {\n str += ` <button\n class=\"tab ${tab.disabled ? \"disabled\" : \"\"} ${tab == tabSelected ? \"active\" : \"\"} ${tab.color}\"\n color=\"${tab.color}\"\n input-key=\"${tab.id}\"\n ${tab.tooltip ? 'cap-tooltip=\"' + tab.tooltip + '\"' : \"\"} >\n <span>${tab.label}</span>\n ${tab.icon || \"\"}\n </button>\n `;\n }\n });\n str += `</div>`;\n }\n }\n\n if (tabSelected) {\n if (tabSelected.legends) {\n str += ` \n <button toggle-legends class=\"cap-btn-icon cap-btn-icon-raised \">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].toggleLegends}\n </button> \n\n <div class=\"legends-container force-mobile-style hide\"> `;\n tabSelected.legends.forEach(legend => {\n let colorClass = \"\";\n let colorBg = \"\";\n\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(legend.color)) {\n colorBg = \"background:\" + legend.color;\n } else {\n colorClass = legend.color ? legend.color + \"--background\" : \"\";\n }\n\n str += ` <div\n class=\"legend ${legend.active ? \"active\" : \"\"}\"\n input-key=\"${legend.key}\"\n ${legend.tooltip ? `cap-tooltip=\"${legend.tooltip}\"` : \"\"} >\n <div class=\"icon-legend ${colorClass} ${legend.shape}\" style=\"${colorBg}\"></div>\n <span>${legend.label}</span>\n </div>`;\n });\n str += `</div>`;\n }\n }\n\n str += `\n\n <div class=\"spacer\"></div>\n\n\n\n <button cap-btn-prev class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].arrowLeft}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon} \n </button>\n\n\n <button cap-btn-calendar class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].calendar}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon}\n </button>\n\n <button cap-btn-next class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].arrowRight}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon}\n </button>\n\n <div class=\"spacer\"></div>\n\n <button toggle-dark class=\"cap-btn-icon cap-btn-header c-d-mobile-none ${config.timeline.withDarkToggle == false ? \"hide\" : \"\"}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].dark}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].light}\n </button>`;\n\n if (config.timeline.header.extend.enabled !== false) {\n str += `<button toggle-header class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronDown}\n </button>`;\n }\n\n str += ` <div class=\"button-right-container\"></div>\n </div>`;\n /*\n `\n <button toggle-sidebar-right class=\"cap-btn-icon cap-btn-icon-raised\">\n <span>\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z\" />\n </svg>\n </span>\n </button>\n </div>\n `;\n */\n\n let $r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $elem.replaceWith($r);\n\n if (config.timeline.header.rightButtons) {\n let $buttonContainer = $r.querySelector(\".button-right-container\");\n config.timeline.header.rightButtons.forEach(button => {\n let hasBadge = false;\n\n if (button.hasBadge) {\n hasBadge = button.hasBadge();\n }\n\n let str = `<button class=\"cap-btn-icon cap-btn-icon-raised ${hasBadge ? \"cap-btn-has-badge\" : \"\"}\">\n <span>\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"${button.icon}\" />\n </svg>\n </span>\n </button>`;\n let $button = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $button.addEventListener(\"click\", evt => button.onClick({\n evt\n }));\n $buttonContainer.append($button);\n });\n }\n\n let $toggleDark = $r.querySelector(\"[toggle-dark]\");\n\n if ($toggleDark) {\n $toggleDark.addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleDark\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n let $btnCalendar = $r.querySelector(\"[cap-btn-calendar]\");\n\n if ($btnCalendar) {\n $btnCalendar.addEventListener(\"click\", e => {\n let x = e.x;\n let y = e.y;\n $r.dispatchEvent(new CustomEvent(\"clickCalendarIcon\", {\n bubbles: true,\n cancelable: false,\n detail: {\n x,\n y\n }\n }));\n });\n }\n\n let $btnToggleHeader = $r.querySelector(\"[toggle-header]\");\n\n if ($btnToggleHeader) {\n $btnToggleHeader.addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleHeader\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n /*\n $r.querySelector(\"[toggle-sidebar-right]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleSidebarRight\", {\n bubbles: true,\n cancelable: false,\n }));\n });\n */\n\n\n $r.querySelector(\"[cap-btn-prev]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerPrev\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n $r.querySelector(\"[cap-btn-calendar]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerCalendar\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n $r.querySelector(\"[cap-btn-next]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerNext\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n let $toggleLegendsBtn = $r.querySelector(\"[toggle-legends]\");\n\n if ($toggleLegendsBtn) {\n $toggleLegendsBtn.addEventListener(\"click\", e => {\n let $legendContainer = $r.querySelector(\".legends-container\");\n\n if ($legendContainer) {\n $legendContainer.classList.toggle(\"hide\");\n }\n });\n }\n\n $r.querySelectorAll(\".legend\").forEach($legend => {\n $legend.addEventListener(\"click\", e => {\n let key = e.currentTarget.getAttribute(\"input-key\");\n\n if (key) {\n let legendSelected = tabSelected.legends.find(tab => tab.key === key);\n\n if (legendSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectLegendHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n legend: legendSelected,\n $legend\n }\n }));\n }\n }\n });\n });\n $r.querySelectorAll(\".tab:not(.disabled)\").forEach($tab => {\n $tab.addEventListener(\"click\", e => {\n let key = e.currentTarget.getAttribute(\"input-key\");\n\n if (key) {\n let tabSelected = config.timeline.tabs.find(tab => tab.id == key);\n\n if (tabSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectTabHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tab: tabSelected\n }\n }));\n }\n }\n });\n });\n $r.querySelectorAll(\".tabs-select:not(.disabled)\").forEach($tab => {\n $tab.addEventListener(\"change\", e => {\n let key = parseFloat(e.currentTarget.value);\n\n if (key) {\n let tabSelected = config.timeline.tabs.find(tab => tab.id == key);\n\n if (tabSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectTabHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tab: tabSelected\n }\n }));\n }\n }\n });\n });\n return $r;\n },\n\n /**\n * Crea Header\n * Se usa para :\n * - Mostrar fechas en header\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom\n */\n createHeader(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"header\");\n return this.redrawHeader(config, $elem);\n },\n\n /**\n * Recrea Header, usado para redibujar\n * utiliza $elem como elemento dom donde recrearlo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea Header\n * @return {Object} Elemento Dom\n */\n redrawHeader(config, $elem) {\n let datesTree = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDateTreeRange(new Date(config.timeline.start), new Date(config.timeline.end));\n let str = `<div class=\"header-container\"> `;\n Object.keys(datesTree).forEach(keyY => {\n let year = datesTree[keyY];\n str += `<div class=\"agno-calendario\">\n <span class=\"agno hide\">${keyY}</span>\n <div class=\"meses\">`;\n Object.keys(year).forEach(keyM => {\n let month = datesTree[keyY][keyM];\n str += ` <div class=\"mes-calendario\">\n <div class=\"mes ${Object.keys(month).length < 4 ? \"mes-reduced mes-reduced-\" + Object.keys(month).length : \"\"}\">\n <div class=\"mes-label\">\n ${_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMonthByPosition(keyM)} ${keyY}\n </div>\n </div>\n <div class=\"dias\">`;\n Object.keys(month).forEach(keyD => {\n let day = datesTree[keyY][keyM][keyD];\n let isWeekend = day.isWeekend;\n let isToday = day.isToday;\n let hasAlert = config.timeline.header.dateHasAlert ? config.timeline.header.dateHasAlert(day) : false;\n let date = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(day.date);\n str += `<div class=\"dia-calendario \n ${isToday ? \"today\" : \"\"}\n ${isWeekend ? \"weekend\" : \"\"}\n ${hasAlert ? \"has-alert\" : \"\"}\n ${config.timeline.dateSelectable ? \"is-clickeable\" : \"\"}\n ${config.timeline.dateWithContextMenu ? \"is-clickeable\" : \"\"}\n \" date=\"${date}\">${keyD}</div>`;\n });\n str += `</div></div>`;\n });\n str += `</div> </div>`;\n });\n str += `</div>`;\n $elem.innerHTML = \"\";\n $elem.append(_util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str));\n let $days = $elem.querySelectorAll(\".dia-calendario[date]\");\n $days.forEach($dia => {\n if (config.timeline.dateWithContextMenu) {\n $dia.addEventListener(\"contextmenu\", evt => {\n $elem.dispatchEvent(new CustomEvent(\"contextMenuDate\", {\n bubbles: true,\n cancelable: false,\n detail: {\n $elem: $dia,\n date: $dia.getAttribute(\"date\"),\n clientX: evt.clientX,\n clientY: evt.clientY\n }\n }));\n });\n }\n\n if (config.timeline.dateSelectable) {\n $dia.addEventListener(\"click\", evt => {\n $elem.dispatchEvent(new CustomEvent(\"clickDate\", {\n bubbles: true,\n cancelable: false,\n detail: {\n $elem: $dia,\n date: $dia.getAttribute(\"date\")\n }\n }));\n });\n }\n\n if (config.timeline.onMouseOverDate) {\n $dia.addEventListener(\"mouseover\", evt => {\n config.timeline.onMouseOverDate({\n $dia,\n $elem,\n date: $dia.getAttribute(\"date\"),\n evt\n });\n });\n }\n\n if (config.timeline.onMouseOutDate) {\n $dia.addEventListener(\"mouseout\", evt => {\n config.timeline.onMouseOutDate({\n $dia,\n $elem,\n date: $dia.getAttribute(\"date\"),\n evt\n });\n });\n }\n });\n return $elem;\n },\n\n /**\n * Crea Header extended\n * Se usa para :\n * -Mostrar inputs y datos para fechas en header\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom headerExtended\n */\n createHeaderExtended(config) {\n if (config.timeline.header.extend.enabled == false) return null;\n let dates = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDateRange(new Date(config.timeline.start), new Date(config.timeline.end));\n let str = `<div class=\"header-container-extended\">`;\n config.timeline.header.extend.data.forEach((d, d_index) => {\n if (d.isHidden) return \"\";\n let isPersistent = d.isPersistent;\n str += `<div class=\"input-list ${isPersistent ? \"persistent\" : \"\"}\">`;\n str += dates.map(date => {\n let value = \"\";\n let className = \"\";\n let isFuture = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isFuture(date);\n let isToday = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isToday(date);\n\n if (d.data) {\n let dataFounded = d.data.find(dataInput => {\n return _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isSameDate(new Date(dataInput.date), date);\n });\n\n if (dataFounded) {\n value = dataFounded.value || \"\";\n className += dataFounded.className + \" \" || false;\n }\n }\n\n if (d.editable === false || isFuture && d.editableFuture == false || isToday && d.editableToday == false) {\n return `<div>\n <span date=\"${date}\" \n index=\"${d_index}\" \n class=\" ${className} ${date.varName || \"\"} ${d.color ? \"c-\" + d.color + \"--text\" : \"\"}\" > \n ${value} \n </span>\n </div>`;\n }\n\n let isDisabled = false;\n\n if (config.timeline.editable === false) {\n isDisabled = true;\n }\n\n return `<div class=\"dia-input\">\n <input \n date=\"${date}\" \n index=\"${d_index}\" \n class=\"header-input \n ${date.varName} ${d.color ? \"c-\" + d.color + \"--text\" : \"\"}\" \n type=\"number\"\n ${isDisabled ? \"disabled\" : \"\"} \n value=\"${value}\">\n </div>`;\n }).join(\"\");\n str += `</div>`;\n });\n str += `</div>`;\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n r.querySelectorAll(\"input.header-input\").forEach(input => {\n input.addEventListener(\"input\", e => {\n let date = e.currentTarget.getAttribute(\"date\");\n let index = e.currentTarget.getAttribute(\"index\");\n let value = e.currentTarget.value;\n let typeData = config.timeline.header.extend.data[index]; //refresh config value\n\n let data = typeData.data.find(d => _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isSameDate(new Date(d.date), new Date(date)));\n\n if (data) {\n data.value = value;\n } else {\n typeData.data.push({\n date: date,\n value: value\n });\n }\n\n r.dispatchEvent(new CustomEvent(\"changeInputHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n date: date,\n typeData: typeData,\n value: value\n }\n }));\n });\n });\n return r;\n },\n\n /**\n * Crear Sidebar Izquierdo\n * - Maneja items como arbol de 2 niveles (parent, children)\n * - El sidebar se divide en navList - InitialNav - extendedNav - BtnNav\n * - Se agrega itemDetail, para detalles de items\n *\n *\n * TODO: para evitar incrustar las ids en los inputs, se deben crear\n * los nodos uno por uno como elemento DOM, y agregarles los eventos directamente\n * ahora se hace seleccionando todos los inputs con querySelectorAll\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Sidebar Izquierdo\n */\n createNavLeft(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"nav\", {\n className: \"left\"\n });\n return this.redrawNavLeft($elem, config, tab);\n },\n\n /**\n * Recrea Sidebar izquierdo, usado para redibujar\n * Utiliza $elem como elemento dom donde recrearlo\n *\n *\n * @param {Object} $elem - Elemento Dom donde crea el sidebar izquierdo\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom navLeft\n */\n redrawNavLeft($elem, config, tab = null) {\n let navList = \"\";\n let initialNavList = \"\";\n let exNavList = \"\";\n let btnNavList = \"\";\n let isDisabled = false;\n\n if (config.timeline.editable === false) {\n isDisabled = true;\n }\n\n config.data.forEach(d => {\n if (d.isHidden) return;\n navList += `\n <div class=\"nav-item\">\n\n\n <div class=\"nav-item-container parent\">`;\n\n if (d.children) {\n navList += `<button class=\"tree-icon ${d.isClosed ? \"\" : \"cap-rotate\"}\" item-id=\"${d.id || -1}\" type-node=\"${d.type || \"\"}\" >\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronDown}\n </button>`;\n }\n\n navList += `\n <div class=\"item-title truncate full-width ${d.clickeable ? \"clickeable\" : \"\"}\n ${d.navOver ? \"hoverable\" : \"\"} \" item-id=\"${d.id || -1}\" type-node=\"${d.type || \"\"}\" >\n ${d.label}\n </div>\n </div>`;\n\n if (d.children) {\n navList += `\n <div class=\"children-items ${d.isClosed ? \"hide\" : \"\"} \" child-list=\"${d.id || -1}\">`;\n d.children.forEach(c => {\n if (c.isHidden) return;\n let lightColor = null;\n let lightClass = null;\n let lightSpan = \"\";\n let multiButtonsDetailTmpl = \"\";\n\n if (c.light) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(c.light)) {\n lightColor = c.light;\n } else {\n lightClass = c.light;\n }\n }\n\n if (c.light) {\n lightSpan = `<span \n class=\"light ${lightClass ? lightClass + \"-light\" : \"\"}\" \n style=\"${lightColor ? \"--light-color:\" + lightColor : \"\"}\">\n </span>`;\n }\n\n if (c.hasMultibuttons) {\n let iconFormatter = null;\n\n if (config.timeline.nav.left.initial.multibuttons && config.timeline.nav.left.initial.multibuttons.iconFormatter) {\n iconFormatter = config.timeline.nav.left.initial.multibuttons.iconFormatter;\n }\n\n let btnContent = iconFormatter ? iconFormatter({\n item: c,\n config\n }) : \"\";\n multiButtonsDetailTmpl = `<button class=\"multibuttons-btn\" \n item-id=\"${c.id || -1}\" \n type-node=\"${c.type || \"\"}\" \n ${isDisabled ? \"disabled\" : \"\"}>\n ${btnContent} \n </button>`;\n }\n\n navList += `\n <div class=\"child-nav-item\">\n <div class=\"nav-item-container\">\n `;\n /*\n <span class=\"nav-item-icon\">\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M19,15L13,21L11.58,19.58L15.17,16H4V4H6V14H15.17L11.58,10.42L13,9L19,15Z\" />\n </svg>\n </span>\n */\n\n navList += `\n ${lightSpan}\n ${multiButtonsDetailTmpl}\n <div \n class=\"item-title ${c.clickeable ? \"clickeable\" : \"\"} ${c.navOver ? \"hoverable\" : \"\"}\" \n item-id=\"${c.id || -1}\" \n type-node=\"${c.type || \"\"}\">\n\n <div class=\"truncate\">\n ${c.label}\n </div>\n </div>\n </div>\n </div>`;\n });\n navList += `\n </div>`;\n }\n\n navList += `</div>`; //initial\n\n initialNavList += `<div class=\"initial-nav-item parent\">`;\n\n if (d.withNav) {\n config.timeline.nav.left.initial.vars.forEach(v => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(d.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n initialNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n initialNavList += `\n <div class=\"item-col has-input\">\n <input \n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n initialNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n initialNavList += `\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return;\n initialNavList += `<div class=\"child-initial-nav-item ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">`;\n\n if (c.withNav !== false) {\n config.timeline.nav.left.initial.vars.forEach(v => {\n if (v.onlyTab && tab && v.onlyTab !== tab.key) return;\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(c.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n initialNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n initialNavList += `\n <div class=\"item-col has-input\">\n <input\n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n initialNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n initialNavList += `\n </div>`;\n });\n } //Ext\n\n\n exNavList += `<div class=\"ex-nav-item parent\">`;\n\n if (d.withExNav) {\n config.timeline.nav.left.extend.vars.forEach(v => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(d.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n exNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n exNavList += `\n <div class=\"item-col has-input\">\n <input\n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n exNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n exNavList += `\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return;\n exNavList += `<div class=\"child-ex-nav-item ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">`;\n\n if (c.withNav !== false) {\n config.timeline.nav.left.extend.vars.forEach(v => {\n if (v.onlyTab && tab && v.onlyTab !== tab.key) return;\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(c.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value ? value.split(\":\") : [0, 0];\n let hhValue = value[0];\n let mmValue = value[1];\n exNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n exNavList += `\n <div class=\"item-col has-input\">\n <input \n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n exNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n exNavList += `\n </div>`;\n });\n } //buttons\n\n\n btnNavList += `<div class=\"cap-btn-nav-item parent\">\n <div class=\"cap-btn-nav-item-content\">`;\n\n if (config.timeline.nav.left.buttons && config.timeline.nav.left.buttons.vars) {\n config.timeline.nav.left.buttons.vars.forEach(btn => {\n if (d.withBtnNav) {\n let btnContent = \"\";\n let className = btn.className || \"\";\n\n if (btn.icon) {\n btnContent = btn.icon ? btn.icon : \"\";\n }\n\n if (btn.iconFormatter) {\n btnContent = btn.iconFormatter ? btn.iconFormatter(d, btn) : \"\";\n }\n\n if (btn.shape) {\n className += \" cap-btn-\" + btn.shape;\n btnContent += `<span> ${btn.formatter ? btn.formatter(d, btn) : \"\"} </span> `;\n }\n\n if (btn.btnClassNameFormatter) {\n let newClassName = btn.btnClassNameFormatter(d, btn);\n\n if (newClassName) {\n className += \" \" + newClassName;\n }\n }\n\n btnNavList += `\n <button class=\"cap-btn-shape ${className}\"\n input-key=\"${btn.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n ${isDisabled ? \"disabled\" : \"\"}\n type-node=\"${d.type || \"\"}\">\n ${btnContent}\n </button>`;\n }\n });\n }\n\n btnNavList += `\n </div>\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return; //buttons\n\n btnNavList += `<div class=\"cap-btn-child-nav-item parent ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">\n <div class=\"cap-btn-nav-item-content\">`;\n\n if (config.timeline.nav.left.buttons && config.timeline.nav.left.buttons.vars) {\n config.timeline.nav.left.buttons.vars.forEach(btn => {\n if (c.withNav !== false) {\n let btnContent = \"\";\n let className = btn.className || \"\";\n\n if (btn.icon) {\n btnContent = btn.icon ? btn.icon : \"\";\n }\n\n if (btn.iconFormatter) {\n btnContent = btn.iconFormatter ? btn.iconFormatter(c, btn) : \"\";\n }\n\n if (btn.shape) {\n className += \" cap-btn-\" + btn.shape;\n btnContent += `<span> ${btn.formatter ? btn.formatter(c, btn) : \"\"} </span> `;\n }\n\n if (btn.btnClassNameFormatter) {\n let newClassName = btn.btnClassNameFormatter(c, btn);\n\n if (newClassName) {\n className += \" \" + newClassName;\n }\n }\n\n btnNavList += `\n <button class=\"cap-btn-shape ${className}\"\n input-key=\"${btn.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n ${isDisabled ? \"disabled\" : \"\"}\n type-node=\"${c.type || \"\"}\">\n ${btnContent}\n </button>`;\n }\n });\n }\n\n btnNavList += `\n </div>\n </div>`;\n });\n }\n });\n let itemDetail = ` <div class=\"detail-nav-item hide\">\n ${this.getDetailNavItemContent()}\n </div>`;\n let str = `<div class=\"nav-container\">\n ${itemDetail}\n <div class=\"nav-item-list\">\n ${navList}\n </div>\n <div class=\"initial-nav-list\">\n ${initialNavList}\n </div>\n <div class=\"extend-nav-list\">\n ${exNavList}\n </div>\n <div class=\"cap-btn-nav-list\">\n ${btnNavList}\n </div>\n </div>`;\n let navContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $elem.innerHTML = \"\";\n $elem.append(navContainer); //detalle de nav-item\n\n $elem.querySelectorAll(\".item-title.hoverable\").forEach(i => {\n i.addEventListener(\"mouseover\", e => {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPositionNavLeft(config, e, $elem);\n let itemId = i.getAttribute(\"item-id\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId);\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"overNavItem\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e,\n item: item,\n type: typeNode,\n pos: pos\n }\n }));\n });\n }); //oculta detalle de nav-item, al salir del nav-item-list\n\n $elem.querySelectorAll(\".nav-item-list\").forEach(i => {\n i.addEventListener(\"mouseleave\", e => {\n i.dispatchEvent(new CustomEvent(\"leaveNavItem\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }); //oculta detalle de nav-item-list, al salir de nav-item\n\n $elem.querySelectorAll(\".item-title:not(.hoverable)\").forEach(i => {\n i.addEventListener(\"mousemove\", e => {\n i.dispatchEvent(new CustomEvent(\"leaveNavItem\", {\n bubbles: true,\n cancelable: false\n }));\n });\n });\n $elem.querySelectorAll(\".item-title.clickeable\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let value = i.value;\n i.dispatchEvent(new CustomEvent(\"clickNavLeftItem\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode,\n value: value\n }\n }));\n });\n });\n $elem.querySelectorAll(\".multibuttons-btn\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPositionNavLeft(config, e, $elem);\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"clickMultiButtonsBtn\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode,\n pos,\n button: i,\n event: e\n }\n }));\n });\n });\n $elem.querySelectorAll(\"input\").forEach(i => {\n i.addEventListener(\"change\", e => {\n let inputType = i.getAttribute(\"input-type\");\n let key = i.getAttribute(\"input-key\");\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId);\n let value = i.value;\n\n if (inputType == \"time\") {\n let hh_input = i.parentElement.querySelector(\"input.hh\").value;\n let mm_input = i.parentElement.querySelector(\"input.mm\").value;\n mm_input = mm_input < 10 ? \"0\" + parseFloat(mm_input) : mm_input;\n i.parentElement.querySelector(\"input.mm\").value = mm_input;\n value = hh_input + \":\" + mm_input;\n }\n\n i.dispatchEvent(new CustomEvent(\"saveNavLeftInput\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: key,\n itemId: itemId,\n item: item,\n type: typeNode,\n value: value,\n tabSelected: tab\n }\n }));\n });\n });\n $elem.querySelectorAll(\"button.cap-btn-shape\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let key = i.getAttribute(\"input-key\");\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"clickNavLeftButton\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: key,\n itemId: itemId,\n type: typeNode\n }\n }));\n });\n });\n $elem.querySelectorAll(\"button.tree-icon\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let dataConfig = config.data.find(d => d.id == itemId);\n let $navItem = e.currentTarget.closest(\".nav-item\");\n let $children = $navItem.querySelector(\".children-items\");\n let itemsToHide = e.currentTarget.closest(\"nav.left\").querySelectorAll(\"[child='\" + itemId + \"'], [child-list='\" + itemId + \"']\");\n\n if ($children) {\n if ($children.classList.contains(\"hide\")) {\n e.currentTarget.classList.add(\"cap-rotate\");\n itemsToHide.forEach(i => i.classList.remove(\"hide\"));\n dataConfig.isClosed = false;\n } else {\n e.currentTarget.classList.remove(\"cap-rotate\");\n itemsToHide.forEach(i => i.classList.add(\"hide\"));\n dataConfig.isClosed = true;\n }\n }\n\n i.dispatchEvent(new CustomEvent(\"clickNavLeftTreeIcon\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode\n }\n })); //e.currentTarget.parent\n });\n });\n return $elem;\n },\n\n /**\n * Crea Html como String, para el detalle de items en el Sidebar Izquierdo\n *\n * @param {Object} [item={}] - Configuracion de item\n * @return {String} Html de ventana de detalle\n */\n getDetailNavItemContent(item = {}) {\n if (item.navOver == undefined) item.navOver = {};\n return `\n <div class=\"header-detail\">\n <div class=\"detail-title truncate\">\n ${item.label || \"\"}\n </div>\n <div class=\"detail-subtitle\">\n ${item.navOver.subtitle || \"\"}\n </div>\n <div class=\"header-chip ${item.light ? item.light + \"-light\" : \"\"} ${item.navOver.chip ? \"\" : \"hide\"}\">\n ${item.navOver.chip || \"\"}\n </div>\n </div>\n\n <div class=\"detail-container\">\n ${item.navOver.content || \"\"}\n </div>`;\n },\n\n /**\n * Crea Sidebar Derecho\n * Usado principalmente para formulario de ingreso de datos para los dias\n * seleccionados\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para la creacion del formulario\n * @return {Object} {element, inputs}, element es el elemento Dom del sidebar,\n * inputs es un array de elementos Dom de cada input creado\n * (no son elementos html de tipo input)\n */\n createNavRight(config, tab = null) {\n var $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"nav\", {\n className: \"right\"\n });\n return this.redrawNavRight(config, $elem, tab, []);\n },\n\n /**\n * Recrea Sidebar Derecho\n * Utiliza $elem como elemento dom donde recrearlo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea el sidebar derecho\n * @param {Object} tab - Tab de referencia, para la creacion del formulario\n * @param {Object} dataDay - datos del dia seleccionando, para autorrelleno de formulario\n * @param {Object} daySelected - datos del dia seleccionado\n * @param {String} daySelected.date - fecha del dia seleccionado\n * @param {Object} daySelected.item - Item de Sidebar relacionado al dia seleccionado\n * @param {Object} daySelected.pos - posicion de dia seleccionado\n * @return {Object} Elemento Dom Sidebar Derecho\n */\n redrawNavRight(config, $elem, selected = null, tab = null, dataDay = null, daySelected = null) {\n let $navRight = $elem; //dom.createElement(\"nav\",{className:\"right\"});\n\n let $divContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"nav-input-container\"\n });\n let $inputs = [];\n let checkboxInputs = [];\n let inputsWithReload = [];\n let tabSelected = tab;\n selected = selected || [daySelected];\n\n if (tabSelected && tabSelected.inputs) {\n tabSelected.inputs.forEach(i => {\n if (i.disabled) return;\n let $input = this.createInput(i, dataDay, daySelected, selected);\n\n if ($input) {\n $divContainer.appendChild($input);\n $inputs.push($input);\n\n if (i.type == \"checkbox\") {\n checkboxInputs.push($input);\n }\n\n if (i.reloadOnSelect != null) {\n inputsWithReload.push({\n $input,\n config: i\n });\n }\n }\n });\n } //manejo de eventos para inputs con showIf\n\n\n if (checkboxInputs) {\n checkboxInputs.forEach($c => {\n //obtiene key de checkbox\n let key = $c.getAttribute(\"input-key\");\n let props = tabSelected.inputs.find(i => {\n return i.key == key;\n });\n let isChecked = false;\n\n if (dataDay) {\n isChecked = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n } //obtiene inputs relacionados desde config para mostrar/ocultar\n\n\n let inputsToHide = tabSelected.inputs.filter(i => {\n return i.showIf && i.showIf == key;\n });\n let inputsToHideKeys = inputsToHide.map(i => i.key); //obtiene inputs del dom, filtrando con inputsToHide\n\n let $inputsHidden = $inputs.filter($i => {\n let inputKey = $i.getAttribute(\"input-key\");\n return inputsToHideKeys.indexOf(inputKey) > -1;\n }); //si hay inputs,\n\n if ($inputsHidden) {\n if (!isChecked) {\n $inputsHidden.forEach($i => {\n $i.classList.add(\"hide\");\n });\n }\n\n $c.addEventListener(\"input\", e => {\n $inputsHidden.forEach($i => {\n let fn = $c.querySelector(\"input[type='checkbox']\").checked ? \"remove\" : \"add\";\n $i.classList[fn](\"hide\");\n });\n });\n }\n });\n }\n\n let saveCancelBtns = this.createNavRightbuttons();\n $divContainer.appendChild(saveCancelBtns);\n $navRight.innerHTML = \"\";\n $navRight.appendChild($divContainer);\n return {\n element: $navRight,\n inputs: $inputs,\n inputsWithReload,\n saveCancelBtns\n };\n },\n\n /**\n * Crea Corner inferior izquierdo, como titulo para footer\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createCornerFooter(config) {\n if (config.timeline.footer === undefined || config.timeline.footer.enabled == false) return null;\n let str = \"\";\n\n if (config.timeline.footer) {\n str += `<div class=\"corner-footer\">\n <div class=\"corner-title\">\n <span>\n ${config.timeline.footer.label}\n </span>\n </div>\n </div>`;\n }\n\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n /**\n * Crea Footer para planilla\n * Inicialmente creado para totales\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createFooter(config) {\n if (config.timeline.footer === undefined || config.timeline.footer.enabled == false) return null;\n let str = `\n <footer>\n <div class=\"footer-container\">\n `;\n config.timeline.footer.data.forEach(d => {\n str += `\n <div class=\"footer-item\">${d.value}</div>\n `;\n });\n str += `\n </div>\n </footer>\n `;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n /**\n * Crea Footer para planilla\n * Inicialmente creado para totales\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object[]} selected - array de objetos, de dias seleccionados\n * @return {Object} Elemento Dom Corner Footer\n */\n createSelectBoard(config, selected) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"select-container\"\n });\n return this.redrawSelectBoard($elem, selected);\n },\n\n /**\n * Crea linea vertical para fecha Actual\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createTodayLine(config) {\n return this.redrawTodayLine(config, _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"today-line\"\n }));\n },\n\n /**\n * Recrea linea vertical para fecha Actual\n * si el elemento $elem no es enviado, se crea un nuevo elemento\n *\n * Si el dia actual no esta dentro del rango de fechas del config,\n * deshabilita la linea con la clase css .disable-line\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} [$elem=null] - Elemento Dom donde recrea la linea, si es null, la crea\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawTodayLine(config, $elem = null) {\n let endTime = new Date(config.timeline.end).getTime();\n let todayTime = new Date().getTime();\n let {\n height,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n if ($elem == null) $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"today-line\"\n });\n\n if (endTime < todayTime) {\n $elem.classList.add(\"disable-line\");\n } else {\n $elem.classList.remove(\"disable-line\");\n }\n\n let diffDays = Math.floor(_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(new Date())));\n let diff = diffDays * dayWidth;\n diff += dayWidth / 2 - 2; // para centrar linea\n\n Object.assign($elem.style, {\n \"margin-left\": diff + \"px\",\n height: height + \"px\"\n });\n return $elem;\n },\n\n /**\n * Crea elemento FloatBox, que contiene los datos que se muestra en la tabla\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para mostrar datos configurados por tab\n * @return {Object} Elemento Dom Corner Footer\n */\n createFloatBox(config, tab) {\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"float-box-container\"\n });\n return this.redrawFloatBox(config, tab, $container);\n },\n\n /**\n * Recrea elemento FloatBox, que contiene los datos que se muestra en la tabla\n * Se usa principalmente para mostrar datos en la tabla de la planilla\n * los muestra de manera flotante, calculando el Top y el Left segun la poscion\n *\n * Se consideran los elementos padres ocultos, para ocultar los datos\n *\n * Se insertan los elementos FloatBox, como elemento con datos de un item y dia especifico\n *\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para mostrar datos configurados por tab\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawFloatBox(config, tab, $container) {\n $container.innerHTML = \"\"; //let tabSelected = tab || null;\n\n config.data.forEach(de => {\n if (de.isHidden) return;\n de.children.forEach(ds => {\n if (ds.isHidden) return;\n ds.data.forEach(data => {\n if ((!data.message || data.message.value == null) && (data.values == null || data.values == undefined || Object.entries(data.values).length === 0)) {\n return null;\n } //children Data\n\n\n let position = this.getPositionFloatBox(config, data, ds);\n let className = \"\";\n\n if (data.errors && data.errors.length > 0) {\n className += \"has-errors \";\n }\n\n if (de.isClosed) {\n className += \"hide \";\n }\n\n let msg = null;\n\n if (tab.floatBox && tab.floatBox.messagePath) {\n msg = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data, tab.floatBox.messagePath);\n }\n\n if (msg || data.message && data.message.value) {\n className += \"has-message \";\n }\n\n let str = `\n <div class=\"float-box ${className} \"\n style=\"${position ? position : \"\"}\"\n item-id=\"${ds.id || -1}\"\n type-node=\"${ds.type || \"\"}\"> `;\n let strExt = `\n <div class=\"float-box-ext ${de.isClosed ? \"hide\" : \"\"}\"\n style=\"${position ? position : \"\"}\"\n item-id=\"${ds.id || -1}-ext\"\n type-node=\"${ds.type || \"\"}\">\n <div class=\"long-bar-container\">`;\n\n if (tab && tab.floatBox) {\n if (tab.floatBox.plots) {\n str += `<div class=\"plot-floatbox-container\">`;\n tab.floatBox.plots.forEach(n => {\n let cssVars = \"\";\n let className = \"\";\n\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName) !== null) {\n if (n.color) {\n cssVars = `--local-color:${n.color};`;\n }\n\n className = n.className || \"\";\n str += `<div class=\"plot-floatbox ${className} ${n.style || \"\"}\" style=\"${cssVars} \"></div>`;\n }\n });\n str += `\n </div>`;\n }\n\n if (tab.floatBox.icons) {\n tab.floatBox.icons.forEach(iconConfig => {\n let className = \"\";\n let colorClass = \"\";\n let colorStyle = \"\";\n let viewBox = \"0 0 24 24\";\n let icon = iconConfig.icon || null;\n\n if (iconConfig.varName) {\n let iconVar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, iconConfig.varName);\n\n if (iconVar) {\n icon = iconVar;\n }\n }\n\n if (iconConfig.className) {\n className = iconConfig.className;\n }\n\n if (iconConfig.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(iconConfig.color)) {\n colorStyle = `--local-color: ${iconConfig.color};`;\n } else {\n colorClass = iconConfig.color;\n }\n }\n\n if (iconConfig.colorVarName) {\n let colorVar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, iconConfig.colorVarName);\n\n if (colorVar) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(colorVar)) {\n colorStyle = `--local-color: ${colorVar};`;\n } else {\n colorClass = colorVar;\n }\n }\n }\n\n str += `\n <div class=\"icon-floatbox ${className} ${colorClass ? \"has-color\" : \"\"}\" style=\"${colorStyle}\">\n <svg viewBox=\"${viewBox}\">\n <path d=\"${icon}\" />\n </svg>\n </div>\n `;\n });\n } //numeros en el floatBox\n\n\n if (tab.floatBox.nums) {\n tab.floatBox.nums.forEach(n => {\n if (tab.legends && n.tabKey) {\n let legend = tab.legends.find(l => l.key == n.tabKey);\n if (legend && !legend.active) return;\n }\n\n let dataFloatBox = null;\n let className = \"\";\n let showIf = true;\n let hideIf = false;\n let colorClass = \"\";\n let colorStyle = \"\";\n let classNamesExt = \"\";\n let colorStyleExt = \"\";\n let cssVars = \"\";\n\n if (n.varName) {\n dataFloatBox = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName);\n }\n\n if (n.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varShow));\n dataFloatBox = dataFloatBox || \"\";\n }\n\n if (n.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varHide));\n }\n\n if (n.shape) {\n className += \"shape-\" + n.shape;\n }\n\n if (n.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(n.color)) {\n colorStyle = `--local-color: ${n.color};`;\n } else {\n colorClass = n.color;\n }\n }\n\n if (n.longBar) {\n let longBarColor = \"\";\n let longBarOpacity = \"\";\n\n if (n.longBarColor) {\n longBarColor = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarColor);\n }\n\n if (longBarColor) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(longBarColor)) {\n colorStyleExt = `--local-color: ${longBarColor};`;\n } else {\n classNamesExt += longBarColor + \"-light \";\n }\n } else if (colorClass && colorClass != \"\") {\n classNamesExt += colorClass;\n } else if (colorStyle && colorStyle != \"\") {\n colorStyleExt = colorStyle;\n }\n\n if (n.longBarOpacity) {\n longBarOpacity = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarOpacity) || null;\n\n if (longBarOpacity) {\n colorStyleExt += \"--local-opacity: \" + longBarOpacity + \";\";\n }\n }\n\n if (n.longBarClassName) {\n classNamesExt += _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarClassName) || \"\";\n }\n\n let longBar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBar);\n\n if (longBar) {\n cssVars = `--long:${longBar};`;\n }\n }\n\n if (dataFloatBox !== null && showIf && !hideIf) {\n str += `<span class=\"data ${colorClass} ${className}\" style=\"${colorStyle}\">\n ${typeof dataFloatBox == \"string\" ? dataFloatBox : \"\"}\n ${typeof dataFloatBox == \"number\" ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(dataFloatBox, n.round) : \"\"}\n </span>`;\n\n if (n.longBar && cssVars) {\n strExt += `<div class=\"long-bar ${classNamesExt}\" style=\"${colorStyleExt} ${cssVars} \"></div> `;\n }\n }\n });\n } //puntos en el floatBox\n\n\n if (tab.floatBox.dots) {\n str += `<div class=\"dot-container-middle\">`;\n tab.floatBox.dots.forEach(dot => {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName) !== null) {\n let className = \"\";\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (dot.shape) {\n className += dot.shape;\n }\n\n if (dot.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(dot.color)) {\n colorStyle = `--local-color: ${dot.color}`;\n } else {\n colorClass = dot.color;\n }\n }\n\n str += `\n <div class=\"dot ${colorClass} ${className}\" style=\"${colorStyle}\" ></div>`;\n }\n });\n str += `\n </div>`;\n } //fila de puntos en floatBox\n\n\n if (tab.floatBox.rowDots) {\n tab.floatBox.rowDots.forEach(row => {\n let freeColumns = 4;\n str += `<span class=\"rowdot--row \">`;\n row.forEach(dot => {\n if (tab.legends && dot.tabKey) {\n let legend = tab.legends.find(l => l.key == dot.tabKey);\n if (legend && !legend.active) return;\n }\n\n let dataFloatBox = null;\n let className = \"\";\n let showIf = true;\n let hideIf = false;\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (dot.varName) {\n dataFloatBox = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName);\n dataFloatBox = parseInt(dataFloatBox);\n }\n\n if (dot.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varShow));\n dataFloatBox = dataFloatBox || \"\";\n }\n\n if (dot.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varHide));\n }\n\n if (dot.shape) {\n className += \" shape-\" + dot.shape;\n }\n\n if (dot.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(dot.color)) {\n colorStyle = `--local-color: ${dot.color}`;\n } else {\n colorClass = dot.color;\n }\n }\n\n if (dataFloatBox !== null && dataFloatBox > 0 && showIf && !hideIf && freeColumns > 0) {\n let n = dataFloatBox > freeColumns ? freeColumns : dataFloatBox;\n freeColumns -= n;\n\n for (let index = 0; index < n; index++) {\n str += `<div class=\"rowdot--dot ${colorClass} ${className}\" style=\"${colorStyle}\"></div>`;\n }\n }\n });\n str += `</span>`;\n });\n }\n }\n\n str += `\n </div>`;\n strExt += `\n </div>\n </div>`;\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $elemExt = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strExt);\n $elem.addEventListener(\"mouseover\", e => {\n $elem.dispatchEvent(new CustomEvent(\"mouseOverFloatBox\", {\n bubbles: true,\n cancelable: false,\n detail: {\n item: ds,\n data: data,\n originalEvt: e\n }\n }));\n });\n $elem.addEventListener(\"click\", e => {\n $elem.dispatchEvent(new CustomEvent(\"clickFloatBox\", {\n bubbles: true,\n cancelable: false,\n detail: {\n item: ds,\n data: data,\n originalEvt: e\n }\n }));\n });\n $container.appendChild($elem);\n $container.appendChild($elemExt);\n });\n });\n });\n return $container;\n },\n\n /**\n * Crea DetailDay, detalle de valores de item y Dia\n * se usa para:\n * - Muestra nombre de item y detalles\n * - Muestra capsulas de datos\n * - Muestra Pills, pildoras de datos resumidos\n * - Muestra alertas\n * - Muestra Mensaje\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n * @param {Object} dataDay - valores de item y Dia\n * @param {Boolean} [onlyStringContent = false] - para escoger si devuelve String o DomElement\n * @return {String|Object} Elemento como String o DomElement\n */\n createDetailDay(config, item = {}, dataDay, tabSelected, onlyStringContent = false) {\n let str = `\n <div class=\"header-detail\">\n <div class=\"title truncate\">\n ${item.label || \"\"}\n </div>\n <div class=\"subtitle\">\n ${dataDay ? _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDateReadeable(dataDay.date) : \"\"}\n </div>\n </div>\n\n <div class=\"list-detail list\">`; //CAPSULES\n\n if (dataDay) {\n config.timeline.detailDay.capsules.forEach(cap => {\n //para comprobar si tiene datos, se obtiene el primer valor\n //de la lista de values de una capsula\n let hasValues = cap.values.filter(v => _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, v.varName) !== null).length > 0;\n let hideIf = false;\n\n if (cap.hideIf) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, cap.hideIf));\n }\n\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (cap.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(cap.color)) {\n colorStyle = `--local-color: ${cap.color};`;\n colorStyle += `--local-color-font: ${cap.color};`;\n } else {\n colorClass = cap.color;\n }\n }\n\n if (hasValues && !hideIf) {\n str += `\n <div class=\"item-detail ${colorClass}\" style=\"${colorStyle}\">\n\n <div class=\"left-icon ${cap.shape || \"\"} \"></div>\n\n <div class=\"name\">\n <span>\n ${cap.title || \"\"}\n </span>\n </div>`;\n str += `\n <div class=\"item-description\"> `;\n cap.values.forEach(v => {\n let value = v.varName ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, v.varName) : null;\n\n if (cap.isLabeledArray) {\n value.forEach(valueLabeled => {\n let outputValue = null;\n let valueName = v.valueName ? v.valueName : \"value\";\n let tempValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(valueLabeled, valueName);\n\n if (tempValue) {\n outputValue = v.round ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(tempValue, v.round) : tempValue;\n }\n\n if (v.formatter) {\n outputValue = v.formatter(valueLabeled);\n }\n\n if (typeof outputValue == \"number\") {\n outputValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(outputValue);\n }\n\n str += outputValue == null ? \"\" : `\n <div class=\"desc ${v.showColumn ? \"desc-column\" : \"\"}\">\n \n <div class=\"label\">\n ${v.hideLabel ? \"\" : valueLabeled.label}\n </div >\n <div class=\"val\">` + (v.hidePreffix !== true ? `\n <span class=\"prefix\">\n ${v.prefix || \"\"}\n </span>` : \"\") + `<span class=\"value\">\n ${outputValue}\n </span>` + (v.hideSuffix !== true ? `\n <span class=\"suffix\">\n ${valueLabeled.suffix || v.suffix || \"\"}\n </span>` : \"\") + `\n </div>\n </div>`;\n });\n } else {\n let outputValue = v.round ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round) : value;\n\n if (v.formatter) {\n outputValue = v.formatter({\n options: v,\n dataDay,\n outputValue\n });\n }\n\n if (typeof outputValue == \"number\") {\n outputValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(outputValue);\n }\n\n str += outputValue == null ? \"\" : `\n <div class=\"desc\">\n <span class=\"prefix\">\n ${v.prefix || \"\"}\n </span>\n <span class=\"value\">\n ${outputValue}\n </span>\n <span class=\"suffix\">\n ${v.suffix || \"\"}\n </span>\n </div>`;\n }\n });\n str += `\n </div>`;\n str += `\n </div>`; // end .item-detail\n }\n });\n }\n\n str += `\n </div>`; // list-detail\n //PILLS\n\n if (config.timeline.detailDay.pillsVarName && dataDay && dataDay.values[config.timeline.detailDay.pillsVarName]) {\n str += `\n <div class=\"elements-detail\">\n <div class=\"name\"> ${config.timeline.detailDay.pillsTitle} </div>\n <div class=\"elements-list\">`;\n dataDay.values[config.timeline.detailDay.pillsVarName].forEach(e => {\n let value = e.value;\n\n if (typeof outputValue == \"number\") {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(value);\n }\n\n str += `\n <div class=\"element-detail\">\n <b>${e.label}</b>\n ${value}\n </div>`;\n });\n str += `\n </div>\n </div>`; //end .element-detail > .element-list\n } //str += `</div>`;\n\n\n if (dataDay && dataDay.errors && dataDay.errors.length > 0) {\n dataDay.errors.forEach(err => {\n str += `\n <div class=\"alert\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].alert}\n ${err.label}\n </div>`;\n });\n }\n\n let msg = null;\n let author = null;\n let dateMsg = null;\n\n if (dataDay && tabSelected.floatBox && tabSelected.floatBox.messagePath) {\n msg = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, tabSelected.floatBox.messagePath);\n }\n\n if (!msg && dataDay && dataDay.message && dataDay.message.value) {\n msg = dataDay.message.value;\n author = dataDay.message.author;\n dateMsg = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDateReadeable(new Date(dataDay.message.date));\n }\n\n if (msg) {\n //msg = msg.replace(/(\\r\\n|\\r|\\n)/g, '<br>');\n str += `\n <div class=\"msj-container\">\n <div class=\"msj\">\n <pre>${msg || \"\"}</pre>\n </div>\n <div class=\"msj-detail\">\n <span class=\"email\"> ${author || \"\"} </span>\n <span class=\"date\"> ${dateMsg || \"\"} </span>\n </div>\n </div>`;\n }\n\n let strContainer = `<div class=\"detail-day dd-hide\"> ${str} </div>`;\n if (onlyStringContent) return str;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strContainer);\n },\n\n /**\n * Recrea HTML de detailDay\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n * @param {Object} dataDay - valores de item y Dia\n * @return {String} Elemento como String, de detailDay\n */\n redrawDetailDay(config, item, dataDay, tabSelected) {\n return this.createDetailDay(config, item, dataDay, tabSelected, true);\n },\n\n /**\n * Reposiciona FloatBox\n * verifica si el parent esta desplegado, para ocultar los datos\n *\n * Solo actualiza las alturas de los floatbox\n * no recrea los floatbox, es mas optimo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n */\n repositionFloatBox(config, $floatBoxContainer) {\n $floatBoxContainer.querySelectorAll(\".float-box\").forEach($f => {\n let itemId = $f.getAttribute(\"item-id\");\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--item-height\"));\n let item, parent;\n ({\n item,\n parent\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId, \"child\", true));\n\n if (item) {\n let top = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item);\n $f.style.top = top * itemHeight + \"px\";\n\n if (parent && parent.isClosed) {\n $f.classList.add(\"hide\");\n } else if ($f.classList.contains(\"hide\")) {\n $f.classList.remove(\"hide\");\n }\n }\n });\n },\n\n /**\n * Recrea indicadores de dias seleccionados\n *\n * @param {Object} $elem - Elemento Dom donde crea los elementos seleccionados\n * @param {Object[]} selected - Array con los dias seleccionados\n * @return {Object} Elemento Dom que contiene los indicadores de dias seleccionados\n */\n redrawSelectBoard($elem, selected) {\n $elem.innerHTML = \"\";\n let hasNumber = true;\n\n if (selected) {\n if (selected.length == 1) hasNumber = false;\n selected.forEach(s => {\n let attributes = [];\n\n if (hasNumber) {\n attributes.push({\n name: \"cap-badge\",\n value: s.index\n });\n }\n\n let $s = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"selected-day\",\n attributes\n });\n $s.style.left = s.pos.left + \"px\";\n $s.style.top = s.pos.top + \"px\";\n $elem.append($s);\n });\n }\n\n return $elem;\n },\n\n /**\n * Obtiene String con estilos CSS de la posicion de un floatBox\n * calculado segun item y fecha de los valores\n *\n * @param {Object} config - Configuracion capibara, para ver fecha de inicio\n * @param {Object} data - Datos del dia indicado\n * @param {Object} item - Item relacionado\n * @return {String} String CSS top y left , para posicionar floatBox en table\n */\n getPositionFloatBox(config, data, item) {\n let left = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, data.date);\n let top = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item);\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--day-width\"));\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--item-height\"));\n left *= dayWidth;\n top *= itemHeight;\n return \"top: \" + top + \".5px; left:\" + left + \".5px;\";\n },\n\n /**\n * Crea Boton como elemento Dom\n *\n * @param {Object} props - propiedades para boton\n * @param {String} props.className - classes css para boton\n * @param {*} props.key - key para identificar a boton\n * @param {String} props.label - Texto boton\n * @return {Object} Elemento Dom del boton creado\n */\n createButton(props) {\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <button class=\"${props.className || \"\"}\" input-key=\"${props.key || \"\"}\">\n ${props.label || \"\"}\n </button>`);\n },\n\n /**\n * Crea Botones de guardar y cancelar los datos de formulario del sidebar derecho\n *\n * @return {Object} Elemento Dom del botones creados\n */\n createNavRightbuttons() {\n let saveBtn = this.createButton({\n label: \"Guardar\",\n className: \"cap-btn-raised\"\n });\n let cancelBtn = this.createButton({\n label: \"Cancelar\",\n className: \"cap-btn-outline\"\n });\n let btnSection = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`<div class=\"button-section\"></div>`);\n btnSection.appendChild(saveBtn);\n btnSection.appendChild(cancelBtn);\n saveBtn.addEventListener(\"click\", e => {\n saveBtn.dispatchEvent(new CustomEvent(\"saveMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n });\n cancelBtn.addEventListener(\"click\", e => {\n cancelBtn.dispatchEvent(new CustomEvent(\"cancelMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n });\n return btnSection;\n },\n\n /**\n * Crea Input como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} [dataDay = null] - valores de item y Dia, opcional\n * @param {Object} [daySelected = null] - datos del dia seleccionado\n * @param {Object[]} [selected = []] - array de objetos, de dias seleccionados\n * @return {Object} Elemento Dom del input creado\n */\n createInput(props, dataDay = null, daySelected = null, selected = []) {\n let r = null;\n if (props.ignoreRender == true) return r;\n\n switch (props.type) {\n case \"custom\":\n r = props.render ? props.render({\n props,\n dataDay,\n daySelected,\n selected\n }) : null;\n r.setAttribute(\"input-key\", props.key);\n break;\n\n case \"select\":\n r = this.createInputSelect(props, dataDay, daySelected);\n break;\n\n case \"file\":\n r = this.createInputFile(props, dataDay);\n break;\n\n case \"fileLink\":\n r = this.createFileLink(props, dataDay);\n break;\n\n case \"text\":\n r = this.createText(props, selected);\n break;\n\n case \"title\":\n r = this.createTitle(props);\n break;\n\n case \"number\":\n r = this.createInputNumber(props, dataDay);\n break;\n\n case \"float\":\n r = this.createInputFloat(props, dataDay);\n break;\n\n case \"message\":\n r = this.createInputMessage(props, dataDay);\n break;\n\n case \"textarea\":\n r = this.createInputTextArea(props, dataDay);\n break;\n\n case \"checkbox\":\n r = this.createInputCheckbox(props, dataDay);\n break;\n\n case \"inputList\":\n r = this.createInputList(props, dataDay, daySelected);\n break;\n\n case \"input-box\":\n r = this.createInputBox(props, dataDay);\n break;\n\n case \"list\":\n r = this.createList(props, dataDay);\n break;\n\n case \"data-list\":\n r = this.createDataList(props, dataDay, daySelected, selected);\n break;\n\n case \"button\":\n r = this.createInputButton(props, dataDay);\n break;\n\n case \"buttons-group\":\n r = this.createInputButtonsGroup(props, dataDay);\n break;\n\n case \"time\":\n r = this.createInputTime(props, dataDay);\n break;\n\n case \"text\":\n default:\n r = this.createInputText(props, dataDay);\n }\n\n return r;\n },\n\n /**\n * Crea Input con formato Hora, como elemento Dom\n *\n * Usa 2 inputs, hora y minutos\n *\n * el value que interpreta es String HH:MM\n *\n * @param {Object} props - config para Input\n * @param {Object} [dataDay = null] - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputTime(props, dataDay) {\n let hhValue = \"\";\n let mmValue = \"\";\n\n if (dataDay && dataDay.values) {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n\n if (value) {\n value = value.split(\":\");\n hhValue = value[0];\n mmValue = value[1];\n }\n }\n\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label || \"\"}\n </span>\n <div class=\"d-flex\">\n <div class=\"time\">\n <input type=\"number\"\n class=\"hour\"\n id=\"test\"\n placeholder=\"00\"\n min=\"0\"\n max=\"99\"\n value=\"${hhValue}\">\n <span class=\"symbol\">:</span>\n <input type=\"number\"\n class=\"minutes\"\n placeholder=\"00\"\n min=\"0\"\n max=\"59\"\n value=\"${mmValue}\">\n </div>\n <span class=\"text-hint\">\n ${props.textHint || \"\"}\n </span>\n </div>\n </div>`);\n let $hhInput = $elem.querySelector(\".hour\");\n let $mmInput = $elem.querySelector(\".minutes\");\n $hhInput.addEventListener(\"input\", e => {\n $hhInput.dispatchEvent(new CustomEvent(\"changeTimeInputHH\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: props.key,\n value: e.srcElement.value\n }\n }));\n });\n $mmInput.addEventListener(\"input\", e => {\n $mmInput.dispatchEvent(new CustomEvent(\"changeTimeInputMM\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: props.key,\n value: e.srcElement.value\n }\n }));\n });\n this.addKeyDownInputEvents($hhInput, $elem, props);\n this.addKeyDownInputEvents($mmInput, $elem, props);\n return $elem;\n },\n\n /**\n * Crea Text como elemento Dom\n * Se configura como input, pero no devuelve datos, es un texto\n *\n * @param {Object} props - config para Input\n * @return {Object} Elemento Dom del input creado\n */\n createText(props, selected) {\n let label = props.label;\n\n if (props.formatter) {\n label = props.formatter({\n selected\n });\n }\n\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"${props.classNames || \"\"}\">\n ${label}\n </span>\n </div>`);\n return $elem;\n },\n\n /**\n * Crea Title como elemento Dom\n * Se configura como input, pero no devuelve datos, es un texto\n *\n * @param {Object} props - config para Input\n * @return {Object} Elemento Dom del input creado\n */\n createTitle(props) {\n let classNames = \"text-title\";\n\n if (props.isSubtitle) {\n classNames = \"text-subtitle\";\n }\n\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"${classNames}\">\n ${props.label}\n </span>\n </div>`);\n },\n\n /**\n * Crea Input tipo Numerico como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputNumber(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n value = value || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n <span class=\"text-subtitle-2 \">\n ${props.suffix ? \"(\" + props.suffix + \")\" : \"\"}\n </span>\n </div>\n <div class=\"d-flex\">\n <input type=\"number\"\n class=\"nav-input\"\n value=\"${value}\">\n\n <span class=\"text-hint\">\n ${props.textHint || \"\"}\n </span>\n </div>\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input tipo FIlepicker como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputFile(props, dataDay) {\n let value = \"\";\n let fileName = \"\";\n let filePath = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n fileName = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.fileNameValue);\n filePath = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.filePathValue);\n }\n\n value = value || \"\";\n fileName = fileName || \"\";\n filePath = filePath || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n </div>\n\n <div class=\"nav-input-file\" >\n <button class=\"small-close clear-file-input\">x</button>\n <label >\n <span class=\"nav-input-file-label\">\n ${props.pickerLabel || \"Seleccionar Archivo\"}\n </span>\n <input type=\"file\" value=\"${value}\">\n </label>\n </div>\n\n <div class=\"input-section-link\">\n <a href=\"${filePath}\" target=\"_blank\" >\n ${fileName}\n </a>\n </div>\n\n </div>`);\n let $inputElem = elem.querySelector(\"input\");\n let $clearBtn = elem.querySelector(\".clear-file-input\");\n let $fileInputLabel = elem.querySelector(\".nav-input-file-label\");\n $inputElem.addEventListener(\"change\", evt => {\n let fileName = $inputElem.files[0].name;\n $fileInputLabel.textContent = fileName;\n });\n $clearBtn.addEventListener(\"click\", evt => {\n $inputElem.value = \"\";\n $fileInputLabel.textContent = props.pickerLabel || \"Seleccionar Archivo\";\n evt.stopPropagation();\n });\n return elem;\n },\n\n createFileLink(props, dataDay) {\n let fileName = \"\";\n let filePath = \"\";\n\n if (dataDay && dataDay.values) {\n //value = utils.getVarByPath(dataDay, props.varName);\n fileName = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.fileNameValue);\n filePath = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.filePathValue);\n }\n\n if (fileName == \"\") return null;\n fileName = fileName || \"\";\n filePath = filePath || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n </div>\n\n <div class=\"input-section-link\">\n <a href=\"${filePath}\" target=\"_blank\" >\n ${fileName}\n </a>\n </div>\n\n </div>`);\n return elem;\n },\n\n /**\n * Crea lista de Inputs, con array de valores, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @param {Object} [daySelected = null] - datos del dia seleccionado\n * @return {Object} Elemento Dom del input creado\n */\n createInputList(props, dataDay, daySelected = null) {\n let inputList = []; //obtiene inputs default, para crearlos, sin valores\n\n if (daySelected && Array.isArray(daySelected.item.values[props.inputList])) {\n inputList = daySelected.item.values[props.inputList].map(inputRow => {\n //limpia inputList inputs\n inputRow.inputs.map(input => {\n input.value = null;\n return input;\n }); //obtiene valores del dia\n\n if (dataDay && dataDay.values) {\n let inputValues = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.valuesPath); //autorrellena\n\n if (inputValues) {\n inputRow.inputs.forEach(input => {\n let values = inputValues.find(v => v.id == inputRow.id);\n input.value = values ? values[input.varName] : null;\n });\n }\n }\n\n return inputRow;\n });\n }\n\n let str = `<div input-key=\"${props.key || \"\"}\" class=\"input-section-list ${props.isHidden ? \"hide\" : \"\"} \">\n <div class=\"input-section-title\">\n <span class=\"text-title\">\n ${props.label}\n </span> \n </div>`;\n inputList.forEach(inputRow => {\n str += `\n <div class=\"input-section ${props.toRight ? \"to-right\" : \"\"}\" >\n <span class=\"text-subtitle\">\n ${inputRow.label}\n </span>`;\n inputRow.inputs.forEach(input => {\n str += ` \n <div class=\"input-section-col\" >\n <span class=\"text-subtitle \">\n ${input.label}\n </span>\n <input type=\"number\"\n input-id=\"${inputRow.id}\"\n input-label=\"${input.label}\"\n class=\"nav-input small\"\n value=\"${input.value}\">\n </div>`;\n });\n str += `\n </div>`;\n });\n str += `</div>`;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let inputsElem = elem.querySelectorAll(\"input\");\n inputsElem.forEach(inputElem => this.addKeyDownInputEvents(inputElem, elem, props));\n return elem;\n },\n\n createInputSelect(props, dataDay, daySelected = null) {\n let value = null;\n let options = props.options;\n\n if (dataDay && dataDay.values) {\n let val = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n value = val ? val.value : null;\n }\n\n let str = `<div input-key=\"${props.key || \"\"}\" class=\"${props.isHidden ? \"hide\" : \"\"}\" >\n <div class=\"input-section \" >\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n\n <select class=\"input-select\">\n\n <option value=\"\" ${value == null ? \"selected\" : \"\"}>\n ${props.noDataLabel || \"-- sin asignar --\"}\n </option>\n\n `;\n options.forEach(option => {\n str += `\n <option value=\"${option.id}\" ${option.id == value ? \"selected\" : \"\"}>\n ${option.label}\n </option>\n `;\n });\n str += `\n\n </select>\n </div>\n\n </div>`;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n return elem;\n },\n\n /**\n * Crea Input de texto TextArea como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputTextArea(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <textarea class=\"\" value=\"${value}\"></textarea>\n </div>`);\n let inputElem = elem.querySelector(\"textarea\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input de Mensaje como elemento Dom\n * utiliza TextArea\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputMessage(props, dataDay) {\n let value = dataDay ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName) : null;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section msj-input-container ${props.isHidden ? \"hide\" : \"\"} \"\n input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n Mensaje\n </span>\n <textarea class=\"msj\">${value || \"\"}</textarea>\n </div>`);\n let inputElem = elem.querySelector(\"textarea\"); //this.addKeyDownInputEvents(inputElem);\n\n return elem;\n },\n\n /**\n * Crea Input de texto como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputText(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <input type=\"text\" class=\"nav-input\" value=\"${value}\">\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input Numero Flotante, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputFloat(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <input type=\"number\" class=\"nav-input\" value=\"${value}\">\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n createDataList(props, dataDay, daySelected, selected) {\n let list = [];\n\n if (dataDay && dataDay.values) {\n list = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName) || [];\n }\n\n let searchInput = ` <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>`;\n let editBtn = \"\";\n\n if (props.editButton) {\n editBtn = `<button class=\"cap-btn-raised cap-btn-sm edit-btn\" input-key=\"${props.editButton.key}\">\n ${props.editButton.label} \n </button> `;\n }\n\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"input-section-title\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n ${editBtn}\t\n </div>\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n ${searchInput}\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $searchInput = $el.querySelector(\".search-input\");\n let $searchInputClear = $el.querySelector(\".search-input-clear\");\n let $inputBox = $el.querySelector(\".input-box\");\n let $items = list.map((item, j) => {\n let label = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameLabel) || dataDay.label || \"__\";\n let $elItem = this.createDataListItem({\n label,\n valueText: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameValueText) || \"\",\n subText: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameSubText) || \"\",\n id: \"list-item-\" + (dataDay.id || j),\n key: \"list-item-\" + (dataDay.id || j),\n tooltip: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameTooltip) || label,\n //colorIcon: \"c-red\",\n link: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameLink) || null,\n suffix: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameSuffix) || \"\" //value: JSON.stringify(utils.getVarByPath(item, props.varNameInput)) || {}\n\n });\n $inputBox.appendChild($elItem);\n });\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $inputs = [];\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n\n if (props.editButton.onClick) {\n let button = $el.querySelector(\"button.edit-btn\");\n\n if (button && props.editButton) {\n button.addEventListener(\"click\", e => props.editButton.onClick({\n event: e,\n props,\n dataDay,\n daySelected,\n selected,\n $element: $el\n }));\n }\n\n $items.forEach($i => {\n $el.addEventListener(\"click\", e => {\n props.editButton.onClick({\n event: e,\n props,\n dataDay,\n daySelected,\n selected,\n $element: $el\n });\n });\n });\n }\n\n return $el;\n },\n\n createDataListItem({\n label = \"\",\n valueText = \"\",\n subText = \"\",\n id = \"\",\n key = \"\",\n tooltip = \"\",\n colorIcon = \"\",\n link = null,\n suffix = null,\n value = \"\"\n }) {\n let tooltipStr = \"\";\n let iconStr = null;\n let linkStr = \"\";\n let str = \"\";\n\n if (tooltip) {\n tooltipStr = `\n <div class=\"mini-input-section--tooltip\">\n ${tooltip}\n </div>`;\n }\n\n if (colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(itemFormated.colorIcon)) {\n iconStr = `<div class=\"mini-input-section--icon\" style=\"background:${colorIcon}\"> </div>`;\n } else {\n iconStr = `<div class=\"mini-input-section--icon ${colorIcon}\"> </div>`;\n }\n }\n\n if (link) {\n linkStr = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${link}\">${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}</a> `;\n }\n\n str += `\n <div class=\"mini-input-section clickeable ${iconStr ? \"has-icon\" : \"\"} \" \n label=\"${label}\" \n data-id=\"${id}\"\n data-key=\"${key}\"\n data-value=\"${value || \"\"}\"\n >\n <label>\n ${iconStr || \"\"}\n\n <div class=\"mini-input-section--titles\">\n <div class=\"mini-input-section--title truncate\">\n ${label}\n </div>\n <div class=\"mini-input-section--subtitle truncate\">\n ${subText}\n </div>\n </div>\n\n <div class=\"mini-input-section--content\" >\n ${valueText}\n </div>\n <div class=\"mini-input-section--suffix\" >\n ${suffix}\n </div>\n\n ${linkStr}\n\n </label>\n ${tooltipStr}\n </div>`;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n createList(props, dataDay) {\n let tabsContainer = \"\";\n\n if (props.tabs) {\n let tabs = \"\";\n props.tabs.forEach(tab => {\n tabs += `\n <div class=\"input-box-tab\" tab-key=\"${tab.key}\">\n ${tab.name}\n </div>`;\n });\n tabsContainer = `\n <div class=\"input-box-tab-container\">\n ${tabs}\n </div>\n `;\n }\n\n let searchInput = `\n <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>\n `;\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n\n ${tabsContainer}\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n\n ${searchInput}\n `; //TODO obtener input segun fila\n\n if (props.inputs) {\n props.inputs.forEach(i => {\n if (i.isTitle) {\n let tooltip = \"\";\n let icon = null;\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n ${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n str += `\n <div class=\"mini-input-section is-title ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n ${icon || \"\"}\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n </label>\n ${tooltip}\n </div>`;\n } else {\n let tooltip = \"\";\n let icon = null;\n let link = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n if (i.link) {\n link = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${i.link}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}\n </a> `;\n }\n\n str += `\n <div class=\"mini-input-section ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n\n ${icon}\n\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n\n <div class=\"mini-input-section--suffix\" >${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}</div>\n\n ${link}\n\n </label>\n <div class=\"mini-input-section--footer\">\n <span class=\"start\"> start</span>\n <span class=\"end\"> end </span>\n </div>\n ${tooltip}\n </div>`;\n }\n });\n }\n\n str += `\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $searchInput = $el.querySelector(\".search-input\") || null;\n let $searchInputClear = $el.querySelector(\".search-input-clear\") || null;\n $tabs.forEach(t => {\n t.addEventListener(\"click\", e => {\n this.selectInputBoxTab(t, $el);\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n });\n\n if ($searchInputClear) {\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n }\n\n if ($searchInput) {\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $tabSelected = $el.querySelector(\".input-box-tab[tab-key].active\") || null;\n let $inputs = [];\n\n if ($tabSelected) {\n let tabKey = $tabSelected.getAttribute(\"tab-key\");\n $inputs = $el.querySelectorAll(\".mini-input-section[input-tab-key='\" + tabKey + \"']\") || [];\n } else {\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n }\n\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n }\n\n this.selectInputBoxTab(_.first($tabs), $el);\n return $el;\n },\n\n /**\n * Crea InputBox, como elemento Dom\n * un InputBox es un contenedor con una lista de inputs\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputBox(props, dataDay) {\n let value = [];\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let tabsContainer = \"\";\n\n if (props.tabs) {\n let tabs = \"\";\n props.tabs.forEach(tab => {\n tabs += `\n <div class=\"input-box-tab\" tab-key=\"${tab.key}\">\n ${tab.name}\n </div>`;\n });\n tabsContainer = `\n <div class=\"input-box-tab-container\">\n ${tabs}\n </div>\n `;\n }\n\n let searchInput = `\n <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>\n `;\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n\n ${tabsContainer}\n\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n\n ${searchInput}\n `;\n\n if (props.inputs) {\n props.inputs.forEach(i => {\n if (i.isTitle) {\n let tooltip = \"\";\n let icon = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n ${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n str += `\n <div class=\"mini-input-section is-title\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n ${icon}\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n </label>\n ${tooltip}\n </div>`;\n } else {\n let value_found = value ? value.find(val => val.id == i.id) : null;\n let v = value_found || \"\";\n let inputValue = props.varNameInput && v[props.varNameInput] ? v[props.varNameInput] : v.value;\n let tooltip = \"\";\n let icon = \"\";\n let link = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n if (i.link) {\n link = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${i.link}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}\n </a> `;\n }\n\n str += `\n <div class=\"mini-input-section ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n <input type=\"number\"\n class=\"mini-input\"\n input-id=\"${i.id || \"\"}\"\n input-key=\"${i.key || i.label}\"\n value=\"${inputValue || \"\"}\">\n\n ${icon || \"\"}\n\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n\n <div class=\"mini-input-section--suffix\" >${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}</div>\n\n ${link}\n\n </label>\n ${tooltip}\n </div>`;\n }\n });\n }\n\n str += `\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $inputs = $el.querySelectorAll(\"input.mini-input\") || [];\n let $searchInput = $el.querySelector(\".search-input\") || null;\n let $searchInputClear = $el.querySelector(\".search-input-clear\") || null;\n $tabs.forEach(t => {\n t.addEventListener(\"click\", e => {\n this.selectInputBoxTab(t, $el);\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n });\n\n if ($searchInputClear) {\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n }\n\n if ($searchInput) {\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $tabSelected = $el.querySelector(\".input-box-tab[tab-key].active\") || null;\n let $inputs = [];\n\n if ($tabSelected) {\n let tabKey = $tabSelected.getAttribute(\"tab-key\");\n $inputs = $el.querySelectorAll(\".mini-input-section[input-tab-key='\" + tabKey + \"']\") || [];\n } else {\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n }\n\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n }\n\n this.selectInputBoxTab(_.first($tabs), $el);\n $inputs.forEach(i => this.addKeyDownInputEvents(i, $el, props));\n return $el;\n },\n\n selectInputBoxTab($tab, $el) {\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $inputSections = $el.querySelectorAll(\".mini-input-section\") || [];\n $tabs.forEach(t => {\n t.classList.remove(\"active\");\n });\n\n if ($tab) {\n $tab.classList.add(\"active\");\n $inputSections.forEach(i => {\n let key = i.getAttribute(\"input-tab-key\");\n\n if (key == $tab.getAttribute(\"tab-key\")) {\n i.classList.remove(\"hide\");\n } else {\n i.classList.add(\"hide\");\n }\n });\n }\n },\n\n /**\n * Crea Checkbox, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputCheckbox(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <label>\n <input type=\"checkbox\" name=\"${props.key || \"\"}\" input-key=\"${props.key || \"\"}\" ${value ? \"checked\" : \"\"}>\n ${props.label}\n </label>\n </div>`);\n return r;\n },\n\n createInputButtonsGroup(props) {\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"buttons-group\"> </div>\n </div>`);\n let $containerButtonGroup = $container.querySelector(\".buttons-group\");\n let $buttons = [];\n $buttons = props.buttons.map(buttonProp => {\n let buttonStr = `\n <button \n name=\"${buttonProp.key || \"\"}\" \n input-key=\"${buttonProp.key || \"\"}\"\n class=\"cap-btn-outline cap-btn-sm ${buttonProp.isSelected ? \"selected\" : \"\"} \">\n ${buttonProp.label}\n </button>`;\n let $button = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(buttonStr);\n $containerButtonGroup.append($button);\n $button.addEventListener(\"click\", e => {\n if (props.isSelectable) {\n $buttons.forEach($b => $b.classList.remove(\"selected\"));\n $button.classList.add(\"selected\");\n }\n\n buttonProp.onClick({\n props,\n event: e,\n buttonsElements: $buttons\n });\n });\n return $button;\n });\n return $container;\n },\n\n createInputButton(props) {\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <button \n name=\"${props.key || \"\"}\"\n input-key=\"${props.key || \"\"}\"\n class=\"cap-btn-outline\">\n ${props.label}\n </button>\n </div>`);\n let button = r.querySelector(\"button\");\n button.addEventListener(\"click\", e => props.onClick({\n props,\n event: e\n }));\n return r;\n },\n\n addKeyDownInputEvents($input, $inputContainer, props) {\n $input.addEventListener(\"keydown\", function (event) {\n if (event.keyCode === 13) {\n //ENTER\n $input.dispatchEvent(new CustomEvent(\"saveMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n }\n\n if (event.keyCode === 27) {\n //ESC\n $input.dispatchEvent(new CustomEvent(\"cancelMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n }\n });\n $input.addEventListener(\"input\", e => {\n if (props.onInput) {\n props.onInput({\n event: e,\n value: e.srcElement.value,\n props,\n $element: $inputContainer\n });\n }\n });\n },\n\n createContextMenu({\n config,\n target,\n $capibaraElem = null,\n evt = null,\n date = null,\n item = null,\n selected = [],\n tabSelected = null,\n left = null,\n top = null,\n name = \"\"\n }) {\n if (config.timeline.contextMenu === undefined || config.timeline.contextMenu.options == undefined) return {\n elem: null,\n isVisible: false\n };\n let className = \"\";\n let style = \"\";\n let strHtml = \"\";\n let leftPosition = null;\n let topPosition = null;\n let isVisible = true;\n let boundRectCapibara = null;\n let gap = 15; //px\n\n if ($capibaraElem) {\n boundRectCapibara = $capibaraElem.getBoundingClientRect();\n }\n\n if (evt && boundRectCapibara) {\n left = evt.clientX;\n top = evt.clientY - boundRectCapibara.top;\n }\n\n if (left) {\n leftPosition = left;\n }\n\n if (top) {\n topPosition = top;\n }\n\n if (leftPosition !== null & topPosition !== null) {\n if (boundRectCapibara) {\n let transformStyle = \"\";\n\n if (topPosition > boundRectCapibara.height * 2 / 6 && topPosition <= boundRectCapibara.height * 4 / 6) {\n transformStyle += `translateY(-50%)`;\n }\n\n if (topPosition > boundRectCapibara.height * 4 / 6) {\n transformStyle += `translateY(-100%)`;\n }\n\n if (leftPosition > boundRectCapibara.width * 4 / 6) {\n transformStyle += `translateX(-100%)`;\n leftPosition -= gap;\n } else {\n leftPosition += gap;\n }\n\n if (transformStyle != \"\") {\n style += ` transform: ${transformStyle};`;\n }\n }\n\n style += `top: ${topPosition}px; left: ${leftPosition}px;`;\n } else {\n className += \"cm-hide\";\n isVisible = false;\n }\n\n strHtml += ` <div class=\"cap-context-menu-container ${className}\">\n <div class=\"cap-context-menu\" style=\"${style}\">\n </div>\n </div>`;\n let $contextMenuContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strHtml);\n let $contextMenu = $contextMenuContainer.querySelector(\".cap-context-menu\");\n let hasSomeoption = false;\n config.timeline.contextMenu.options.forEach(option => {\n if (option.showIf) {\n let show = option.showIf({\n item,\n date,\n selected,\n name,\n tabSelected\n });\n if (!show) return;\n }\n\n let isEnabled = true;\n let isClickeable = true;\n\n if (option.enableIf) {\n isEnabled = option.enableIf({\n item,\n date,\n selected,\n name,\n tabSelected\n });\n }\n\n let optionClassName = \"\";\n let strIcon = \"\";\n let label = \"\";\n\n if (!isEnabled) {\n optionClassName += \"is-disabled \";\n }\n\n if (option.isDivider) {\n isClickeable = false;\n optionClassName += \"is-divider \";\n }\n\n if (option.label) {\n label = `<span>${option.label}</span>`;\n }\n\n if (option.icon) {\n strIcon = `<div class=\"cap-context-menu_item_icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"${option.icon}\" />\n </svg>\n </div>`;\n }\n\n let optionStrHtml = `\n <div class=\"cap-context-menu_item ${optionClassName}\">\n ${strIcon}\n ${label}\n </div>`;\n let $option = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(optionStrHtml);\n\n if (isEnabled && isClickeable) {\n $option.addEventListener(\"click\", evtClick => option.onClick({\n config,\n evt: evtClick,\n date,\n item,\n selected,\n tabSelected,\n target\n }));\n } else {\n $option.addEventListener(\"click\", evtClick => {\n evtClick.preventDefault();\n evtClick.stopPropagation();\n });\n }\n\n $contextMenu.append($option);\n hasSomeoption = true;\n });\n return {\n elem: $contextMenuContainer,\n isVisible\n };\n }\n\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdXRpbC90YWJsZUVsZW1lbnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvdXRpbC90YWJsZUVsZW1lbnRzLmpzPzFkODYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvbSBmcm9tIFwiLi4vdXRpbC9kb21VdGlsc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlsL3V0aWxzXCI7XG5pbXBvcnQgZGF0ZVV0aWxzIGZyb20gXCIuLi91dGlsL2RhdGVVdGlsc1wiO1xuaW1wb3J0IGljb25zIGZyb20gXCIuLi91dGlsL2ljb25zXCI7XG5pbXBvcnQgZG9tVXRpbHMgZnJvbSBcIi4uL3V0aWwvZG9tVXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICAvKipcbiAgICogQ3JlYSBlbGVtZW50byBUYWJsZVxuICAgKiBDb250ZW5kcsOhIGxvcyBlbGVtZW50b3MgcXVlIGFwYXJlY2VyYW4gZGVudHJvIGRlIGxhIHRhYmxhIGRlIHBsYW5pbGxhXG4gICAqIFNlIFVzYSBwYXJhIDpcbiAgICogICAgLSBBZ3JlZ2FyIGJhY2tncm91bmQgY29uIHBhdHJvbiBlc3RpbG8gdGFibGFcbiAgICogICAgLSBBZ3JlZ2FyIGRheU1vdXNlT3ZlciwgZGl2IHF1ZSBpbmRpY2EgcG9zaWNpb24gZGUgbW91c2VcbiAgICogICAgLSBBZ3JlZ2FyIERldGFpbERheSwgcGFyYSBkZXRhbGxlcyBkZSBkYXRvcyBlbiB0YWJsYVxuICAgKiAgICAtIEFncmVnYXIgU2VsZWN0ZWRDb250YWluZXIsIHBhcmEgZGlhcyBzZWxlY2Npb25hZG9zXG4gICAqICAgIC0gQWdyZWdhciBGbG9hdEJveENvbnRhaW5lciwgcGFyYSB2aXN1YWxpemFjaW9uIGRlIGRhdG9zIGVuIHRhYmxhXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlQWdUYWJsZShjb25maWcpIHtcbiAgICBsZXQgZSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNhcGliYXJhXCIgfSk7XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5kYXJrKSB7XG4gICAgICBlLmNsYXNzTGlzdC5hZGQoXCJkYXJrLXRoZW1lXCIpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmhlYWRlci5leHRlbmQuaXNTaG93KSB7XG4gICAgICBlLmNsYXNzTGlzdC5hZGQoXCJoZWFkZXItZXh0ZW5kZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgQmFja2dyb3VuZCwgcXVlIGVzIGVsIGZvbmRvIGdyaWQsIGNvbW8gdGFibGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbGVtIC0gRWxlbWVudG8gcmVsYWNpb25hZG8sIGRvbmRlIHNlIGNyZSBlbCBiYWNrZ3JvdW5kXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIENvcm5lciBGb290ZXJcbiAgICovXG4gIHJlZHJhd0JhY2tncm91bmQoY29uZmlnLCAkZWxlbSkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUJhY2tncm91bmQoY29uZmlnLCAkZWxlbSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgeSBwb3NpY2lvbmEgZm9uZG8gZGUgdGFibGFcbiAgICogRXN0ZSBmb25kbyBjb250aWVuZSB1biBwYXRyb24gZGUgQ1NTIHF1ZSBsZSBkYSBsYSBhcGFyaWVuY2lhIGRlIHRhYmxhXG4gICAqIHBvciBsbyBjdWFsIHNlIGRlYmUgcmVwb3NpY2lvbmFyIHNlZ3VuIGxhIGZlY2hhIGRlIGluaWNpbywgcGFyYSBoYWNlclxuICAgKiBjYWx6YXIgbG9zIGZpbmVzIGRlIHNlbWFuYVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gWyRlbGVtID0gbnVsbF0gLSBFbGVtZW50byBiYWNrZ3JvdW5kLCBzaSBlcyBudWxsLCBsbyBjcmVhXG4gICAqIEByZXR1cm4ge09iamVjdH0gZWxlbWVudG8gRG9tIEJhY2tncm91bmRcbiAgICovXG4gIGNyZWF0ZUJhY2tncm91bmQoY29uZmlnLCAkZWxlbSA9IG51bGwpIHtcbiAgICBsZXQgeyBoZWlnaHQsIHdpZHRoLCBkYXlXaWR0aCB9ID0gdXRpbHMuZ2V0VGFibGVEaW1lbnNpb25zKGNvbmZpZyk7XG5cbiAgICBsZXQgc3RhcnQgPSBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuc3RhcnQpO1xuICAgIGxldCBlbmQgPSBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuZW5kKTtcblxuICAgIGVuZC5zZXRUaW1lKGVuZC5nZXRUaW1lKCkgKyBkYXRlVXRpbHMuZGF5SW5NaWxsaXNlY29uZHMpOyAvLyBhZGQgMjQgaG91cnNcblxuICAgIGxldCBkQ29ycmVjdGVkID0gbmV3IERhdGUoXG4gICAgICBzdGFydC52YWx1ZU9mKCkgKyBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDBcbiAgICApO1xuICAgIGxldCB3ZWVrRGF5ID0gZENvcnJlY3RlZC5nZXREYXkoKTtcbiAgICBsZXQgZGlmZldlZWtEYXlzID0gKHdlZWtEYXkgLSAxKSAqIGRheVdpZHRoICogLTE7XG5cbiAgICAkZWxlbSA9ICRlbGVtIHx8IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImJhY2tncm91bmQtZ3JpZFwiIH0pO1xuICAgICRlbGVtLnN0eWxlW1wiYmFja2dyb3VuZC1wb3NpdGlvblwiXSA9XG4gICAgICBkaWZmV2Vla0RheXMgKyBcInB4IDAsIDAgMCwgXCIgKyBkaWZmV2Vla0RheXMgKyBcInB4IDBcIjtcbiAgICAkZWxlbS5zdHlsZS53aWR0aCA9IHdpZHRoICsgXCJweFwiO1xuICAgICRlbGVtLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIDEgKyBcInB4XCI7XG4gICAgcmV0dXJuICRlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIFBsb3QgQ29udGFpbmVyIFZlcnRpY2FsXG4gICAqIExvcyBwbG90cyBzb24gZWxlbWVudG9zIHF1ZSBhZ3JlZ2FuIHNlY2Npb25lcyBkZSBmb25kbyBlbiBsYSBwbGFuaWxsYVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBwbG90VmVydGljYWxDb250YWluZXJcbiAgICovXG4gIGNyZWF0ZVBsb3RWZXJ0aWNhbENvbnRhaW5lcihjb25maWcpIHtcbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwicGxvdC12ZXJ0aWNhbC1jb250YWluZXJcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdQbG90VmVydGljYWxDb250YWluZXIoY29uZmlnLCAkZWxlbSk7XG4gIH0sXG5cbiAgY3JlYXRlUGxvdEhvcml6b250YWxDb250YWluZXIoY29uZmlnKSB7XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcInBsb3QtaG9yaXpvbnRhbC1jb250YWluZXJcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdQbG90SG9yaXpvbnRhbENvbnRhaW5lcihjb25maWcsICRlbGVtKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjcmVhIHBsb3RWZXJ0aWNhbENvbnRhaW5lciwgdXNhbmRvIGVsZW1lbnRvIGV4aXN0ZW50ZVxuICAgKiB1c2EgdW4gZWxlbWVudG8gZXhpc3RlbnRlIHBhcmEgdXNhciBsYSBmdW5jaW9uIHBhcmEgcmVkaWJ1amFyIGVsIGVsZW1lbnRvXG4gICAqXG4gICAqIExvcyBQbG90cyBzZSBpbnNlcnRhbiBjb21vIGRpdnMsIGNvbiBwb3NpY2lvbiBlc3BlY2lmaWNhZGEsXG4gICAqIGNvbiBhbmNobyBkZSBkaWFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbGVtIC0gRWxlbWVudG8gRG9tIGRvbmRlIGNyZWEgcGxvdFZlcnRpY2FsQ29udGFpbmVyXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIHBsb3RWZXJ0aWNhbENvbnRhaW5lclxuICAgKi9cbiAgcmVkcmF3UGxvdFZlcnRpY2FsQ29udGFpbmVyKGNvbmZpZywgJGVsZW0pIHtcbiAgICAkZWxlbS5pbm5lckhUTUwgPSBcIlwiO1xuICAgIGlmIChjb25maWcudGltZWxpbmUucGxvdHMgJiYgY29uZmlnLnRpbWVsaW5lLnBsb3RzLnZlcnRpY2FsKSB7XG4gICAgICBsZXQgeyBoZWlnaHQsIGRheVdpZHRoIH0gPSB1dGlscy5nZXRUYWJsZURpbWVuc2lvbnMoY29uZmlnKTtcblxuICAgICAgY29uZmlnLnRpbWVsaW5lLnBsb3RzLnZlcnRpY2FsLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgbGV0IGRpZmZEYXlzID0gTWF0aC5mbG9vcihcbiAgICAgICAgICBkYXRlVXRpbHMuZGlmZkRheXMoY29uZmlnLnRpbWVsaW5lLnN0YXJ0LCBwLmRhdGUpXG4gICAgICAgICk7XG4gICAgICAgIGxldCBsZWZ0ID0gZGlmZkRheXMgKiBkYXlXaWR0aDtcbiAgICAgICAgbGV0IHBsb3QgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lczogW1wicGxvdC12ZXJ0aWNhbFwiLCBwLmNsYXNzTmFtZSB8fCBcIlwiXSxcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgXCJtYXJnaW4tbGVmdFwiOiBsZWZ0ICsgXCJweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgKyBcInB4XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgICRlbGVtLmFwcGVuZENoaWxkKHBsb3QpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICByZWRyYXdQbG90SG9yaXpvbnRhbENvbnRhaW5lcihjb25maWcsICRlbGVtKSB7XG4gICAgJGVsZW0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLnBsb3RzICYmIGNvbmZpZy50aW1lbGluZS5wbG90cy5ob3Jpem9udGFsKSB7XG4gICAgICBsZXQgeyB3aWR0aCwgaXRlbUhlaWdodCB9ID0gdXRpbHMuZ2V0VGFibGVEaW1lbnNpb25zKGNvbmZpZyk7XG4gICAgICBjb25maWcudGltZWxpbmUucGxvdHMuaG9yaXpvbnRhbC5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBwLmlkTm9kZSwgcC50eXBlTm9kZSk7XG4gICAgICAgIGxldCB0b3BQb3NpdGlvbiA9IHV0aWxzLmdldFBvc2l0aW9uQnlJdGVtKGNvbmZpZywgaXRlbSwgXCJwYXJlbnRcIik7XG4gICAgICAgIGxldCBwbG90ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZXM6IFtcInBsb3QtaG9yaXpvbnRhbFwiLCBwLmNsYXNzTmFtZSB8fCBcIlwiXSxcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgXCJtYXJnaW4tdG9wXCI6IHRvcFBvc2l0aW9uICogaXRlbUhlaWdodCArIFwicHhcIixcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCArIFwicHhcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgJGVsZW0uYXBwZW5kQ2hpbGQocGxvdCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuICRlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIENvcm5lciBJenF1aWVyZG9cbiAgICogU2UgdXNhIHBhcmEgOlxuICAgKiAgICAtIHRpdHVsb3MgcmVsYWNpb25hZG9zIGNvbiBsb3MgZGF0b3MgZGVsIHNpZGViYXIgaXpxdWllcmRvXG4gICAqICAgIC0gdGl0dWxvcyBwYXJhIGlucHV0cyBkZSBoZWFkZXIsIGFic29sdXRlIGEgbGEgZGVyZWNoYVxuICAgKiAgICAtIGJvdG9uIHBhcmEgbW9zdHJhci9vY3VsdGFyIHNpZGViYXIgaXpxdWllcmRvXG4gICAqICAgIC0gcHJvbWVkaW9zXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIENvcm5lclxuICAgKi9cbiAgY3JlYXRlQ29ybmVyKGNvbmZpZywgdGFiID0gbnVsbCkge1xuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNvcm5lclwiIH0pO1xuICAgIHJldHVybiB0aGlzLnJlZHJhd0Nvcm5lcigkZWxlbSwgY29uZmlnLCB0YWIpO1xuICB9LFxuXG4gIHJlZHJhd0Nvcm5lcigkZWxlbSwgY29uZmlnLCB0YWIgPSBudWxsKSB7XG4gICAgbGV0IGxhYmVsc0luaXRpYWxDb3JuZXIgPSBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC52YXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAodikgPT5cbiAgICAgICAgICB2Lm9ubHlUYWIgPT0gdW5kZWZpbmVkIHx8ICh2Lm9ubHlUYWIgJiYgdGFiICYmIHYub25seVRhYiA9PSB0YWIua2V5KVxuICAgICAgKVxuICAgICAgLm1hcCgoZCkgPT4gYDxzcGFuIGNsYXNzPVwiaXRlbS1jb2xcIj4ke2QubGFiZWx9PC9zcGFuPmApXG4gICAgICAuam9pbihcIlwiKTtcblxuICAgIGxldCBsYWJlbHNFeHRlbmRDb3JuZXIgPSBjb25maWcudGltZWxpbmUubmF2LmxlZnQuZXh0ZW5kLnZhcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh2KSA9PlxuICAgICAgICAgIHYub25seVRhYiA9PSB1bmRlZmluZWQgfHwgKHYub25seVRhYiAmJiB0YWIgJiYgdi5vbmx5VGFiID09IHRhYi5rZXkpXG4gICAgICApXG4gICAgICAubWFwKChkKSA9PiBgPHNwYW4gY2xhc3M9XCJpdGVtLWNvbFwiPiR7ZC5sYWJlbH08L3NwYW4+YClcbiAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgbGV0IGxhYmVsc0hlYWRlckV4dGVuZCA9IGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmRhdGFcbiAgICAgIC5tYXAoKGQpID0+IHtcbiAgICAgICAgaWYgKGQuaXNIaWRkZW4pIHJldHVybiBcIlwiO1xuXG4gICAgICAgIGxldCBhdmcgPSBcIlwiO1xuICAgICAgICBsZXQgdG9vbHRpcCA9IFwiXCI7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICBsZXQgaXNBY2NlbnQgPSBkLmlzQWNjZW50O1xuXG4gICAgICAgIGlmIChkLmF2ZXJhZ2UpIHtcbiAgICAgICAgICBhdmcgPSBgIDxzcGFuIGNsYXNzPVwiYXZlcmFnZSBcIj4gKCA8c3Bhbj4gPHNwYW4gY2xhc3M9XCJzeW1ib2xcIj54zIQ8L3NwYW4+ICR7ZC5hdmVyYWdlfSA8L3NwYW4+KSAgPC9zcGFuPiAgIGA7XG5cbiAgICAgICAgICB0b29sdGlwID0gYGNhcC10b29sdGlwPVwiUHJvbWVkaW8gJHtkLmxhYmVsfSA6ICR7ZC5hdmVyYWdlfSAke1xuICAgICAgICAgICAgZC5zdWZmaXggfHwgXCJcIlxuICAgICAgICAgIH1cImA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZC5jb2xvcikge1xuICAgICAgICAgIGlmIChpc0FjY2VudCkge1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gZC5jb2xvciA/IFwiYy1cIiArIGQuY29sb3IgKyBcIi0tYmFja2dyb3VuZFwiIDogXCJcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gZC5jb2xvciA/IFwiYy1cIiArIGQuY29sb3IgKyBcIi0tdGV4dCBcIiA6IFwiXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiaW5wdXQtdGl0bGUtY29udGFpbmVyICR7XG4gICAgICAgICAgaXNBY2NlbnQgPyBcImlucHV0LXRpdGxlLS1hY2NlbnRcIiA6IFwiXCJcbiAgICAgICAgfSAke2QuaXNQZXJzaXN0ZW50ID8gXCJwZXJzaXN0ZW50XCIgOiBcIlwifVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICR7dG9vbHRpcH0gY2xhc3M9XCJpbnB1dC10aXRsZSAke2NsYXNzTmFtZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YXZnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgbGV0IHRvZ2dsZVNpZGViYXJCdG5TdHJpbmcgPSBgXG4gICAgICAgICAgPGJ1dHRvbiB0b2dnbGUtc2lkZWJhciBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkIGNhcC1idG4tdG9nZ2xlLXNpZGViYXIgXCI+XG4gICAgICAgICAgJHtpY29ucy5jaGV2cm9uUmlnaHR9XG4gICAgICAgICAgPC9idXR0b24+IGA7XG5cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmhpZGVUb2dnbGVTaWRlYmFyQnV0dG9uKSB7XG4gICAgICB0b2dnbGVTaWRlYmFyQnRuU3RyaW5nID0gXCJcIjtcbiAgICB9XG5cbiAgICBsZXQgdGVtcGxhdGUgPSBgPGRpdj5cblxuICAgICAgICAgICR7dG9nZ2xlU2lkZWJhckJ0blN0cmluZ31cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvcm5lci10aXRsZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm90dG9tLXRleHRcIj5cbiAgICAgICAgICAgICR7Y29uZmlnLnRpbWVsaW5lLmNvcm5lci5sZWZ0LmxhYmVsfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImluaXRpYWwtY29ybmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluaXRpYWwtY29ybmVyLXRpdGxlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvdHRvbS1jb250YWluZXIgaGlkZVwiPlxuICAgICAgICAgICAgICAke2NvbmZpZy50aW1lbGluZS5jb3JuZXIuaW5pdGlhbC5sYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvdHRvbS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgJHtsYWJlbHNJbml0aWFsQ29ybmVyfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXh0ZW5kLWNvcm5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleC1jb3JuZXItdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm90dG9tLWNvbnRhaW5lciBoaWRlXCI+XG4gICAgICAgICAgICAgICR7Y29uZmlnLnRpbWVsaW5lLmNvcm5lci5leHRlbmQubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3R0b20tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICR7bGFiZWxzRXh0ZW5kQ29ybmVyfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtY29ybmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRpdGxlc1wiPlxuICAgICAgICAgICAgICAke2xhYmVsc0hlYWRlckV4dGVuZH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhciBwcm9ncmVzcy1iYXItbGVmdCBoaWRlLXByb2dyZXNzXCI+PC9kaXY+XG5cbiAgICAgIDwvZGl2PmA7XG5cbiAgICBsZXQgciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwodGVtcGxhdGUpO1xuXG4gICAgJGVsZW0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICAkZWxlbS5hcHBlbmQocik7XG5cbiAgICBsZXQgdG9nZ2xlU2lkZWJhciA9ICRlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJbdG9nZ2xlLXNpZGViYXJdXCIpO1xuICAgIGlmICh0b2dnbGVTaWRlYmFyKSB7XG4gICAgICB0b2dnbGVTaWRlYmFyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICByLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwidG9nZ2xlU2lkZWJhclwiLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBDb3JuZXIgRGVyZWNob1xuICAgKiBTZSB1c2EgcGFyYSA6XG4gICAqICAgIC0gdGl0dWxvcyByZWxhY2lvbmFkb3MgY29uIGxvcyBkYXRvcyBkZWwgc2lkZWJhciBEZXJlY2hvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGNvcm5lclxuICAgKi9cbiAgY3JlYXRlQ29ybmVyUmlnaHQoY29uZmlnLCB0YWIgPSBudWxsKSB7XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWVzOiBbXCJjb3JuZXJcIiwgXCJyaWdodFwiXSB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdDb3JuZXJSaWdodCgkZWxlbSwgY29uZmlnLCB0YWIpO1xuICB9LFxuXG4gIHJlZHJhd0Nvcm5lclJpZ2h0KCRlbCwgY29uZmlnLCB0YWIgPSBudWxsKSB7XG4gICAgbGV0IGxhYmVsID0gXCJcIjtcblxuICAgIGlmIChjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmxhYmVsKSB7XG4gICAgICBgIDxzcGFuPlxuICAgICAgICAgICAgJHtjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmxhYmVsfVxuICAgICAgICAgIDwvc3Bhbj5gO1xuICAgIH1cblxuICAgIGxldCBzdHIgPSBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb3JuZXItdGl0bGVcIj5cbiAgICAgICAgJHtsYWJlbH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgcHJvZ3Jlc3MtYmFyLXJpZ2h0IGhpZGUtcHJvZ3Jlc3NcIj48L2Rpdj5cbiAgICBgO1xuICAgICRlbC5pbm5lckhUTUwgPSBzdHIudHJpbSgpO1xuICAgIGxldCAkYnRuQ29udGFpbmVyID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuYnRuLWNvbnRhaW5lclwiKTtcblxuICAgIGlmIChjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmJ1dHRvbnMpIHtcbiAgICAgIGNvbmZpZy50aW1lbGluZS5jb3JuZXIucmlnaHQuYnV0dG9ucy5mb3JFYWNoKChidG4pID0+IHtcbiAgICAgICAgbGV0IGlzRW5hYmxlZCA9IGJ0bi5nZXRJc0VuYWJsZWQgPyBidG4uZ2V0SXNFbmFibGVkKCkgOiB0cnVlO1xuICAgICAgICBpZiAoaXNFbmFibGVkKSB7XG4gICAgICAgICAgbGV0ICRidG4gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3JuZXItYnRuIGNhcC1idG4tcmFpc2VkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7YnRuLmxhYmVsIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gYCk7XG5cbiAgICAgICAgICBpZiAoYnRuLm9uQ2xpY2spIHtcbiAgICAgICAgICAgICRidG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGJ0bi5vbkNsaWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkYnRuQ29udGFpbmVyLmFwcGVuZENoaWxkKCRidG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5jb3JuZXIucmlnaHQuaW5wdXRzKSB7XG4gICAgICBjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICBsZXQgJGlucHV0ID0gdGhpcy5jcmVhdGVDb3JuZXJSaWdodElucHV0KHsgaW5wdXRDb25maWc6IGlucHV0IH0pO1xuICAgICAgICAkYnRuQ29udGFpbmVyLmFwcGVuZENoaWxkKCRidG4pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAkZWw7XG4gIH0sXG5cbiAgY3JlYXRlQ29ybmVyUmlnaHRJbnB1dCh7IGlucHV0Q29uZmlnLCBkYXRhRGF5ID0gbnVsbCwgZGF5U2VsZWN0ZWQgPSBudWxsIH0pIHtcbiAgICBsZXQgciA9IG51bGw7XG4gICAgc3dpdGNoIChpbnB1dENvbmZpZy50eXBlKSB7XG4gICAgICBjYXNlIFwiYXV0b2NvbXBsZXRlLWNydWRcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlQ29ybmVyUmlnaHRJbnB1dEF1dG9jb21wbGV0ZUNydWQoe1xuICAgICAgICAgIGlucHV0Q29uZmlnLFxuICAgICAgICAgIGRhdGFEYXksXG4gICAgICAgICAgZGF5U2VsZWN0ZWQsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH0sXG5cbiAgY3JlYXRlQ29ybmVyUmlnaHRJbnB1dEF1dG9jb21wbGV0ZUNydWQoe1xuICAgIGlucHV0Q29uZmlnLFxuICAgIGRhdGFEYXksXG4gICAgZGF5U2VsZWN0ZWQsXG4gIH0pIHtcbiAgICBsZXQgZWxlbSA9IFwidGVzdFwiO1xuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIEhlYWRlciBUb3BcbiAgICogU2UgdXNhIHBhcmEgOlxuICAgKiAgICAtIE1hbmVqbyBkZSB0YWJzXG4gICAqICAgIC0gQm90b25lcyBkZSBuYXZlZ2FjacOzbiB5IHNlbGVjY2nDs24gZGUgZmVjaGFcbiAgICogICAgLSBCb3RvbiB0b2dnbGUgRGFyayBtb2RlXG4gICAqICAgIC0gQm90b24gdG9nZ2xlIEhlYWRlciBleHRlbmRlZFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbVxuICAgKi9cblxuICBjcmVhdGVIZWFkZXJUb3AoY29uZmlnLCB0YWJTZWxlY3RlZCA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdIZWFkZXJUb3AoY29uZmlnLCB0YWJTZWxlY3RlZCwgZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICB9LFxuXG4gIHJlZHJhd0hlYWRlclRvcChjb25maWcsIHRhYlNlbGVjdGVkID0gbnVsbCwgJGVsZW0pIHtcbiAgICBsZXQgc3RyID0gYFxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10b3BcIj5gO1xuXG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS50YWJzKSB7XG4gICAgICBsZXQgc2hvd1RhYnMgPSB0cnVlO1xuXG4gICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLnRhYnMuZmlsdGVyKCh0KSA9PiAhdC5pc0hpZGRlbikubGVuZ3RoID09IDApIHtcbiAgICAgICAgc2hvd1RhYnMgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3dUYWJzKSB7XG4gICAgICAgIHN0ciArPSBgIDxkaXYgY2xhc3M9XCJ0YWItc2VsZWN0LWNvbnRhaW5lciBjLWQtZGVza3RvcC1ub25lIGMtZC1tb2JpbGUtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInRhYnMtc2VsZWN0XCIgPmA7XG5cbiAgICAgICAgY29uZmlnLnRpbWVsaW5lLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgaWYgKCF0YWIuaXNIaWRkZW4pIHtcbiAgICAgICAgICAgIHN0ciArPSBgIDxvcHRpb24gJHtcbiAgICAgICAgICAgICAgdGFiID09IHRhYlNlbGVjdGVkID8gJ3NlbGVjdGVkPVwic2VsZWN0ZWRcIicgOiBcIlwiXG4gICAgICAgICAgICB9IHZhbHVlPVwiJHt0YWIuaWR9XCI+ICR7dGFiLmxhYmVsfSA8L29wdGlvbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyICs9IGA8L3NlbGVjdD4gPC9kaXY+YDtcblxuICAgICAgICBzdHIgKz0gYCA8ZGl2IGNsYXNzPVwidGFicy1jb250YWluZXIgYy1kLWRlc2t0b3AtZmxleCBjLWQtbW9iaWxlLW5vbmVcIj5gO1xuXG4gICAgICAgIGNvbmZpZy50aW1lbGluZS50YWJzLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgICAgIGlmICghdGFiLmlzSGlkZGVuKSB7XG4gICAgICAgICAgICBzdHIgKz0gYCA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYiAke3RhYi5kaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9ICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YWIgPT0gdGFiU2VsZWN0ZWQgPyBcImFjdGl2ZVwiIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSAgJHt0YWIuY29sb3J9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiJHt0YWIuY29sb3J9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7dGFiLmlkfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YWIudG9vbHRpcCA/ICdjYXAtdG9vbHRpcD1cIicgKyB0YWIudG9vbHRpcCArICdcIicgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+JHt0YWIubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAke3RhYi5pY29uIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzdHIgKz0gYDwvZGl2PmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRhYlNlbGVjdGVkKSB7XG4gICAgICBpZiAodGFiU2VsZWN0ZWQubGVnZW5kcykge1xuICAgICAgICBzdHIgKz0gYCBcbiAgICAgICAgPGJ1dHRvbiB0b2dnbGUtbGVnZW5kcyBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkIFwiPlxuICAgICAgICAgICR7aWNvbnMudG9nZ2xlTGVnZW5kc31cbiAgICAgICAgPC9idXR0b24+IFxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmRzLWNvbnRhaW5lciBmb3JjZS1tb2JpbGUtc3R5bGUgaGlkZVwiPiBgO1xuXG4gICAgICAgIHRhYlNlbGVjdGVkLmxlZ2VuZHMuZm9yRWFjaCgobGVnZW5kKSA9PiB7XG4gICAgICAgICAgbGV0IGNvbG9yQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgIGxldCBjb2xvckJnID0gXCJcIjtcblxuICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGxlZ2VuZC5jb2xvcikpIHtcbiAgICAgICAgICAgIGNvbG9yQmcgPSBcImJhY2tncm91bmQ6XCIgKyBsZWdlbmQuY29sb3I7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbG9yQ2xhc3MgPSBsZWdlbmQuY29sb3IgPyBsZWdlbmQuY29sb3IgKyBcIi0tYmFja2dyb3VuZFwiIDogXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHIgKz0gYCA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsZWdlbmQgJHtsZWdlbmQuYWN0aXZlID8gXCJhY3RpdmVcIiA6IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke2xlZ2VuZC5rZXl9XCJcbiAgICAgICAgICAgICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnRvb2x0aXAgPyBgY2FwLXRvb2x0aXA9XCIke2xlZ2VuZC50b29sdGlwfVwiYCA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICB9ID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWxlZ2VuZCAke2NvbG9yQ2xhc3N9ICR7XG4gICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5zaGFwZVxuICAgICAgICAgICAgICAgICAgfVwiIHN0eWxlPVwiJHtjb2xvckJnfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4+JHtsZWdlbmQubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0ciArPSBgPC9kaXY+YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdHIgKz0gYFxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxuXG5cblxuICAgICAgICAgIDxidXR0b24gY2FwLWJ0bi1wcmV2IGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWRcIj5cbiAgICAgICAgICAgICAke2ljb25zLmFycm93TGVmdH1cbiAgICAgICAgICAgICAke2ljb25zLmxvYWRpbmdJY29ufSBcbiAgICAgICAgICA8L2J1dHRvbj5cblxuXG4gICAgICAgICAgPGJ1dHRvbiBjYXAtYnRuLWNhbGVuZGFyIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWRcIj5cbiAgICAgICAgICAgICR7aWNvbnMuY2FsZW5kYXJ9XG4gICAgICAgICAgICAke2ljb25zLmxvYWRpbmdJY29ufVxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvbiBjYXAtYnRuLW5leHQgY2xhc3M9XCJjYXAtYnRuLWljb24gY2FwLWJ0bi1pY29uLXJhaXNlZFwiPlxuICAgICAgICAgICAgJHtpY29ucy5hcnJvd1JpZ2h0fVxuICAgICAgICAgICAgJHtpY29ucy5sb2FkaW5nSWNvbn1cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cblxuICAgICAgICAgIDxidXR0b24gdG9nZ2xlLWRhcmsgY2xhc3M9XCJjYXAtYnRuLWljb24gY2FwLWJ0bi1oZWFkZXIgYy1kLW1vYmlsZS1ub25lICR7XG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUud2l0aERhcmtUb2dnbGUgPT0gZmFsc2UgPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAke2ljb25zLmRhcmt9XG4gICAgICAgICAgICAke2ljb25zLmxpZ2h0fVxuICAgICAgICAgIDwvYnV0dG9uPmA7XG5cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmhlYWRlci5leHRlbmQuZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICAgIHN0ciArPSBgPGJ1dHRvbiB0b2dnbGUtaGVhZGVyIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWRcIj5cbiAgICAgICAgICAke2ljb25zLmNoZXZyb25Eb3dufVxuICAgICAgICAgIDwvYnV0dG9uPmA7XG4gICAgfVxuXG4gICAgc3RyICs9IGAgPGRpdiBjbGFzcz1cImJ1dHRvbi1yaWdodC1jb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbiAgICAvKlxuICAgICAgICAgIGBcbiAgICAgICAgICA8YnV0dG9uIHRvZ2dsZS1zaWRlYmFyLXJpZ2h0IGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWRcIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6MjRweDtoZWlnaHQ6MjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTE1LjQxLDE2LjU4TDEwLjgzLDEyTDE1LjQxLDcuNDFMMTQsNkw4LDEyTDE0LDE4TDE1LjQxLDE2LjU4WlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICAgICovXG5cbiAgICBsZXQgJHIgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gICAgJGVsZW0ucmVwbGFjZVdpdGgoJHIpO1xuXG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5oZWFkZXIucmlnaHRCdXR0b25zKSB7XG4gICAgICBsZXQgJGJ1dHRvbkNvbnRhaW5lciA9ICRyLnF1ZXJ5U2VsZWN0b3IoXCIuYnV0dG9uLXJpZ2h0LWNvbnRhaW5lclwiKTtcbiAgICAgIGNvbmZpZy50aW1lbGluZS5oZWFkZXIucmlnaHRCdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICBsZXQgaGFzQmFkZ2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKGJ1dHRvbi5oYXNCYWRnZSkge1xuICAgICAgICAgIGhhc0JhZGdlID0gYnV0dG9uLmhhc0JhZGdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0ciA9IGA8YnV0dG9uIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWQgJHtcbiAgICAgICAgICBoYXNCYWRnZSA/IFwiY2FwLWJ0bi1oYXMtYmFkZ2VcIiA6IFwiXCJcbiAgICAgICAgfVwiPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIDxzdmcgc3R5bGU9XCJ3aWR0aDoyNHB4O2hlaWdodDoyNHB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCIke2J1dHRvbi5pY29ufVwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPmA7XG4gICAgICAgIGxldCAkYnV0dG9uID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuICAgICAgICAkYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZ0KSA9PiBidXR0b24ub25DbGljayh7IGV2dCB9KSk7XG4gICAgICAgICRidXR0b25Db250YWluZXIuYXBwZW5kKCRidXR0b24pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0ICR0b2dnbGVEYXJrID0gJHIucXVlcnlTZWxlY3RvcihcIlt0b2dnbGUtZGFya11cIik7XG4gICAgaWYgKCR0b2dnbGVEYXJrKSB7XG4gICAgICAkdG9nZ2xlRGFyay5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJ0b2dnbGVEYXJrXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0ICRidG5DYWxlbmRhciA9ICRyLnF1ZXJ5U2VsZWN0b3IoXCJbY2FwLWJ0bi1jYWxlbmRhcl1cIik7XG4gICAgaWYgKCRidG5DYWxlbmRhcikge1xuICAgICAgJGJ0bkNhbGVuZGFyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgeCA9IGUueDtcbiAgICAgICAgbGV0IHkgPSBlLnk7XG4gICAgICAgICRyLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2xpY2tDYWxlbmRhckljb25cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7IHgsIHkgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0ICRidG5Ub2dnbGVIZWFkZXIgPSAkci5xdWVyeVNlbGVjdG9yKFwiW3RvZ2dsZS1oZWFkZXJdXCIpO1xuICAgIGlmICgkYnRuVG9nZ2xlSGVhZGVyKSB7XG4gICAgICAkYnRuVG9nZ2xlSGVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInRvZ2dsZUhlYWRlclwiLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qXG4gICAgJHIucXVlcnlTZWxlY3RvcihcIlt0b2dnbGUtc2lkZWJhci1yaWdodF1cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGUgPT4ge1xuICAgICAgJHIuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJ0b2dnbGVTaWRlYmFyUmlnaHRcIiwge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgICAqL1xuXG4gICAgJHIucXVlcnlTZWxlY3RvcihcIltjYXAtYnRuLXByZXZdXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiaGVhZGVyUHJldlwiLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgJHIucXVlcnlTZWxlY3RvcihcIltjYXAtYnRuLWNhbGVuZGFyXVwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICRyLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudChcImhlYWRlckNhbGVuZGFyXCIsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgb3JpZ2luYWxFdnQ6IGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAkci5xdWVyeVNlbGVjdG9yKFwiW2NhcC1idG4tbmV4dF1cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJoZWFkZXJOZXh0XCIsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgb3JpZ2luYWxFdnQ6IGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBsZXQgJHRvZ2dsZUxlZ2VuZHNCdG4gPSAkci5xdWVyeVNlbGVjdG9yKFwiW3RvZ2dsZS1sZWdlbmRzXVwiKTtcbiAgICBpZiAoJHRvZ2dsZUxlZ2VuZHNCdG4pIHtcbiAgICAgICR0b2dnbGVMZWdlbmRzQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgJGxlZ2VuZENvbnRhaW5lciA9ICRyLnF1ZXJ5U2VsZWN0b3IoXCIubGVnZW5kcy1jb250YWluZXJcIik7XG4gICAgICAgIGlmICgkbGVnZW5kQ29udGFpbmVyKSB7XG4gICAgICAgICAgJGxlZ2VuZENvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKFwiaGlkZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgJHIucXVlcnlTZWxlY3RvckFsbChcIi5sZWdlbmRcIikuZm9yRWFjaCgoJGxlZ2VuZCkgPT4ge1xuICAgICAgJGxlZ2VuZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IGtleSA9IGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIik7XG5cbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIGxldCBsZWdlbmRTZWxlY3RlZCA9IHRhYlNlbGVjdGVkLmxlZ2VuZHMuZmluZChcbiAgICAgICAgICAgICh0YWIpID0+IHRhYi5rZXkgPT09IGtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGxlZ2VuZFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJzZWxlY3RMZWdlbmRIZWFkZXJcIiwge1xuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICBsZWdlbmQ6IGxlZ2VuZFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgJGxlZ2VuZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgJHIucXVlcnlTZWxlY3RvckFsbChcIi50YWI6bm90KC5kaXNhYmxlZClcIikuZm9yRWFjaCgoJHRhYikgPT4ge1xuICAgICAgJHRhYi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IGtleSA9IGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIik7XG5cbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIGxldCB0YWJTZWxlY3RlZCA9IGNvbmZpZy50aW1lbGluZS50YWJzLmZpbmQoKHRhYikgPT4gdGFiLmlkID09IGtleSk7XG4gICAgICAgICAgaWYgKHRhYlNlbGVjdGVkKSB7XG4gICAgICAgICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJzZWxlY3RUYWJIZWFkZXJcIiwge1xuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICB0YWI6IHRhYlNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkci5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYnMtc2VsZWN0Om5vdCguZGlzYWJsZWQpXCIpLmZvckVhY2goKCR0YWIpID0+IHtcbiAgICAgICR0YWIuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgICBsZXQga2V5ID0gcGFyc2VGbG9hdChlLmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuXG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBsZXQgdGFiU2VsZWN0ZWQgPSBjb25maWcudGltZWxpbmUudGFicy5maW5kKCh0YWIpID0+IHRhYi5pZCA9PSBrZXkpO1xuICAgICAgICAgIGlmICh0YWJTZWxlY3RlZCkge1xuICAgICAgICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwic2VsZWN0VGFiSGVhZGVyXCIsIHtcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgdGFiOiB0YWJTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICRyO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIEhlYWRlclxuICAgKiBTZSB1c2EgcGFyYSA6XG4gICAqICAgIC0gTW9zdHJhciBmZWNoYXMgZW4gaGVhZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tXG4gICAqL1xuICBjcmVhdGVIZWFkZXIoY29uZmlnKSB7XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJoZWFkZXJcIik7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3SGVhZGVyKGNvbmZpZywgJGVsZW0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgSGVhZGVyLCB1c2FkbyBwYXJhIHJlZGlidWphclxuICAgKiB1dGlsaXphICRlbGVtIGNvbW8gZWxlbWVudG8gZG9tIGRvbmRlIHJlY3JlYXJsb1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsZW0gLSBFbGVtZW50byBEb20gZG9uZGUgY3JlYSBIZWFkZXJcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb21cbiAgICovXG4gIHJlZHJhd0hlYWRlcihjb25maWcsICRlbGVtKSB7XG4gICAgbGV0IGRhdGVzVHJlZSA9IGRhdGVVdGlscy5nZXREYXRlVHJlZVJhbmdlKFxuICAgICAgbmV3IERhdGUoY29uZmlnLnRpbWVsaW5lLnN0YXJ0KSxcbiAgICAgIG5ldyBEYXRlKGNvbmZpZy50aW1lbGluZS5lbmQpXG4gICAgKTtcblxuICAgIGxldCBzdHIgPSBgPGRpdiBjbGFzcz1cImhlYWRlci1jb250YWluZXJcIj4gYDtcblxuICAgIE9iamVjdC5rZXlzKGRhdGVzVHJlZSkuZm9yRWFjaCgoa2V5WSkgPT4ge1xuICAgICAgbGV0IHllYXIgPSBkYXRlc1RyZWVba2V5WV07XG4gICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJhZ25vLWNhbGVuZGFyaW9cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZ25vIGhpZGVcIj4ke2tleVl9PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzZXNcIj5gO1xuXG4gICAgICBPYmplY3Qua2V5cyh5ZWFyKS5mb3JFYWNoKChrZXlNKSA9PiB7XG4gICAgICAgIGxldCBtb250aCA9IGRhdGVzVHJlZVtrZXlZXVtrZXlNXTtcbiAgICAgICAgc3RyICs9IGAgPGRpdiBjbGFzcz1cIm1lcy1jYWxlbmRhcmlvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXMgJHtcbiAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtb250aCkubGVuZ3RoIDwgNFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcIm1lcy1yZWR1Y2VkIG1lcy1yZWR1Y2VkLVwiICsgT2JqZWN0LmtleXMobW9udGgpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3V0aWxzLmdldE1vbnRoQnlQb3NpdGlvbihrZXlNKX0gJHtrZXlZfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpYXNcIj5gO1xuICAgICAgICBPYmplY3Qua2V5cyhtb250aCkuZm9yRWFjaCgoa2V5RCkgPT4ge1xuICAgICAgICAgIGxldCBkYXkgPSBkYXRlc1RyZWVba2V5WV1ba2V5TV1ba2V5RF07XG4gICAgICAgICAgbGV0IGlzV2Vla2VuZCA9IGRheS5pc1dlZWtlbmQ7XG4gICAgICAgICAgbGV0IGlzVG9kYXkgPSBkYXkuaXNUb2RheTtcbiAgICAgICAgICBsZXQgaGFzQWxlcnQgPSBjb25maWcudGltZWxpbmUuaGVhZGVyLmRhdGVIYXNBbGVydFxuICAgICAgICAgICAgPyBjb25maWcudGltZWxpbmUuaGVhZGVyLmRhdGVIYXNBbGVydChkYXkpXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIGxldCBkYXRlID0gZGF0ZVV0aWxzLmZvcm1hdERhdGUoZGF5LmRhdGUpO1xuICAgICAgICAgIHN0ciArPSBgPGRpdiBjbGFzcz1cImRpYS1jYWxlbmRhcmlvIFxuICAgICAgICAgICAgJHtpc1RvZGF5ID8gXCJ0b2RheVwiIDogXCJcIn1cbiAgICAgICAgICAgICR7aXNXZWVrZW5kID8gXCJ3ZWVrZW5kXCIgOiBcIlwifVxuICAgICAgICAgICAgJHtoYXNBbGVydCA/IFwiaGFzLWFsZXJ0XCIgOiBcIlwifVxuICAgICAgICAgICAgJHtjb25maWcudGltZWxpbmUuZGF0ZVNlbGVjdGFibGUgPyBcImlzLWNsaWNrZWFibGVcIiA6IFwiXCJ9XG4gICAgICAgICAgICAke2NvbmZpZy50aW1lbGluZS5kYXRlV2l0aENvbnRleHRNZW51ID8gXCJpcy1jbGlja2VhYmxlXCIgOiBcIlwifVxuICAgICAgICAgICAgXCIgZGF0ZT1cIiR7ZGF0ZX1cIj4ke2tleUR9PC9kaXY+YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0ciArPSBgPC9kaXY+PC9kaXY+YDtcbiAgICAgIH0pO1xuICAgICAgc3RyICs9IGA8L2Rpdj4gPC9kaXY+YDtcbiAgICB9KTtcblxuICAgIHN0ciArPSBgPC9kaXY+YDtcbiAgICAkZWxlbS5pbm5lckhUTUwgPSBcIlwiO1xuICAgICRlbGVtLmFwcGVuZChkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cikpO1xuXG4gICAgbGV0ICRkYXlzID0gJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcIi5kaWEtY2FsZW5kYXJpb1tkYXRlXVwiKTtcbiAgICAkZGF5cy5mb3JFYWNoKCgkZGlhKSA9PiB7XG4gICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmRhdGVXaXRoQ29udGV4dE1lbnUpIHtcbiAgICAgICAgJGRpYS5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgKGV2dCkgPT4ge1xuICAgICAgICAgICRlbGVtLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjb250ZXh0TWVudURhdGVcIiwge1xuICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgJGVsZW06ICRkaWEsXG4gICAgICAgICAgICAgICAgZGF0ZTogJGRpYS5nZXRBdHRyaWJ1dGUoXCJkYXRlXCIpLFxuICAgICAgICAgICAgICAgIGNsaWVudFg6IGV2dC5jbGllbnRYLFxuICAgICAgICAgICAgICAgIGNsaWVudFk6IGV2dC5jbGllbnRZLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcudGltZWxpbmUuZGF0ZVNlbGVjdGFibGUpIHtcbiAgICAgICAgJGRpYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2dCkgPT4ge1xuICAgICAgICAgICRlbGVtLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjbGlja0RhdGVcIiwge1xuICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgJGVsZW06ICRkaWEsXG4gICAgICAgICAgICAgICAgZGF0ZTogJGRpYS5nZXRBdHRyaWJ1dGUoXCJkYXRlXCIpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcudGltZWxpbmUub25Nb3VzZU92ZXJEYXRlKSB7XG4gICAgICAgICRkaWEuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm9uTW91c2VPdmVyRGF0ZSh7XG4gICAgICAgICAgICAkZGlhLFxuICAgICAgICAgICAgJGVsZW0sXG4gICAgICAgICAgICBkYXRlOiAkZGlhLmdldEF0dHJpYnV0ZShcImRhdGVcIiksXG4gICAgICAgICAgICBldnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy50aW1lbGluZS5vbk1vdXNlT3V0RGF0ZSkge1xuICAgICAgICAkZGlhLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm9uTW91c2VPdXREYXRlKHtcbiAgICAgICAgICAgICRkaWEsXG4gICAgICAgICAgICAkZWxlbSxcbiAgICAgICAgICAgIGRhdGU6ICRkaWEuZ2V0QXR0cmlidXRlKFwiZGF0ZVwiKSxcbiAgICAgICAgICAgIGV2dCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSGVhZGVyIGV4dGVuZGVkXG4gICAqIFNlIHVzYSBwYXJhIDpcbiAgICogICAgLU1vc3RyYXIgaW5wdXRzIHkgZGF0b3MgcGFyYSBmZWNoYXMgZW4gaGVhZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGhlYWRlckV4dGVuZGVkXG4gICAqL1xuICBjcmVhdGVIZWFkZXJFeHRlbmRlZChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmhlYWRlci5leHRlbmQuZW5hYmxlZCA9PSBmYWxzZSkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgZGF0ZXMgPSBkYXRlVXRpbHMuZ2V0RGF0ZVJhbmdlKFxuICAgICAgbmV3IERhdGUoY29uZmlnLnRpbWVsaW5lLnN0YXJ0KSxcbiAgICAgIG5ldyBEYXRlKGNvbmZpZy50aW1lbGluZS5lbmQpXG4gICAgKTtcbiAgICBsZXQgc3RyID0gYDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyLWV4dGVuZGVkXCI+YDtcblxuICAgIGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmRhdGEuZm9yRWFjaCgoZCwgZF9pbmRleCkgPT4ge1xuICAgICAgaWYgKGQuaXNIaWRkZW4pIHJldHVybiBcIlwiO1xuXG4gICAgICBsZXQgaXNQZXJzaXN0ZW50ID0gZC5pc1BlcnNpc3RlbnQ7XG4gICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJpbnB1dC1saXN0ICR7aXNQZXJzaXN0ZW50ID8gXCJwZXJzaXN0ZW50XCIgOiBcIlwifVwiPmA7XG4gICAgICBzdHIgKz0gZGF0ZXNcbiAgICAgICAgLm1hcCgoZGF0ZSkgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICAgICAgbGV0IGlzRnV0dXJlID0gZGF0ZVV0aWxzLmlzRnV0dXJlKGRhdGUpO1xuICAgICAgICAgIGxldCBpc1RvZGF5ID0gZGF0ZVV0aWxzLmlzVG9kYXkoZGF0ZSk7XG5cbiAgICAgICAgICBpZiAoZC5kYXRhKSB7XG4gICAgICAgICAgICBsZXQgZGF0YUZvdW5kZWQgPSBkLmRhdGEuZmluZCgoZGF0YUlucHV0KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkYXRlVXRpbHMuaXNTYW1lRGF0ZShuZXcgRGF0ZShkYXRhSW5wdXQuZGF0ZSksIGRhdGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGF0YUZvdW5kZWQpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhRm91bmRlZC52YWx1ZSB8fCBcIlwiO1xuICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gZGF0YUZvdW5kZWQuY2xhc3NOYW1lICsgXCIgXCIgfHwgXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkLmVkaXRhYmxlID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKGlzRnV0dXJlICYmIGQuZWRpdGFibGVGdXR1cmUgPT0gZmFsc2UpIHx8XG4gICAgICAgICAgICAoaXNUb2RheSAmJiBkLmVkaXRhYmxlVG9kYXkgPT0gZmFsc2UpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0ZT1cIiR7ZGF0ZX1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD1cIiR7ZF9pbmRleH1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiAke2NsYXNzTmFtZX0gJHtkYXRlLnZhck5hbWUgfHwgXCJcIn0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuY29sb3IgPyBcImMtXCIgKyBkLmNvbG9yICsgXCItLXRleHRcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmVkaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZGlhLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgICBkYXRlPVwiJHtkYXRlfVwiIFxuICAgICAgICAgICAgICAgICAgaW5kZXg9XCIke2RfaW5kZXh9XCIgXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci1pbnB1dCBcbiAgICAgICAgICAgICAgICAgICR7ZGF0ZS52YXJOYW1lfSAke2QuY29sb3IgPyBcImMtXCIgKyBkLmNvbG9yICsgXCItLXRleHRcIiA6IFwiXCJ9XCIgXG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9IFxuICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiXCIpO1xuICAgICAgc3RyICs9IGA8L2Rpdj5gO1xuICAgIH0pO1xuXG4gICAgc3RyICs9IGA8L2Rpdj5gO1xuXG4gICAgbGV0IHIgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG5cbiAgICByLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dC5oZWFkZXItaW5wdXRcIikuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgZGF0ZSA9IGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoXCJkYXRlXCIpO1xuICAgICAgICBsZXQgaW5kZXggPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIik7XG4gICAgICAgIGxldCB2YWx1ZSA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgICAgbGV0IHR5cGVEYXRhID0gY29uZmlnLnRpbWVsaW5lLmhlYWRlci5leHRlbmQuZGF0YVtpbmRleF07XG5cbiAgICAgICAgLy9yZWZyZXNoIGNvbmZpZyB2YWx1ZVxuICAgICAgICBsZXQgZGF0YSA9IHR5cGVEYXRhLmRhdGEuZmluZCgoZCkgPT5cbiAgICAgICAgICBkYXRlVXRpbHMuaXNTYW1lRGF0ZShuZXcgRGF0ZShkLmRhdGUpLCBuZXcgRGF0ZShkYXRlKSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHlwZURhdGEuZGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2hhbmdlSW5wdXRIZWFkZXJcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgICAgIHR5cGVEYXRhOiB0eXBlRGF0YSxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcjtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXIgU2lkZWJhciBJenF1aWVyZG9cbiAgICogICAgLSBNYW5lamEgaXRlbXMgY29tbyBhcmJvbCBkZSAyIG5pdmVsZXMgKHBhcmVudCwgY2hpbGRyZW4pXG4gICAqICAgIC0gRWwgc2lkZWJhciBzZSBkaXZpZGUgZW4gbmF2TGlzdCAtIEluaXRpYWxOYXYgLSBleHRlbmRlZE5hdiAtIEJ0bk5hdlxuICAgKiAgICAtIFNlIGFncmVnYSBpdGVtRGV0YWlsLCBwYXJhIGRldGFsbGVzIGRlIGl0ZW1zXG4gICAqXG4gICAqXG4gICAqIFRPRE86IHBhcmEgZXZpdGFyIGluY3J1c3RhciBsYXMgaWRzIGVuIGxvcyBpbnB1dHMsIHNlIGRlYmVuIGNyZWFyXG4gICAqIGxvcyBub2RvcyB1bm8gcG9yIHVubyBjb21vIGVsZW1lbnRvIERPTSwgeSBhZ3JlZ2FybGVzIGxvcyBldmVudG9zIGRpcmVjdGFtZW50ZVxuICAgKiBhaG9yYSBzZSBoYWNlIHNlbGVjY2lvbmFuZG8gdG9kb3MgbG9zIGlucHV0cyBjb24gcXVlcnlTZWxlY3RvckFsbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBTaWRlYmFyIEl6cXVpZXJkb1xuICAgKi9cbiAgY3JlYXRlTmF2TGVmdChjb25maWcsIHRhYiA9IG51bGwpIHtcbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcIm5hdlwiLCB7IGNsYXNzTmFtZTogXCJsZWZ0XCIgfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3TmF2TGVmdCgkZWxlbSwgY29uZmlnLCB0YWIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgU2lkZWJhciBpenF1aWVyZG8sIHVzYWRvIHBhcmEgcmVkaWJ1amFyXG4gICAqIFV0aWxpemEgJGVsZW0gY29tbyBlbGVtZW50byBkb20gZG9uZGUgcmVjcmVhcmxvXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIERvbSBkb25kZSBjcmVhIGVsIHNpZGViYXIgaXpxdWllcmRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIG5hdkxlZnRcbiAgICovXG5cbiAgcmVkcmF3TmF2TGVmdCgkZWxlbSwgY29uZmlnLCB0YWIgPSBudWxsKSB7XG4gICAgbGV0IG5hdkxpc3QgPSBcIlwiO1xuICAgIGxldCBpbml0aWFsTmF2TGlzdCA9IFwiXCI7XG4gICAgbGV0IGV4TmF2TGlzdCA9IFwiXCI7XG4gICAgbGV0IGJ0bk5hdkxpc3QgPSBcIlwiO1xuICAgIGxldCBpc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5lZGl0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIGlzRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbmZpZy5kYXRhLmZvckVhY2goKGQpID0+IHtcbiAgICAgIGlmIChkLmlzSGlkZGVuKSByZXR1cm47XG5cbiAgICAgIG5hdkxpc3QgKz0gYFxuICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtaXRlbVwiPlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtLWNvbnRhaW5lciBwYXJlbnRcIj5gO1xuXG4gICAgICBpZiAoZC5jaGlsZHJlbikge1xuICAgICAgICBuYXZMaXN0ICs9IGA8YnV0dG9uIGNsYXNzPVwidHJlZS1pY29uICR7XG4gICAgICAgICAgZC5pc0Nsb3NlZCA/IFwiXCIgOiBcImNhcC1yb3RhdGVcIlxuICAgICAgICB9XCIgaXRlbS1pZD1cIiR7ZC5pZCB8fCAtMX1cIiB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiID5cbiAgICAgICAgJHtpY29ucy5jaGV2cm9uRG93bn1cbiAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+YDtcbiAgICAgIH1cblxuICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tdGl0bGUgdHJ1bmNhdGUgZnVsbC13aWR0aCAke1xuICAgICAgICAgICAgZC5jbGlja2VhYmxlID8gXCJjbGlja2VhYmxlXCIgOiBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICR7ZC5uYXZPdmVyID8gXCJob3ZlcmFibGVcIiA6IFwiXCJ9IFwiIGl0ZW0taWQ9XCIke1xuICAgICAgICAgICAgICAgICAgICAgICAgZC5pZCB8fCAtMVxuICAgICAgICAgICAgICAgICAgICAgIH1cIiB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiID5cbiAgICAgICAgICAgICR7ZC5sYWJlbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlsZHJlbi1pdGVtcyAke1xuICAgICAgICAgICAgICAgIGQuaXNDbG9zZWQgPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICAgICAgfSBcIiBjaGlsZC1saXN0PVwiJHtkLmlkIHx8IC0xfVwiPmA7XG5cbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcblxuICAgICAgICAgIGxldCBsaWdodENvbG9yID0gbnVsbDtcbiAgICAgICAgICBsZXQgbGlnaHRDbGFzcyA9IG51bGw7XG4gICAgICAgICAgbGV0IGxpZ2h0U3BhbiA9IFwiXCI7XG4gICAgICAgICAgbGV0IG11bHRpQnV0dG9uc0RldGFpbFRtcGwgPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKGMubGlnaHQpIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGMubGlnaHQpKSB7XG4gICAgICAgICAgICAgIGxpZ2h0Q29sb3IgPSBjLmxpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGlnaHRDbGFzcyA9IGMubGlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGMubGlnaHQpIHtcbiAgICAgICAgICAgIGxpZ2h0U3BhbiA9IGA8c3BhbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWdodCAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0Q2xhc3MgPyBsaWdodENsYXNzICsgXCItbGlnaHRcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRDb2xvciA/IFwiLS1saWdodC1jb2xvcjpcIiArIGxpZ2h0Q29sb3IgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjLmhhc011bHRpYnV0dG9ucykge1xuICAgICAgICAgICAgbGV0IGljb25Gb3JtYXR0ZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC5tdWx0aWJ1dHRvbnMgJiZcbiAgICAgICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmluaXRpYWwubXVsdGlidXR0b25zLmljb25Gb3JtYXR0ZXJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpY29uRm9ybWF0dGVyID1cbiAgICAgICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC5tdWx0aWJ1dHRvbnMuaWNvbkZvcm1hdHRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBidG5Db250ZW50ID0gaWNvbkZvcm1hdHRlclxuICAgICAgICAgICAgICA/IGljb25Gb3JtYXR0ZXIoeyBpdGVtOiBjLCBjb25maWcgfSlcbiAgICAgICAgICAgICAgOiBcIlwiO1xuXG4gICAgICAgICAgICBtdWx0aUJ1dHRvbnNEZXRhaWxUbXBsID0gYDxidXR0b24gY2xhc3M9XCJtdWx0aWJ1dHRvbnMtYnRuXCIgXG4gICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCIgXG4gICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCIgXG4gICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9PlxuICAgICAgICAgICAgICAgICR7YnRuQ29udGVudH0gXG4gICAgICAgICAgICAgIDwvYnV0dG9uPmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaWxkLW5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1pdGVtLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6MjRweDtoZWlnaHQ6MjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTksMTVMMTMsMjFMMTEuNTgsMTkuNThMMTUuMTcsMTZINFY0SDZWMTRIMTUuMTdMMTEuNTgsMTAuNDJMMTMsOUwxOSwxNVpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICAgIG5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAke2xpZ2h0U3Bhbn1cbiAgICAgICAgICAgICAgICAgICAgJHttdWx0aUJ1dHRvbnNEZXRhaWxUbXBsfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS10aXRsZSAke2MuY2xpY2tlYWJsZSA/IFwiY2xpY2tlYWJsZVwiIDogXCJcIn0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMubmF2T3ZlciA/IFwiaG92ZXJhYmxlXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgfVwiIFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCIgXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtjLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfVxuXG4gICAgICBuYXZMaXN0ICs9IGA8L2Rpdj5gO1xuXG4gICAgICAvL2luaXRpYWxcbiAgICAgIGluaXRpYWxOYXZMaXN0ICs9IGA8ZGl2IGNsYXNzPVwiaW5pdGlhbC1uYXYtaXRlbSBwYXJlbnRcIj5gO1xuICAgICAgaWYgKGQud2l0aE5hdikge1xuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZC52YWx1ZXMsIHYudmFyTmFtZSk7XG5cbiAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLnJvdW5kKHZhbHVlLCB2LnJvdW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHYuaW5wdXQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodi5pbnB1dCkge1xuICAgICAgICAgICAgICBjYXNlIFwiaG91clwiOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgICAgIGxldCBoaFZhbHVlID0gdmFsdWVbMF07XG4gICAgICAgICAgICAgICAgbGV0IG1tVmFsdWUgPSB2YWx1ZVsxXTtcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7ZC5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtoaFZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7ZC5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaW5pdGlhbE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcbiAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgPGRpdiBjbGFzcz1cImNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gJHtcbiAgICAgICAgICAgIGQuaXNDbG9zZWQgPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9XCIgY2hpbGQ9XCIke2QuaWQgfHwgLTF9XCI+YDtcblxuICAgICAgICAgIGlmIChjLndpdGhOYXYgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHYub25seVRhYiAmJiB0YWIgJiYgdi5vbmx5VGFiICE9PSB0YWIua2V5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGMudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5yb3VuZCh2YWx1ZSwgdi5yb3VuZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaGhWYWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbW1WYWx1ZSA9IHZhbHVlWzFdO1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtoaFZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vRXh0XG4gICAgICBleE5hdkxpc3QgKz0gYDxkaXYgY2xhc3M9XCJleC1uYXYtaXRlbSBwYXJlbnRcIj5gO1xuICAgICAgaWYgKGQud2l0aEV4TmF2KSB7XG4gICAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYubGVmdC5leHRlbmQudmFycy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGQudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgIGlmICh2LnJvdW5kICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdXRpbHMucm91bmQodmFsdWUsIHYucm91bmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodi5pbnB1dCkge1xuICAgICAgICAgICAgc3dpdGNoICh2LmlucHV0KSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdChcIjpcIik7XG4gICAgICAgICAgICAgICAgbGV0IGhoVmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgICAgICAgICBsZXQgbW1WYWx1ZSA9IHZhbHVlWzFdO1xuICAgICAgICAgICAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke2hoVmFsdWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj46PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LXR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiNTlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHt2LmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2QuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtkLnR5cGUgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7bW1WYWx1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1tXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICBpZiAoZC5jaGlsZHJlbikge1xuICAgICAgICBkLmNoaWxkcmVuLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICBpZiAoYy5pc0hpZGRlbikgcmV0dXJuO1xuICAgICAgICAgIGV4TmF2TGlzdCArPSBgPGRpdiBjbGFzcz1cImNoaWxkLWV4LW5hdi1pdGVtICR7XG4gICAgICAgICAgICBkLmlzQ2xvc2VkID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfVwiIGNoaWxkPVwiJHtkLmlkIHx8IC0xfVwiPmA7XG5cbiAgICAgICAgICBpZiAoYy53aXRoTmF2ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmV4dGVuZC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHYub25seVRhYiAmJiB0YWIgJiYgdi5vbmx5VGFiICE9PSB0YWIua2V5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGMudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5yb3VuZCh2YWx1ZSwgdi5yb3VuZCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodi5pbnB1dCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodi5pbnB1dCkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImhvdXJcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IHZhbHVlLnNwbGl0KFwiOlwiKSA6IFswLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhoVmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1tVmFsdWUgPSB2YWx1ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG91ci1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LXR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHt2LmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7aGhWYWx1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtdHlwZT1cInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCI1OVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy9idXR0b25zXG4gICAgICBidG5OYXZMaXN0ICs9IGA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtaXRlbSBwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnRcIj5gO1xuICAgICAgaWYgKFxuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucyAmJlxuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzXG4gICAgICApIHtcbiAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmJ1dHRvbnMudmFycy5mb3JFYWNoKChidG4pID0+IHtcbiAgICAgICAgICBpZiAoZC53aXRoQnRuTmF2KSB7XG4gICAgICAgICAgICBsZXQgYnRuQ29udGVudCA9IFwiXCI7XG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gYnRuLmNsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICAgICAgICBpZiAoYnRuLmljb24pIHtcbiAgICAgICAgICAgICAgYnRuQ29udGVudCA9IGJ0bi5pY29uID8gYnRuLmljb24gOiBcIlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnRuLmljb25Gb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgYnRuQ29udGVudCA9IGJ0bi5pY29uRm9ybWF0dGVyID8gYnRuLmljb25Gb3JtYXR0ZXIoZCwgYnRuKSA6IFwiXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChidG4uc2hhcGUpIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIGNhcC1idG4tXCIgKyBidG4uc2hhcGU7XG4gICAgICAgICAgICAgIGJ0bkNvbnRlbnQgKz0gYDxzcGFuPiAke1xuICAgICAgICAgICAgICAgIGJ0bi5mb3JtYXR0ZXIgPyBidG4uZm9ybWF0dGVyKGQsIGJ0bikgOiBcIlwiXG4gICAgICAgICAgICAgIH0gPC9zcGFuPiBgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ0bi5idG5DbGFzc05hbWVGb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgbGV0IG5ld0NsYXNzTmFtZSA9IGJ0bi5idG5DbGFzc05hbWVGb3JtYXR0ZXIoZCwgYnRuKTtcbiAgICAgICAgICAgICAgaWYgKG5ld0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIG5ld0NsYXNzTmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhcC1idG4tc2hhcGUgJHtjbGFzc05hbWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke2J0bi5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2QuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtidG5Db250ZW50fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcblxuICAgICAgICAgIC8vYnV0dG9uc1xuICAgICAgICAgIGJ0bk5hdkxpc3QgKz0gYDxkaXYgY2xhc3M9XCJjYXAtYnRuLWNoaWxkLW5hdi1pdGVtIHBhcmVudCAke1xuICAgICAgICAgICAgZC5pc0Nsb3NlZCA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH1cIiBjaGlsZD1cIiR7ZC5pZCB8fCAtMX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtaXRlbS1jb250ZW50XCI+YDtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYubGVmdC5idXR0b25zICYmXG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzLmZvckVhY2goKGJ0bikgPT4ge1xuICAgICAgICAgICAgICBpZiAoYy53aXRoTmF2ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGxldCBidG5Db250ZW50ID0gXCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gYnRuLmNsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJ0bi5pY29uKSB7XG4gICAgICAgICAgICAgICAgICBidG5Db250ZW50ID0gYnRuLmljb24gPyBidG4uaWNvbiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJ0bi5pY29uRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICBidG5Db250ZW50ID0gYnRuLmljb25Gb3JtYXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgPyBidG4uaWNvbkZvcm1hdHRlcihjLCBidG4pXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYnRuLnNoYXBlKSB7XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgY2FwLWJ0bi1cIiArIGJ0bi5zaGFwZTtcbiAgICAgICAgICAgICAgICAgIGJ0bkNvbnRlbnQgKz0gYDxzcGFuPiAke1xuICAgICAgICAgICAgICAgICAgICBidG4uZm9ybWF0dGVyID8gYnRuLmZvcm1hdHRlcihjLCBidG4pIDogXCJcIlxuICAgICAgICAgICAgICAgICAgfSA8L3NwYW4+IGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChidG4uYnRuQ2xhc3NOYW1lRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgbmV3Q2xhc3NOYW1lID0gYnRuLmJ0bkNsYXNzTmFtZUZvcm1hdHRlcihjLCBidG4pO1xuICAgICAgICAgICAgICAgICAgaWYgKG5ld0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBuZXdDbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnRuTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhcC1idG4tc2hhcGUgJHtjbGFzc05hbWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7YnRuLmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YnRuQ29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBpdGVtRGV0YWlsID0gYCA8ZGl2IGNsYXNzPVwiZGV0YWlsLW5hdi1pdGVtIGhpZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmdldERldGFpbE5hdkl0ZW1Db250ZW50KCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IHN0ciA9IGA8ZGl2IGNsYXNzPVwibmF2LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7aXRlbURldGFpbH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke25hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5pdGlhbC1uYXYtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7aW5pdGlhbE5hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXh0ZW5kLW5hdi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHtleE5hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7YnRuTmF2TGlzdH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IG5hdkNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgICAkZWxlbS5pbm5lckhUTUwgPSBcIlwiO1xuICAgICRlbGVtLmFwcGVuZChuYXZDb250YWluZXIpO1xuXG4gICAgLy9kZXRhbGxlIGRlIG5hdi1pdGVtXG4gICAgJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcIi5pdGVtLXRpdGxlLmhvdmVyYWJsZVwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IHBvcyA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbk5hdkxlZnQoY29uZmlnLCBlLCAkZWxlbSk7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQpO1xuICAgICAgICBsZXQgdHlwZU5vZGUgPSBpLmdldEF0dHJpYnV0ZShcInR5cGUtbm9kZVwiKTtcbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcIm92ZXJOYXZJdGVtXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBvcmlnaW5hbEV2dDogZSxcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICAgIHBvczogcG9zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvL29jdWx0YSBkZXRhbGxlIGRlIG5hdi1pdGVtLCBhbCBzYWxpciBkZWwgbmF2LWl0ZW0tbGlzdFxuICAgICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubmF2LWl0ZW0tbGlzdFwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIChlKSA9PiB7XG4gICAgICAgIGkuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJsZWF2ZU5hdkl0ZW1cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vb2N1bHRhIGRldGFsbGUgZGUgbmF2LWl0ZW0tbGlzdCwgYWwgc2FsaXIgZGUgbmF2LWl0ZW1cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGl0bGU6bm90KC5ob3ZlcmFibGUpXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCAoZSkgPT4ge1xuICAgICAgICBpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwibGVhdmVOYXZJdGVtXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGl0bGUuY2xpY2tlYWJsZVwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgaXRlbUlkID0gaS5nZXRBdHRyaWJ1dGUoXCJpdGVtLWlkXCIpO1xuICAgICAgICBsZXQgdHlwZU5vZGUgPSBpLmdldEF0dHJpYnV0ZShcInR5cGUtbm9kZVwiKTtcbiAgICAgICAgbGV0IHZhbHVlID0gaS52YWx1ZTtcbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNsaWNrTmF2TGVmdEl0ZW1cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICB0eXBlOiB0eXBlTm9kZSxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLm11bHRpYnV0dG9ucy1idG5cIikuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IHBvcyA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbk5hdkxlZnQoY29uZmlnLCBlLCAkZWxlbSk7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCB0eXBlTm9kZSA9IGkuZ2V0QXR0cmlidXRlKFwidHlwZS1ub2RlXCIpO1xuICAgICAgICBpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2xpY2tNdWx0aUJ1dHRvbnNCdG5cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICB0eXBlOiB0eXBlTm9kZSxcbiAgICAgICAgICAgICAgcG9zLFxuICAgICAgICAgICAgICBidXR0b246IGksXG4gICAgICAgICAgICAgIGV2ZW50OiBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIikuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgaS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBpbnB1dFR5cGUgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LXR5cGVcIik7XG4gICAgICAgIGxldCBrZXkgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgICAgbGV0IGl0ZW1JZCA9IGkuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgICAgbGV0IHR5cGVOb2RlID0gaS5nZXRBdHRyaWJ1dGUoXCJ0eXBlLW5vZGVcIik7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQpO1xuICAgICAgICBsZXQgdmFsdWUgPSBpLnZhbHVlO1xuICAgICAgICBpZiAoaW5wdXRUeXBlID09IFwidGltZVwiKSB7XG4gICAgICAgICAgbGV0IGhoX2lucHV0ID0gaS5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dC5oaFwiKS52YWx1ZTtcbiAgICAgICAgICBsZXQgbW1faW5wdXQgPSBpLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0Lm1tXCIpLnZhbHVlO1xuICAgICAgICAgIG1tX2lucHV0ID0gbW1faW5wdXQgPCAxMCA/IFwiMFwiICsgcGFyc2VGbG9hdChtbV9pbnB1dCkgOiBtbV9pbnB1dDtcbiAgICAgICAgICBpLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0Lm1tXCIpLnZhbHVlID0gbW1faW5wdXQ7XG4gICAgICAgICAgdmFsdWUgPSBoaF9pbnB1dCArIFwiOlwiICsgbW1faW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInNhdmVOYXZMZWZ0SW5wdXRcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgdGFiU2VsZWN0ZWQ6IHRhYixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcImJ1dHRvbi5jYXAtYnRuLXNoYXBlXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgICAgbGV0IGl0ZW1JZCA9IGkuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgICAgbGV0IHR5cGVOb2RlID0gaS5nZXRBdHRyaWJ1dGUoXCJ0eXBlLW5vZGVcIik7XG4gICAgICAgIGkuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjbGlja05hdkxlZnRCdXR0b25cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCJidXR0b24udHJlZS1pY29uXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCB0eXBlTm9kZSA9IGkuZ2V0QXR0cmlidXRlKFwidHlwZS1ub2RlXCIpO1xuICAgICAgICBsZXQgZGF0YUNvbmZpZyA9IGNvbmZpZy5kYXRhLmZpbmQoKGQpID0+IGQuaWQgPT0gaXRlbUlkKTtcblxuICAgICAgICBsZXQgJG5hdkl0ZW0gPSBlLmN1cnJlbnRUYXJnZXQuY2xvc2VzdChcIi5uYXYtaXRlbVwiKTtcbiAgICAgICAgbGV0ICRjaGlsZHJlbiA9ICRuYXZJdGVtLnF1ZXJ5U2VsZWN0b3IoXCIuY2hpbGRyZW4taXRlbXNcIik7XG4gICAgICAgIGxldCBpdGVtc1RvSGlkZSA9IGUuY3VycmVudFRhcmdldFxuICAgICAgICAgIC5jbG9zZXN0KFwibmF2LmxlZnRcIilcbiAgICAgICAgICAucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgIFwiW2NoaWxkPSdcIiArIGl0ZW1JZCArIFwiJ10sIFtjaGlsZC1saXN0PSdcIiArIGl0ZW1JZCArIFwiJ11cIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgaWYgKCRjaGlsZHJlbikge1xuICAgICAgICAgIGlmICgkY2hpbGRyZW4uY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZVwiKSkge1xuICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJjYXAtcm90YXRlXCIpO1xuICAgICAgICAgICAgaXRlbXNUb0hpZGUuZm9yRWFjaCgoaSkgPT4gaS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKSk7XG4gICAgICAgICAgICBkYXRhQ29uZmlnLmlzQ2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKFwiY2FwLXJvdGF0ZVwiKTtcbiAgICAgICAgICAgIGl0ZW1zVG9IaWRlLmZvckVhY2goKGkpID0+IGkuY2xhc3NMaXN0LmFkZChcImhpZGVcIikpO1xuICAgICAgICAgICAgZGF0YUNvbmZpZy5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNsaWNrTmF2TGVmdFRyZWVJY29uXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy9lLmN1cnJlbnRUYXJnZXQucGFyZW50XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBIdG1sIGNvbW8gU3RyaW5nLCBwYXJhIGVsIGRldGFsbGUgZGUgaXRlbXMgZW4gZWwgU2lkZWJhciBJenF1aWVyZG9cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtpdGVtPXt9XSAtIENvbmZpZ3VyYWNpb24gZGUgaXRlbVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IEh0bWwgZGUgdmVudGFuYSBkZSBkZXRhbGxlXG4gICAqL1xuICBnZXREZXRhaWxOYXZJdGVtQ29udGVudChpdGVtID0ge30pIHtcbiAgICBpZiAoaXRlbS5uYXZPdmVyID09IHVuZGVmaW5lZCkgaXRlbS5uYXZPdmVyID0ge307XG5cbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWRldGFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtdGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5sYWJlbCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5uYXZPdmVyLnN1YnRpdGxlIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jaGlwICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxpZ2h0ID8gaXRlbS5saWdodCArIFwiLWxpZ2h0XCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgfSAgJHtpdGVtLm5hdk92ZXIuY2hpcCA/IFwiXCIgOiBcImhpZGVcIn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5uYXZPdmVyLmNoaXAgfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2l0ZW0ubmF2T3Zlci5jb250ZW50IHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgU2lkZWJhciBEZXJlY2hvXG4gICAqIFVzYWRvIHByaW5jaXBhbG1lbnRlIHBhcmEgZm9ybXVsYXJpbyBkZSBpbmdyZXNvIGRlIGRhdG9zIHBhcmEgbG9zIGRpYXNcbiAgICogc2VsZWNjaW9uYWRvc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbGEgY3JlYWNpb24gZGVsIGZvcm11bGFyaW9cbiAgICogQHJldHVybiB7T2JqZWN0fSB7ZWxlbWVudCwgaW5wdXRzfSwgZWxlbWVudCBlcyBlbCBlbGVtZW50byBEb20gZGVsIHNpZGViYXIsXG4gICAqICAgICAgICAgICAgICAgICAgaW5wdXRzIGVzIHVuIGFycmF5IGRlIGVsZW1lbnRvcyBEb20gZGUgY2FkYSBpbnB1dCBjcmVhZG9cbiAgICogICAgICAgICAgICAgICAgICAobm8gc29uIGVsZW1lbnRvcyBodG1sIGRlIHRpcG8gaW5wdXQpXG4gICAqL1xuICBjcmVhdGVOYXZSaWdodChjb25maWcsIHRhYiA9IG51bGwpIHtcbiAgICB2YXIgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcIm5hdlwiLCB7IGNsYXNzTmFtZTogXCJyaWdodFwiIH0pO1xuICAgIHJldHVybiB0aGlzLnJlZHJhd05hdlJpZ2h0KGNvbmZpZywgJGVsZW0sIHRhYiwgW10pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgU2lkZWJhciBEZXJlY2hvXG4gICAqIFV0aWxpemEgJGVsZW0gY29tbyBlbGVtZW50byBkb20gZG9uZGUgcmVjcmVhcmxvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIERvbSBkb25kZSBjcmVhIGVsIHNpZGViYXIgZGVyZWNob1xuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbGEgY3JlYWNpb24gZGVsIGZvcm11bGFyaW9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSBkYXRvcyBkZWwgZGlhIHNlbGVjY2lvbmFuZG8sIHBhcmEgYXV0b3JyZWxsZW5vIGRlIGZvcm11bGFyaW9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRheVNlbGVjdGVkIC0gZGF0b3MgZGVsIGRpYSBzZWxlY2Npb25hZG9cbiAgICogQHBhcmFtIHtTdHJpbmd9IGRheVNlbGVjdGVkLmRhdGUgLSBmZWNoYSBkZWwgZGlhIHNlbGVjY2lvbmFkb1xuICAgKiBAcGFyYW0ge09iamVjdH0gZGF5U2VsZWN0ZWQuaXRlbSAtIEl0ZW0gZGUgU2lkZWJhciByZWxhY2lvbmFkbyBhbCBkaWEgc2VsZWNjaW9uYWRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXlTZWxlY3RlZC5wb3MgLSBwb3NpY2lvbiBkZSBkaWEgc2VsZWNjaW9uYWRvXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIFNpZGViYXIgRGVyZWNob1xuICAgKi9cbiAgcmVkcmF3TmF2UmlnaHQoXG4gICAgY29uZmlnLFxuICAgICRlbGVtLFxuICAgIHNlbGVjdGVkID0gbnVsbCxcbiAgICB0YWIgPSBudWxsLFxuICAgIGRhdGFEYXkgPSBudWxsLFxuICAgIGRheVNlbGVjdGVkID0gbnVsbFxuICApIHtcbiAgICBsZXQgJG5hdlJpZ2h0ID0gJGVsZW07IC8vZG9tLmNyZWF0ZUVsZW1lbnQoXCJuYXZcIix7Y2xhc3NOYW1lOlwicmlnaHRcIn0pO1xuICAgIGxldCAkZGl2Q29udGFpbmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIm5hdi1pbnB1dC1jb250YWluZXJcIixcbiAgICB9KTtcbiAgICBsZXQgJGlucHV0cyA9IFtdO1xuICAgIGxldCBjaGVja2JveElucHV0cyA9IFtdO1xuICAgIGxldCBpbnB1dHNXaXRoUmVsb2FkID0gW107XG4gICAgbGV0IHRhYlNlbGVjdGVkID0gdGFiO1xuICAgIHNlbGVjdGVkID0gc2VsZWN0ZWQgfHwgW2RheVNlbGVjdGVkXTtcblxuICAgIGlmICh0YWJTZWxlY3RlZCAmJiB0YWJTZWxlY3RlZC5pbnB1dHMpIHtcbiAgICAgIHRhYlNlbGVjdGVkLmlucHV0cy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgIGlmIChpLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICAgICAgbGV0ICRpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoaSwgZGF0YURheSwgZGF5U2VsZWN0ZWQsIHNlbGVjdGVkKTtcbiAgICAgICAgaWYgKCRpbnB1dCkge1xuICAgICAgICAgICRkaXZDb250YWluZXIuYXBwZW5kQ2hpbGQoJGlucHV0KTtcbiAgICAgICAgICAkaW5wdXRzLnB1c2goJGlucHV0KTtcblxuICAgICAgICAgIGlmIChpLnR5cGUgPT0gXCJjaGVja2JveFwiKSB7XG4gICAgICAgICAgICBjaGVja2JveElucHV0cy5wdXNoKCRpbnB1dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkucmVsb2FkT25TZWxlY3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXRzV2l0aFJlbG9hZC5wdXNoKHsgJGlucHV0LCBjb25maWc6IGkgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvL21hbmVqbyBkZSBldmVudG9zIHBhcmEgaW5wdXRzIGNvbiBzaG93SWZcbiAgICBpZiAoY2hlY2tib3hJbnB1dHMpIHtcbiAgICAgIGNoZWNrYm94SW5wdXRzLmZvckVhY2goKCRjKSA9PiB7XG4gICAgICAgIC8vb2J0aWVuZSBrZXkgZGUgY2hlY2tib3hcbiAgICAgICAgbGV0IGtleSA9ICRjLmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgICAgbGV0IHByb3BzID0gdGFiU2VsZWN0ZWQuaW5wdXRzLmZpbmQoKGkpID0+IHtcbiAgICAgICAgICByZXR1cm4gaS5rZXkgPT0ga2V5O1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgaXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgIGlmIChkYXRhRGF5KSB7XG4gICAgICAgICAgaXNDaGVja2VkID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9vYnRpZW5lIGlucHV0cyByZWxhY2lvbmFkb3MgZGVzZGUgY29uZmlnIHBhcmEgbW9zdHJhci9vY3VsdGFyXG4gICAgICAgIGxldCBpbnB1dHNUb0hpZGUgPSB0YWJTZWxlY3RlZC5pbnB1dHMuZmlsdGVyKChpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGkuc2hvd0lmICYmIGkuc2hvd0lmID09IGtleTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBpbnB1dHNUb0hpZGVLZXlzID0gaW5wdXRzVG9IaWRlLm1hcCgoaSkgPT4gaS5rZXkpO1xuXG4gICAgICAgIC8vb2J0aWVuZSBpbnB1dHMgZGVsIGRvbSwgZmlsdHJhbmRvIGNvbiBpbnB1dHNUb0hpZGVcbiAgICAgICAgbGV0ICRpbnB1dHNIaWRkZW4gPSAkaW5wdXRzLmZpbHRlcigoJGkpID0+IHtcbiAgICAgICAgICBsZXQgaW5wdXRLZXkgPSAkaS5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIik7XG4gICAgICAgICAgcmV0dXJuIGlucHV0c1RvSGlkZUtleXMuaW5kZXhPZihpbnB1dEtleSkgPiAtMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy9zaSBoYXkgaW5wdXRzLFxuICAgICAgICBpZiAoJGlucHV0c0hpZGRlbikge1xuICAgICAgICAgIGlmICghaXNDaGVja2VkKSB7XG4gICAgICAgICAgICAkaW5wdXRzSGlkZGVuLmZvckVhY2goKCRpKSA9PiB7XG4gICAgICAgICAgICAgICRpLmNsYXNzTGlzdC5hZGQoXCJoaWRlXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgICRjLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgICAgICAgJGlucHV0c0hpZGRlbi5mb3JFYWNoKCgkaSkgPT4ge1xuICAgICAgICAgICAgICBsZXQgZm4gPSAkYy5xdWVyeVNlbGVjdG9yKFwiaW5wdXRbdHlwZT0nY2hlY2tib3gnXVwiKS5jaGVja2VkXG4gICAgICAgICAgICAgICAgPyBcInJlbW92ZVwiXG4gICAgICAgICAgICAgICAgOiBcImFkZFwiO1xuICAgICAgICAgICAgICAkaS5jbGFzc0xpc3RbZm5dKFwiaGlkZVwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgc2F2ZUNhbmNlbEJ0bnMgPSB0aGlzLmNyZWF0ZU5hdlJpZ2h0YnV0dG9ucygpO1xuICAgICRkaXZDb250YWluZXIuYXBwZW5kQ2hpbGQoc2F2ZUNhbmNlbEJ0bnMpO1xuICAgICRuYXZSaWdodC5pbm5lckhUTUwgPSBcIlwiO1xuICAgICRuYXZSaWdodC5hcHBlbmRDaGlsZCgkZGl2Q29udGFpbmVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICBlbGVtZW50OiAkbmF2UmlnaHQsXG4gICAgICBpbnB1dHM6ICRpbnB1dHMsXG4gICAgICBpbnB1dHNXaXRoUmVsb2FkLFxuICAgICAgc2F2ZUNhbmNlbEJ0bnMsXG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBDb3JuZXIgaW5mZXJpb3IgaXpxdWllcmRvLCBjb21vIHRpdHVsbyBwYXJhIGZvb3RlclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXIgRm9vdGVyXG4gICAqL1xuICBjcmVhdGVDb3JuZXJGb290ZXIoY29uZmlnKSB7XG4gICAgaWYgKFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmZvb3RlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBjb25maWcudGltZWxpbmUuZm9vdGVyLmVuYWJsZWQgPT0gZmFsc2VcbiAgICApXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBsZXQgc3RyID0gXCJcIjtcblxuICAgIGlmIChjb25maWcudGltZWxpbmUuZm9vdGVyKSB7XG4gICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJjb3JuZXItZm9vdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvcm5lci10aXRsZVwiPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICR7Y29uZmlnLnRpbWVsaW5lLmZvb3Rlci5sYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBGb290ZXIgcGFyYSBwbGFuaWxsYVxuICAgKiBJbmljaWFsbWVudGUgY3JlYWRvIHBhcmEgdG90YWxlc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXIgRm9vdGVyXG4gICAqL1xuICBjcmVhdGVGb290ZXIoY29uZmlnKSB7XG4gICAgaWYgKFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmZvb3RlciA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBjb25maWcudGltZWxpbmUuZm9vdGVyLmVuYWJsZWQgPT0gZmFsc2VcbiAgICApXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGxldCBzdHIgPSBgXG4gICAgICAgIDxmb290ZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1jb250YWluZXJcIj5cbiAgICAgICAgICBgO1xuICAgIGNvbmZpZy50aW1lbGluZS5mb290ZXIuZGF0YS5mb3JFYWNoKChkKSA9PiB7XG4gICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWl0ZW1cIj4ke2QudmFsdWV9PC9kaXY+XG4gICAgICAgICAgICBgO1xuICAgIH0pO1xuICAgIHN0ciArPSBgXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9vdGVyPlxuICAgICAgICBgO1xuXG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBGb290ZXIgcGFyYSBwbGFuaWxsYVxuICAgKiBJbmljaWFsbWVudGUgY3JlYWRvIHBhcmEgdG90YWxlc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdFtdfSBzZWxlY3RlZCAtIGFycmF5IGRlIG9iamV0b3MsIGRlIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXIgRm9vdGVyXG4gICAqL1xuICBjcmVhdGVTZWxlY3RCb2FyZChjb25maWcsIHNlbGVjdGVkKSB7XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LWNvbnRhaW5lclwiIH0pO1xuICAgIHJldHVybiB0aGlzLnJlZHJhd1NlbGVjdEJvYXJkKCRlbGVtLCBzZWxlY3RlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgbGluZWEgdmVydGljYWwgcGFyYSBmZWNoYSBBY3R1YWxcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgY3JlYXRlVG9kYXlMaW5lKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlZHJhd1RvZGF5TGluZShcbiAgICAgIGNvbmZpZyxcbiAgICAgIGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRvZGF5LWxpbmVcIiB9KVxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3JlYSBsaW5lYSB2ZXJ0aWNhbCBwYXJhIGZlY2hhIEFjdHVhbFxuICAgKiBzaSBlbCBlbGVtZW50byAkZWxlbSBubyBlcyBlbnZpYWRvLCBzZSBjcmVhIHVuIG51ZXZvIGVsZW1lbnRvXG4gICAqXG4gICAqIFNpIGVsIGRpYSBhY3R1YWwgbm8gZXN0YSBkZW50cm8gZGVsIHJhbmdvIGRlIGZlY2hhcyBkZWwgY29uZmlnLFxuICAgKiBkZXNoYWJpbGl0YSBsYSBsaW5lYSBjb24gbGEgY2xhc2UgY3NzIC5kaXNhYmxlLWxpbmVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9IFskZWxlbT1udWxsXSAtIEVsZW1lbnRvIERvbSBkb25kZSByZWNyZWEgbGEgbGluZWEsIHNpIGVzIG51bGwsIGxhIGNyZWFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgcmVkcmF3VG9kYXlMaW5lKGNvbmZpZywgJGVsZW0gPSBudWxsKSB7XG4gICAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuZW5kKS5nZXRUaW1lKCk7XG4gICAgbGV0IHRvZGF5VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGxldCB7IGhlaWdodCwgZGF5V2lkdGggfSA9IHV0aWxzLmdldFRhYmxlRGltZW5zaW9ucyhjb25maWcpO1xuXG4gICAgaWYgKCRlbGVtID09IG51bGwpXG4gICAgICAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRvZGF5LWxpbmVcIiB9KTtcblxuICAgIGlmIChlbmRUaW1lIDwgdG9kYXlUaW1lKSB7XG4gICAgICAkZWxlbS5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZS1saW5lXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkZWxlbS5jbGFzc0xpc3QucmVtb3ZlKFwiZGlzYWJsZS1saW5lXCIpO1xuICAgIH1cblxuICAgIGxldCBkaWZmRGF5cyA9IE1hdGguZmxvb3IoXG4gICAgICBkYXRlVXRpbHMuZGlmZkRheXMoXG4gICAgICAgIGNvbmZpZy50aW1lbGluZS5zdGFydCxcbiAgICAgICAgZGF0ZVV0aWxzLmZvcm1hdERhdGUobmV3IERhdGUoKSlcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBkaWZmID0gZGlmZkRheXMgKiBkYXlXaWR0aDtcbiAgICBkaWZmICs9IGRheVdpZHRoIC8gMiAtIDI7IC8vIHBhcmEgY2VudHJhciBsaW5lYVxuICAgIE9iamVjdC5hc3NpZ24oJGVsZW0uc3R5bGUsIHtcbiAgICAgIFwibWFyZ2luLWxlZnRcIjogZGlmZiArIFwicHhcIixcbiAgICAgIGhlaWdodDogaGVpZ2h0ICsgXCJweFwiLFxuICAgIH0pO1xuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBlbGVtZW50byBGbG9hdEJveCwgcXVlIGNvbnRpZW5lIGxvcyBkYXRvcyBxdWUgc2UgbXVlc3RyYSBlbiBsYSB0YWJsYVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbW9zdHJhciBkYXRvcyBjb25maWd1cmFkb3MgcG9yIHRhYlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXIgRm9vdGVyXG4gICAqL1xuICBjcmVhdGVGbG9hdEJveChjb25maWcsIHRhYikge1xuICAgIGxldCAkY29udGFpbmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImZsb2F0LWJveC1jb250YWluZXJcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdGbG9hdEJveChjb25maWcsIHRhYiwgJGNvbnRhaW5lcik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3JlYSBlbGVtZW50byBGbG9hdEJveCwgcXVlIGNvbnRpZW5lIGxvcyBkYXRvcyBxdWUgc2UgbXVlc3RyYSBlbiBsYSB0YWJsYVxuICAgKiBTZSB1c2EgcHJpbmNpcGFsbWVudGUgcGFyYSBtb3N0cmFyIGRhdG9zIGVuIGxhIHRhYmxhIGRlIGxhIHBsYW5pbGxhXG4gICAqIGxvcyBtdWVzdHJhIGRlIG1hbmVyYSBmbG90YW50ZSwgY2FsY3VsYW5kbyBlbCBUb3AgeSBlbCBMZWZ0IHNlZ3VuIGxhIHBvc2Npb25cbiAgICpcbiAgICogU2UgY29uc2lkZXJhbiBsb3MgZWxlbWVudG9zIHBhZHJlcyBvY3VsdG9zLCBwYXJhIG9jdWx0YXIgbG9zIGRhdG9zXG4gICAqXG4gICAqIFNlIGluc2VydGFuIGxvcyBlbGVtZW50b3MgRmxvYXRCb3gsIGNvbW8gZWxlbWVudG8gY29uIGRhdG9zIGRlIHVuIGl0ZW0geSBkaWEgZXNwZWNpZmljb1xuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbW9zdHJhciBkYXRvcyBjb25maWd1cmFkb3MgcG9yIHRhYlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBDb3JuZXIgRm9vdGVyXG4gICAqL1xuICByZWRyYXdGbG9hdEJveChjb25maWcsIHRhYiwgJGNvbnRhaW5lcikge1xuICAgICRjb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAvL2xldCB0YWJTZWxlY3RlZCA9IHRhYiB8fCBudWxsO1xuXG4gICAgY29uZmlnLmRhdGEuZm9yRWFjaCgoZGUpID0+IHtcbiAgICAgIGlmIChkZS5pc0hpZGRlbikgcmV0dXJuO1xuICAgICAgZGUuY2hpbGRyZW4uZm9yRWFjaCgoZHMpID0+IHtcbiAgICAgICAgaWYgKGRzLmlzSGlkZGVuKSByZXR1cm47XG5cbiAgICAgICAgZHMuZGF0YS5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKCFkYXRhLm1lc3NhZ2UgfHwgZGF0YS5tZXNzYWdlLnZhbHVlID09IG51bGwpICYmXG4gICAgICAgICAgICAoZGF0YS52YWx1ZXMgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICBkYXRhLnZhbHVlcyA9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZGF0YS52YWx1ZXMpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vY2hpbGRyZW4gRGF0YVxuICAgICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb25GbG9hdEJveChjb25maWcsIGRhdGEsIGRzKTtcblxuICAgICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKGRhdGEuZXJyb3JzICYmIGRhdGEuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcImhhcy1lcnJvcnMgXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRlLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gXCJoaWRlIFwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBtc2cgPSBudWxsO1xuICAgICAgICAgIGlmICh0YWIuZmxvYXRCb3ggJiYgdGFiLmZsb2F0Qm94Lm1lc3NhZ2VQYXRoKSB7XG4gICAgICAgICAgICBtc2cgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YSwgdGFiLmZsb2F0Qm94Lm1lc3NhZ2VQYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobXNnIHx8IChkYXRhLm1lc3NhZ2UgJiYgZGF0YS5tZXNzYWdlLnZhbHVlKSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiaGFzLW1lc3NhZ2UgXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHN0ciA9IGBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxvYXQtYm94ICR7Y2xhc3NOYW1lfSBcIlxuICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCIke3Bvc2l0aW9uID8gcG9zaXRpb24gOiBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkcy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtkcy50eXBlIHx8IFwiXCJ9XCI+IGA7XG5cbiAgICAgICAgICBsZXQgc3RyRXh0ID0gYFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1ib3gtZXh0ICR7ZGUuaXNDbG9zZWQgPyBcImhpZGVcIiA6IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiR7cG9zaXRpb24gPyBwb3NpdGlvbiA6IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkcy5pZCB8fCAtMX0tZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2RzLnR5cGUgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb25nLWJhci1jb250YWluZXJcIj5gO1xuXG4gICAgICAgICAgaWYgKHRhYiAmJiB0YWIuZmxvYXRCb3gpIHtcbiAgICAgICAgICAgIGlmICh0YWIuZmxvYXRCb3gucGxvdHMpIHtcbiAgICAgICAgICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwicGxvdC1mbG9hdGJveC1jb250YWluZXJcIj5gO1xuICAgICAgICAgICAgICB0YWIuZmxvYXRCb3gucGxvdHMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjc3NWYXJzID0gXCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICBpZiAodXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLnZhck5hbWUpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobi5jb2xvcikge1xuICAgICAgICAgICAgICAgICAgICBjc3NWYXJzID0gYC0tbG9jYWwtY29sb3I6JHtuLmNvbG9yfTtgO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBuLmNsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICAgICAgICAgICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJwbG90LWZsb2F0Ym94ICR7Y2xhc3NOYW1lfSAke1xuICAgICAgICAgICAgICAgICAgICBuLnN0eWxlIHx8IFwiXCJcbiAgICAgICAgICAgICAgICAgIH1cIiBzdHlsZT1cIiR7Y3NzVmFyc30gXCI+PC9kaXY+YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhYi5mbG9hdEJveC5pY29ucykge1xuICAgICAgICAgICAgICB0YWIuZmxvYXRCb3guaWNvbnMuZm9yRWFjaCgoaWNvbkNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGxldCBjb2xvckNsYXNzID0gXCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgY29sb3JTdHlsZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgbGV0IHZpZXdCb3ggPSBcIjAgMCAyNCAyNFwiO1xuICAgICAgICAgICAgICAgIGxldCBpY29uID0gaWNvbkNvbmZpZy5pY29uIHx8IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZihpY29uQ29uZmlnLnZhck5hbWUpe1xuICAgICAgICAgICAgICAgICAgbGV0IGljb25WYXIgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIGljb25Db25maWcudmFyTmFtZSk7XG4gICAgICAgICAgICAgICAgICBpZihpY29uVmFyKXtcbiAgICAgICAgICAgICAgICAgICAgaWNvbiA9IGljb25WYXI7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChpY29uQ29uZmlnLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gaWNvbkNvbmZpZy5jbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGljb25Db25maWcuY29sb3IpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGljb25Db25maWcuY29sb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGUgPSBgLS1sb2NhbC1jb2xvcjogJHtpY29uQ29uZmlnLmNvbG9yfTtgO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3JDbGFzcyA9IGljb25Db25maWcuY29sb3I7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYoaWNvbkNvbmZpZy5jb2xvclZhck5hbWUpe1xuICAgICAgICAgICAgICAgICAgbGV0IGNvbG9yVmFyID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBpY29uQ29uZmlnLmNvbG9yVmFyTmFtZSk7XG4gICAgICAgICAgICAgICAgICBpZihjb2xvclZhcil7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGNvbG9yVmFyKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGUgPSBgLS1sb2NhbC1jb2xvcjogJHtjb2xvclZhcn07YDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvckNsYXNzID0gY29sb3JWYXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWZsb2F0Ym94ICR7Y2xhc3NOYW1lfSAke1xuICAgICAgICAgICAgICAgICAgY29sb3JDbGFzcyA/IFwiaGFzLWNvbG9yXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgfVwiIHN0eWxlPVwiJHtjb2xvclN0eWxlfVwiPlxuICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiJHt2aWV3Qm94fVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiJHtpY29ufVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBgO1xuXG5cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vbnVtZXJvcyBlbiBlbCBmbG9hdEJveFxuICAgICAgICAgICAgaWYgKHRhYi5mbG9hdEJveC5udW1zKSB7XG4gICAgICAgICAgICAgIHRhYi5mbG9hdEJveC5udW1zLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGFiLmxlZ2VuZHMgJiYgbi50YWJLZXkpIHtcbiAgICAgICAgICAgICAgICAgIGxldCBsZWdlbmQgPSB0YWIubGVnZW5kcy5maW5kKChsKSA9PiBsLmtleSA9PSBuLnRhYktleSk7XG4gICAgICAgICAgICAgICAgICBpZiAobGVnZW5kICYmICFsZWdlbmQuYWN0aXZlKSByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFGbG9hdEJveCA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgbGV0IHNob3dJZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgbGV0IGhpZGVJZiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBjb2xvckNsYXNzID0gXCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgY29sb3JTdHlsZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgbGV0IGNsYXNzTmFtZXNFeHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGxldCBjb2xvclN0eWxlRXh0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgY3NzVmFycyA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICBpZiAobi52YXJOYW1lKSB7XG4gICAgICAgICAgICAgICAgICBkYXRhRmxvYXRCb3ggPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIG4udmFyTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG4udmFyU2hvdykge1xuICAgICAgICAgICAgICAgICAgc2hvd0lmID0gQm9vbGVhbih1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIG4udmFyU2hvdykpO1xuICAgICAgICAgICAgICAgICAgZGF0YUZsb2F0Qm94ID0gZGF0YUZsb2F0Qm94IHx8IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG4udmFySGlkZSkge1xuICAgICAgICAgICAgICAgICAgaGlkZUlmID0gQm9vbGVhbih1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIG4udmFySGlkZSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuLnNoYXBlKSB7XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCJzaGFwZS1cIiArIG4uc2hhcGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG4uY29sb3IpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKG4uY29sb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGUgPSBgLS1sb2NhbC1jb2xvcjogJHtuLmNvbG9yfTtgO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3JDbGFzcyA9IG4uY29sb3I7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG4ubG9uZ0Jhcikge1xuICAgICAgICAgICAgICAgICAgbGV0IGxvbmdCYXJDb2xvciA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICBsZXQgbG9uZ0Jhck9wYWNpdHkgPSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobi5sb25nQmFyQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0JhckNvbG9yID0gdXRpbHMuZ2V0VmFyQnlQYXRoKFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICAgIG4ubG9uZ0JhckNvbG9yXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChsb25nQmFyQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IobG9uZ0JhckNvbG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGVFeHQgPSBgLS1sb2NhbC1jb2xvcjogJHtsb25nQmFyQ29sb3J9O2A7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lc0V4dCArPSBsb25nQmFyQ29sb3IgKyBcIi1saWdodCBcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2xvckNsYXNzICYmIGNvbG9yQ2xhc3MgIT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWVzRXh0ICs9IGNvbG9yQ2xhc3M7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbG9yU3R5bGUgJiYgY29sb3JTdHlsZSAhPSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGVFeHQgPSBjb2xvclN0eWxlO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAobi5sb25nQmFyT3BhY2l0eSkge1xuICAgICAgICAgICAgICAgICAgICBsb25nQmFyT3BhY2l0eSA9XG4gICAgICAgICAgICAgICAgICAgICAgdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLmxvbmdCYXJPcGFjaXR5KSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9uZ0Jhck9wYWNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0eWxlRXh0ICs9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIi0tbG9jYWwtb3BhY2l0eTogXCIgKyBsb25nQmFyT3BhY2l0eSArIFwiO1wiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChuLmxvbmdCYXJDbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lc0V4dCArPVxuICAgICAgICAgICAgICAgICAgICAgIHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi5sb25nQmFyQ2xhc3NOYW1lKSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBsZXQgbG9uZ0JhciA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi5sb25nQmFyKTtcbiAgICAgICAgICAgICAgICAgIGlmIChsb25nQmFyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNzc1ZhcnMgPSBgLS1sb25nOiR7bG9uZ0Jhcn07YDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGF0YUZsb2F0Qm94ICE9PSBudWxsICYmIHNob3dJZiAmJiAhaGlkZUlmKSB7XG4gICAgICAgICAgICAgICAgICBzdHIgKz0gYDxzcGFuIGNsYXNzPVwiZGF0YSAke2NvbG9yQ2xhc3N9ICR7Y2xhc3NOYW1lfVwiIHN0eWxlPVwiJHtjb2xvclN0eWxlfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhRmxvYXRCb3ggPT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkYXRhRmxvYXRCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGRhdGFGbG9hdEJveCA9PSBcIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHV0aWxzLnJvdW5kKGRhdGFGbG9hdEJveCwgbi5yb3VuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+YDtcblxuICAgICAgICAgICAgICAgICAgaWYgKG4ubG9uZ0JhciAmJiBjc3NWYXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ckV4dCArPSBgPGRpdiBjbGFzcz1cImxvbmctYmFyICR7Y2xhc3NOYW1lc0V4dH1cIiBzdHlsZT1cIiR7Y29sb3JTdHlsZUV4dH0gJHtjc3NWYXJzfSBcIj48L2Rpdj4gYDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3B1bnRvcyBlbiBlbCBmbG9hdEJveFxuICAgICAgICAgICAgaWYgKHRhYi5mbG9hdEJveC5kb3RzKSB7XG4gICAgICAgICAgICAgIHN0ciArPSBgPGRpdiBjbGFzcz1cImRvdC1jb250YWluZXItbWlkZGxlXCI+YDtcbiAgICAgICAgICAgICAgdGFiLmZsb2F0Qm94LmRvdHMuZm9yRWFjaCgoZG90KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgZG90LnZhck5hbWUpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgIGxldCBjb2xvckNsYXNzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgIGxldCBjb2xvclN0eWxlID0gXCJcIjtcblxuICAgICAgICAgICAgICAgICAgaWYgKGRvdC5zaGFwZSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gZG90LnNoYXBlO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoZG90LmNvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGRvdC5jb2xvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0eWxlID0gYC0tbG9jYWwtY29sb3I6ICR7ZG90LmNvbG9yfWA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3JDbGFzcyA9IGRvdC5jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG90ICR7Y29sb3JDbGFzc30gJHtjbGFzc05hbWV9XCIgc3R5bGU9XCIke2NvbG9yU3R5bGV9XCIgPjwvZGl2PmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vZmlsYSBkZSBwdW50b3MgZW4gZmxvYXRCb3hcbiAgICAgICAgICAgIGlmICh0YWIuZmxvYXRCb3gucm93RG90cykge1xuICAgICAgICAgICAgICB0YWIuZmxvYXRCb3gucm93RG90cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZnJlZUNvbHVtbnMgPSA0O1xuICAgICAgICAgICAgICAgIHN0ciArPSBgPHNwYW4gY2xhc3M9XCJyb3dkb3QtLXJvdyBcIj5gO1xuXG4gICAgICAgICAgICAgICAgcm93LmZvckVhY2goKGRvdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRhYi5sZWdlbmRzICYmIGRvdC50YWJLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxlZ2VuZCA9IHRhYi5sZWdlbmRzLmZpbmQoKGwpID0+IGwua2V5ID09IGRvdC50YWJLZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGVnZW5kICYmICFsZWdlbmQuYWN0aXZlKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGxldCBkYXRhRmxvYXRCb3ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICBsZXQgc2hvd0lmID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGxldCBoaWRlSWYgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGxldCBjb2xvckNsYXNzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgIGxldCBjb2xvclN0eWxlID0gXCJcIjtcblxuICAgICAgICAgICAgICAgICAgaWYgKGRvdC52YXJOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFGbG9hdEJveCA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgZG90LnZhck5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhRmxvYXRCb3ggPSBwYXJzZUludChkYXRhRmxvYXRCb3gpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoZG90LnZhclNob3cpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd0lmID0gQm9vbGVhbihcbiAgICAgICAgICAgICAgICAgICAgICB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIGRvdC52YXJTaG93KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBkYXRhRmxvYXRCb3ggPSBkYXRhRmxvYXRCb3ggfHwgXCJcIjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGRvdC52YXJIaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpZGVJZiA9IEJvb2xlYW4oXG4gICAgICAgICAgICAgICAgICAgICAgdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBkb3QudmFySGlkZSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGRvdC5zaGFwZSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgc2hhcGUtXCIgKyBkb3Quc2hhcGU7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChkb3QuY29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoZG90LmNvbG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGUgPSBgLS1sb2NhbC1jb2xvcjogJHtkb3QuY29sb3J9YDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvckNsYXNzID0gZG90LmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0YUZsb2F0Qm94ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGFGbG9hdEJveCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgc2hvd0lmICYmXG4gICAgICAgICAgICAgICAgICAgICFoaWRlSWYgJiZcbiAgICAgICAgICAgICAgICAgICAgZnJlZUNvbHVtbnMgPiAwXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG4gPVxuICAgICAgICAgICAgICAgICAgICAgIGRhdGFGbG9hdEJveCA+IGZyZWVDb2x1bW5zID8gZnJlZUNvbHVtbnMgOiBkYXRhRmxvYXRCb3g7XG4gICAgICAgICAgICAgICAgICAgIGZyZWVDb2x1bW5zIC09IG47XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwicm93ZG90LS1kb3QgJHtjb2xvckNsYXNzfSAke2NsYXNzTmFtZX1cIiBzdHlsZT1cIiR7Y29sb3JTdHlsZX1cIj48L2Rpdj5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBzdHIgKz0gYDwvc3Bhbj5gO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgc3RyRXh0ICs9IGBcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcblxuICAgICAgICAgIGxldCAkZWxlbUV4dCA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyRXh0KTtcblxuICAgICAgICAgICRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICRlbGVtLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcIm1vdXNlT3ZlckZsb2F0Qm94XCIsIHtcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgaXRlbTogZHMsXG4gICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdnQ6IGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAkZWxlbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICRlbGVtLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNsaWNrRmxvYXRCb3hcIiwge1xuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICBpdGVtOiBkcyxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2dDogZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJGVsZW0pO1xuICAgICAgICAgICRjb250YWluZXIuYXBwZW5kQ2hpbGQoJGVsZW1FeHQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICRjb250YWluZXI7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgRGV0YWlsRGF5LCBkZXRhbGxlIGRlIHZhbG9yZXMgZGUgaXRlbSB5IERpYVxuICAgKiBzZSB1c2EgcGFyYTpcbiAgICogICAgLSBNdWVzdHJhIG5vbWJyZSBkZSBpdGVtIHkgZGV0YWxsZXNcbiAgICogICAgLSBNdWVzdHJhIGNhcHN1bGFzIGRlIGRhdG9zXG4gICAqICAgIC0gTXVlc3RyYSBQaWxscywgcGlsZG9yYXMgZGUgZGF0b3MgcmVzdW1pZG9zXG4gICAqICAgIC0gTXVlc3RyYSBhbGVydGFzXG4gICAqICAgIC0gTXVlc3RyYSBNZW5zYWplXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtIC0gSXRlbSByZWxhY2lvbmFkb1xuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmx5U3RyaW5nQ29udGVudCA9IGZhbHNlXSAtIHBhcmEgZXNjb2dlciBzaSBkZXZ1ZWx2ZSBTdHJpbmcgbyBEb21FbGVtZW50XG4gICAqIEByZXR1cm4ge1N0cmluZ3xPYmplY3R9IEVsZW1lbnRvIGNvbW8gU3RyaW5nIG8gRG9tRWxlbWVudFxuICAgKi9cbiAgY3JlYXRlRGV0YWlsRGF5KFxuICAgIGNvbmZpZyxcbiAgICBpdGVtID0ge30sXG4gICAgZGF0YURheSxcbiAgICB0YWJTZWxlY3RlZCxcbiAgICBvbmx5U3RyaW5nQ29udGVudCA9IGZhbHNlXG4gICkge1xuICAgIGxldCBzdHIgPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1kZXRhaWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZSB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAke2l0ZW0ubGFiZWwgfHwgXCJcIn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICR7ZGF0YURheSA/IGRhdGVVdGlscy5mb3JtYXREYXRlUmVhZGVhYmxlKGRhdGFEYXkuZGF0ZSkgOiBcIlwifVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1kZXRhaWwgbGlzdFwiPmA7XG5cbiAgICAvL0NBUFNVTEVTXG4gICAgaWYgKGRhdGFEYXkpIHtcbiAgICAgIGNvbmZpZy50aW1lbGluZS5kZXRhaWxEYXkuY2Fwc3VsZXMuZm9yRWFjaCgoY2FwKSA9PiB7XG4gICAgICAgIC8vcGFyYSBjb21wcm9iYXIgc2kgdGllbmUgZGF0b3MsIHNlIG9idGllbmUgZWwgcHJpbWVyIHZhbG9yXG4gICAgICAgIC8vZGUgbGEgbGlzdGEgZGUgdmFsdWVzIGRlIHVuYSBjYXBzdWxhXG4gICAgICAgIGxldCBoYXNWYWx1ZXMgPVxuICAgICAgICAgIGNhcC52YWx1ZXMuZmlsdGVyKFxuICAgICAgICAgICAgKHYpID0+IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LnZhbHVlcywgdi52YXJOYW1lKSAhPT0gbnVsbFxuICAgICAgICAgICkubGVuZ3RoID4gMDtcbiAgICAgICAgbGV0IGhpZGVJZiA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjYXAuaGlkZUlmKSB7XG4gICAgICAgICAgaGlkZUlmID0gQm9vbGVhbih1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheS52YWx1ZXMsIGNhcC5oaWRlSWYpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb2xvckNsYXNzID0gXCJcIjtcbiAgICAgICAgbGV0IGNvbG9yU3R5bGUgPSBcIlwiO1xuXG4gICAgICAgIGlmIChjYXAuY29sb3IpIHtcbiAgICAgICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihjYXAuY29sb3IpKSB7XG4gICAgICAgICAgICBjb2xvclN0eWxlID0gYC0tbG9jYWwtY29sb3I6ICR7Y2FwLmNvbG9yfTtgO1xuICAgICAgICAgICAgY29sb3JTdHlsZSArPSBgLS1sb2NhbC1jb2xvci1mb250OiAke2NhcC5jb2xvcn07YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sb3JDbGFzcyA9IGNhcC5jb2xvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc1ZhbHVlcyAmJiAhaGlkZUlmKSB7XG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tZGV0YWlsICR7Y29sb3JDbGFzc31cIiBzdHlsZT1cIiR7Y29sb3JTdHlsZX1cIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWljb24gJHtjYXAuc2hhcGUgfHwgXCJcIn0gXCI+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICR7Y2FwLnRpdGxlIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tZGVzY3JpcHRpb25cIj4gYDtcblxuICAgICAgICAgIGNhcC52YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdi52YXJOYW1lXG4gICAgICAgICAgICAgID8gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXkudmFsdWVzLCB2LnZhck5hbWUpXG4gICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKGNhcC5pc0xhYmVsZWRBcnJheSkge1xuICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKCh2YWx1ZUxhYmVsZWQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgb3V0cHV0VmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZU5hbWUgPSB2LnZhbHVlTmFtZSA/IHYudmFsdWVOYW1lIDogXCJ2YWx1ZVwiO1xuXG4gICAgICAgICAgICAgICAgbGV0IHRlbXBWYWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aCh2YWx1ZUxhYmVsZWQsIHZhbHVlTmFtZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGVtcFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZSA9IHYucm91bmRcbiAgICAgICAgICAgICAgICAgICAgPyB1dGlscy5yb3VuZCh0ZW1wVmFsdWUsIHYucm91bmQpXG4gICAgICAgICAgICAgICAgICAgIDogdGVtcFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2LmZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSB2LmZvcm1hdHRlcih2YWx1ZUxhYmVsZWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3V0cHV0VmFsdWUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSB1dGlscy5mb3JtYXROdW1iZXIob3V0cHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0ciArPVxuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgOiBgXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2MgJHt2LnNob3dDb2x1bW4gPyBcImRlc2MtY29sdW1uXCIgOiBcIlwifVwiPlxuICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7di5oaWRlTGFiZWwgPyBcIlwiIDogdmFsdWVMYWJlbGVkLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXYgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbFwiPmAgK1xuICAgICAgICAgICAgICAgICAgICAgICh2LmhpZGVQcmVmZml4ICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcmVmaXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3YucHJlZml4IHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7b3V0cHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gICtcbiAgICAgICAgICAgICAgICAgICAgICAodi5oaWRlU3VmZml4ICE9PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWZmaXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlTGFiZWxlZC5zdWZmaXggfHwgdi5zdWZmaXggfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPmBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGV0IG91dHB1dFZhbHVlID0gdi5yb3VuZCA/IHV0aWxzLnJvdW5kKHZhbHVlLCB2LnJvdW5kKSA6IHZhbHVlO1xuXG4gICAgICAgICAgICAgIGlmICh2LmZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID0gdi5mb3JtYXR0ZXIoeyBvcHRpb25zOiB2LCBkYXRhRGF5LCBvdXRwdXRWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3V0cHV0VmFsdWUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID0gdXRpbHMuZm9ybWF0TnVtYmVyKG91dHB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN0ciArPVxuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID09IG51bGxcbiAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgOiBgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJlZml4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt2LnByZWZpeCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke291dHB1dFZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VmZml4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt2LnN1ZmZpeCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG5cbiAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICA8L2Rpdj5gOyAvLyBlbmQgLml0ZW0tZGV0YWlsXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0ciArPSBgXG4gICAgICAgIDwvZGl2PmA7IC8vIGxpc3QtZGV0YWlsXG5cbiAgICAvL1BJTExTXG4gICAgaWYgKFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmRldGFpbERheS5waWxsc1Zhck5hbWUgJiZcbiAgICAgIGRhdGFEYXkgJiZcbiAgICAgIGRhdGFEYXkudmFsdWVzW2NvbmZpZy50aW1lbGluZS5kZXRhaWxEYXkucGlsbHNWYXJOYW1lXVxuICAgICkge1xuICAgICAgc3RyICs9IGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxlbWVudHMtZGV0YWlsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPiAke2NvbmZpZy50aW1lbGluZS5kZXRhaWxEYXkucGlsbHNUaXRsZX0gPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxlbWVudHMtbGlzdFwiPmA7XG5cbiAgICAgIGRhdGFEYXkudmFsdWVzW2NvbmZpZy50aW1lbGluZS5kZXRhaWxEYXkucGlsbHNWYXJOYW1lXS5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGUudmFsdWU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXRWYWx1ZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgdmFsdWUgPSB1dGlscy5mb3JtYXROdW1iZXIodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGVtZW50LWRldGFpbFwiPlxuICAgICAgICAgICAgICA8Yj4ke2UubGFiZWx9PC9iPlxuICAgICAgICAgICAgICAke3ZhbHVlfVxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgIH0pO1xuXG4gICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gOyAvL2VuZCAuZWxlbWVudC1kZXRhaWwgPiAuZWxlbWVudC1saXN0XG4gICAgfVxuXG4gICAgLy9zdHIgKz0gYDwvZGl2PmA7XG5cbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LmVycm9ycyAmJiBkYXRhRGF5LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRhRGF5LmVycm9ycy5mb3JFYWNoKChlcnIpID0+IHtcbiAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnRcIj5cbiAgICAgICAgICAgICR7aWNvbnMuYWxlcnR9XG4gICAgICAgICAgICAke2Vyci5sYWJlbH1cbiAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IG1zZyA9IG51bGw7XG4gICAgbGV0IGF1dGhvciA9IG51bGw7XG4gICAgbGV0IGRhdGVNc2cgPSBudWxsO1xuICAgIGlmIChkYXRhRGF5ICYmIHRhYlNlbGVjdGVkLmZsb2F0Qm94ICYmIHRhYlNlbGVjdGVkLmZsb2F0Qm94Lm1lc3NhZ2VQYXRoKSB7XG4gICAgICBtc2cgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgdGFiU2VsZWN0ZWQuZmxvYXRCb3gubWVzc2FnZVBhdGgpO1xuICAgIH1cblxuICAgIGlmICghbXNnICYmIGRhdGFEYXkgJiYgZGF0YURheS5tZXNzYWdlICYmIGRhdGFEYXkubWVzc2FnZS52YWx1ZSkge1xuICAgICAgbXNnID0gZGF0YURheS5tZXNzYWdlLnZhbHVlO1xuICAgICAgYXV0aG9yID0gZGF0YURheS5tZXNzYWdlLmF1dGhvcjtcbiAgICAgIGRhdGVNc2cgPSBkYXRlVXRpbHMuZm9ybWF0RGF0ZVJlYWRlYWJsZShuZXcgRGF0ZShkYXRhRGF5Lm1lc3NhZ2UuZGF0ZSkpO1xuICAgIH1cblxuICAgIGlmIChtc2cpIHtcbiAgICAgIC8vbXNnID0gbXNnLnJlcGxhY2UoLyhcXHJcXG58XFxyfFxcbikvZywgJzxicj4nKTtcbiAgICAgIHN0ciArPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1zai1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtc2pcIj5cbiAgICAgICAgICAgIDxwcmU+JHttc2cgfHwgXCJcIn08L3ByZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1zai1kZXRhaWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbWFpbFwiPiAke2F1dGhvciB8fCBcIlwifSA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGF0ZVwiPiAke2RhdGVNc2cgfHwgXCJcIn0gPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgfVxuXG4gICAgbGV0IHN0ckNvbnRhaW5lciA9IGA8ZGl2IGNsYXNzPVwiZGV0YWlsLWRheSBkZC1oaWRlXCI+ICR7c3RyfSA8L2Rpdj5gO1xuXG4gICAgaWYgKG9ubHlTdHJpbmdDb250ZW50KSByZXR1cm4gc3RyO1xuXG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyQ29udGFpbmVyKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjcmVhIEhUTUwgZGUgZGV0YWlsRGF5XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtIC0gSXRlbSByZWxhY2lvbmFkb1xuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IEVsZW1lbnRvIGNvbW8gU3RyaW5nLCBkZSBkZXRhaWxEYXlcbiAgICovXG4gIHJlZHJhd0RldGFpbERheShjb25maWcsIGl0ZW0sIGRhdGFEYXksIHRhYlNlbGVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRGV0YWlsRGF5KGNvbmZpZywgaXRlbSwgZGF0YURheSwgdGFiU2VsZWN0ZWQsIHRydWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBvc2ljaW9uYSBGbG9hdEJveFxuICAgKiB2ZXJpZmljYSBzaSBlbCBwYXJlbnQgZXN0YSBkZXNwbGVnYWRvLCBwYXJhIG9jdWx0YXIgbG9zIGRhdG9zXG4gICAqXG4gICAqIFNvbG8gYWN0dWFsaXphIGxhcyBhbHR1cmFzIGRlIGxvcyBmbG9hdGJveFxuICAgKiBubyByZWNyZWEgbG9zIGZsb2F0Ym94LCBlcyBtYXMgb3B0aW1vXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtIC0gSXRlbSByZWxhY2lvbmFkb1xuICAgKi9cbiAgcmVwb3NpdGlvbkZsb2F0Qm94KGNvbmZpZywgJGZsb2F0Qm94Q29udGFpbmVyKSB7XG4gICAgJGZsb2F0Qm94Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxvYXQtYm94XCIpLmZvckVhY2goKCRmKSA9PiB7XG4gICAgICBsZXQgaXRlbUlkID0gJGYuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgIGxldCBpdGVtSGVpZ2h0ID0gcGFyc2VGbG9hdChcbiAgICAgICAgdXRpbHMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0taXRlbS1oZWlnaHRcIilcbiAgICAgICk7XG4gICAgICBsZXQgaXRlbSwgcGFyZW50O1xuICAgICAgKHsgaXRlbSwgcGFyZW50IH0gPSB1dGlscy5nZXRJdGVtQnlJZChjb25maWcsIGl0ZW1JZCwgXCJjaGlsZFwiLCB0cnVlKSk7XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICBsZXQgdG9wID0gdXRpbHMuZ2V0UG9zaXRpb25CeUl0ZW0oY29uZmlnLCBpdGVtKTtcbiAgICAgICAgJGYuc3R5bGUudG9wID0gdG9wICogaXRlbUhlaWdodCArIFwicHhcIjtcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuaXNDbG9zZWQpIHtcbiAgICAgICAgICAkZi5jbGFzc0xpc3QuYWRkKFwiaGlkZVwiKTtcbiAgICAgICAgfSBlbHNlIGlmICgkZi5jbGFzc0xpc3QuY29udGFpbnMoXCJoaWRlXCIpKSB7XG4gICAgICAgICAgJGYuY2xhc3NMaXN0LnJlbW92ZShcImhpZGVcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjcmVhIGluZGljYWRvcmVzIGRlIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsZW0gLSBFbGVtZW50byBEb20gZG9uZGUgY3JlYSBsb3MgZWxlbWVudG9zIHNlbGVjY2lvbmFkb3NcbiAgICogQHBhcmFtIHtPYmplY3RbXX0gc2VsZWN0ZWQgLSBBcnJheSBjb24gbG9zIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBxdWUgY29udGllbmUgbG9zIGluZGljYWRvcmVzIGRlIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKi9cbiAgcmVkcmF3U2VsZWN0Qm9hcmQoJGVsZW0sIHNlbGVjdGVkKSB7XG4gICAgJGVsZW0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICBsZXQgaGFzTnVtYmVyID0gdHJ1ZTtcblxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA9PSAxKSBoYXNOdW1iZXIgPSBmYWxzZTtcblxuICAgICAgc2VsZWN0ZWQuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICBsZXQgYXR0cmlidXRlcyA9IFtdO1xuXG4gICAgICAgIGlmIChoYXNOdW1iZXIpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goeyBuYW1lOiBcImNhcC1iYWRnZVwiLCB2YWx1ZTogcy5pbmRleCB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgJHMgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcInNlbGVjdGVkLWRheVwiLFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgIH0pO1xuICAgICAgICAkcy5zdHlsZS5sZWZ0ID0gcy5wb3MubGVmdCArIFwicHhcIjtcbiAgICAgICAgJHMuc3R5bGUudG9wID0gcy5wb3MudG9wICsgXCJweFwiO1xuICAgICAgICAkZWxlbS5hcHBlbmQoJHMpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogT2J0aWVuZSBTdHJpbmcgY29uIGVzdGlsb3MgQ1NTIGRlIGxhIHBvc2ljaW9uIGRlIHVuIGZsb2F0Qm94XG4gICAqIGNhbGN1bGFkbyBzZWd1biBpdGVtIHkgZmVjaGEgZGUgbG9zIHZhbG9yZXNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmEsIHBhcmEgdmVyIGZlY2hhIGRlIGluaWNpb1xuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIERhdG9zIGRlbCBkaWEgaW5kaWNhZG9cbiAgICogQHBhcmFtIHtPYmplY3R9IGl0ZW0gLSBJdGVtIHJlbGFjaW9uYWRvXG4gICAqIEByZXR1cm4ge1N0cmluZ30gU3RyaW5nIENTUyB0b3AgeSBsZWZ0ICwgcGFyYSBwb3NpY2lvbmFyIGZsb2F0Qm94IGVuIHRhYmxlXG4gICAqL1xuICBnZXRQb3NpdGlvbkZsb2F0Qm94KGNvbmZpZywgZGF0YSwgaXRlbSkge1xuICAgIGxldCBsZWZ0ID0gZGF0ZVV0aWxzLmRpZmZEYXlzKGNvbmZpZy50aW1lbGluZS5zdGFydCwgZGF0YS5kYXRlKTtcbiAgICBsZXQgdG9wID0gdXRpbHMuZ2V0UG9zaXRpb25CeUl0ZW0oY29uZmlnLCBpdGVtKTtcbiAgICBsZXQgZGF5V2lkdGggPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWRheS13aWR0aFwiKSk7XG4gICAgbGV0IGl0ZW1IZWlnaHQgPSBwYXJzZUZsb2F0KHV0aWxzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpKTtcbiAgICBsZWZ0ICo9IGRheVdpZHRoO1xuICAgIHRvcCAqPSBpdGVtSGVpZ2h0O1xuICAgIHJldHVybiBcInRvcDogXCIgKyB0b3AgKyBcIi41cHg7IGxlZnQ6XCIgKyBsZWZ0ICsgXCIuNXB4O1wiO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIEJvdG9uIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIHByb3BpZWRhZGVzIHBhcmEgYm90b25cbiAgICogQHBhcmFtIHtTdHJpbmd9IHByb3BzLmNsYXNzTmFtZSAtIGNsYXNzZXMgY3NzIHBhcmEgYm90b25cbiAgICogQHBhcmFtIHsqfSBwcm9wcy5rZXkgLSBrZXkgcGFyYSBpZGVudGlmaWNhciBhIGJvdG9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5sYWJlbCAtIFRleHRvIGJvdG9uXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBib3RvbiBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUJ1dHRvbihwcm9wcykge1xuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCIke3Byb3BzLmNsYXNzTmFtZSB8fCBcIlwifVwiIGlucHV0LWtleT1cIiR7XG4gICAgICAgICAgICAgIHByb3BzLmtleSB8fCBcIlwiXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICR7cHJvcHMubGFiZWwgfHwgXCJcIn1cbiAgICAgICAgICAgIDwvYnV0dG9uPmApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIEJvdG9uZXMgZGUgZ3VhcmRhciB5IGNhbmNlbGFyIGxvcyBkYXRvcyBkZSBmb3JtdWxhcmlvIGRlbCBzaWRlYmFyIGRlcmVjaG9cbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGJvdG9uZXMgY3JlYWRvc1xuICAgKi9cbiAgY3JlYXRlTmF2UmlnaHRidXR0b25zKCkge1xuICAgIGxldCBzYXZlQnRuID0gdGhpcy5jcmVhdGVCdXR0b24oe1xuICAgICAgbGFiZWw6IFwiR3VhcmRhclwiLFxuICAgICAgY2xhc3NOYW1lOiBcImNhcC1idG4tcmFpc2VkXCIsXG4gICAgfSk7XG4gICAgbGV0IGNhbmNlbEJ0biA9IHRoaXMuY3JlYXRlQnV0dG9uKHtcbiAgICAgIGxhYmVsOiBcIkNhbmNlbGFyXCIsXG4gICAgICBjbGFzc05hbWU6IFwiY2FwLWJ0bi1vdXRsaW5lXCIsXG4gICAgfSk7XG4gICAgbGV0IGJ0blNlY3Rpb24gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKFxuICAgICAgYDxkaXYgY2xhc3M9XCJidXR0b24tc2VjdGlvblwiPjwvZGl2PmBcbiAgICApO1xuICAgIGJ0blNlY3Rpb24uYXBwZW5kQ2hpbGQoc2F2ZUJ0bik7XG4gICAgYnRuU2VjdGlvbi5hcHBlbmRDaGlsZChjYW5jZWxCdG4pO1xuXG4gICAgc2F2ZUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgIHNhdmVCdG4uZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwic2F2ZU11bHRpSW5wdXRcIiwge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY2FuY2VsQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgY2FuY2VsQnRuLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudChcImNhbmNlbE11bHRpSW5wdXRcIiwge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJ0blNlY3Rpb247XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtkYXRhRGF5ID0gbnVsbF0gLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbZGF5U2VsZWN0ZWQgPSBudWxsXSAtIGRhdG9zIGRlbCBkaWEgc2VsZWNjaW9uYWRvXG4gICAqIEBwYXJhbSB7T2JqZWN0W119IFtzZWxlY3RlZCA9IFtdXSAtIGFycmF5IGRlIG9iamV0b3MsIGRlIGRpYXMgc2VsZWNjaW9uYWRvc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dChwcm9wcywgZGF0YURheSA9IG51bGwsIGRheVNlbGVjdGVkID0gbnVsbCwgc2VsZWN0ZWQgPSBbXSkge1xuICAgIGxldCByID0gbnVsbDtcblxuICAgIGlmIChwcm9wcy5pZ25vcmVSZW5kZXIgPT0gdHJ1ZSkgcmV0dXJuIHI7XG5cbiAgICBzd2l0Y2ggKHByb3BzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJjdXN0b21cIjpcbiAgICAgICAgciA9IHByb3BzLnJlbmRlclxuICAgICAgICAgID8gcHJvcHMucmVuZGVyKHsgcHJvcHMsIGRhdGFEYXksIGRheVNlbGVjdGVkLCBzZWxlY3RlZCB9KVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgci5zZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIiwgcHJvcHMua2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0U2VsZWN0KHByb3BzLCBkYXRhRGF5LCBkYXlTZWxlY3RlZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZpbGVcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRGaWxlKHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZmlsZUxpbmtcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlRmlsZUxpbmsocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZVRleHQocHJvcHMsIHNlbGVjdGVkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidGl0bGVcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlVGl0bGUocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXROdW1iZXIocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJmbG9hdFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dEZsb2F0KHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dE1lc3NhZ2UocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dFRleHRBcmVhKHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiY2hlY2tib3hcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRDaGVja2JveChwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImlucHV0TGlzdFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dExpc3QocHJvcHMsIGRhdGFEYXksIGRheVNlbGVjdGVkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaW5wdXQtYm94XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0Qm94KHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVMaXN0KHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGF0YS1saXN0XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZURhdGFMaXN0KHByb3BzLCBkYXRhRGF5LCBkYXlTZWxlY3RlZCwgc2VsZWN0ZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJidXR0b25cIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRCdXR0b24ocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJidXR0b25zLWdyb3VwXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0QnV0dG9uc0dyb3VwKHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dFRpbWUocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dFRleHQocHJvcHMsIGRhdGFEYXkpO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IGNvbiBmb3JtYXRvIEhvcmEsIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIFVzYSAyIGlucHV0cywgaG9yYSB5IG1pbnV0b3NcbiAgICpcbiAgICogZWwgdmFsdWUgcXVlIGludGVycHJldGEgZXMgU3RyaW5nIEhIOk1NXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbZGF0YURheSA9IG51bGxdIC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dFRpbWUocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgaGhWYWx1ZSA9IFwiXCI7XG4gICAgbGV0IG1tVmFsdWUgPSBcIlwiO1xuXG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcblxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgICAgICBoaFZhbHVlID0gdmFsdWVbMF07XG4gICAgICAgIG1tVmFsdWUgPSB2YWx1ZVsxXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsIHx8IFwiXCJ9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaG91clwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICBtYXg9XCI5OVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke2hoVmFsdWV9XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzeW1ib2xcIj46PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pbnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7bW1WYWx1ZX1cIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1oaW50XCI+XG4gICAgICAgICAgICAgICAgJHtwcm9wcy50ZXh0SGludCB8fCBcIlwifVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCAkaGhJbnB1dCA9ICRlbGVtLnF1ZXJ5U2VsZWN0b3IoXCIuaG91clwiKTtcbiAgICBsZXQgJG1tSW5wdXQgPSAkZWxlbS5xdWVyeVNlbGVjdG9yKFwiLm1pbnV0ZXNcIik7XG5cbiAgICAkaGhJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgICRoaElucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudChcImNoYW5nZVRpbWVJbnB1dEhIXCIsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAga2V5OiBwcm9wcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogZS5zcmNFbGVtZW50LnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgJG1tSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB7XG4gICAgICAkbW1JbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjaGFuZ2VUaW1lSW5wdXRNTVwiLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGtleTogcHJvcHMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IGUuc3JjRWxlbWVudC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKCRoaElucHV0LCAkZWxlbSwgcHJvcHMpO1xuICAgIHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKCRtbUlucHV0LCAkZWxlbSwgcHJvcHMpO1xuXG4gICAgcmV0dXJuICRlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIFRleHQgY29tbyBlbGVtZW50byBEb21cbiAgICogU2UgY29uZmlndXJhIGNvbW8gaW5wdXQsIHBlcm8gbm8gZGV2dWVsdmUgZGF0b3MsIGVzIHVuIHRleHRvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZVRleHQocHJvcHMsIHNlbGVjdGVkKSB7XG4gICAgbGV0IGxhYmVsID0gcHJvcHMubGFiZWw7XG4gICAgaWYgKHByb3BzLmZvcm1hdHRlcikge1xuICAgICAgbGFiZWwgPSBwcm9wcy5mb3JtYXR0ZXIoeyBzZWxlY3RlZCB9KTtcbiAgICB9XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIke3Byb3BzLmNsYXNzTmFtZXMgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgICR7bGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+YCk7XG4gICAgcmV0dXJuICRlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIFRpdGxlIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqIFNlIGNvbmZpZ3VyYSBjb21vIGlucHV0LCBwZXJvIG5vIGRldnVlbHZlIGRhdG9zLCBlcyB1biB0ZXh0b1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVUaXRsZShwcm9wcykge1xuICAgIGxldCBjbGFzc05hbWVzID0gXCJ0ZXh0LXRpdGxlXCI7XG4gICAgaWYgKHByb3BzLmlzU3VidGl0bGUpIHtcbiAgICAgIGNsYXNzTmFtZXMgPSBcInRleHQtc3VidGl0bGVcIjtcbiAgICB9XG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiJHtjbGFzc05hbWVzfVwiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PmApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IHRpcG8gTnVtZXJpY28gY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0TnVtYmVyKHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgfVxuICAgIHZhbHVlID0gdmFsdWUgfHwgXCJcIjtcblxuICAgIGxldCBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5jbGFzc05hbWVzIHx8IFwiXCJ9ICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTIgXCI+XG4gICAgICAgICAgICAgICAgJHtwcm9wcy5zdWZmaXggPyBcIihcIiArIHByb3BzLnN1ZmZpeCArIFwiKVwiIDogXCJcIn1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7dmFsdWV9XCI+XG5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhpbnRcIj5cbiAgICAgICAgICAgICAgICAgICR7cHJvcHMudGV4dEhpbnQgfHwgXCJcIn1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgaW5wdXRFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG5cbiAgICB0aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cyhpbnB1dEVsZW0sIGVsZW0sIHByb3BzKTtcblxuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IHRpcG8gRklsZXBpY2tlciBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRGaWxlKHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICBsZXQgZmlsZU5hbWUgPSBcIlwiO1xuICAgIGxldCBmaWxlUGF0aCA9IFwiXCI7XG5cbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgICBmaWxlTmFtZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy5maWxlTmFtZVZhbHVlKTtcbiAgICAgIGZpbGVQYXRoID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLmZpbGVQYXRoVmFsdWUpO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgfHwgXCJcIjtcbiAgICBmaWxlTmFtZSA9IGZpbGVOYW1lIHx8IFwiXCI7XG4gICAgZmlsZVBhdGggPSBmaWxlUGF0aCB8fCBcIlwiO1xuXG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmNsYXNzTmFtZXMgfHwgXCJcIn0gJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pbnB1dC1maWxlXCIgPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic21hbGwtY2xvc2UgY2xlYXItZmlsZS1pbnB1dFwiPng8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGxhYmVsID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1pbnB1dC1maWxlLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAke3Byb3BzLnBpY2tlckxhYmVsIHx8IFwiU2VsZWNjaW9uYXIgQXJjaGl2b1wifVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiB2YWx1ZT1cIiR7dmFsdWV9XCI+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tbGlua1wiPlxuICAgICAgICAgICAgICA8YSBocmVmPVwiJHtmaWxlUGF0aH1cIiB0YXJnZXQ9XCJfYmxhbmtcIiA+XG4gICAgICAgICAgICAgICAgJHtmaWxlTmFtZX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCAkaW5wdXRFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgbGV0ICRjbGVhckJ0biA9IGVsZW0ucXVlcnlTZWxlY3RvcihcIi5jbGVhci1maWxlLWlucHV0XCIpO1xuICAgIGxldCAkZmlsZUlucHV0TGFiZWwgPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCIubmF2LWlucHV0LWZpbGUtbGFiZWxcIik7XG5cbiAgICAkaW5wdXRFbGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGV2dCkgPT4ge1xuICAgICAgbGV0IGZpbGVOYW1lID0gJGlucHV0RWxlbS5maWxlc1swXS5uYW1lO1xuICAgICAgJGZpbGVJbnB1dExhYmVsLnRleHRDb250ZW50ID0gZmlsZU5hbWU7XG4gICAgfSk7XG5cbiAgICAkY2xlYXJCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldnQpID0+IHtcbiAgICAgICRpbnB1dEVsZW0udmFsdWUgPSBcIlwiO1xuICAgICAgJGZpbGVJbnB1dExhYmVsLnRleHRDb250ZW50ID0gcHJvcHMucGlja2VyTGFiZWwgfHwgXCJTZWxlY2Npb25hciBBcmNoaXZvXCI7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICBjcmVhdGVGaWxlTGluayhwcm9wcywgZGF0YURheSkge1xuICAgIGxldCBmaWxlTmFtZSA9IFwiXCI7XG4gICAgbGV0IGZpbGVQYXRoID0gXCJcIjtcblxuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICAvL3ZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgICAgZmlsZU5hbWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMuZmlsZU5hbWVWYWx1ZSk7XG4gICAgICBmaWxlUGF0aCA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy5maWxlUGF0aFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZmlsZU5hbWUgPT0gXCJcIikgcmV0dXJuIG51bGw7XG5cbiAgICBmaWxlTmFtZSA9IGZpbGVOYW1lIHx8IFwiXCI7XG4gICAgZmlsZVBhdGggPSBmaWxlUGF0aCB8fCBcIlwiO1xuXG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmNsYXNzTmFtZXMgfHwgXCJcIn0gJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tbGlua1wiPlxuICAgICAgICAgICAgICA8YSBocmVmPVwiJHtmaWxlUGF0aH1cIiB0YXJnZXQ9XCJfYmxhbmtcIiA+XG4gICAgICAgICAgICAgICAgJHtmaWxlTmFtZX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIGxpc3RhIGRlIElucHV0cywgY29uIGFycmF5IGRlIHZhbG9yZXMsIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcGFyYW0ge09iamVjdH0gW2RheVNlbGVjdGVkID0gbnVsbF0gLSBkYXRvcyBkZWwgZGlhIHNlbGVjY2lvbmFkb1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dExpc3QocHJvcHMsIGRhdGFEYXksIGRheVNlbGVjdGVkID0gbnVsbCkge1xuICAgIGxldCBpbnB1dExpc3QgPSBbXTtcblxuICAgIC8vb2J0aWVuZSBpbnB1dHMgZGVmYXVsdCwgcGFyYSBjcmVhcmxvcywgc2luIHZhbG9yZXNcbiAgICBpZiAoXG4gICAgICBkYXlTZWxlY3RlZCAmJlxuICAgICAgQXJyYXkuaXNBcnJheShkYXlTZWxlY3RlZC5pdGVtLnZhbHVlc1twcm9wcy5pbnB1dExpc3RdKVxuICAgICkge1xuICAgICAgaW5wdXRMaXN0ID0gZGF5U2VsZWN0ZWQuaXRlbS52YWx1ZXNbcHJvcHMuaW5wdXRMaXN0XS5tYXAoKGlucHV0Um93KSA9PiB7XG4gICAgICAgIC8vbGltcGlhIGlucHV0TGlzdCBpbnB1dHNcbiAgICAgICAgaW5wdXRSb3cuaW5wdXRzLm1hcCgoaW5wdXQpID0+IHtcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9KTtcblxuICAgICAgICAvL29idGllbmUgdmFsb3JlcyBkZWwgZGlhXG4gICAgICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICAgICAgbGV0IGlucHV0VmFsdWVzID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhbHVlc1BhdGgpO1xuXG4gICAgICAgICAgLy9hdXRvcnJlbGxlbmFcbiAgICAgICAgICBpZiAoaW5wdXRWYWx1ZXMpIHtcbiAgICAgICAgICAgIGlucHV0Um93LmlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgdmFsdWVzID0gaW5wdXRWYWx1ZXMuZmluZCgodikgPT4gdi5pZCA9PSBpbnB1dFJvdy5pZCk7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWVzID8gdmFsdWVzW2lucHV0LnZhck5hbWVdIDogbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnB1dFJvdztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBzdHIgPSBgPGRpdiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiIGNsYXNzPVwiaW5wdXQtc2VjdGlvbi1saXN0ICR7XG4gICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgIH0gXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+IFxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICBpbnB1dExpc3QuZm9yRWFjaCgoaW5wdXRSb3cpID0+IHtcbiAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy50b1JpZ2h0ID8gXCJ0by1yaWdodFwiIDogXCJcIlxuICAgICAgICAgICAgICAgICAgfVwiID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aW5wdXRSb3cubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPmA7XG5cbiAgICAgIGlucHV0Um93LmlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICBzdHIgKz0gYCBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tY29sXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aW5wdXQubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1pZD1cIiR7aW5wdXRSb3cuaWR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1sYWJlbD1cIiR7aW5wdXQubGFiZWx9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1pbnB1dCBzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke2lucHV0LnZhbHVlfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSk7XG4gICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICB9KTtcbiAgICBzdHIgKz0gYDwvZGl2PmA7XG5cbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcblxuICAgIGxldCBpbnB1dHNFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIik7XG4gICAgaW5wdXRzRWxlbS5mb3JFYWNoKChpbnB1dEVsZW0pID0+XG4gICAgICB0aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cyhpbnB1dEVsZW0sIGVsZW0sIHByb3BzKVxuICAgICk7XG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgY3JlYXRlSW5wdXRTZWxlY3QocHJvcHMsIGRhdGFEYXksIGRheVNlbGVjdGVkID0gbnVsbCkge1xuICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgbGV0IG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuXG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIGxldCB2YWwgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgICB2YWx1ZSA9IHZhbCA/IHZhbC52YWx1ZSA6IG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHN0ciA9IGA8ZGl2IGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCIgY2xhc3M9XCIke1xuICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICB9XCIgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtc2VsZWN0XCI+XG5cbiAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiICR7dmFsdWUgPT0gbnVsbCA/IFwic2VsZWN0ZWRcIiA6IFwiXCJ9PlxuICAgICAgICAgICAgICAgICAgJHtwcm9wcy5ub0RhdGFMYWJlbCB8fCBcIi0tIHNpbiBhc2lnbmFyIC0tXCJ9XG4gICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuXG4gICAgICAgIGA7XG5cbiAgICBvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIiR7b3B0aW9uLmlkfVwiICR7XG4gICAgICAgICAgICAgICAgICAgb3B0aW9uLmlkID09IHZhbHVlID8gXCJzZWxlY3RlZFwiIDogXCJcIlxuICAgICAgICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgICAke29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgYDtcbiAgICB9KTtcbiAgICBzdHIgKz0gYFxuXG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+YDtcblxuICAgIGxldCBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuXG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgZGUgdGV4dG8gVGV4dEFyZWEgY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0VGV4dEFyZWEocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICB9XG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiXCIgdmFsdWU9XCIke3ZhbHVlfVwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgaW5wdXRFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwidGV4dGFyZWFcIik7XG4gICAgdGhpcy5hZGRLZXlEb3duSW5wdXRFdmVudHMoaW5wdXRFbGVtLCBlbGVtLCBwcm9wcyk7XG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgZGUgTWVuc2FqZSBjb21vIGVsZW1lbnRvIERvbVxuICAgKiB1dGlsaXphIFRleHRBcmVhXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dE1lc3NhZ2UocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBkYXRhRGF5ID8gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpIDogbnVsbDtcbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uIG1zai1pbnB1dC1jb250YWluZXIgJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIlxuICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlIGQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgTWVuc2FqZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwibXNqXCI+JHt2YWx1ZSB8fCBcIlwifTwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgaW5wdXRFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwidGV4dGFyZWFcIik7XG4gICAgLy90aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cyhpbnB1dEVsZW0pO1xuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IGRlIHRleHRvIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dFRleHQocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICB9XG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJuYXYtaW5wdXRcIiB2YWx1ZT1cIiR7dmFsdWV9XCI+XG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgaW5wdXRFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgdGhpcy5hZGRLZXlEb3duSW5wdXRFdmVudHMoaW5wdXRFbGVtLCBlbGVtLCBwcm9wcyk7XG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgTnVtZXJvIEZsb3RhbnRlLCBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRGbG9hdChwcm9wcywgZGF0YURheSkge1xuICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgIH1cbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBkLWJsb2NrXCI+XG4gICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwibmF2LWlucHV0XCIgdmFsdWU9XCIke3ZhbHVlfVwiPlxuICAgICAgICAgIDwvZGl2PmApO1xuXG4gICAgbGV0IGlucHV0RWxlbSA9IGVsZW0ucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgIHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKGlucHV0RWxlbSwgZWxlbSwgcHJvcHMpO1xuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIGNyZWF0ZURhdGFMaXN0KHByb3BzLCBkYXRhRGF5LCBkYXlTZWxlY3RlZCwgc2VsZWN0ZWQpIHtcbiAgICBsZXQgbGlzdCA9IFtdO1xuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICBsaXN0ID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpIHx8IFtdO1xuICAgIH1cblxuICAgIGxldCBzZWFyY2hJbnB1dCA9IGAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiBwbGFjZWhvbGRlcj1cImJ1c2NhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VhcmNoLWlucHV0LWNsZWFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7aWNvbnMuY2xvc2VJY29ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG5cbiAgICBsZXQgZWRpdEJ0biA9IFwiXCI7XG5cbiAgICBpZiAocHJvcHMuZWRpdEJ1dHRvbikge1xuICAgICAgZWRpdEJ0biA9IGA8YnV0dG9uIGNsYXNzPVwiY2FwLWJ0bi1yYWlzZWQgY2FwLWJ0bi1zbSBlZGl0LWJ0blwiIGlucHV0LWtleT1cIiR7cHJvcHMuZWRpdEJ1dHRvbi5rZXl9XCI+XG4gICAgICAgICAgICAgICAgICAgICR7cHJvcHMuZWRpdEJ1dHRvbi5sYWJlbH0gXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gYDtcbiAgICB9XG5cbiAgICBsZXQgc3RyID0gYFxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIn0gXCIgaW5wdXQta2V5PVwiJHtcbiAgICAgICAgcHJvcHMua2V5IHx8IFwiXCJcbiAgICAgIH1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBkLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAke2VkaXRCdG59XHRcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3ggXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgICR7c2VhcmNoSW5wdXR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+IGA7XG5cbiAgICBsZXQgJGVsID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuICAgIGxldCAkc2VhcmNoSW5wdXQgPSAkZWwucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtaW5wdXRcIik7XG4gICAgbGV0ICRzZWFyY2hJbnB1dENsZWFyID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLWlucHV0LWNsZWFyXCIpO1xuICAgIGxldCAkaW5wdXRCb3ggPSAkZWwucXVlcnlTZWxlY3RvcihcIi5pbnB1dC1ib3hcIik7XG5cbiAgICBsZXQgJGl0ZW1zID0gbGlzdC5tYXAoKGl0ZW0sIGopID0+IHtcbiAgICAgIGxldCBsYWJlbCA9XG4gICAgICAgIHV0aWxzLmdldFZhckJ5UGF0aChpdGVtLCBwcm9wcy52YXJOYW1lTGFiZWwpIHx8IGRhdGFEYXkubGFiZWwgfHwgXCJfX1wiO1xuXG4gICAgICBsZXQgJGVsSXRlbSA9IHRoaXMuY3JlYXRlRGF0YUxpc3RJdGVtKHtcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHZhbHVlVGV4dDogdXRpbHMuZ2V0VmFyQnlQYXRoKGl0ZW0sIHByb3BzLnZhck5hbWVWYWx1ZVRleHQpIHx8IFwiXCIsXG4gICAgICAgIHN1YlRleHQ6IHV0aWxzLmdldFZhckJ5UGF0aChpdGVtLCBwcm9wcy52YXJOYW1lU3ViVGV4dCkgfHwgXCJcIixcbiAgICAgICAgaWQ6IFwibGlzdC1pdGVtLVwiICsgKGRhdGFEYXkuaWQgfHwgaiksXG4gICAgICAgIGtleTogXCJsaXN0LWl0ZW0tXCIgKyAoZGF0YURheS5pZCB8fCBqKSxcbiAgICAgICAgdG9vbHRpcDogdXRpbHMuZ2V0VmFyQnlQYXRoKGl0ZW0sIHByb3BzLnZhck5hbWVUb29sdGlwKSB8fCBsYWJlbCxcbiAgICAgICAgLy9jb2xvckljb246IFwiYy1yZWRcIixcbiAgICAgICAgbGluazogdXRpbHMuZ2V0VmFyQnlQYXRoKGl0ZW0sIHByb3BzLnZhck5hbWVMaW5rKSB8fCBudWxsLFxuICAgICAgICBzdWZmaXg6IHV0aWxzLmdldFZhckJ5UGF0aChpdGVtLCBwcm9wcy52YXJOYW1lU3VmZml4KSB8fCBcIlwiLFxuICAgICAgICAvL3ZhbHVlOiBKU09OLnN0cmluZ2lmeSh1dGlscy5nZXRWYXJCeVBhdGgoaXRlbSwgcHJvcHMudmFyTmFtZUlucHV0KSkgfHwge31cbiAgICAgIH0pO1xuICAgICAgJGlucHV0Qm94LmFwcGVuZENoaWxkKCRlbEl0ZW0pO1xuICAgIH0pO1xuXG4gICAgJHNlYXJjaElucHV0Q2xlYXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAkc2VhcmNoSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgJHNlYXJjaElucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICB9KTtcblxuICAgICRzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICAgICRzZWFyY2hJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB7XG4gICAgICBsZXQgJGlucHV0cyA9IFtdO1xuICAgICAgJGlucHV0cyA9ICRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiLm1pbmktaW5wdXQtc2VjdGlvblwiKSB8fCBbXTtcbiAgICAgICRpbnB1dHMuZm9yRWFjaCgoJGkpID0+IHtcbiAgICAgICAgbGV0IGxhYmVsID0gJGkuZ2V0QXR0cmlidXRlKFwibGFiZWxcIik7XG4gICAgICAgIGxldCBzZWFyY2ggPSAkc2VhcmNoSW5wdXQudmFsdWU7XG4gICAgICAgIGlmIChsYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICRpLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRpLmNsYXNzTGlzdC5hZGQoXCJoaWRlXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5lZGl0QnV0dG9uLm9uQ2xpY2spIHtcbiAgICAgIGxldCBidXR0b24gPSAkZWwucXVlcnlTZWxlY3RvcihcImJ1dHRvbi5lZGl0LWJ0blwiKTtcbiAgICAgIGlmIChidXR0b24gJiYgcHJvcHMuZWRpdEJ1dHRvbikge1xuICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PlxuICAgICAgICAgIHByb3BzLmVkaXRCdXR0b24ub25DbGljayh7XG4gICAgICAgICAgICBldmVudDogZSxcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgZGF0YURheSxcbiAgICAgICAgICAgIGRheVNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAkZWxlbWVudDogJGVsLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAkaXRlbXMuZm9yRWFjaCgoJGkpID0+IHtcbiAgICAgICAgJGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgIHByb3BzLmVkaXRCdXR0b24ub25DbGljayh7XG4gICAgICAgICAgICBldmVudDogZSxcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgZGF0YURheSxcbiAgICAgICAgICAgIGRheVNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAkZWxlbWVudDogJGVsLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAkZWw7XG4gIH0sXG5cbiAgY3JlYXRlRGF0YUxpc3RJdGVtKHtcbiAgICBsYWJlbCA9IFwiXCIsXG4gICAgdmFsdWVUZXh0ID0gXCJcIixcbiAgICBzdWJUZXh0ID0gXCJcIixcbiAgICBpZCA9IFwiXCIsXG4gICAga2V5ID0gXCJcIixcbiAgICB0b29sdGlwID0gXCJcIixcbiAgICBjb2xvckljb24gPSBcIlwiLFxuICAgIGxpbmsgPSBudWxsLFxuICAgIHN1ZmZpeCA9IG51bGwsXG4gICAgdmFsdWUgPSBcIlwiLFxuICB9KSB7XG4gICAgbGV0IHRvb2x0aXBTdHIgPSBcIlwiO1xuICAgIGxldCBpY29uU3RyID0gbnVsbDtcbiAgICBsZXQgbGlua1N0ciA9IFwiXCI7XG4gICAgbGV0IHN0ciA9IFwiXCI7XG5cbiAgICBpZiAodG9vbHRpcCkge1xuICAgICAgdG9vbHRpcFN0ciA9IGBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgJHt0b29sdGlwfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICB9XG5cbiAgICBpZiAoY29sb3JJY29uKSB7XG4gICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihpdGVtRm9ybWF0ZWQuY29sb3JJY29uKSkge1xuICAgICAgICBpY29uU3RyID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb25cIiBzdHlsZT1cImJhY2tncm91bmQ6JHtjb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpY29uU3RyID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb24gJHtjb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxpbmspIHtcbiAgICAgIGxpbmtTdHIgPSBgPGEgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWxpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiJHtsaW5rfVwiPiR7aWNvbnMubGlua0ljb259PC9hPiBgO1xuICAgIH1cblxuICAgIHN0ciArPSBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uIGNsaWNrZWFibGUgJHtcbiAgICAgICAgICAgICAgaWNvblN0ciA/IFwiaGFzLWljb25cIiA6IFwiXCJcbiAgICAgICAgICAgIH0gXCIgXG4gICAgICAgICAgICAgICAgbGFiZWw9XCIke2xhYmVsfVwiIFxuICAgICAgICAgICAgICAgIGRhdGEtaWQ9XCIke2lkfVwiXG4gICAgICAgICAgICAgICAgZGF0YS1rZXk9XCIke2tleX1cIlxuICAgICAgICAgICAgICAgIGRhdGEtdmFsdWU9XCIke3ZhbHVlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICAke2ljb25TdHIgfHwgXCJcIn1cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRpdGxlc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tc3VidGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtzdWJUZXh0fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1jb250ZW50XCIgPlxuICAgICAgICAgICAgICAgICAgJHt2YWx1ZVRleHR9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tc3VmZml4XCIgPlxuICAgICAgICAgICAgICAgICAgJHtzdWZmaXh9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAke2xpbmtTdHJ9XG5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgJHt0b29sdGlwU3RyfVxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICByZXR1cm4gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuICB9LFxuXG4gIGNyZWF0ZUxpc3QocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdGFic0NvbnRhaW5lciA9IFwiXCI7XG5cbiAgICBpZiAocHJvcHMudGFicykge1xuICAgICAgbGV0IHRhYnMgPSBcIlwiO1xuICAgICAgcHJvcHMudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgdGFicyArPSBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3gtdGFiXCIgdGFiLWtleT1cIiR7dGFiLmtleX1cIj5cbiAgICAgICAgICAke3RhYi5uYW1lfVxuICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSk7XG5cbiAgICAgIHRhYnNDb250YWluZXIgPSBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3gtdGFiLWNvbnRhaW5lclwiPlxuICAgICAgICAke3RhYnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9XG5cbiAgICBsZXQgc2VhcmNoSW5wdXQgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICA8aW5wdXQgaWQ9XCJcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJcIiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiYnVzY2FyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWFyY2gtaW5wdXQtY2xlYXJcIj5cbiAgICAgICAgICR7aWNvbnMuY2xvc2VJY29ufVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG5cbiAgICBsZXQgc3RyID0gYFxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIn0gXCIgaW5wdXQta2V5PVwiJHtcbiAgICAgICAgcHJvcHMua2V5IHx8IFwiXCJcbiAgICAgIH1cIj5cbiAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlIGQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgJHt0YWJzQ29udGFpbmVyfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG5cbiAgICAgICAgICAgICR7c2VhcmNoSW5wdXR9XG4gICAgICBgO1xuXG4gICAgLy9UT0RPIG9idGVuZXIgaW5wdXQgc2VndW4gZmlsYVxuICAgIGlmIChwcm9wcy5pbnB1dHMpIHtcbiAgICAgIHByb3BzLmlucHV0cy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgIGlmIChpLmlzVGl0bGUpIHtcbiAgICAgICAgICBsZXQgdG9vbHRpcCA9IFwiXCI7XG4gICAgICAgICAgbGV0IGljb24gPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGkudG9vbHRpcCkge1xuICAgICAgICAgICAgdG9vbHRpcCA9IGBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtpLnRvb2x0aXB9XG4gICAgICAgICAgICAgICAgICAgICR7aS5zdWZmaXggPyBcIihcIiArIGkuc3VmZml4ICsgXCIpXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaS5jb2xvckljb24pIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGkuY29sb3JJY29uKSkge1xuICAgICAgICAgICAgICBpY29uID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb25cIiBzdHlsZT1cImJhY2tncm91bmQ6JHtpLmNvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbiAke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uIGlzLXRpdGxlICAke1xuICAgICAgICAgICAgICBpY29uID8gXCJoYXMtaWNvblwiIDogXCJcIlxuICAgICAgICAgICAgfVwiIGlucHV0LXRhYi1rZXk9XCIke2kudGFiS2V5IHx8IFwiXCJ9XCIgbGFiZWw9XCIke2kubGFiZWx9XCI+XG4gICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICAke2ljb24gfHwgXCJcIn1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10aXRsZSB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgJHtpLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAke3Rvb2x0aXB9XG4gICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCB0b29sdGlwID0gXCJcIjtcbiAgICAgICAgICBsZXQgaWNvbiA9IG51bGw7XG4gICAgICAgICAgbGV0IGxpbmsgPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKGkudG9vbHRpcCkge1xuICAgICAgICAgICAgdG9vbHRpcCA9IGBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtpLnRvb2x0aXB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpLmNvbG9ySWNvbikge1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoaS5jb2xvckljb24pKSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvblwiIHN0eWxlPVwiYmFja2dyb3VuZDoke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWNvbiA9IGA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1pY29uICR7aS5jb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkubGluaykge1xuICAgICAgICAgICAgbGluayA9IGA8YSBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tbGlua1wiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIke2kubGlua31cIj5cbiAgICAgICAgICAgICAgICAke2ljb25zLmxpbmtJY29ufVxuICAgICAgICAgICAgICAgIDwvYT4gYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbiAgJHtcbiAgICAgICAgICAgICAgaWNvbiA/IFwiaGFzLWljb25cIiA6IFwiXCJcbiAgICAgICAgICAgIH1cIiBpbnB1dC10YWIta2V5PVwiJHtpLnRhYktleSB8fCBcIlwifVwiIGxhYmVsPVwiJHtpLmxhYmVsfVwiPlxuICAgICAgICAgICAgICA8bGFiZWw+XG5cbiAgICAgICAgICAgICAgICAke2ljb259XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10aXRsZSB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgJHtpLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tc3VmZml4XCIgPiR7XG4gICAgICAgICAgICAgICAgICBpLnN1ZmZpeCA/IFwiKFwiICsgaS5zdWZmaXggKyBcIilcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAke2xpbmt9XG5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGFydFwiPiBzdGFydDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImVuZFwiPiBlbmQgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgJHt0b29sdGlwfVxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RyICs9IGBcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj4gYDtcblxuICAgIGxldCAkZWwgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gICAgbGV0ICR0YWJzID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaW5wdXQtYm94LXRhYlt0YWIta2V5XVwiKSB8fCBbXTtcbiAgICBsZXQgJHNlYXJjaElucHV0ID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLWlucHV0XCIpIHx8IG51bGw7XG4gICAgbGV0ICRzZWFyY2hJbnB1dENsZWFyID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLWlucHV0LWNsZWFyXCIpIHx8IG51bGw7XG5cbiAgICAkdGFicy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICB0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdElucHV0Qm94VGFiKHQsICRlbCk7XG4gICAgICAgICRzZWFyY2hJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICgkc2VhcmNoSW5wdXRDbGVhcikge1xuICAgICAgJHNlYXJjaElucHV0Q2xlYXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICRzZWFyY2hJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoJHNlYXJjaElucHV0KSB7XG4gICAgICAkc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHtcbiAgICAgICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICAgICAgJHNlYXJjaElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAkc2VhcmNoSW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgJHNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgJHRhYlNlbGVjdGVkID1cbiAgICAgICAgICAkZWwucXVlcnlTZWxlY3RvcihcIi5pbnB1dC1ib3gtdGFiW3RhYi1rZXldLmFjdGl2ZVwiKSB8fCBudWxsO1xuICAgICAgICBsZXQgJGlucHV0cyA9IFtdO1xuICAgICAgICBpZiAoJHRhYlNlbGVjdGVkKSB7XG4gICAgICAgICAgbGV0IHRhYktleSA9ICR0YWJTZWxlY3RlZC5nZXRBdHRyaWJ1dGUoXCJ0YWIta2V5XCIpO1xuICAgICAgICAgICRpbnB1dHMgPVxuICAgICAgICAgICAgJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgIFwiLm1pbmktaW5wdXQtc2VjdGlvbltpbnB1dC10YWIta2V5PSdcIiArIHRhYktleSArIFwiJ11cIlxuICAgICAgICAgICAgKSB8fCBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaW5wdXRzID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWluaS1pbnB1dC1zZWN0aW9uXCIpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgICRpbnB1dHMuZm9yRWFjaCgoJGkpID0+IHtcbiAgICAgICAgICBsZXQgbGFiZWwgPSAkaS5nZXRBdHRyaWJ1dGUoXCJsYWJlbFwiKTtcbiAgICAgICAgICBsZXQgc2VhcmNoID0gJHNlYXJjaElucHV0LnZhbHVlO1xuICAgICAgICAgIGlmIChsYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgJGkuY2xhc3NMaXN0LnJlbW92ZShcImhpZGVcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRpLmNsYXNzTGlzdC5hZGQoXCJoaWRlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdElucHV0Qm94VGFiKF8uZmlyc3QoJHRhYnMpLCAkZWwpO1xuXG4gICAgcmV0dXJuICRlbDtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBJbnB1dEJveCwgY29tbyBlbGVtZW50byBEb21cbiAgICogdW4gSW5wdXRCb3ggZXMgdW4gY29udGVuZWRvciBjb24gdW5hIGxpc3RhIGRlIGlucHV0c1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRCb3gocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBbXTtcbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgfVxuXG4gICAgbGV0IHRhYnNDb250YWluZXIgPSBcIlwiO1xuXG4gICAgaWYgKHByb3BzLnRhYnMpIHtcbiAgICAgIGxldCB0YWJzID0gXCJcIjtcbiAgICAgIHByb3BzLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgIHRhYnMgKz0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94LXRhYlwiIHRhYi1rZXk9XCIke3RhYi5rZXl9XCI+XG4gICAgICAgICAgJHt0YWIubmFtZX1cbiAgICAgICAgPC9kaXY+YDtcbiAgICAgIH0pO1xuXG4gICAgICB0YWJzQ29udGFpbmVyID0gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94LXRhYi1jb250YWluZXJcIj5cbiAgICAgICAgJHt0YWJzfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIGA7XG4gICAgfVxuXG4gICAgbGV0IHNlYXJjaElucHV0ID0gYFxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgPGlucHV0IGlkPVwiXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiBwbGFjZWhvbGRlcj1cImJ1c2NhclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VhcmNoLWlucHV0LWNsZWFyXCI+XG4gICAgICAgICAke2ljb25zLmNsb3NlSWNvbn1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuXG4gICAgbGV0IHN0ciA9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7cHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJ9IFwiIGlucHV0LWtleT1cIiR7XG4gICAgICAgIHByb3BzLmtleSB8fCBcIlwiXG4gICAgICB9XCI+XG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBkLWJsb2NrXCI+XG4gICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICR7dGFic0NvbnRhaW5lcn1cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveCBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuXG4gICAgICAgICAgICAke3NlYXJjaElucHV0fVxuICAgICAgYDtcblxuICAgIGlmIChwcm9wcy5pbnB1dHMpIHtcbiAgICAgIHByb3BzLmlucHV0cy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgIGlmIChpLmlzVGl0bGUpIHtcbiAgICAgICAgICBsZXQgdG9vbHRpcCA9IFwiXCI7XG4gICAgICAgICAgbGV0IGljb24gPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKGkudG9vbHRpcCkge1xuICAgICAgICAgICAgdG9vbHRpcCA9IGBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtpLnRvb2x0aXB9XG4gICAgICAgICAgICAgICAgICAgICR7aS5zdWZmaXggPyBcIihcIiArIGkuc3VmZml4ICsgXCIpXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaS5jb2xvckljb24pIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGkuY29sb3JJY29uKSkge1xuICAgICAgICAgICAgICBpY29uID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb25cIiBzdHlsZT1cImJhY2tncm91bmQ6JHtpLmNvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbiAke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uIGlzLXRpdGxlXCIgaW5wdXQtdGFiLWtleT1cIiR7XG4gICAgICAgICAgICAgIGkudGFiS2V5IHx8IFwiXCJcbiAgICAgICAgICAgIH1cIiBsYWJlbD1cIiR7aS5sYWJlbH1cIj5cbiAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICR7aWNvbn1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10aXRsZSB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgJHtpLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAke3Rvb2x0aXB9XG4gICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCB2YWx1ZV9mb3VuZCA9IHZhbHVlID8gdmFsdWUuZmluZCgodmFsKSA9PiB2YWwuaWQgPT0gaS5pZCkgOiBudWxsO1xuICAgICAgICAgIGxldCB2ID0gdmFsdWVfZm91bmQgfHwgXCJcIjtcbiAgICAgICAgICBsZXQgaW5wdXRWYWx1ZSA9XG4gICAgICAgICAgICBwcm9wcy52YXJOYW1lSW5wdXQgJiYgdltwcm9wcy52YXJOYW1lSW5wdXRdXG4gICAgICAgICAgICAgID8gdltwcm9wcy52YXJOYW1lSW5wdXRdXG4gICAgICAgICAgICAgIDogdi52YWx1ZTtcbiAgICAgICAgICBsZXQgdG9vbHRpcCA9IFwiXCI7XG4gICAgICAgICAgbGV0IGljb24gPSBcIlwiO1xuICAgICAgICAgIGxldCBsaW5rID0gXCJcIjtcblxuICAgICAgICAgIGlmIChpLnRvb2x0aXApIHtcbiAgICAgICAgICAgIHRvb2x0aXAgPSBgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICR7aS50b29sdGlwfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaS5jb2xvckljb24pIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGkuY29sb3JJY29uKSkge1xuICAgICAgICAgICAgICBpY29uID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb25cIiBzdHlsZT1cImJhY2tncm91bmQ6JHtpLmNvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbiAke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpLmxpbmspIHtcbiAgICAgICAgICAgIGxpbmsgPSBgPGEgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWxpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiJHtpLmxpbmt9XCI+XG4gICAgICAgICAgICAgICAgJHtpY29ucy5saW5rSWNvbn1cbiAgICAgICAgICAgICAgICA8L2E+IGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24gJHtcbiAgICAgICAgICAgICAgaWNvbiA/IFwiaGFzLWljb25cIiA6IFwiXCJcbiAgICAgICAgICAgIH1cIiBpbnB1dC10YWIta2V5PVwiJHtpLnRhYktleSB8fCBcIlwifVwiIGxhYmVsPVwiJHtpLmxhYmVsfVwiPlxuICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWluaS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQtaWQ9XCIke2kuaWQgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7aS5rZXkgfHwgaS5sYWJlbH1cIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtpbnB1dFZhbHVlIHx8IFwiXCJ9XCI+XG5cbiAgICAgICAgICAgICAgICAke2ljb24gfHwgXCJcIn1cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRpdGxlIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAke2kubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1zdWZmaXhcIiA+JHtcbiAgICAgICAgICAgICAgICAgIGkuc3VmZml4ID8gXCIoXCIgKyBpLnN1ZmZpeCArIFwiKVwiIDogXCJcIlxuICAgICAgICAgICAgICAgIH08L2Rpdj5cblxuICAgICAgICAgICAgICAgICR7bGlua31cblxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAke3Rvb2x0aXB9XG4gICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzdHIgKz0gYFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PiBgO1xuXG4gICAgbGV0ICRlbCA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgICBsZXQgJHRhYnMgPSAkZWwucXVlcnlTZWxlY3RvckFsbChcIi5pbnB1dC1ib3gtdGFiW3RhYi1rZXldXCIpIHx8IFtdO1xuICAgIGxldCAkaW5wdXRzID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dC5taW5pLWlucHV0XCIpIHx8IFtdO1xuICAgIGxldCAkc2VhcmNoSW5wdXQgPSAkZWwucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtaW5wdXRcIikgfHwgbnVsbDtcbiAgICBsZXQgJHNlYXJjaElucHV0Q2xlYXIgPSAkZWwucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtaW5wdXQtY2xlYXJcIikgfHwgbnVsbDtcblxuICAgICR0YWJzLmZvckVhY2goKHQpID0+IHtcbiAgICAgIHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0SW5wdXRCb3hUYWIodCwgJGVsKTtcbiAgICAgICAgJHNlYXJjaElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgJHNlYXJjaElucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKCRzZWFyY2hJbnB1dENsZWFyKSB7XG4gICAgICAkc2VhcmNoSW5wdXRDbGVhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgJHNlYXJjaElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgJHNlYXJjaElucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgkc2VhcmNoSW5wdXQpIHtcbiAgICAgICRzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgICAkc2VhcmNoSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAkc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB7XG4gICAgICAgIGxldCAkdGFiU2VsZWN0ZWQgPVxuICAgICAgICAgICRlbC5xdWVyeVNlbGVjdG9yKFwiLmlucHV0LWJveC10YWJbdGFiLWtleV0uYWN0aXZlXCIpIHx8IG51bGw7XG4gICAgICAgIGxldCAkaW5wdXRzID0gW107XG4gICAgICAgIGlmICgkdGFiU2VsZWN0ZWQpIHtcbiAgICAgICAgICBsZXQgdGFiS2V5ID0gJHRhYlNlbGVjdGVkLmdldEF0dHJpYnV0ZShcInRhYi1rZXlcIik7XG4gICAgICAgICAgJGlucHV0cyA9XG4gICAgICAgICAgICAkZWwucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgXCIubWluaS1pbnB1dC1zZWN0aW9uW2lucHV0LXRhYi1rZXk9J1wiICsgdGFiS2V5ICsgXCInXVwiXG4gICAgICAgICAgICApIHx8IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRpbnB1dHMgPSAkZWwucXVlcnlTZWxlY3RvckFsbChcIi5taW5pLWlucHV0LXNlY3Rpb25cIikgfHwgW107XG4gICAgICAgIH1cbiAgICAgICAgJGlucHV0cy5mb3JFYWNoKCgkaSkgPT4ge1xuICAgICAgICAgIGxldCBsYWJlbCA9ICRpLmdldEF0dHJpYnV0ZShcImxhYmVsXCIpO1xuICAgICAgICAgIGxldCBzZWFyY2ggPSAkc2VhcmNoSW5wdXQudmFsdWU7XG4gICAgICAgICAgaWYgKGxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAkaS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGkuY2xhc3NMaXN0LmFkZChcImhpZGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0SW5wdXRCb3hUYWIoXy5maXJzdCgkdGFicyksICRlbCk7XG5cbiAgICAkaW5wdXRzLmZvckVhY2goKGkpID0+IHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKGksICRlbCwgcHJvcHMpKTtcblxuICAgIHJldHVybiAkZWw7XG4gIH0sXG5cbiAgc2VsZWN0SW5wdXRCb3hUYWIoJHRhYiwgJGVsKSB7XG4gICAgbGV0ICR0YWJzID0gJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaW5wdXQtYm94LXRhYlt0YWIta2V5XVwiKSB8fCBbXTtcbiAgICBsZXQgJGlucHV0U2VjdGlvbnMgPSAkZWwucXVlcnlTZWxlY3RvckFsbChcIi5taW5pLWlucHV0LXNlY3Rpb25cIikgfHwgW107XG5cbiAgICAkdGFicy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICB0LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgfSk7XG5cbiAgICBpZiAoJHRhYikge1xuICAgICAgJHRhYi5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXG4gICAgICAkaW5wdXRTZWN0aW9ucy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LXRhYi1rZXlcIik7XG4gICAgICAgIGlmIChrZXkgPT0gJHRhYi5nZXRBdHRyaWJ1dGUoXCJ0YWIta2V5XCIpKSB7XG4gICAgICAgICAgaS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpLmNsYXNzTGlzdC5hZGQoXCJoaWRlXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgQ2hlY2tib3gsIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dENoZWNrYm94KHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgfVxuICAgIGxldCByID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwifSBcIiBpbnB1dC1rZXk9XCIke1xuICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgfVwiPlxuICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiIGlucHV0LWtleT1cIiR7XG4gICAgICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgICAgIH1cIiAke3ZhbHVlID8gXCJjaGVja2VkXCIgOiBcIlwifT5cbiAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+YCk7XG5cbiAgICByZXR1cm4gcjtcbiAgfSxcblxuICBjcmVhdGVJbnB1dEJ1dHRvbnNHcm91cChwcm9wcykge1xuICAgIGxldCAkY29udGFpbmVyID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwifSBcIiBpbnB1dC1rZXk9XCIke1xuICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1ncm91cFwiPiA8L2Rpdj5cbiAgICAgIDwvZGl2PmApO1xuXG4gICAgbGV0ICRjb250YWluZXJCdXR0b25Hcm91cCA9ICRjb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5idXR0b25zLWdyb3VwXCIpO1xuXG4gICAgbGV0ICRidXR0b25zID0gW107XG4gICAgJGJ1dHRvbnMgPSBwcm9wcy5idXR0b25zLm1hcCgoYnV0dG9uUHJvcCkgPT4ge1xuICAgICAgbGV0IGJ1dHRvblN0ciA9IGBcbiAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICBuYW1lPVwiJHtidXR0b25Qcm9wLmtleSB8fCBcIlwifVwiIFxuICAgICAgICAgIGlucHV0LWtleT1cIiR7YnV0dG9uUHJvcC5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgIGNsYXNzPVwiY2FwLWJ0bi1vdXRsaW5lIGNhcC1idG4tc20gJHtcbiAgICAgICAgICAgIGJ1dHRvblByb3AuaXNTZWxlY3RlZCA/IFwic2VsZWN0ZWRcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiPlxuICAgICAgICAgICR7YnV0dG9uUHJvcC5sYWJlbH1cbiAgICAgICAgPC9idXR0b24+YDtcblxuICAgICAgbGV0ICRidXR0b24gPSBkb21VdGlscy5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYnV0dG9uU3RyKTtcbiAgICAgICRjb250YWluZXJCdXR0b25Hcm91cC5hcHBlbmQoJGJ1dHRvbik7XG5cbiAgICAgICRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5pc1NlbGVjdGFibGUpIHtcbiAgICAgICAgICAkYnV0dG9ucy5mb3JFYWNoKCgkYikgPT4gJGIuY2xhc3NMaXN0LnJlbW92ZShcInNlbGVjdGVkXCIpKTtcbiAgICAgICAgICAkYnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBidXR0b25Qcm9wLm9uQ2xpY2soeyBwcm9wcywgZXZlbnQ6IGUsIGJ1dHRvbnNFbGVtZW50czogJGJ1dHRvbnMgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAkYnV0dG9uO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICRjb250YWluZXI7XG4gIH0sXG5cbiAgY3JlYXRlSW5wdXRCdXR0b24ocHJvcHMpIHtcbiAgICBsZXQgciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIn0gXCIgaW5wdXQta2V5PVwiJHtcbiAgICAgICAgcHJvcHMua2V5IHx8IFwiXCJcbiAgICAgIH1cIj5cbiAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgbmFtZT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2FwLWJ0bi1vdXRsaW5lXCI+XG4gICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgYnV0dG9uID0gci5xdWVyeVNlbGVjdG9yKFwiYnV0dG9uXCIpO1xuICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHByb3BzLm9uQ2xpY2soeyBwcm9wcywgZXZlbnQ6IGUgfSkpO1xuXG4gICAgcmV0dXJuIHI7XG4gIH0sXG5cbiAgYWRkS2V5RG93bklucHV0RXZlbnRzKCRpbnB1dCwgJGlucHV0Q29udGFpbmVyLCBwcm9wcykge1xuICAgICRpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAvL0VOVEVSXG4gICAgICAgICRpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInNhdmVNdWx0aUlucHV0XCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgIC8vRVNDXG4gICAgICAgICRpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNhbmNlbE11bHRpSW5wdXRcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgJGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgaWYgKHByb3BzLm9uSW5wdXQpIHtcbiAgICAgICAgcHJvcHMub25JbnB1dCh7XG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgICAgdmFsdWU6IGUuc3JjRWxlbWVudC52YWx1ZSxcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAkZWxlbWVudDogJGlucHV0Q29udGFpbmVyLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBjcmVhdGVDb250ZXh0TWVudSh7XG4gICAgY29uZmlnLFxuICAgIHRhcmdldCxcbiAgICAkY2FwaWJhcmFFbGVtID0gbnVsbCxcbiAgICBldnQgPSBudWxsLFxuICAgIGRhdGUgPSBudWxsLFxuICAgIGl0ZW0gPSBudWxsLFxuICAgIHNlbGVjdGVkID0gW10sXG4gICAgdGFiU2VsZWN0ZWQgPSBudWxsLFxuICAgIGxlZnQgPSBudWxsLFxuICAgIHRvcCA9IG51bGwsXG4gICAgbmFtZSA9IFwiXCIsXG4gIH0pIHtcbiAgICBpZiAoXG4gICAgICBjb25maWcudGltZWxpbmUuY29udGV4dE1lbnUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmNvbnRleHRNZW51Lm9wdGlvbnMgPT0gdW5kZWZpbmVkXG4gICAgKVxuICAgICAgcmV0dXJuIHsgZWxlbTogbnVsbCwgaXNWaXNpYmxlOiBmYWxzZSB9O1xuXG4gICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgbGV0IHN0eWxlID0gXCJcIjtcbiAgICBsZXQgc3RySHRtbCA9IFwiXCI7XG4gICAgbGV0IGxlZnRQb3NpdGlvbiA9IG51bGw7XG4gICAgbGV0IHRvcFBvc2l0aW9uID0gbnVsbDtcbiAgICBsZXQgaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICBsZXQgYm91bmRSZWN0Q2FwaWJhcmEgPSBudWxsO1xuICAgIGxldCBnYXAgPSAxNTsgLy9weFxuXG4gICAgaWYgKCRjYXBpYmFyYUVsZW0pIHtcbiAgICAgIGJvdW5kUmVjdENhcGliYXJhID0gJGNhcGliYXJhRWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG5cbiAgICBpZiAoZXZ0ICYmIGJvdW5kUmVjdENhcGliYXJhKSB7XG4gICAgICBsZWZ0ID0gZXZ0LmNsaWVudFg7XG4gICAgICB0b3AgPSBldnQuY2xpZW50WSAtIGJvdW5kUmVjdENhcGliYXJhLnRvcDtcbiAgICB9XG5cbiAgICBpZiAobGVmdCkge1xuICAgICAgbGVmdFBvc2l0aW9uID0gbGVmdDtcbiAgICB9XG5cbiAgICBpZiAodG9wKSB7XG4gICAgICB0b3BQb3NpdGlvbiA9IHRvcDtcbiAgICB9XG5cbiAgICBpZiAoKGxlZnRQb3NpdGlvbiAhPT0gbnVsbCkgJiAodG9wUG9zaXRpb24gIT09IG51bGwpKSB7XG4gICAgICBpZiAoYm91bmRSZWN0Q2FwaWJhcmEpIHtcbiAgICAgICAgbGV0IHRyYW5zZm9ybVN0eWxlID0gXCJcIjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRvcFBvc2l0aW9uID4gKGJvdW5kUmVjdENhcGliYXJhLmhlaWdodCAqIDIpIC8gNiAmJlxuICAgICAgICAgIHRvcFBvc2l0aW9uIDw9IChib3VuZFJlY3RDYXBpYmFyYS5oZWlnaHQgKiA0KSAvIDZcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJhbnNmb3JtU3R5bGUgKz0gYHRyYW5zbGF0ZVkoLTUwJSlgO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3BQb3NpdGlvbiA+IChib3VuZFJlY3RDYXBpYmFyYS5oZWlnaHQgKiA0KSAvIDYpIHtcbiAgICAgICAgICB0cmFuc2Zvcm1TdHlsZSArPSBgdHJhbnNsYXRlWSgtMTAwJSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxlZnRQb3NpdGlvbiA+IChib3VuZFJlY3RDYXBpYmFyYS53aWR0aCAqIDQpIC8gNikge1xuICAgICAgICAgIHRyYW5zZm9ybVN0eWxlICs9IGB0cmFuc2xhdGVYKC0xMDAlKWA7XG4gICAgICAgICAgbGVmdFBvc2l0aW9uIC09IGdhcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZWZ0UG9zaXRpb24gKz0gZ2FwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmFuc2Zvcm1TdHlsZSAhPSBcIlwiKSB7XG4gICAgICAgICAgc3R5bGUgKz0gYCB0cmFuc2Zvcm06ICR7dHJhbnNmb3JtU3R5bGV9O2A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3R5bGUgKz0gYHRvcDogJHt0b3BQb3NpdGlvbn1weDsgbGVmdDogJHtsZWZ0UG9zaXRpb259cHg7YDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xhc3NOYW1lICs9IFwiY20taGlkZVwiO1xuICAgICAgaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc3RySHRtbCArPSBgIDxkaXYgY2xhc3M9XCJjYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAke2NsYXNzTmFtZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcC1jb250ZXh0LW1lbnVcIiBzdHlsZT1cIiR7c3R5bGV9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0ICRjb250ZXh0TWVudUNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RySHRtbCk7XG4gICAgbGV0ICRjb250ZXh0TWVudSA9ICRjb250ZXh0TWVudUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmNhcC1jb250ZXh0LW1lbnVcIik7XG4gICAgbGV0IGhhc1NvbWVvcHRpb24gPSBmYWxzZTtcblxuICAgIGNvbmZpZy50aW1lbGluZS5jb250ZXh0TWVudS5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgaWYgKG9wdGlvbi5zaG93SWYpIHtcbiAgICAgICAgbGV0IHNob3cgPSBvcHRpb24uc2hvd0lmKHsgaXRlbSwgZGF0ZSwgc2VsZWN0ZWQsIG5hbWUsIHRhYlNlbGVjdGVkIH0pO1xuICAgICAgICBpZiAoIXNob3cpIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzRW5hYmxlZCA9IHRydWU7XG4gICAgICBsZXQgaXNDbGlja2VhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChvcHRpb24uZW5hYmxlSWYpIHtcbiAgICAgICAgaXNFbmFibGVkID0gb3B0aW9uLmVuYWJsZUlmKHtcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB0YWJTZWxlY3RlZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBvcHRpb25DbGFzc05hbWUgPSBcIlwiO1xuICAgICAgbGV0IHN0ckljb24gPSBcIlwiO1xuICAgICAgbGV0IGxhYmVsID0gXCJcIjtcblxuICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICAgICAgb3B0aW9uQ2xhc3NOYW1lICs9IFwiaXMtZGlzYWJsZWQgXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb24uaXNEaXZpZGVyKSB7XG4gICAgICAgIGlzQ2xpY2tlYWJsZSA9IGZhbHNlO1xuICAgICAgICBvcHRpb25DbGFzc05hbWUgKz0gXCJpcy1kaXZpZGVyIFwiO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uLmxhYmVsKSB7XG4gICAgICAgIGxhYmVsID0gYDxzcGFuPiR7b3B0aW9uLmxhYmVsfTwvc3Bhbj5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uLmljb24pIHtcbiAgICAgICAgc3RySWNvbiA9IGA8ZGl2IGNsYXNzPVwiY2FwLWNvbnRleHQtbWVudV9pdGVtX2ljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCIke29wdGlvbi5pY29ufVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3B0aW9uU3RySHRtbCA9IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcC1jb250ZXh0LW1lbnVfaXRlbSAke29wdGlvbkNsYXNzTmFtZX1cIj5cbiAgICAgICAgICAke3N0ckljb259XG4gICAgICAgICAgJHtsYWJlbH1cbiAgICAgICAgPC9kaXY+YDtcblxuICAgICAgbGV0ICRvcHRpb24gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKG9wdGlvblN0ckh0bWwpO1xuXG4gICAgICBpZiAoaXNFbmFibGVkICYmIGlzQ2xpY2tlYWJsZSkge1xuICAgICAgICAkb3B0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZ0Q2xpY2spID0+XG4gICAgICAgICAgb3B0aW9uLm9uQ2xpY2soe1xuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgZXZ0OiBldnRDbGljayxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICB0YWJTZWxlY3RlZCxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJG9wdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2dENsaWNrKSA9PiB7XG4gICAgICAgICAgZXZ0Q2xpY2sucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldnRDbGljay5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgICRjb250ZXh0TWVudS5hcHBlbmQoJG9wdGlvbik7XG4gICAgICBoYXNTb21lb3B0aW9uID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBlbGVtOiAkY29udGV4dE1lbnVDb250YWluZXIsXG4gICAgICBpc1Zpc2libGUsXG4gICAgfTtcbiAgfSxcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQVFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQVBBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFIQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBSEE7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdDQTtBQStDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0NBO0FBK0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0NBO0FBK0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3Q0E7QUErQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBSEE7QUFXQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFIQTtBQVVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFIQTtBQVlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUhBO0FBYUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFIQTtBQVVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQTVEQTtBQUNBO0FBOERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBU0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFTQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWEE7QUFhQTtBQUlBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUF0dElBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/util/tableElements.js\n");
|
|
258
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util_domUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/domUtils */ \"./src/util/domUtils.js\");\n/* harmony import */ var _util_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/utils */ \"./src/util/utils.js\");\n/* harmony import */ var _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/dateUtils */ \"./src/util/dateUtils.js\");\n/* harmony import */ var _util_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/icons */ \"./src/util/icons.js\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * Crea elemento Table\n * Contendrá los elementos que apareceran dentro de la tabla de planilla\n * Se Usa para :\n * - Agregar background con patron estilo tabla\n * - Agregar dayMouseOver, div que indica posicion de mouse\n * - Agregar DetailDay, para detalles de datos en tabla\n * - Agregar SelectedContainer, para dias seleccionados\n * - Agregar FloatBoxContainer, para visualizacion de datos en tabla\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom creado\n */\n createAgTable(config) {\n let e = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"capibara\"\n });\n\n if (config.timeline.dark) {\n e.classList.add(\"dark-theme\");\n }\n\n if (config.timeline.header.extend.isShow) {\n e.classList.add(\"header-extended\");\n }\n\n return e;\n },\n\n /**\n * Recrea Background, que es el fondo grid, como tabla\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento relacionado, donde se cre el background\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawBackground(config, $elem) {\n return this.createBackground(config, $elem);\n },\n\n /**\n * Crea y posiciona fondo de tabla\n * Este fondo contiene un patron de CSS que le da la apariencia de tabla\n * por lo cual se debe reposicionar segun la fecha de inicio, para hacer\n * calzar los fines de semana\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} [$elem = null] - Elemento background, si es null, lo crea\n * @return {Object} elemento Dom Background\n */\n createBackground(config, $elem = null) {\n let {\n height,\n width,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n let start = new Date(config.timeline.start);\n let end = new Date(config.timeline.end);\n end.setTime(end.getTime() + _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].dayInMilliseconds); // add 24 hours\n\n let dCorrected = new Date(start.valueOf() + start.getTimezoneOffset() * 60000);\n let weekDay = dCorrected.getDay();\n let diffWeekDays = (weekDay - 1) * dayWidth * -1;\n $elem = $elem || _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"background-grid\"\n });\n $elem.style[\"background-position\"] = diffWeekDays + \"px 0, 0 0, \" + diffWeekDays + \"px 0\";\n $elem.style.width = width + \"px\";\n $elem.style.height = height + 1 + \"px\";\n return $elem;\n },\n\n /**\n * Crea Plot Container Vertical\n * Los plots son elementos que agregan secciones de fondo en la planilla\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom plotVerticalContainer\n */\n createPlotVerticalContainer(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"plot-vertical-container\"\n });\n return this.redrawPlotVerticalContainer(config, $elem);\n },\n\n createPlotHorizontalContainer(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"plot-horizontal-container\"\n });\n return this.redrawPlotHorizontalContainer(config, $elem);\n },\n\n /**\n * Recrea plotVerticalContainer, usando elemento existente\n * usa un elemento existente para usar la funcion para redibujar el elemento\n *\n * Los Plots se insertan como divs, con posicion especificada,\n * con ancho de dia\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea plotVerticalContainer\n * @return {Object} Elemento Dom plotVerticalContainer\n */\n redrawPlotVerticalContainer(config, $elem) {\n $elem.innerHTML = \"\";\n\n if (config.timeline.plots && config.timeline.plots.vertical) {\n let {\n height,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n config.timeline.plots.vertical.forEach(p => {\n let diffDays = Math.floor(_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, p.date));\n let left = diffDays * dayWidth;\n let plot = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"plot-vertical\", p.className || \"\"],\n style: {\n \"margin-left\": left + \"px\",\n height: height + \"px\"\n }\n });\n $elem.appendChild(plot);\n });\n }\n\n return $elem;\n },\n\n redrawPlotHorizontalContainer(config, $elem) {\n $elem.innerHTML = \"\";\n\n if (config.timeline.plots && config.timeline.plots.horizontal) {\n let {\n width,\n itemHeight\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n config.timeline.plots.horizontal.forEach(p => {\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, p.idNode, p.typeNode);\n let topPosition = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item, \"parent\");\n let plot = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"plot-horizontal\", p.className || \"\"],\n style: {\n \"margin-top\": topPosition * itemHeight + \"px\",\n width: width + \"px\"\n }\n });\n $elem.appendChild(plot);\n });\n }\n\n return $elem;\n },\n\n /**\n * Crea Corner Izquierdo\n * Se usa para :\n * - titulos relacionados con los datos del sidebar izquierdo\n * - titulos para inputs de header, absolute a la derecha\n * - boton para mostrar/ocultar sidebar izquierdo\n * - promedios\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner\n */\n createCorner(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"corner\"\n });\n return this.redrawCorner($elem, config, tab);\n },\n\n redrawCorner($elem, config, tab = null) {\n let labelsInitialCorner = config.timeline.nav.left.initial.vars.filter(v => v.onlyTab == undefined || v.onlyTab && tab && v.onlyTab == tab.key).map(d => `<span class=\"item-col\">${d.label}</span>`).join(\"\");\n let labelsExtendCorner = config.timeline.nav.left.extend.vars.filter(v => v.onlyTab == undefined || v.onlyTab && tab && v.onlyTab == tab.key).map(d => `<span class=\"item-col\">${d.label}</span>`).join(\"\");\n let labelsHeaderExtend = config.timeline.header.extend.data.map(d => {\n if (d.isHidden) return \"\";\n let avg = \"\";\n let tooltip = \"\";\n let className = \"\";\n let isAccent = d.isAccent;\n\n if (d.average) {\n avg = ` <span class=\"average \"> ( <span> <span class=\"symbol\">x̄</span> ${d.average} </span>) </span> `;\n tooltip = `cap-tooltip=\"Promedio ${d.label} : ${d.average} ${d.suffix || \"\"}\"`;\n }\n\n if (d.color) {\n if (isAccent) {\n className = d.color ? \"c-\" + d.color + \"--background\" : \"\";\n } else {\n className = d.color ? \"c-\" + d.color + \"--text \" : \"\";\n }\n }\n\n return `<div class=\"input-title-container ${isAccent ? \"input-title--accent\" : \"\"} ${d.isPersistent ? \"persistent\" : \"\"}\">\n <span ${tooltip} class=\"input-title ${className}\">\n ${avg}\n ${d.label}\n </span>\n\n </div>`;\n }).join(\"\");\n let toggleSidebarBtnString = `\n <button toggle-sidebar class=\"cap-btn-icon cap-btn-icon-raised cap-btn-toggle-sidebar \">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronRight}\n </button> `;\n\n if (config.timeline.nav.left.hideToggleSidebarButton) {\n toggleSidebarBtnString = \"\";\n }\n\n let template = `<div>\n\n ${toggleSidebarBtnString}\n <div class=\"corner-title\">\n <span class=\"bottom-text\">\n ${config.timeline.corner.left.label}\n </span>\n </div>\n\n <div class=\"initial-corner\">\n <div class=\"initial-corner-title\">\n <span class=\"bottom-container hide\">\n ${config.timeline.corner.initial.label}\n </span>\n\n <div class=\"bottom-container\">\n ${labelsInitialCorner}\n </div>\n\n </div>\n </div>\n\n\n <div class=\"extend-corner\">\n <div class=\"ex-corner-title\">\n <span class=\"bottom-container hide\">\n ${config.timeline.corner.extend.label}\n </span>\n\n <div class=\"bottom-container\">\n ${labelsExtendCorner}\n </div>\n\n </div>\n </div>\n\n\n <div class=\"cap-btn-nav-corner\">\n <div class=\"input-titles\">\n ${labelsHeaderExtend}\n </div>\n </div>\n\n <div class=\"progress-bar progress-bar-left hide-progress\"></div>\n\n </div>`;\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(template);\n $elem.innerHTML = \"\";\n $elem.append(r);\n let toggleSidebar = $elem.querySelector(\"[toggle-sidebar]\");\n\n if (toggleSidebar) {\n toggleSidebar.addEventListener(\"click\", e => {\n r.dispatchEvent(new CustomEvent(\"toggleSidebar\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n return $elem;\n },\n\n /**\n * Crea Corner Derecho\n * Se usa para :\n * - titulos relacionados con los datos del sidebar Derecho\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom corner\n */\n createCornerRight(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n classNames: [\"corner\", \"right\"]\n });\n return this.redrawCornerRight($elem, config, tab);\n },\n\n redrawCornerRight($el, config, tab = null) {\n let label = \"\";\n\n if (config.timeline.corner.right.label) {\n ` <span>\n ${config.timeline.corner.right.label}\n </span>`;\n }\n\n let str = `\n <div class=\"corner-title\">\n ${label}\n <div class=\"btn-container\"></div>\n </div>\n <div class=\"progress-bar progress-bar-right hide-progress\"></div>\n `;\n $el.innerHTML = str.trim();\n let $btnContainer = $el.querySelector(\".btn-container\");\n\n if (config.timeline.corner.right.buttons) {\n config.timeline.corner.right.buttons.forEach(btn => {\n let isEnabled = btn.getIsEnabled ? btn.getIsEnabled() : true;\n\n if (isEnabled) {\n let $btn = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <button class=\"corner-btn cap-btn-raised\">\n ${btn.label || \"\"}\n </button> `);\n\n if (btn.onClick) {\n $btn.addEventListener(\"click\", btn.onClick);\n }\n\n $btnContainer.appendChild($btn);\n }\n });\n }\n\n if (config.timeline.corner.right.inputs) {\n config.timeline.corner.right.inputs.forEach(input => {\n let $input = this.createCornerRightInput({\n inputConfig: input\n });\n $btnContainer.appendChild($btn);\n });\n }\n\n return $el;\n },\n\n createCornerRightInput({\n inputConfig,\n dataDay = null,\n daySelected = null\n }) {\n let r = null;\n\n switch (inputConfig.type) {\n case \"autocomplete-crud\":\n r = this.createCornerRightInputAutocompleteCrud({\n inputConfig,\n dataDay,\n daySelected\n });\n break;\n }\n\n return r;\n },\n\n createCornerRightInputAutocompleteCrud({\n inputConfig,\n dataDay,\n daySelected\n }) {\n let elem = \"test\";\n return elem;\n },\n\n /**\n * Crea Header Top\n * Se usa para :\n * - Manejo de tabs\n * - Botones de navegación y selección de fecha\n * - Boton toggle Dark mode\n * - Boton toggle Header extended\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom\n */\n createHeaderTop(config, tabSelected = null) {\n return this.redrawHeaderTop(config, tabSelected, _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\"));\n },\n\n redrawHeaderTop(config, tabSelected = null, $elem) {\n let str = `\n <div class=\"header-top\">`;\n\n if (config.timeline.tabs) {\n let showTabs = true;\n\n if (config.timeline.tabs.filter(t => !t.isHidden).length == 0) {\n showTabs = false;\n }\n\n if (showTabs) {\n str += ` <div class=\"tab-select-container c-d-desktop-none c-d-mobile-flex\">\n <select class=\"tabs-select\" >`;\n config.timeline.tabs.forEach(tab => {\n if (!tab.isHidden) {\n str += ` <option ${tab == tabSelected ? 'selected=\"selected\"' : \"\"} value=\"${tab.id}\"> ${tab.label} </option>`;\n }\n });\n str += `</select> </div>`;\n str += ` <div class=\"tabs-container c-d-desktop-flex c-d-mobile-none\">`;\n config.timeline.tabs.forEach(tab => {\n if (!tab.isHidden) {\n str += ` <button\n class=\"tab ${tab.disabled ? \"disabled\" : \"\"} ${tab == tabSelected ? \"active\" : \"\"} ${tab.color}\"\n color=\"${tab.color}\"\n input-key=\"${tab.id}\"\n ${tab.tooltip ? 'cap-tooltip=\"' + tab.tooltip + '\"' : \"\"} >\n <span>${tab.label}</span>\n ${tab.icon || \"\"}\n </button>\n `;\n }\n });\n str += `</div>`;\n }\n }\n\n if (tabSelected) {\n if (tabSelected.legends) {\n str += ` \n <button toggle-legends class=\"cap-btn-icon cap-btn-icon-raised \">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].toggleLegends}\n </button> \n\n <div class=\"legends-container force-mobile-style hide\"> `;\n tabSelected.legends.forEach(legend => {\n let colorClass = \"\";\n let colorBg = \"\";\n\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(legend.color)) {\n colorBg = \"background:\" + legend.color;\n } else {\n colorClass = legend.color ? legend.color + \"--background\" : \"\";\n }\n\n str += ` <div\n class=\"legend ${legend.active ? \"active\" : \"\"}\"\n input-key=\"${legend.key}\"\n ${legend.tooltip ? `cap-tooltip=\"${legend.tooltip}\"` : \"\"} >\n <div class=\"icon-legend ${colorClass} ${legend.shape}\" style=\"${colorBg}\"></div>\n <span>${legend.label}</span>\n </div>`;\n });\n str += `</div>`;\n }\n }\n\n str += `\n\n <div class=\"spacer\"></div>\n\n\n\n <button cap-btn-prev class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].arrowLeft}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon} \n </button>\n\n\n <button cap-btn-calendar class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].calendar}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon}\n </button>\n\n <button cap-btn-next class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].arrowRight}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadingIcon}\n </button>\n\n <div class=\"spacer\"></div>\n\n <button toggle-dark class=\"cap-btn-icon cap-btn-header c-d-mobile-none ${config.timeline.withDarkToggle == false ? \"hide\" : \"\"}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].dark}\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].light}\n </button>`;\n\n if (config.timeline.header.extend.enabled !== false) {\n str += `<button toggle-header class=\"cap-btn-icon cap-btn-icon-raised\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronDown}\n </button>`;\n }\n\n str += ` <div class=\"button-right-container\"></div>\n </div>`;\n /*\n `\n <button toggle-sidebar-right class=\"cap-btn-icon cap-btn-icon-raised\">\n <span>\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z\" />\n </svg>\n </span>\n </button>\n </div>\n `;\n */\n\n let $r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $elem.replaceWith($r);\n\n if (config.timeline.header.rightButtons) {\n let $buttonContainer = $r.querySelector(\".button-right-container\");\n config.timeline.header.rightButtons.forEach(button => {\n let hasBadge = false;\n\n if (button.hasBadge) {\n hasBadge = button.hasBadge();\n }\n\n let str = `<button class=\"cap-btn-icon cap-btn-icon-raised ${hasBadge ? \"cap-btn-has-badge\" : \"\"}\">\n <span>\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"${button.icon}\" />\n </svg>\n </span>\n </button>`;\n let $button = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $button.addEventListener(\"click\", evt => button.onClick({\n evt\n }));\n $buttonContainer.append($button);\n });\n }\n\n let $toggleDark = $r.querySelector(\"[toggle-dark]\");\n\n if ($toggleDark) {\n $toggleDark.addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleDark\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n let $btnCalendar = $r.querySelector(\"[cap-btn-calendar]\");\n\n if ($btnCalendar) {\n $btnCalendar.addEventListener(\"click\", e => {\n let x = e.x;\n let y = e.y;\n $r.dispatchEvent(new CustomEvent(\"clickCalendarIcon\", {\n bubbles: true,\n cancelable: false,\n detail: {\n x,\n y\n }\n }));\n });\n }\n\n let $btnToggleHeader = $r.querySelector(\"[toggle-header]\");\n\n if ($btnToggleHeader) {\n $btnToggleHeader.addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleHeader\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n /*\n $r.querySelector(\"[toggle-sidebar-right]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"toggleSidebarRight\", {\n bubbles: true,\n cancelable: false,\n }));\n });\n */\n\n\n $r.querySelector(\"[cap-btn-prev]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerPrev\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n $r.querySelector(\"[cap-btn-calendar]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerCalendar\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n $r.querySelector(\"[cap-btn-next]\").addEventListener(\"click\", e => {\n $r.dispatchEvent(new CustomEvent(\"headerNext\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e\n }\n }));\n });\n let $toggleLegendsBtn = $r.querySelector(\"[toggle-legends]\");\n\n if ($toggleLegendsBtn) {\n $toggleLegendsBtn.addEventListener(\"click\", e => {\n let $legendContainer = $r.querySelector(\".legends-container\");\n\n if ($legendContainer) {\n $legendContainer.classList.toggle(\"hide\");\n }\n });\n }\n\n $r.querySelectorAll(\".legend\").forEach($legend => {\n $legend.addEventListener(\"click\", e => {\n let key = e.currentTarget.getAttribute(\"input-key\");\n\n if (key) {\n let legendSelected = tabSelected.legends.find(tab => tab.key === key);\n\n if (legendSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectLegendHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n legend: legendSelected,\n $legend\n }\n }));\n }\n }\n });\n });\n $r.querySelectorAll(\".tab:not(.disabled)\").forEach($tab => {\n $tab.addEventListener(\"click\", e => {\n let key = e.currentTarget.getAttribute(\"input-key\");\n\n if (key) {\n let tabSelected = config.timeline.tabs.find(tab => tab.id == key);\n\n if (tabSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectTabHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tab: tabSelected\n }\n }));\n }\n }\n });\n });\n $r.querySelectorAll(\".tabs-select:not(.disabled)\").forEach($tab => {\n $tab.addEventListener(\"change\", e => {\n let key = parseFloat(e.currentTarget.value);\n\n if (key) {\n let tabSelected = config.timeline.tabs.find(tab => tab.id == key);\n\n if (tabSelected) {\n $r.dispatchEvent(new CustomEvent(\"selectTabHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n tab: tabSelected\n }\n }));\n }\n }\n });\n });\n return $r;\n },\n\n /**\n * Crea Header\n * Se usa para :\n * - Mostrar fechas en header\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom\n */\n createHeader(config) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"header\");\n return this.redrawHeader(config, $elem);\n },\n\n /**\n * Recrea Header, usado para redibujar\n * utiliza $elem como elemento dom donde recrearlo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea Header\n * @return {Object} Elemento Dom\n */\n redrawHeader(config, $elem) {\n let datesTree = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDateTreeRange(new Date(config.timeline.start), new Date(config.timeline.end));\n let str = `<div class=\"header-container\"> `;\n Object.keys(datesTree).forEach(keyY => {\n let year = datesTree[keyY];\n str += `<div class=\"agno-calendario\">\n <span class=\"agno hide\">${keyY}</span>\n <div class=\"meses\">`;\n Object.keys(year).forEach(keyM => {\n let month = datesTree[keyY][keyM];\n str += ` <div class=\"mes-calendario\">\n <div class=\"mes ${Object.keys(month).length < 4 ? \"mes-reduced mes-reduced-\" + Object.keys(month).length : \"\"}\">\n <div class=\"mes-label\">\n ${_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getMonthByPosition(keyM)} ${keyY}\n </div>\n </div>\n <div class=\"dias\">`;\n Object.keys(month).forEach(keyD => {\n let day = datesTree[keyY][keyM][keyD];\n let isWeekend = day.isWeekend;\n let isToday = day.isToday;\n let hasAlert = config.timeline.header.dateHasAlert ? config.timeline.header.dateHasAlert(day) : false;\n let date = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(day.date);\n str += `<div class=\"dia-calendario \n ${isToday ? \"today\" : \"\"}\n ${isWeekend ? \"weekend\" : \"\"}\n ${hasAlert ? \"has-alert\" : \"\"}\n ${config.timeline.dateSelectable ? \"is-clickeable\" : \"\"}\n ${config.timeline.dateWithContextMenu ? \"is-clickeable\" : \"\"}\n \" date=\"${date}\">${keyD}</div>`;\n });\n str += `</div></div>`;\n });\n str += `</div> </div>`;\n });\n str += `</div>`;\n $elem.innerHTML = \"\";\n $elem.append(_util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str));\n let $days = $elem.querySelectorAll(\".dia-calendario[date]\");\n $days.forEach($dia => {\n if (config.timeline.dateWithContextMenu) {\n $dia.addEventListener(\"contextmenu\", evt => {\n $elem.dispatchEvent(new CustomEvent(\"contextMenuDate\", {\n bubbles: true,\n cancelable: false,\n detail: {\n $elem: $dia,\n date: $dia.getAttribute(\"date\"),\n clientX: evt.clientX,\n clientY: evt.clientY\n }\n }));\n });\n }\n\n if (config.timeline.dateSelectable) {\n $dia.addEventListener(\"click\", evt => {\n $elem.dispatchEvent(new CustomEvent(\"clickDate\", {\n bubbles: true,\n cancelable: false,\n detail: {\n $elem: $dia,\n date: $dia.getAttribute(\"date\")\n }\n }));\n });\n }\n\n if (config.timeline.onMouseOverDate) {\n $dia.addEventListener(\"mouseover\", evt => {\n config.timeline.onMouseOverDate({\n $dia,\n $elem,\n date: $dia.getAttribute(\"date\"),\n evt\n });\n });\n }\n\n if (config.timeline.onMouseOutDate) {\n $dia.addEventListener(\"mouseout\", evt => {\n config.timeline.onMouseOutDate({\n $dia,\n $elem,\n date: $dia.getAttribute(\"date\"),\n evt\n });\n });\n }\n });\n return $elem;\n },\n\n /**\n * Crea Header extended\n * Se usa para :\n * -Mostrar inputs y datos para fechas en header\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom headerExtended\n */\n createHeaderExtended(config) {\n if (config.timeline.header.extend.enabled == false) return null;\n let dates = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getDateRange(new Date(config.timeline.start), new Date(config.timeline.end));\n let str = `<div class=\"header-container-extended\">`;\n config.timeline.header.extend.data.forEach((d, d_index) => {\n if (d.isHidden) return \"\";\n let isPersistent = d.isPersistent;\n str += `<div class=\"input-list ${isPersistent ? \"persistent\" : \"\"}\">`;\n str += dates.map(date => {\n let value = \"\";\n let className = \"\";\n let isFuture = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isFuture(date);\n let isToday = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isToday(date);\n\n if (d.data) {\n let dataFounded = d.data.find(dataInput => {\n return _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isSameDate(new Date(dataInput.date), date);\n });\n\n if (dataFounded) {\n value = dataFounded.value || \"\";\n className += dataFounded.className + \" \" || false;\n }\n }\n\n if (d.editable === false || isFuture && d.editableFuture == false || isToday && d.editableToday == false) {\n return `<div>\n <span date=\"${date}\" \n index=\"${d_index}\" \n class=\" ${className} ${date.varName || \"\"} ${d.color ? \"c-\" + d.color + \"--text\" : \"\"}\" > \n ${value} \n </span>\n </div>`;\n }\n\n let isDisabled = false;\n\n if (config.timeline.editable === false) {\n isDisabled = true;\n }\n\n return `<div class=\"dia-input\">\n <input \n date=\"${date}\" \n index=\"${d_index}\" \n class=\"header-input \n ${date.varName} ${d.color ? \"c-\" + d.color + \"--text\" : \"\"}\" \n type=\"number\"\n ${isDisabled ? \"disabled\" : \"\"} \n value=\"${value}\">\n </div>`;\n }).join(\"\");\n str += `</div>`;\n });\n str += `</div>`;\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n r.querySelectorAll(\"input.header-input\").forEach(input => {\n input.addEventListener(\"input\", e => {\n let date = e.currentTarget.getAttribute(\"date\");\n let index = e.currentTarget.getAttribute(\"index\");\n let value = e.currentTarget.value;\n let typeData = config.timeline.header.extend.data[index]; //refresh config value\n\n let data = typeData.data.find(d => _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isSameDate(new Date(d.date), new Date(date)));\n\n if (data) {\n data.value = value;\n } else {\n typeData.data.push({\n date: date,\n value: value\n });\n }\n\n r.dispatchEvent(new CustomEvent(\"changeInputHeader\", {\n bubbles: true,\n cancelable: false,\n detail: {\n date: date,\n typeData: typeData,\n value: value\n }\n }));\n });\n });\n return r;\n },\n\n /**\n * Crear Sidebar Izquierdo\n * - Maneja items como arbol de 2 niveles (parent, children)\n * - El sidebar se divide en navList - InitialNav - extendedNav - BtnNav\n * - Se agrega itemDetail, para detalles de items\n *\n *\n * TODO: para evitar incrustar las ids en los inputs, se deben crear\n * los nodos uno por uno como elemento DOM, y agregarles los eventos directamente\n * ahora se hace seleccionando todos los inputs con querySelectorAll\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Sidebar Izquierdo\n */\n createNavLeft(config, tab = null) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"nav\", {\n className: \"left\"\n });\n return this.redrawNavLeft($elem, config, tab);\n },\n\n /**\n * Recrea Sidebar izquierdo, usado para redibujar\n * Utiliza $elem como elemento dom donde recrearlo\n *\n *\n * @param {Object} $elem - Elemento Dom donde crea el sidebar izquierdo\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom navLeft\n */\n redrawNavLeft($elem, config, tab = null) {\n let navList = \"\";\n let initialNavList = \"\";\n let exNavList = \"\";\n let btnNavList = \"\";\n let isDisabled = false;\n\n if (config.timeline.editable === false) {\n isDisabled = true;\n }\n\n config.data.forEach(d => {\n if (d.isHidden) return;\n navList += `\n <div class=\"nav-item\">\n\n\n <div class=\"nav-item-container parent\">`;\n\n if (d.children) {\n navList += `<button class=\"tree-icon ${d.isClosed ? \"\" : \"cap-rotate\"}\" item-id=\"${d.id || -1}\" type-node=\"${d.type || \"\"}\" >\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].chevronDown}\n </button>`;\n }\n\n navList += `\n <div class=\"item-title truncate full-width ${d.clickeable ? \"clickeable\" : \"\"}\n ${d.navOver ? \"hoverable\" : \"\"} \" item-id=\"${d.id || -1}\" type-node=\"${d.type || \"\"}\" >\n ${d.label}\n </div>\n </div>`;\n\n if (d.children) {\n navList += `\n <div class=\"children-items ${d.isClosed ? \"hide\" : \"\"} \" child-list=\"${d.id || -1}\">`;\n d.children.forEach(c => {\n if (c.isHidden) return;\n let lightColor = null;\n let lightClass = null;\n let lightSpan = \"\";\n let multiButtonsDetailTmpl = \"\";\n\n if (c.light) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(c.light)) {\n lightColor = c.light;\n } else {\n lightClass = c.light;\n }\n }\n\n if (c.light) {\n lightSpan = `<span \n class=\"light ${lightClass ? lightClass + \"-light\" : \"\"}\" \n style=\"${lightColor ? \"--light-color:\" + lightColor : \"\"}\">\n </span>`;\n }\n\n if (c.hasMultibuttons) {\n let iconFormatter = null;\n\n if (config.timeline.nav.left.initial.multibuttons && config.timeline.nav.left.initial.multibuttons.iconFormatter) {\n iconFormatter = config.timeline.nav.left.initial.multibuttons.iconFormatter;\n }\n\n let btnContent = iconFormatter ? iconFormatter({\n item: c,\n config\n }) : \"\";\n multiButtonsDetailTmpl = `<button class=\"multibuttons-btn\" \n item-id=\"${c.id || -1}\" \n type-node=\"${c.type || \"\"}\" \n ${isDisabled ? \"disabled\" : \"\"}>\n ${btnContent} \n </button>`;\n }\n\n navList += `\n <div class=\"child-nav-item\">\n <div class=\"nav-item-container\">\n `;\n /*\n <span class=\"nav-item-icon\">\n <svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M19,15L13,21L11.58,19.58L15.17,16H4V4H6V14H15.17L11.58,10.42L13,9L19,15Z\" />\n </svg>\n </span>\n */\n\n navList += `\n ${lightSpan}\n ${multiButtonsDetailTmpl}\n <div \n class=\"item-title ${c.clickeable ? \"clickeable\" : \"\"} ${c.navOver ? \"hoverable\" : \"\"}\" \n item-id=\"${c.id || -1}\" \n type-node=\"${c.type || \"\"}\">\n\n <div class=\"truncate\">\n ${c.label}\n </div>\n </div>\n </div>\n </div>`;\n });\n navList += `\n </div>`;\n }\n\n navList += `</div>`; //initial\n\n initialNavList += `<div class=\"initial-nav-item parent\">`;\n\n if (d.withNav) {\n config.timeline.nav.left.initial.vars.forEach(v => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(d.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n initialNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n initialNavList += `\n <div class=\"item-col has-input\">\n <input \n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n initialNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n initialNavList += `\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return;\n initialNavList += `<div class=\"child-initial-nav-item ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">`;\n\n if (c.withNav !== false) {\n config.timeline.nav.left.initial.vars.forEach(v => {\n if (v.onlyTab && tab && v.onlyTab !== tab.key) return;\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(c.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n initialNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"00\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n initialNavList += `\n <div class=\"item-col has-input\">\n <input\n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n initialNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n initialNavList += `\n </div>`;\n });\n } //Ext\n\n\n exNavList += `<div class=\"ex-nav-item parent\">`;\n\n if (d.withExNav) {\n config.timeline.nav.left.extend.vars.forEach(v => {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(d.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value.split(\":\");\n let hhValue = value[0];\n let mmValue = value[1];\n exNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n exNavList += `\n <div class=\"item-col has-input\">\n <input\n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n type-node=\"${d.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n exNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n exNavList += `\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return;\n exNavList += `<div class=\"child-ex-nav-item ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">`;\n\n if (c.withNav !== false) {\n config.timeline.nav.left.extend.vars.forEach(v => {\n if (v.onlyTab && tab && v.onlyTab !== tab.key) return;\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(c.values, v.varName);\n\n if (v.round && !isNaN(value)) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round);\n }\n\n if (v.input) {\n switch (v.input) {\n case \"hour\":\n value = value ? value.split(\":\") : [0, 0];\n let hhValue = value[0];\n let mmValue = value[1];\n exNavList += `\n <div class=\"item-col has-input\">\n <div class=\"hour-input\">\n <input type=\"number\"\n input-type=\"time\"\n max=\"23\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${hhValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"hh\">\n <span>:</span>\n <input type=\"number\"\n input-type=\"time\"\n max=\"59\"\n min=\"0\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n value=\"${mmValue}\"\n ${isDisabled ? \"disabled\" : \"\"}\n class=\"mm\">\n </div>\n </div>`;\n break;\n\n case \"text\":\n case \"number\":\n default:\n exNavList += `\n <div class=\"item-col has-input\">\n <input \n type=\"${v.input || \"text\"}\"\n input-type=\"${v.input || \"text\"}\"\n input-key=\"${v.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n type-node=\"${c.type || \"\"}\"\n ${isDisabled ? \"disabled\" : \"\"}\n value=\"${value}\"/>\n </div>`;\n }\n } else {\n exNavList += `\n <div class=\"item-col\">\n ${value}\n </div>`;\n }\n });\n }\n\n exNavList += `\n </div>`;\n });\n } //buttons\n\n\n btnNavList += `<div class=\"cap-btn-nav-item parent\">\n <div class=\"cap-btn-nav-item-content\">`;\n\n if (config.timeline.nav.left.buttons && config.timeline.nav.left.buttons.vars) {\n config.timeline.nav.left.buttons.vars.forEach(btn => {\n if (d.withBtnNav) {\n let btnContent = \"\";\n let className = btn.className || \"\";\n\n if (btn.icon) {\n btnContent = btn.icon ? btn.icon : \"\";\n }\n\n if (btn.iconFormatter) {\n btnContent = btn.iconFormatter ? btn.iconFormatter(d, btn) : \"\";\n }\n\n if (btn.shape) {\n className += \" cap-btn-\" + btn.shape;\n btnContent += `<span> ${btn.formatter ? btn.formatter(d, btn) : \"\"} </span> `;\n }\n\n if (btn.btnClassNameFormatter) {\n let newClassName = btn.btnClassNameFormatter(d, btn);\n\n if (newClassName) {\n className += \" \" + newClassName;\n }\n }\n\n btnNavList += `\n <button class=\"cap-btn-shape ${className}\"\n input-key=\"${btn.key || \"\"}\"\n item-id=\"${d.id || -1}\"\n ${isDisabled ? \"disabled\" : \"\"}\n type-node=\"${d.type || \"\"}\">\n ${btnContent}\n </button>`;\n }\n });\n }\n\n btnNavList += `\n </div>\n </div>`;\n\n if (d.children) {\n d.children.forEach(c => {\n if (c.isHidden) return; //buttons\n\n btnNavList += `<div class=\"cap-btn-child-nav-item parent ${d.isClosed ? \"hide\" : \"\"}\" child=\"${d.id || -1}\">\n <div class=\"cap-btn-nav-item-content\">`;\n\n if (config.timeline.nav.left.buttons && config.timeline.nav.left.buttons.vars) {\n config.timeline.nav.left.buttons.vars.forEach(btn => {\n if (c.withNav !== false) {\n let btnContent = \"\";\n let className = btn.className || \"\";\n\n if (btn.icon) {\n btnContent = btn.icon ? btn.icon : \"\";\n }\n\n if (btn.iconFormatter) {\n btnContent = btn.iconFormatter ? btn.iconFormatter(c, btn) : \"\";\n }\n\n if (btn.shape) {\n className += \" cap-btn-\" + btn.shape;\n btnContent += `<span> ${btn.formatter ? btn.formatter(c, btn) : \"\"} </span> `;\n }\n\n if (btn.btnClassNameFormatter) {\n let newClassName = btn.btnClassNameFormatter(c, btn);\n\n if (newClassName) {\n className += \" \" + newClassName;\n }\n }\n\n btnNavList += `\n <button class=\"cap-btn-shape ${className}\"\n input-key=\"${btn.key || \"\"}\"\n item-id=\"${c.id || -1}\"\n ${isDisabled ? \"disabled\" : \"\"}\n type-node=\"${c.type || \"\"}\">\n ${btnContent}\n </button>`;\n }\n });\n }\n\n btnNavList += `\n </div>\n </div>`;\n });\n }\n });\n let itemDetail = ` <div class=\"detail-nav-item hide\">\n ${this.getDetailNavItemContent()}\n </div>`;\n let str = `<div class=\"nav-container\">\n ${itemDetail}\n <div class=\"nav-item-list\">\n ${navList}\n </div>\n <div class=\"initial-nav-list\">\n ${initialNavList}\n </div>\n <div class=\"extend-nav-list\">\n ${exNavList}\n </div>\n <div class=\"cap-btn-nav-list\">\n ${btnNavList}\n </div>\n </div>`;\n let navContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n $elem.innerHTML = \"\";\n $elem.append(navContainer); //detalle de nav-item\n\n $elem.querySelectorAll(\".item-title.hoverable\").forEach(i => {\n i.addEventListener(\"mouseover\", e => {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPositionNavLeft(config, e, $elem);\n let itemId = i.getAttribute(\"item-id\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId);\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"overNavItem\", {\n bubbles: true,\n cancelable: false,\n detail: {\n originalEvt: e,\n item: item,\n type: typeNode,\n pos: pos\n }\n }));\n });\n }); //oculta detalle de nav-item, al salir del nav-item-list\n\n $elem.querySelectorAll(\".nav-item-list\").forEach(i => {\n i.addEventListener(\"mouseleave\", e => {\n i.dispatchEvent(new CustomEvent(\"leaveNavItem\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }); //oculta detalle de nav-item-list, al salir de nav-item\n\n $elem.querySelectorAll(\".item-title:not(.hoverable)\").forEach(i => {\n i.addEventListener(\"mousemove\", e => {\n i.dispatchEvent(new CustomEvent(\"leaveNavItem\", {\n bubbles: true,\n cancelable: false\n }));\n });\n });\n $elem.querySelectorAll(\".item-title.clickeable\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let value = i.value;\n i.dispatchEvent(new CustomEvent(\"clickNavLeftItem\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode,\n value: value\n }\n }));\n });\n });\n $elem.querySelectorAll(\".multibuttons-btn\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let pos = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].eventToPositionNavLeft(config, e, $elem);\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"clickMultiButtonsBtn\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode,\n pos,\n button: i,\n event: e\n }\n }));\n });\n });\n $elem.querySelectorAll(\"input\").forEach(i => {\n i.addEventListener(\"change\", e => {\n let inputType = i.getAttribute(\"input-type\");\n let key = i.getAttribute(\"input-key\");\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let item = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId);\n let value = i.value;\n\n if (inputType == \"time\") {\n let hh_input = i.parentElement.querySelector(\"input.hh\").value;\n let mm_input = i.parentElement.querySelector(\"input.mm\").value;\n mm_input = mm_input < 10 ? \"0\" + parseFloat(mm_input) : mm_input;\n i.parentElement.querySelector(\"input.mm\").value = mm_input;\n value = hh_input + \":\" + mm_input;\n }\n\n i.dispatchEvent(new CustomEvent(\"saveNavLeftInput\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: key,\n itemId: itemId,\n item: item,\n type: typeNode,\n value: value,\n tabSelected: tab\n }\n }));\n });\n });\n $elem.querySelectorAll(\"button.cap-btn-shape\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let key = i.getAttribute(\"input-key\");\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n i.dispatchEvent(new CustomEvent(\"clickNavLeftButton\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: key,\n itemId: itemId,\n type: typeNode\n }\n }));\n });\n });\n $elem.querySelectorAll(\"button.tree-icon\").forEach(i => {\n i.addEventListener(\"click\", e => {\n let itemId = i.getAttribute(\"item-id\");\n let typeNode = i.getAttribute(\"type-node\");\n let dataConfig = config.data.find(d => d.id == itemId);\n let $navItem = e.currentTarget.closest(\".nav-item\");\n let $children = $navItem.querySelector(\".children-items\");\n let itemsToHide = e.currentTarget.closest(\"nav.left\").querySelectorAll(\"[child='\" + itemId + \"'], [child-list='\" + itemId + \"']\");\n\n if ($children) {\n if ($children.classList.contains(\"hide\")) {\n e.currentTarget.classList.add(\"cap-rotate\");\n itemsToHide.forEach(i => i.classList.remove(\"hide\"));\n dataConfig.isClosed = false;\n } else {\n e.currentTarget.classList.remove(\"cap-rotate\");\n itemsToHide.forEach(i => i.classList.add(\"hide\"));\n dataConfig.isClosed = true;\n }\n }\n\n i.dispatchEvent(new CustomEvent(\"clickNavLeftTreeIcon\", {\n bubbles: true,\n cancelable: false,\n detail: {\n itemId: itemId,\n type: typeNode\n }\n })); //e.currentTarget.parent\n });\n });\n return $elem;\n },\n\n /**\n * Crea Html como String, para el detalle de items en el Sidebar Izquierdo\n *\n * @param {Object} [item={}] - Configuracion de item\n * @return {String} Html de ventana de detalle\n */\n getDetailNavItemContent(item = {}) {\n if (item.navOver == undefined) item.navOver = {};\n return `\n <div class=\"header-detail\">\n <div class=\"detail-title truncate\">\n ${item.label || \"\"}\n </div>\n <div class=\"detail-subtitle\">\n ${item.navOver.subtitle || \"\"}\n </div>\n <div class=\"header-chip ${item.light ? item.light + \"-light\" : \"\"} ${item.navOver.chip ? \"\" : \"hide\"}\">\n ${item.navOver.chip || \"\"}\n </div>\n </div>\n\n <div class=\"detail-container\">\n ${item.navOver.content || \"\"}\n </div>`;\n },\n\n /**\n * Crea Sidebar Derecho\n * Usado principalmente para formulario de ingreso de datos para los dias\n * seleccionados\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para la creacion del formulario\n * @return {Object} {element, inputs}, element es el elemento Dom del sidebar,\n * inputs es un array de elementos Dom de cada input creado\n * (no son elementos html de tipo input)\n */\n createNavRight(config, tab = null) {\n var $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"nav\", {\n className: \"right\"\n });\n return this.redrawNavRight(config, $elem, tab, []);\n },\n\n /**\n * Recrea Sidebar Derecho\n * Utiliza $elem como elemento dom donde recrearlo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} $elem - Elemento Dom donde crea el sidebar derecho\n * @param {Object} tab - Tab de referencia, para la creacion del formulario\n * @param {Object} dataDay - datos del dia seleccionando, para autorrelleno de formulario\n * @param {Object} daySelected - datos del dia seleccionado\n * @param {String} daySelected.date - fecha del dia seleccionado\n * @param {Object} daySelected.item - Item de Sidebar relacionado al dia seleccionado\n * @param {Object} daySelected.pos - posicion de dia seleccionado\n * @return {Object} Elemento Dom Sidebar Derecho\n */\n redrawNavRight(config, $elem, selected = null, tab = null, dataDay = null, daySelected = null) {\n let $navRight = $elem; //dom.createElement(\"nav\",{className:\"right\"});\n\n let $divContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"nav-input-container\"\n });\n let $inputs = [];\n let checkboxInputs = [];\n let inputsWithReload = [];\n let tabSelected = tab;\n selected = selected || [daySelected];\n\n if (tabSelected && tabSelected.inputs) {\n tabSelected.inputs.forEach(i => {\n if (i.disabled) return;\n let $input = this.createInput(i, dataDay, daySelected, selected, tabSelected);\n\n if ($input) {\n $divContainer.appendChild($input);\n $inputs.push($input);\n\n if (i.type == \"checkbox\") {\n checkboxInputs.push($input);\n }\n\n if (i.reloadOnSelect != null) {\n inputsWithReload.push({\n $input,\n config: i\n });\n }\n }\n });\n } //manejo de eventos para inputs con showIf\n\n\n if (checkboxInputs) {\n checkboxInputs.forEach($c => {\n //obtiene key de checkbox\n let key = $c.getAttribute(\"input-key\");\n let props = tabSelected.inputs.find(i => {\n return i.key == key;\n });\n let isChecked = false;\n\n if (dataDay) {\n isChecked = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n } //obtiene inputs relacionados desde config para mostrar/ocultar\n\n\n let inputsToHide = tabSelected.inputs.filter(i => {\n return i.showIf && i.showIf == key;\n });\n let inputsToHideKeys = inputsToHide.map(i => i.key); //obtiene inputs del dom, filtrando con inputsToHide\n\n let $inputsHidden = $inputs.filter($i => {\n let inputKey = $i.getAttribute(\"input-key\");\n return inputsToHideKeys.indexOf(inputKey) > -1;\n }); //si hay inputs,\n\n if ($inputsHidden) {\n if (!isChecked) {\n $inputsHidden.forEach($i => {\n $i.classList.add(\"hide\");\n });\n }\n\n $c.addEventListener(\"input\", e => {\n $inputsHidden.forEach($i => {\n let fn = $c.querySelector(\"input[type='checkbox']\").checked ? \"remove\" : \"add\";\n $i.classList[fn](\"hide\");\n });\n });\n }\n });\n }\n\n let saveCancelBtns = this.createNavRightbuttons(config);\n $divContainer.appendChild(saveCancelBtns);\n $navRight.innerHTML = \"\";\n $navRight.appendChild($divContainer);\n return {\n element: $navRight,\n inputs: $inputs,\n inputsWithReload,\n saveCancelBtns\n };\n },\n\n /**\n * Crea Corner inferior izquierdo, como titulo para footer\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createCornerFooter(config) {\n if (config.timeline.footer === undefined || config.timeline.footer.enabled == false) return null;\n let str = \"\";\n\n if (config.timeline.footer) {\n str += `<div class=\"corner-footer\">\n <div class=\"corner-title\">\n <span>\n ${config.timeline.footer.label}\n </span>\n </div>\n </div>`;\n }\n\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n /**\n * Crea Footer para planilla\n * Inicialmente creado para totales\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createFooter(config) {\n if (config.timeline.footer === undefined || config.timeline.footer.enabled == false) return null;\n let str = `\n <footer>\n <div class=\"footer-container\">\n `;\n config.timeline.footer.data.forEach(d => {\n str += `\n <div class=\"footer-item\">${d.value}</div>\n `;\n });\n str += `\n </div>\n </footer>\n `;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n /**\n * Crea Footer para planilla\n * Inicialmente creado para totales\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object[]} selected - array de objetos, de dias seleccionados\n * @return {Object} Elemento Dom Corner Footer\n */\n createSelectBoard(config, selected) {\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"select-container\"\n });\n return this.redrawSelectBoard($elem, selected);\n },\n\n /**\n * Crea linea vertical para fecha Actual\n *\n * @param {Object} config - Configuracion capibara\n * @return {Object} Elemento Dom Corner Footer\n */\n createTodayLine(config) {\n return this.redrawTodayLine(config, _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"today-line\"\n }));\n },\n\n /**\n * Recrea linea vertical para fecha Actual\n * si el elemento $elem no es enviado, se crea un nuevo elemento\n *\n * Si el dia actual no esta dentro del rango de fechas del config,\n * deshabilita la linea con la clase css .disable-line\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} [$elem=null] - Elemento Dom donde recrea la linea, si es null, la crea\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawTodayLine(config, $elem = null) {\n let endTime = new Date(config.timeline.end).getTime();\n let todayTime = new Date().getTime();\n let {\n height,\n dayWidth\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getTableDimensions(config);\n if ($elem == null) $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"today-line\"\n });\n\n if (endTime < todayTime) {\n $elem.classList.add(\"disable-line\");\n } else {\n $elem.classList.remove(\"disable-line\");\n }\n\n let diffDays = Math.floor(_util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDate(new Date())));\n let diff = diffDays * dayWidth;\n diff += dayWidth / 2 - 2; // para centrar linea\n\n Object.assign($elem.style, {\n \"margin-left\": diff + \"px\",\n height: height + \"px\"\n });\n return $elem;\n },\n\n /**\n * Crea elemento FloatBox, que contiene los datos que se muestra en la tabla\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para mostrar datos configurados por tab\n * @return {Object} Elemento Dom Corner Footer\n */\n createFloatBox(config, tab) {\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"float-box-container\"\n });\n return this.redrawFloatBox(config, tab, $container);\n },\n\n /**\n * Recrea elemento FloatBox, que contiene los datos que se muestra en la tabla\n * Se usa principalmente para mostrar datos en la tabla de la planilla\n * los muestra de manera flotante, calculando el Top y el Left segun la poscion\n *\n * Se consideran los elementos padres ocultos, para ocultar los datos\n *\n * Se insertan los elementos FloatBox, como elemento con datos de un item y dia especifico\n *\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} tab - Tab de referencia, para mostrar datos configurados por tab\n * @return {Object} Elemento Dom Corner Footer\n */\n redrawFloatBox(config, tab, $container) {\n $container.innerHTML = \"\"; //let tabSelected = tab || null;\n\n config.data.forEach(de => {\n if (de.isHidden) return;\n de.children.forEach(ds => {\n if (ds.isHidden) return;\n ds.data.forEach(data => {\n if ((!data.message || data.message.value == null) && (data.values == null || data.values == undefined || Object.entries(data.values).length === 0)) {\n return null;\n } //children Data\n\n\n let position = this.getPositionFloatBox(config, data, ds);\n let className = \"\";\n\n if (data.errors && data.errors.length > 0) {\n className += \"has-errors \";\n }\n\n if (de.isClosed) {\n className += \"hide \";\n }\n\n let msg = null;\n\n if (tab.floatBox && tab.floatBox.messagePath) {\n msg = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data, tab.floatBox.messagePath);\n }\n\n if (msg || data.message && data.message.value) {\n className += \"has-message \";\n }\n\n let str = `\n <div class=\"float-box ${className} \"\n style=\"${position ? position : \"\"}\"\n item-id=\"${ds.id || -1}\"\n type-node=\"${ds.type || \"\"}\"> `;\n let strExt = `\n <div class=\"float-box-ext ${de.isClosed ? \"hide\" : \"\"}\"\n style=\"${position ? position : \"\"}\"\n item-id=\"${ds.id || -1}-ext\"\n type-node=\"${ds.type || \"\"}\">\n <div class=\"long-bar-container\">`;\n\n if (tab && tab.floatBox) {\n if (tab.floatBox.plots) {\n str += `<div class=\"plot-floatbox-container\">`;\n tab.floatBox.plots.forEach(n => {\n let cssVars = \"\";\n let className = \"\";\n\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName) !== null) {\n if (n.color) {\n cssVars = `--local-color:${n.color};`;\n }\n\n className = n.className || \"\";\n str += `<div class=\"plot-floatbox ${className} ${n.style || \"\"}\" style=\"${cssVars} \"></div>`;\n }\n });\n str += `\n </div>`;\n }\n\n if (tab.floatBox.icons) {\n tab.floatBox.icons.forEach(iconConfig => {\n let className = \"\";\n let colorClass = \"\";\n let colorStyle = \"\";\n let viewBox = \"0 0 24 24\";\n let icon = iconConfig.icon || null;\n\n if (iconConfig.varName) {\n let iconVar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, iconConfig.varName);\n\n if (iconVar) {\n icon = iconVar;\n }\n }\n\n if (iconConfig.className) {\n className = iconConfig.className;\n }\n\n if (iconConfig.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(iconConfig.color)) {\n colorStyle = `--local-color: ${iconConfig.color};`;\n } else {\n colorClass = iconConfig.color;\n }\n }\n\n if (iconConfig.colorVarName) {\n let colorVar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, iconConfig.colorVarName);\n\n if (colorVar) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(colorVar)) {\n colorStyle = `--local-color: ${colorVar};`;\n } else {\n colorClass = colorVar;\n }\n }\n }\n\n str += `\n <div class=\"icon-floatbox ${className} ${colorClass ? \"has-color\" : \"\"}\" style=\"${colorStyle}\">\n <svg viewBox=\"${viewBox}\">\n <path d=\"${icon}\" />\n </svg>\n </div>\n `;\n });\n } //numeros en el floatBox\n\n\n if (tab.floatBox.nums) {\n tab.floatBox.nums.forEach(n => {\n if (tab.legends && n.tabKey) {\n let legend = tab.legends.find(l => l.key == n.tabKey);\n if (legend && !legend.active) return;\n }\n\n let dataFloatBox = null;\n let className = \"\";\n let showIf = true;\n let hideIf = false;\n let colorClass = \"\";\n let colorStyle = \"\";\n let classNamesExt = \"\";\n let colorStyleExt = \"\";\n let cssVars = \"\";\n\n if (n.varName) {\n dataFloatBox = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varName);\n }\n\n if (n.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varShow));\n dataFloatBox = dataFloatBox || \"\";\n }\n\n if (n.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.varHide));\n }\n\n if (n.shape) {\n className += \"shape-\" + n.shape;\n }\n\n if (n.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(n.color)) {\n colorStyle = `--local-color: ${n.color};`;\n } else {\n colorClass = n.color;\n }\n }\n\n if (n.longBar) {\n let longBarColor = \"\";\n let longBarOpacity = \"\";\n\n if (n.longBarColor) {\n longBarColor = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarColor);\n }\n\n if (longBarColor) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(longBarColor)) {\n colorStyleExt = `--local-color: ${longBarColor};`;\n } else {\n classNamesExt += longBarColor + \"-light \";\n }\n } else if (colorClass && colorClass != \"\") {\n classNamesExt += colorClass;\n } else if (colorStyle && colorStyle != \"\") {\n colorStyleExt = colorStyle;\n }\n\n if (n.longBarOpacity) {\n longBarOpacity = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarOpacity) || null;\n\n if (longBarOpacity) {\n colorStyleExt += \"--local-opacity: \" + longBarOpacity + \";\";\n }\n }\n\n if (n.longBarClassName) {\n classNamesExt += _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBarClassName) || \"\";\n }\n\n let longBar = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, n.longBar);\n\n if (longBar) {\n cssVars = `--long:${longBar};`;\n }\n }\n\n if (dataFloatBox !== null && showIf && !hideIf) {\n str += `<span class=\"data ${colorClass} ${className}\" style=\"${colorStyle}\">\n ${typeof dataFloatBox == \"string\" ? dataFloatBox : \"\"}\n ${typeof dataFloatBox == \"number\" ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(dataFloatBox, n.round) : \"\"}\n </span>`;\n\n if (n.longBar && cssVars) {\n strExt += `<div class=\"long-bar ${classNamesExt}\" style=\"${colorStyleExt} ${cssVars} \"></div> `;\n }\n }\n });\n } //puntos en el floatBox\n\n\n if (tab.floatBox.dots) {\n str += `<div class=\"dot-container-middle\">`;\n tab.floatBox.dots.forEach(dot => {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName) !== null) {\n let className = \"\";\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (dot.shape) {\n className += dot.shape;\n }\n\n if (dot.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(dot.color)) {\n colorStyle = `--local-color: ${dot.color}`;\n } else {\n colorClass = dot.color;\n }\n }\n\n str += `\n <div class=\"dot ${colorClass} ${className}\" style=\"${colorStyle}\" ></div>`;\n }\n });\n str += `\n </div>`;\n } //fila de puntos en floatBox\n\n\n if (tab.floatBox.rowDots) {\n tab.floatBox.rowDots.forEach(row => {\n let freeColumns = 4;\n str += `<span class=\"rowdot--row \">`;\n row.forEach(dot => {\n if (tab.legends && dot.tabKey) {\n let legend = tab.legends.find(l => l.key == dot.tabKey);\n if (legend && !legend.active) return;\n }\n\n let dataFloatBox = null;\n let className = \"\";\n let showIf = true;\n let hideIf = false;\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (dot.varName) {\n dataFloatBox = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varName);\n dataFloatBox = parseInt(dataFloatBox);\n }\n\n if (dot.varShow) {\n showIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varShow));\n dataFloatBox = dataFloatBox || \"\";\n }\n\n if (dot.varHide) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(data.values, dot.varHide));\n }\n\n if (dot.shape) {\n className += \" shape-\" + dot.shape;\n }\n\n if (dot.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(dot.color)) {\n colorStyle = `--local-color: ${dot.color}`;\n } else {\n colorClass = dot.color;\n }\n }\n\n if (dataFloatBox !== null && dataFloatBox > 0 && showIf && !hideIf && freeColumns > 0) {\n let n = dataFloatBox > freeColumns ? freeColumns : dataFloatBox;\n freeColumns -= n;\n\n for (let index = 0; index < n; index++) {\n str += `<div class=\"rowdot--dot ${colorClass} ${className}\" style=\"${colorStyle}\"></div>`;\n }\n }\n });\n str += `</span>`;\n });\n }\n }\n\n str += `\n </div>`;\n strExt += `\n </div>\n </div>`;\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $elemExt = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strExt);\n $elem.addEventListener(\"mouseover\", e => {\n $elem.dispatchEvent(new CustomEvent(\"mouseOverFloatBox\", {\n bubbles: true,\n cancelable: false,\n detail: {\n item: ds,\n data: data,\n originalEvt: e\n }\n }));\n });\n $elem.addEventListener(\"click\", e => {\n $elem.dispatchEvent(new CustomEvent(\"clickFloatBox\", {\n bubbles: true,\n cancelable: false,\n detail: {\n item: ds,\n data: data,\n originalEvt: e\n }\n }));\n });\n $container.appendChild($elem);\n $container.appendChild($elemExt);\n });\n });\n });\n return $container;\n },\n\n /**\n * Crea DetailDay, detalle de valores de item y Dia\n * se usa para:\n * - Muestra nombre de item y detalles\n * - Muestra capsulas de datos\n * - Muestra Pills, pildoras de datos resumidos\n * - Muestra alertas\n * - Muestra Mensaje\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n * @param {Object} dataDay - valores de item y Dia\n * @param {Boolean} [onlyStringContent = false] - para escoger si devuelve String o DomElement\n * @return {String|Object} Elemento como String o DomElement\n */\n createDetailDay(config, item = {}, dataDay, tabSelected, onlyStringContent = false) {\n let str = `\n <div class=\"header-detail\">\n <div class=\"title truncate\">\n ${item.label || \"\"}\n </div>\n <div class=\"subtitle\">\n ${dataDay ? _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDateReadeable(dataDay.date) : \"\"}\n </div>\n </div>\n\n <div class=\"list-detail list\">`; //CAPSULES\n\n if (dataDay) {\n config.timeline.detailDay.capsules.forEach(cap => {\n //para comprobar si tiene datos, se obtiene el primer valor\n //de la lista de values de una capsula\n let hasValues = cap.values.filter(v => _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, v.varName) !== null).length > 0;\n let hideIf = false;\n\n if (cap.hideIf) {\n hideIf = Boolean(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, cap.hideIf));\n }\n\n let colorClass = \"\";\n let colorStyle = \"\";\n\n if (cap.color) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(cap.color)) {\n colorStyle = `--local-color: ${cap.color};`;\n colorStyle += `--local-color-font: ${cap.color};`;\n } else {\n colorClass = cap.color;\n }\n }\n\n if (hasValues && !hideIf) {\n str += `\n <div class=\"item-detail ${colorClass}\" style=\"${colorStyle}\">\n\n <div class=\"left-icon ${cap.shape || \"\"} \"></div>\n\n <div class=\"name\">\n <span>\n ${cap.title || \"\"}\n </span>\n </div>`;\n str += `\n <div class=\"item-description\"> `;\n cap.values.forEach(v => {\n let value = v.varName ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay.values, v.varName) : null;\n\n if (cap.isLabeledArray) {\n value.forEach(valueLabeled => {\n let outputValue = null;\n let valueName = v.valueName ? v.valueName : \"value\";\n let tempValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(valueLabeled, valueName);\n\n if (tempValue) {\n outputValue = v.round ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(tempValue, v.round) : tempValue;\n }\n\n if (v.formatter) {\n outputValue = v.formatter(valueLabeled);\n }\n\n if (typeof outputValue == \"number\") {\n outputValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(outputValue);\n }\n\n str += outputValue == null ? \"\" : `\n <div class=\"desc ${v.showColumn ? \"desc-column\" : \"\"}\">\n \n <div class=\"label\">\n ${v.hideLabel ? \"\" : valueLabeled.label}\n </div >\n <div class=\"val\">` + (v.hidePreffix !== true ? `\n <span class=\"prefix\">\n ${v.prefix || \"\"}\n </span>` : \"\") + `<span class=\"value\">\n ${outputValue}\n </span>` + (v.hideSuffix !== true ? `\n <span class=\"suffix\">\n ${valueLabeled.suffix || v.suffix || \"\"}\n </span>` : \"\") + `\n </div>\n </div>`;\n });\n } else {\n let outputValue = v.round ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].round(value, v.round) : value;\n\n if (v.formatter) {\n outputValue = v.formatter({\n options: v,\n dataDay,\n outputValue\n });\n }\n\n if (typeof outputValue == \"number\") {\n outputValue = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(outputValue);\n }\n\n str += outputValue == null ? \"\" : `\n <div class=\"desc\">\n <span class=\"prefix\">\n ${v.prefix || \"\"}\n </span>\n <span class=\"value\">\n ${outputValue}\n </span>\n <span class=\"suffix\">\n ${v.suffix || \"\"}\n </span>\n </div>`;\n }\n });\n str += `\n </div>`;\n str += `\n </div>`; // end .item-detail\n }\n });\n }\n\n str += `\n </div>`; // list-detail\n //PILLS\n\n if (config.timeline.detailDay.pillsVarName && dataDay && dataDay.values[config.timeline.detailDay.pillsVarName]) {\n str += `\n <div class=\"elements-detail\">\n <div class=\"name\"> ${config.timeline.detailDay.pillsTitle} </div>\n <div class=\"elements-list\">`;\n dataDay.values[config.timeline.detailDay.pillsVarName].forEach(e => {\n let value = e.value;\n\n if (typeof outputValue == \"number\") {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].formatNumber(value);\n }\n\n str += `\n <div class=\"element-detail\">\n <b>${e.label}</b>\n ${value}\n </div>`;\n });\n str += `\n </div>\n </div>`; //end .element-detail > .element-list\n } //str += `</div>`;\n\n\n if (dataDay && dataDay.errors && dataDay.errors.length > 0) {\n dataDay.errors.forEach(err => {\n str += `\n <div class=\"alert\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].alert}\n ${err.label}\n </div>`;\n });\n }\n\n let msg = null;\n let author = null;\n let dateMsg = null;\n\n if (dataDay && tabSelected.floatBox && tabSelected.floatBox.messagePath) {\n msg = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, tabSelected.floatBox.messagePath);\n }\n\n if (!msg && dataDay && dataDay.message && dataDay.message.value) {\n msg = dataDay.message.value;\n author = dataDay.message.author;\n dateMsg = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].formatDateReadeable(new Date(dataDay.message.date));\n }\n\n if (msg) {\n //msg = msg.replace(/(\\r\\n|\\r|\\n)/g, '<br>');\n str += `\n <div class=\"msj-container\">\n <div class=\"msj\">\n <pre>${msg || \"\"}</pre>\n </div>\n <div class=\"msj-detail\">\n <span class=\"email\"> ${author || \"\"} </span>\n <span class=\"date\"> ${dateMsg || \"\"} </span>\n </div>\n </div>`;\n }\n\n let strContainer = `<div class=\"detail-day dd-hide\"> ${str} </div>`;\n if (onlyStringContent) return str;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strContainer);\n },\n\n /**\n * Recrea HTML de detailDay\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n * @param {Object} dataDay - valores de item y Dia\n * @return {String} Elemento como String, de detailDay\n */\n redrawDetailDay(config, item, dataDay, tabSelected) {\n return this.createDetailDay(config, item, dataDay, tabSelected, true);\n },\n\n /**\n * Reposiciona FloatBox\n * verifica si el parent esta desplegado, para ocultar los datos\n *\n * Solo actualiza las alturas de los floatbox\n * no recrea los floatbox, es mas optimo\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} item - Item relacionado\n */\n repositionFloatBox(config, $floatBoxContainer) {\n $floatBoxContainer.querySelectorAll(\".float-box\").forEach($f => {\n let itemId = $f.getAttribute(\"item-id\");\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--item-height\"));\n let item, parent;\n ({\n item,\n parent\n } = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getItemById(config, itemId, \"child\", true));\n\n if (item) {\n let top = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item);\n $f.style.top = top * itemHeight + \"px\";\n\n if (parent && parent.isClosed) {\n $f.classList.add(\"hide\");\n } else if ($f.classList.contains(\"hide\")) {\n $f.classList.remove(\"hide\");\n }\n }\n });\n },\n\n /**\n * Recrea indicadores de dias seleccionados\n *\n * @param {Object} $elem - Elemento Dom donde crea los elementos seleccionados\n * @param {Object[]} selected - Array con los dias seleccionados\n * @return {Object} Elemento Dom que contiene los indicadores de dias seleccionados\n */\n redrawSelectBoard($elem, selected) {\n $elem.innerHTML = \"\";\n let hasNumber = true;\n\n if (selected) {\n if (selected.length == 1) hasNumber = false;\n selected.forEach(s => {\n let attributes = [];\n\n if (hasNumber) {\n attributes.push({\n name: \"cap-badge\",\n value: s.index\n });\n }\n\n let $s = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElement(\"div\", {\n className: \"selected-day\",\n attributes\n });\n $s.style.left = s.pos.left + \"px\";\n $s.style.top = s.pos.top + \"px\";\n $elem.append($s);\n });\n }\n\n return $elem;\n },\n\n /**\n * Obtiene String con estilos CSS de la posicion de un floatBox\n * calculado segun item y fecha de los valores\n *\n * @param {Object} config - Configuracion capibara, para ver fecha de inicio\n * @param {Object} data - Datos del dia indicado\n * @param {Object} item - Item relacionado\n * @return {String} String CSS top y left , para posicionar floatBox en table\n */\n getPositionFloatBox(config, data, item) {\n let left = _util_dateUtils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].diffDays(config.timeline.start, data.date);\n let top = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getPositionByItem(config, item);\n let dayWidth = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--day-width\"));\n let itemHeight = parseFloat(_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getCSSVariable(config, \"--item-height\"));\n left *= dayWidth;\n top *= itemHeight;\n return \"top: \" + top + \".5px; left:\" + left + \".5px;\";\n },\n\n /**\n * Crea Boton como elemento Dom\n *\n * @param {Object} props - propiedades para boton\n * @param {String} props.className - classes css para boton\n * @param {*} props.key - key para identificar a boton\n * @param {String} props.label - Texto boton\n * @return {Object} Elemento Dom del boton creado\n */\n createButton(props) {\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <button class=\"${props.className || \"\"}\" input-key=\"${props.key || \"\"}\">\n ${props.label || \"\"}\n </button>`);\n },\n\n /**\n * Crea Botones de guardar y cancelar los datos de formulario del sidebar derecho\n *\n * @return {Object} Elemento Dom del botones creados\n */\n createNavRightbuttons(config) {\n let btnSection = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`<div class=\"button-section\"></div>`);\n\n if (config.timeline.nav.right && config.timeline.nav.right.hideSaveButton != true) {\n let saveBtn = this.createButton({\n label: \"Guardar\",\n className: \"cap-btn-raised\"\n });\n btnSection.appendChild(saveBtn);\n saveBtn.addEventListener(\"click\", e => {\n saveBtn.dispatchEvent(new CustomEvent(\"saveMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n if (config.timeline.nav.right && config.timeline.nav.right.hideCancelButton != true) {\n const cancelLabelButton = config.timeline.nav.right.cancelLabelButton || \"Cancelar\";\n let cancelBtn = this.createButton({\n label: cancelLabelButton,\n className: \"cap-btn-outline\"\n });\n btnSection.appendChild(cancelBtn);\n cancelBtn.addEventListener(\"click\", e => {\n cancelBtn.dispatchEvent(new CustomEvent(\"cancelMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n });\n }\n\n return btnSection;\n },\n\n /**\n * Crea Input como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} [dataDay = null] - valores de item y Dia, opcional\n * @param {Object} [daySelected = null] - datos del dia seleccionado\n * @param {Object[]} [selected = []] - array de objetos, de dias seleccionados\n * @return {Object} Elemento Dom del input creado\n */\n createInput(props, dataDay = null, daySelected = null, selected = [], tabSelected) {\n let r = null;\n if (props.ignoreRender == true) return r;\n\n switch (props.type) {\n case \"custom\":\n r = props.render ? props.render({\n props,\n dataDay,\n daySelected,\n selected\n }) : null;\n r.setAttribute(\"input-key\", props.key);\n break;\n\n case \"select\":\n r = this.createInputSelect(props, dataDay, daySelected);\n break;\n\n case \"file\":\n r = this.createInputFile(props, dataDay);\n break;\n\n case \"fileLink\":\n r = this.createFileLink(props, dataDay);\n break;\n\n case \"text\":\n r = this.createText(props, selected);\n break;\n\n case \"title\":\n r = this.createTitle(props);\n break;\n\n case \"number\":\n r = this.createInputNumber(props, dataDay);\n break;\n\n case \"float\":\n r = this.createInputFloat(props, dataDay);\n break;\n\n case \"message\":\n r = this.createInputMessage(props, dataDay);\n break;\n\n case \"textarea\":\n r = this.createInputTextArea(props, dataDay);\n break;\n\n case \"checkbox\":\n r = this.createInputCheckbox(props, dataDay);\n break;\n\n case \"inputList\":\n r = this.createInputList(props, dataDay, daySelected);\n break;\n\n case \"input-box\":\n r = this.createInputBox(props, dataDay);\n break;\n\n case \"list\":\n r = this.createList(props, dataDay);\n break;\n\n case \"data-list\":\n r = this.createDataList(props, dataDay, daySelected, selected, tabSelected);\n break;\n\n case \"button\":\n r = this.createInputButton(props, dataDay);\n break;\n\n case \"buttons-group\":\n r = this.createInputButtonsGroup(props, dataDay);\n break;\n\n case \"time\":\n r = this.createInputTime(props, dataDay);\n break;\n\n case \"input-text\":\n default:\n r = this.createInputText(props, dataDay);\n }\n\n return r;\n },\n\n /**\n * Crea Input con formato Hora, como elemento Dom\n *\n * Usa 2 inputs, hora y minutos\n *\n * el value que interpreta es String HH:MM\n *\n * @param {Object} props - config para Input\n * @param {Object} [dataDay = null] - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputTime(props, dataDay) {\n let hhValue = \"\";\n let mmValue = \"\";\n\n if (dataDay && dataDay.values) {\n let value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n\n if (value) {\n value = value.split(\":\");\n hhValue = value[0];\n mmValue = value[1];\n }\n }\n\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label || \"\"}\n </span>\n <div class=\"d-flex\">\n <div class=\"time\">\n <input type=\"number\"\n class=\"hour\"\n id=\"test\"\n placeholder=\"00\"\n min=\"0\"\n max=\"99\"\n value=\"${hhValue}\">\n <span class=\"symbol\">:</span>\n <input type=\"number\"\n class=\"minutes\"\n placeholder=\"00\"\n min=\"0\"\n max=\"59\"\n value=\"${mmValue}\">\n </div>\n <span class=\"text-hint\">\n ${props.textHint || \"\"}\n </span>\n </div>\n </div>`);\n let $hhInput = $elem.querySelector(\".hour\");\n let $mmInput = $elem.querySelector(\".minutes\");\n $hhInput.addEventListener(\"input\", e => {\n $hhInput.dispatchEvent(new CustomEvent(\"changeTimeInputHH\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: props.key,\n value: e.srcElement.value\n }\n }));\n });\n $mmInput.addEventListener(\"input\", e => {\n $mmInput.dispatchEvent(new CustomEvent(\"changeTimeInputMM\", {\n bubbles: true,\n cancelable: false,\n detail: {\n key: props.key,\n value: e.srcElement.value\n }\n }));\n });\n this.addKeyDownInputEvents($hhInput, $elem, props);\n this.addKeyDownInputEvents($mmInput, $elem, props);\n return $elem;\n },\n\n /**\n * Crea Text como elemento Dom\n * Se configura como input, pero no devuelve datos, es un texto\n *\n * @param {Object} props - config para Input\n * @return {Object} Elemento Dom del input creado\n */\n createText(props, selected) {\n let label = props.label;\n\n if (props.formatter) {\n label = props.formatter({\n selected\n });\n }\n\n let $elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide \" : \"\"} ${props.toLeft ? \"to-left \" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"${props.classNames || \"\"}\">\n ${label}\n </span>\n </div>`);\n return $elem;\n },\n\n /**\n * Crea Title como elemento Dom\n * Se configura como input, pero no devuelve datos, es un texto\n *\n * @param {Object} props - config para Input\n * @return {Object} Elemento Dom del input creado\n */\n createTitle(props) {\n let classNames = \"text-title\";\n\n if (props.isSubtitle) {\n classNames = \"text-subtitle\";\n }\n\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"${classNames}\">\n ${props.label}\n </span>\n </div>`);\n },\n\n /**\n * Crea Input tipo Numerico como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputNumber(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n value = value || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n <span class=\"text-subtitle-2 \">\n ${props.suffix ? \"(\" + props.suffix + \")\" : \"\"}\n </span>\n </div>\n <div class=\"d-flex\">\n <input type=\"number\"\n class=\"nav-input\"\n value=\"${value}\">\n\n <span class=\"text-hint\">\n ${props.textHint || \"\"}\n </span>\n </div>\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input tipo FIlepicker como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputFile(props, dataDay) {\n let value = \"\";\n let fileName = \"\";\n let filePath = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n fileName = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.fileNameValue);\n filePath = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.filePathValue);\n }\n\n value = value || \"\";\n fileName = fileName || \"\";\n filePath = filePath || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n </div>\n\n <div class=\"nav-input-file\" >\n <button class=\"small-close clear-file-input\">x</button>\n <label >\n <span class=\"nav-input-file-label\">\n ${props.pickerLabel || \"Seleccionar Archivo\"}\n </span>\n <input type=\"file\" value=\"${value}\">\n </label>\n </div>\n\n <div class=\"input-section-link\">\n <a href=\"${filePath}\" target=\"_blank\" >\n ${fileName}\n </a>\n </div>\n\n </div>`);\n let $inputElem = elem.querySelector(\"input\");\n let $clearBtn = elem.querySelector(\".clear-file-input\");\n let $fileInputLabel = elem.querySelector(\".nav-input-file-label\");\n $inputElem.addEventListener(\"change\", evt => {\n let fileName = $inputElem.files[0].name;\n $fileInputLabel.textContent = fileName;\n });\n $clearBtn.addEventListener(\"click\", evt => {\n $inputElem.value = \"\";\n $fileInputLabel.textContent = props.pickerLabel || \"Seleccionar Archivo\";\n evt.stopPropagation();\n });\n return elem;\n },\n\n createFileLink(props, dataDay) {\n let fileName = \"\";\n let filePath = \"\";\n\n if (dataDay && dataDay.values) {\n //value = utils.getVarByPath(dataDay, props.varName);\n fileName = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.fileNameValue);\n filePath = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.filePathValue);\n }\n\n if (fileName == \"\") return null;\n fileName = fileName || \"\";\n filePath = filePath || \"\";\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.classNames || \"\"} ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n\n <div class=\"input-section-title\">\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n </div>\n\n <div class=\"input-section-link\">\n <a href=\"${filePath}\" target=\"_blank\" >\n ${fileName}\n </a>\n </div>\n\n </div>`);\n return elem;\n },\n\n /**\n * Crea lista de Inputs, con array de valores, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @param {Object} [daySelected = null] - datos del dia seleccionado\n * @return {Object} Elemento Dom del input creado\n */\n createInputList(props, dataDay, daySelected = null) {\n let inputList = []; //obtiene inputs default, para crearlos, sin valores\n\n if (daySelected && Array.isArray(daySelected.item.values[props.inputList])) {\n inputList = daySelected.item.values[props.inputList].map(inputRow => {\n //limpia inputList inputs\n inputRow.inputs.map(input => {\n input.value = null;\n return input;\n }); //obtiene valores del dia\n\n if (dataDay && dataDay.values) {\n let inputValues = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.valuesPath); //autorrellena\n\n if (inputValues) {\n inputRow.inputs.forEach(input => {\n let values = inputValues.find(v => v.id == inputRow.id);\n input.value = values ? values[input.varName] : null;\n });\n }\n }\n\n return inputRow;\n });\n }\n\n let str = `<div input-key=\"${props.key || \"\"}\" class=\"input-section-list ${props.isHidden ? \"hide\" : \"\"} \">\n <div class=\"input-section-title\">\n <span class=\"text-title\">\n ${props.label}\n </span> \n </div>`;\n inputList.forEach(inputRow => {\n str += `\n <div class=\"input-section ${props.toRight ? \"to-right\" : \"\"}\" >\n <span class=\"text-subtitle\">\n ${inputRow.label}\n </span>`;\n inputRow.inputs.forEach(input => {\n str += ` \n <div class=\"input-section-col\" >\n <span class=\"text-subtitle \">\n ${input.label}\n </span>\n <input type=\"number\"\n input-id=\"${inputRow.id}\"\n input-label=\"${input.label}\"\n class=\"nav-input small\"\n value=\"${input.value}\">\n </div>`;\n });\n str += `\n </div>`;\n });\n str += `</div>`;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let inputsElem = elem.querySelectorAll(\"input\");\n inputsElem.forEach(inputElem => this.addKeyDownInputEvents(inputElem, elem, props));\n return elem;\n },\n\n createInputSelect(props, dataDay, daySelected = null) {\n let value = null;\n let options = props.options;\n\n if (dataDay && dataDay.values) {\n let val = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n value = val ? val.value : null;\n }\n\n let str = `<div input-key=\"${props.key || \"\"}\" class=\"${props.isHidden ? \"hide\" : \"\"}\" >\n <div class=\"input-section \" >\n <span class=\"text-subtitle\">\n ${props.label}\n </span>\n\n <select class=\"input-select\">\n\n <option value=\"\" ${value == null ? \"selected\" : \"\"}>\n ${props.noDataLabel || \"-- sin asignar --\"}\n </option>\n\n `;\n options.forEach(option => {\n str += `\n <option value=\"${option.id}\" ${option.id == value ? \"selected\" : \"\"}>\n ${option.label}\n </option>\n `;\n });\n str += `\n\n </select>\n </div>\n\n </div>`;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n return elem;\n },\n\n /**\n * Crea Input de texto TextArea como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputTextArea(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <textarea class=\"\" value=\"${value}\"></textarea>\n </div>`);\n let inputElem = elem.querySelector(\"textarea\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input de Mensaje como elemento Dom\n * utiliza TextArea\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputMessage(props, dataDay) {\n let value = dataDay ? _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName) : null;\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section to-left msj-input-container ${props.isHidden ? \"hide\" : \"\"} \"\n input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n Mensaje\n </span>\n <textarea class=\"msj\">${value || \"\"}</textarea>\n </div>`);\n let inputElem = elem.querySelector(\"textarea\"); //this.addKeyDownInputEvents(inputElem);\n\n return elem;\n },\n\n /**\n * Crea Input de texto como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputText(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <input type=\"text\" class=\"nav-input\" value=\"${value}\">\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n /**\n * Crea Input Numero Flotante, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputFloat(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let elem = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n <input type=\"number\" class=\"nav-input\" value=\"${value}\">\n </div>`);\n let inputElem = elem.querySelector(\"input\");\n this.addKeyDownInputEvents(inputElem, elem, props);\n return elem;\n },\n\n createDataList(props, dataDay, daySelected, selected, tabSelected) {\n let list = [];\n\n if (dataDay && dataDay.values) {\n list = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName) || [];\n }\n\n let searchInput = props.hideSearch ? \"\" : ` <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>`;\n let editBtn = \"\";\n\n if (props.editButton) {\n editBtn = `<button class=\"cap-btn-raised cap-btn-sm edit-btn\" input-key=\"${props.editButton.key}\">\n ${props.editButton.label} \n </button> `;\n }\n\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"input-section-title\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n ${editBtn}\t\n </div>\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n ${searchInput}\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $searchInput = $el.querySelector(\".search-input\");\n let $searchInputClear = $el.querySelector(\".search-input-clear\");\n let $inputBox = $el.querySelector(\".input-box\");\n let $items = list.map((item, j) => {\n let label = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameLabel) || dataDay.label || \"__\";\n let $elItem = this.createDataListItem({\n label,\n valueText: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameValueText) || \"\",\n subText: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameSubText) || \"\",\n id: \"list-item-\" + (dataDay.id || j),\n key: \"list-item-\" + (dataDay.id || j),\n tooltip: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameTooltip) || label,\n //colorIcon: \"c-red\",\n link: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameLink) || null,\n suffix: _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(item, props.varNameSuffix) || \"\" //value: JSON.stringify(utils.getVarByPath(item, props.varNameInput)) || {}\n\n });\n $inputBox.appendChild($elItem);\n });\n\n if ($searchInput) {\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $inputs = [];\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n }\n\n if (props.editButton.onClick) {\n let button = $el.querySelector(\"button.edit-btn\");\n\n if (button && props.editButton) {\n button.addEventListener(\"click\", e => props.editButton.onClick({\n event: e,\n props,\n dataDay,\n daySelected,\n selected,\n $element: $el,\n tabSelected\n }));\n }\n\n $items.forEach($i => {\n $el.addEventListener(\"click\", e => {\n props.editButton.onClick({\n event: e,\n props,\n dataDay,\n daySelected,\n selected,\n $element: $el,\n tabSelected\n });\n });\n });\n }\n\n return $el;\n },\n\n createDataListItem({\n label = \"\",\n valueText = \"\",\n subText = \"\",\n id = \"\",\n key = \"\",\n tooltip = \"\",\n colorIcon = \"\",\n link = null,\n suffix = null,\n value = \"\"\n }) {\n let tooltipStr = \"\";\n let iconStr = null;\n let linkStr = \"\";\n let str = \"\";\n\n if (tooltip) {\n tooltipStr = `\n <div class=\"mini-input-section--tooltip\">\n ${tooltip}\n </div>`;\n }\n\n if (colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(itemFormated.colorIcon)) {\n iconStr = `<div class=\"mini-input-section--icon\" style=\"background:${colorIcon}\"> </div>`;\n } else {\n iconStr = `<div class=\"mini-input-section--icon ${colorIcon}\"> </div>`;\n }\n }\n\n if (link) {\n linkStr = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${link}\">${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}</a> `;\n }\n\n str += `\n <div class=\"mini-input-section clickeable ${iconStr ? \"has-icon\" : \"\"} \" \n label=\"${label}\" \n data-id=\"${id}\"\n data-key=\"${key}\"\n data-value=\"${value || \"\"}\"\n >\n <label>\n ${iconStr || \"\"}\n\n <div class=\"mini-input-section--titles\">\n <div class=\"mini-input-section--title truncate\">\n ${label}\n </div>\n <div class=\"mini-input-section--subtitle truncate\">\n ${subText}\n </div>\n </div>\n\n <div class=\"mini-input-section--content\" >\n ${valueText}\n </div>\n <div class=\"mini-input-section--suffix\" >\n ${suffix}\n </div>\n\n ${linkStr}\n\n </label>\n ${tooltipStr}\n </div>`;\n return _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n },\n\n createList(props, dataDay) {\n let tabsContainer = \"\";\n\n if (props.tabs) {\n let tabs = \"\";\n props.tabs.forEach(tab => {\n tabs += `\n <div class=\"input-box-tab\" tab-key=\"${tab.key}\">\n ${tab.name}\n </div>`;\n });\n tabsContainer = `\n <div class=\"input-box-tab-container\">\n ${tabs}\n </div>\n `;\n }\n\n let searchInput = `\n <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>\n `;\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n\n ${tabsContainer}\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n\n ${searchInput}\n `; //TODO obtener input segun fila\n\n if (props.inputs) {\n props.inputs.forEach(i => {\n if (i.isTitle) {\n let tooltip = \"\";\n let icon = null;\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n ${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n str += `\n <div class=\"mini-input-section is-title ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n ${icon || \"\"}\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n </label>\n ${tooltip}\n </div>`;\n } else {\n let tooltip = \"\";\n let icon = null;\n let link = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n if (i.link) {\n link = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${i.link}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}\n </a> `;\n }\n\n str += `\n <div class=\"mini-input-section ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n\n ${icon}\n\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n\n <div class=\"mini-input-section--suffix\" >${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}</div>\n\n ${link}\n\n </label>\n <div class=\"mini-input-section--footer\">\n <span class=\"start\"> start</span>\n <span class=\"end\"> end </span>\n </div>\n ${tooltip}\n </div>`;\n }\n });\n }\n\n str += `\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $searchInput = $el.querySelector(\".search-input\") || null;\n let $searchInputClear = $el.querySelector(\".search-input-clear\") || null;\n $tabs.forEach(t => {\n t.addEventListener(\"click\", e => {\n this.selectInputBoxTab(t, $el);\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n });\n\n if ($searchInputClear) {\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n }\n\n if ($searchInput) {\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $tabSelected = $el.querySelector(\".input-box-tab[tab-key].active\") || null;\n let $inputs = [];\n\n if ($tabSelected) {\n let tabKey = $tabSelected.getAttribute(\"tab-key\");\n $inputs = $el.querySelectorAll(\".mini-input-section[input-tab-key='\" + tabKey + \"']\") || [];\n } else {\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n }\n\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n }\n\n this.selectInputBoxTab(_.first($tabs), $el);\n return $el;\n },\n\n /**\n * Crea InputBox, como elemento Dom\n * un InputBox es un contenedor con una lista de inputs\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputBox(props, dataDay) {\n let value = [];\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let tabsContainer = \"\";\n\n if (props.tabs) {\n let tabs = \"\";\n props.tabs.forEach(tab => {\n tabs += `\n <div class=\"input-box-tab\" tab-key=\"${tab.key}\">\n ${tab.name}\n </div>`;\n });\n tabsContainer = `\n <div class=\"input-box-tab-container\">\n ${tabs}\n </div>\n `;\n }\n\n let searchInput = `\n <div class=\"search-input-container\">\n <input id=\"\" type=\"text\" name=\"\" class=\"search-input\" placeholder=\"buscar\">\n <button class=\"search-input-clear\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].closeIcon}\n </button>\n </div>\n `;\n let str = `\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <span class=\"text-subtitle d-block\">\n ${props.label}\n </span>\n\n ${tabsContainer}\n\n <div class=\"input-box \" input-key=\"${props.key || \"\"}\">\n\n ${searchInput}\n `;\n\n if (props.inputs) {\n props.inputs.forEach(i => {\n if (i.isTitle) {\n let tooltip = \"\";\n let icon = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n ${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n str += `\n <div class=\"mini-input-section is-title\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n ${icon}\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n </label>\n ${tooltip}\n </div>`;\n } else {\n let value_found = value ? value.find(val => val.id == i.id) : null;\n let v = value_found || \"\";\n let inputValue = props.varNameInput && v[props.varNameInput] ? v[props.varNameInput] : v.value;\n let tooltip = \"\";\n let icon = \"\";\n let link = \"\";\n\n if (i.tooltip) {\n tooltip = `\n <div class=\"mini-input-section--tooltip\">\n ${i.tooltip}\n </div>`;\n }\n\n if (i.colorIcon) {\n if (_util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isHexColor(i.colorIcon)) {\n icon = `<div class=\"mini-input-section--icon\" style=\"background:${i.colorIcon}\"> </div>`;\n } else {\n icon = `<div class=\"mini-input-section--icon ${i.colorIcon}\"> </div>`;\n }\n }\n\n if (i.link) {\n link = `<a class=\"mini-input-section--link\" target=\"_blank\" href=\"${i.link}\">\n ${_util_icons__WEBPACK_IMPORTED_MODULE_3__[\"default\"].linkIcon}\n </a> `;\n }\n\n str += `\n <div class=\"mini-input-section ${icon ? \"has-icon\" : \"\"}\" input-tab-key=\"${i.tabKey || \"\"}\" label=\"${i.label}\">\n <label>\n <input type=\"number\"\n class=\"mini-input\"\n input-id=\"${i.id || \"\"}\"\n input-key=\"${i.key || i.label}\"\n value=\"${inputValue || \"\"}\">\n\n ${icon || \"\"}\n\n <div class=\"mini-input-section--title truncate\">\n ${i.label}\n </div>\n\n <div class=\"mini-input-section--suffix\" >${i.suffix ? \"(\" + i.suffix + \")\" : \"\"}</div>\n\n ${link}\n\n </label>\n ${tooltip}\n </div>`;\n }\n });\n }\n\n str += `\n </div>\n </div> `;\n let $el = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(str);\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $inputs = $el.querySelectorAll(\"input.mini-input\") || [];\n let $searchInput = $el.querySelector(\".search-input\") || null;\n let $searchInputClear = $el.querySelector(\".search-input-clear\") || null;\n $tabs.forEach(t => {\n t.addEventListener(\"click\", e => {\n this.selectInputBoxTab(t, $el);\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n });\n\n if ($searchInputClear) {\n $searchInputClear.addEventListener(\"click\", e => {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n });\n }\n\n if ($searchInput) {\n $searchInput.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\") {\n $searchInput.value = \"\";\n $searchInput.dispatchEvent(new Event(\"input\", {\n bubbles: true\n }));\n }\n });\n $searchInput.addEventListener(\"input\", e => {\n let $tabSelected = $el.querySelector(\".input-box-tab[tab-key].active\") || null;\n let $inputs = [];\n\n if ($tabSelected) {\n let tabKey = $tabSelected.getAttribute(\"tab-key\");\n $inputs = $el.querySelectorAll(\".mini-input-section[input-tab-key='\" + tabKey + \"']\") || [];\n } else {\n $inputs = $el.querySelectorAll(\".mini-input-section\") || [];\n }\n\n $inputs.forEach($i => {\n let label = $i.getAttribute(\"label\");\n let search = $searchInput.value;\n\n if (label.toLowerCase().includes(search.toLowerCase())) {\n $i.classList.remove(\"hide\");\n } else {\n $i.classList.add(\"hide\");\n }\n });\n });\n }\n\n this.selectInputBoxTab(_.first($tabs), $el);\n $inputs.forEach(i => this.addKeyDownInputEvents(i, $el, props));\n return $el;\n },\n\n selectInputBoxTab($tab, $el) {\n let $tabs = $el.querySelectorAll(\".input-box-tab[tab-key]\") || [];\n let $inputSections = $el.querySelectorAll(\".mini-input-section\") || [];\n $tabs.forEach(t => {\n t.classList.remove(\"active\");\n });\n\n if ($tab) {\n $tab.classList.add(\"active\");\n $inputSections.forEach(i => {\n let key = i.getAttribute(\"input-tab-key\");\n\n if (key == $tab.getAttribute(\"tab-key\")) {\n i.classList.remove(\"hide\");\n } else {\n i.classList.add(\"hide\");\n }\n });\n }\n },\n\n /**\n * Crea Checkbox, como elemento Dom\n *\n * @param {Object} props - config para Input\n * @param {Object} dataDay - valores de item y Dia, opcional\n * @return {Object} Elemento Dom del input creado\n */\n createInputCheckbox(props, dataDay) {\n let value = \"\";\n\n if (dataDay && dataDay.values) {\n value = _util_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getVarByPath(dataDay, props.varName);\n }\n\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <label>\n <input type=\"checkbox\" name=\"${props.key || \"\"}\" input-key=\"${props.key || \"\"}\" ${value ? \"checked\" : \"\"}>\n ${props.label}\n </label>\n </div>`);\n return r;\n },\n\n createInputButtonsGroup(props) {\n let $container = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <div class=\"buttons-group\"> </div>\n </div>`);\n let $containerButtonGroup = $container.querySelector(\".buttons-group\");\n let $buttons = [];\n $buttons = props.buttons.map(buttonProp => {\n let buttonStr = `\n <button \n name=\"${buttonProp.key || \"\"}\" \n input-key=\"${buttonProp.key || \"\"}\"\n class=\"cap-btn-outline cap-btn-sm ${buttonProp.isSelected ? \"selected\" : \"\"} \">\n ${buttonProp.label}\n </button>`;\n let $button = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(buttonStr);\n $containerButtonGroup.append($button);\n $button.addEventListener(\"click\", e => {\n if (props.isSelectable) {\n $buttons.forEach($b => $b.classList.remove(\"selected\"));\n $button.classList.add(\"selected\");\n }\n\n buttonProp.onClick({\n props,\n event: e,\n buttonsElements: $buttons\n });\n });\n return $button;\n });\n return $container;\n },\n\n createInputButton(props, dataDay) {\n let r = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(`\n <div class=\"input-section ${props.isHidden ? \"hide\" : \"\"} \" input-key=\"${props.key || \"\"}\">\n <button \n name=\"${props.key || \"\"}\"\n input-key=\"${props.key || \"\"}\"\n class=\"cap-btn-outline\">\n ${props.label}\n </button>\n </div>`);\n let button = r.querySelector(\"button\");\n button.addEventListener(\"click\", e => props.onClick({\n props,\n event: e,\n dataDay\n }));\n return r;\n },\n\n addKeyDownInputEvents($input, $inputContainer, props) {\n $input.addEventListener(\"keydown\", function (event) {\n if (event.keyCode === 13) {\n //ENTER\n $input.dispatchEvent(new CustomEvent(\"saveMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n }\n\n if (event.keyCode === 27) {\n //ESC\n $input.dispatchEvent(new CustomEvent(\"cancelMultiInput\", {\n bubbles: true,\n cancelable: false\n }));\n }\n });\n $input.addEventListener(\"input\", e => {\n if (props.onInput) {\n props.onInput({\n event: e,\n value: e.srcElement.value,\n props,\n $element: $inputContainer\n });\n }\n });\n },\n\n createContextMenu({\n config,\n target,\n $capibaraElem = null,\n evt = null,\n date = null,\n item = null,\n selected = [],\n tabSelected = null,\n left = null,\n top = null,\n name = \"\"\n }) {\n if (config.timeline.contextMenu === undefined || config.timeline.contextMenu.options == undefined) return {\n elem: null,\n isVisible: false\n };\n let className = \"\";\n let style = \"\";\n let strHtml = \"\";\n let leftPosition = null;\n let topPosition = null;\n let isVisible = true;\n let boundRectCapibara = null;\n let gap = 15; //px\n\n if ($capibaraElem) {\n boundRectCapibara = $capibaraElem.getBoundingClientRect();\n }\n\n if (evt && boundRectCapibara) {\n left = evt.clientX;\n top = evt.clientY - boundRectCapibara.top;\n }\n\n if (left) {\n leftPosition = left;\n }\n\n if (top) {\n topPosition = top;\n }\n\n if (leftPosition !== null & topPosition !== null) {\n if (boundRectCapibara) {\n let transformStyle = \"\";\n\n if (topPosition > boundRectCapibara.height * 2 / 6 && topPosition <= boundRectCapibara.height * 4 / 6) {\n transformStyle += `translateY(-50%)`;\n }\n\n if (topPosition > boundRectCapibara.height * 4 / 6) {\n transformStyle += `translateY(-100%)`;\n }\n\n if (leftPosition > boundRectCapibara.width * 4 / 6) {\n transformStyle += `translateX(-100%)`;\n leftPosition -= gap;\n } else {\n leftPosition += gap;\n }\n\n if (transformStyle != \"\") {\n style += ` transform: ${transformStyle};`;\n }\n }\n\n style += `top: ${topPosition}px; left: ${leftPosition}px;`;\n } else {\n className += \"cm-hide\";\n isVisible = false;\n }\n\n strHtml += ` <div class=\"cap-context-menu-container ${className}\">\n <div class=\"cap-context-menu\" style=\"${style}\">\n </div>\n </div>`;\n let $contextMenuContainer = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(strHtml);\n let $contextMenu = $contextMenuContainer.querySelector(\".cap-context-menu\");\n let hasSomeoption = false;\n config.timeline.contextMenu.options.forEach(option => {\n if (option.showIf) {\n let show = option.showIf({\n item,\n date,\n selected,\n name,\n tabSelected\n });\n if (!show) return;\n }\n\n let isEnabled = true;\n let isClickeable = true;\n\n if (option.enableIf) {\n isEnabled = option.enableIf({\n item,\n date,\n selected,\n name,\n tabSelected\n });\n }\n\n let optionClassName = \"\";\n let strIcon = \"\";\n let label = \"\";\n\n if (!isEnabled) {\n optionClassName += \"is-disabled \";\n }\n\n if (option.isDivider) {\n isClickeable = false;\n optionClassName += \"is-divider \";\n }\n\n if (option.label) {\n label = `<span>${option.label}</span>`;\n }\n\n if (option.icon) {\n strIcon = `<div class=\"cap-context-menu_item_icon\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"${option.icon}\" />\n </svg>\n </div>`;\n }\n\n let optionStrHtml = `\n <div class=\"cap-context-menu_item ${optionClassName}\">\n ${strIcon}\n ${label}\n </div>`;\n let $option = _util_domUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].createElementFromHTML(optionStrHtml);\n\n if (isEnabled && isClickeable) {\n $option.addEventListener(\"click\", evtClick => option.onClick({\n config,\n evt: evtClick,\n date,\n item,\n selected,\n tabSelected,\n target\n }));\n } else {\n $option.addEventListener(\"click\", evtClick => {\n evtClick.preventDefault();\n evtClick.stopPropagation();\n });\n }\n\n $contextMenu.append($option);\n hasSomeoption = true;\n });\n return {\n elem: $contextMenuContainer,\n isVisible\n };\n }\n\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdXRpbC90YWJsZUVsZW1lbnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ2FwaWJhcmEvLi9zcmMvdXRpbC90YWJsZUVsZW1lbnRzLmpzPzFkODYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvbSBmcm9tIFwiLi4vdXRpbC9kb21VdGlsc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlsL3V0aWxzXCI7XG5pbXBvcnQgZGF0ZVV0aWxzIGZyb20gXCIuLi91dGlsL2RhdGVVdGlsc1wiO1xuaW1wb3J0IGljb25zIGZyb20gXCIuLi91dGlsL2ljb25zXCI7XG5pbXBvcnQgZG9tVXRpbHMgZnJvbSBcIi4uL3V0aWwvZG9tVXRpbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICAvKipcbiAgICogQ3JlYSBlbGVtZW50byBUYWJsZVxuICAgKiBDb250ZW5kcsOhIGxvcyBlbGVtZW50b3MgcXVlIGFwYXJlY2VyYW4gZGVudHJvIGRlIGxhIHRhYmxhIGRlIHBsYW5pbGxhXG4gICAqIFNlIFVzYSBwYXJhIDpcbiAgICogICAgLSBBZ3JlZ2FyIGJhY2tncm91bmQgY29uIHBhdHJvbiBlc3RpbG8gdGFibGFcbiAgICogICAgLSBBZ3JlZ2FyIGRheU1vdXNlT3ZlciwgZGl2IHF1ZSBpbmRpY2EgcG9zaWNpb24gZGUgbW91c2VcbiAgICogICAgLSBBZ3JlZ2FyIERldGFpbERheSwgcGFyYSBkZXRhbGxlcyBkZSBkYXRvcyBlbiB0YWJsYVxuICAgKiAgICAtIEFncmVnYXIgU2VsZWN0ZWRDb250YWluZXIsIHBhcmEgZGlhcyBzZWxlY2Npb25hZG9zXG4gICAqICAgIC0gQWdyZWdhciBGbG9hdEJveENvbnRhaW5lciwgcGFyYSB2aXN1YWxpemFjaW9uIGRlIGRhdG9zIGVuIHRhYmxhXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlQWdUYWJsZShjb25maWcpIHtcbiAgICBsZXQgZSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNhcGliYXJhXCIgfSk7XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5kYXJrKSB7XG4gICAgICBlLmNsYXNzTGlzdC5hZGQoXCJkYXJrLXRoZW1lXCIpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmhlYWRlci5leHRlbmQuaXNTaG93KSB7XG4gICAgICBlLmNsYXNzTGlzdC5hZGQoXCJoZWFkZXItZXh0ZW5kZWRcIik7XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgQmFja2dyb3VuZCwgcXVlIGVzIGVsIGZvbmRvIGdyaWQsIGNvbW8gdGFibGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbGVtIC0gRWxlbWVudG8gcmVsYWNpb25hZG8sIGRvbmRlIHNlIGNyZSBlbCBiYWNrZ3JvdW5kXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIENvcm5lciBGb290ZXJcbiAgICovXG4gIHJlZHJhd0JhY2tncm91bmQoY29uZmlnLCAkZWxlbSkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUJhY2tncm91bmQoY29uZmlnLCAkZWxlbSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgeSBwb3NpY2lvbmEgZm9uZG8gZGUgdGFibGFcbiAgICogRXN0ZSBmb25kbyBjb250aWVuZSB1biBwYXRyb24gZGUgQ1NTIHF1ZSBsZSBkYSBsYSBhcGFyaWVuY2lhIGRlIHRhYmxhXG4gICAqIHBvciBsbyBjdWFsIHNlIGRlYmUgcmVwb3NpY2lvbmFyIHNlZ3VuIGxhIGZlY2hhIGRlIGluaWNpbywgcGFyYSBoYWNlclxuICAgKiBjYWx6YXIgbG9zIGZpbmVzIGRlIHNlbWFuYVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gWyRlbGVtID0gbnVsbF0gLSBFbGVtZW50byBiYWNrZ3JvdW5kLCBzaSBlcyBudWxsLCBsbyBjcmVhXG4gICAqIEByZXR1cm4ge09iamVjdH0gZWxlbWVudG8gRG9tIEJhY2tncm91bmRcbiAgICovXG4gIGNyZWF0ZUJhY2tncm91bmQoY29uZmlnLCAkZWxlbSA9IG51bGwpIHtcbiAgICBsZXQgeyBoZWlnaHQsIHdpZHRoLCBkYXlXaWR0aCB9ID0gdXRpbHMuZ2V0VGFibGVEaW1lbnNpb25zKGNvbmZpZyk7XG5cbiAgICBsZXQgc3RhcnQgPSBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuc3RhcnQpO1xuICAgIGxldCBlbmQgPSBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuZW5kKTtcblxuICAgIGVuZC5zZXRUaW1lKGVuZC5nZXRUaW1lKCkgKyBkYXRlVXRpbHMuZGF5SW5NaWxsaXNlY29uZHMpOyAvLyBhZGQgMjQgaG91cnNcblxuICAgIGxldCBkQ29ycmVjdGVkID0gbmV3IERhdGUoXG4gICAgICBzdGFydC52YWx1ZU9mKCkgKyBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDBcbiAgICApO1xuICAgIGxldCB3ZWVrRGF5ID0gZENvcnJlY3RlZC5nZXREYXkoKTtcbiAgICBsZXQgZGlmZldlZWtEYXlzID0gKHdlZWtEYXkgLSAxKSAqIGRheVdpZHRoICogLTE7XG5cbiAgICAkZWxlbSA9ICRlbGVtIHx8IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImJhY2tncm91bmQtZ3JpZFwiIH0pO1xuICAgICRlbGVtLnN0eWxlW1wiYmFja2dyb3VuZC1wb3NpdGlvblwiXSA9XG4gICAgICBkaWZmV2Vla0RheXMgKyBcInB4IDAsIDAgMCwgXCIgKyBkaWZmV2Vla0RheXMgKyBcInB4IDBcIjtcbiAgICAkZWxlbS5zdHlsZS53aWR0aCA9IHdpZHRoICsgXCJweFwiO1xuICAgICRlbGVtLnN0eWxlLmhlaWdodCA9IGhlaWdodCArIDEgKyBcInB4XCI7XG4gICAgcmV0dXJuICRlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIFBsb3QgQ29udGFpbmVyIFZlcnRpY2FsXG4gICAqIExvcyBwbG90cyBzb24gZWxlbWVudG9zIHF1ZSBhZ3JlZ2FuIHNlY2Npb25lcyBkZSBmb25kbyBlbiBsYSBwbGFuaWxsYVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBwbG90VmVydGljYWxDb250YWluZXJcbiAgICovXG4gIGNyZWF0ZVBsb3RWZXJ0aWNhbENvbnRhaW5lcihjb25maWcpIHtcbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwicGxvdC12ZXJ0aWNhbC1jb250YWluZXJcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdQbG90VmVydGljYWxDb250YWluZXIoY29uZmlnLCAkZWxlbSk7XG4gIH0sXG5cbiAgY3JlYXRlUGxvdEhvcml6b250YWxDb250YWluZXIoY29uZmlnKSB7XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcInBsb3QtaG9yaXpvbnRhbC1jb250YWluZXJcIixcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdQbG90SG9yaXpvbnRhbENvbnRhaW5lcihjb25maWcsICRlbGVtKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVjcmVhIHBsb3RWZXJ0aWNhbENvbnRhaW5lciwgdXNhbmRvIGVsZW1lbnRvIGV4aXN0ZW50ZVxuICAgKiB1c2EgdW4gZWxlbWVudG8gZXhpc3RlbnRlIHBhcmEgdXNhciBsYSBmdW5jaW9uIHBhcmEgcmVkaWJ1amFyIGVsIGVsZW1lbnRvXG4gICAqXG4gICAqIExvcyBQbG90cyBzZSBpbnNlcnRhbiBjb21vIGRpdnMsIGNvbiBwb3NpY2lvbiBlc3BlY2lmaWNhZGEsXG4gICAqIGNvbiBhbmNobyBkZSBkaWFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbGVtIC0gRWxlbWVudG8gRG9tIGRvbmRlIGNyZWEgcGxvdFZlcnRpY2FsQ29udGFpbmVyXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIHBsb3RWZXJ0aWNhbENvbnRhaW5lclxuICAgKi9cbiAgcmVkcmF3UGxvdFZlcnRpY2FsQ29udGFpbmVyKGNvbmZpZywgJGVsZW0pIHtcbiAgICAkZWxlbS5pbm5lckhUTUwgPSBcIlwiO1xuICAgIGlmIChjb25maWcudGltZWxpbmUucGxvdHMgJiYgY29uZmlnLnRpbWVsaW5lLnBsb3RzLnZlcnRpY2FsKSB7XG4gICAgICBsZXQgeyBoZWlnaHQsIGRheVdpZHRoIH0gPSB1dGlscy5nZXRUYWJsZURpbWVuc2lvbnMoY29uZmlnKTtcblxuICAgICAgY29uZmlnLnRpbWVsaW5lLnBsb3RzLnZlcnRpY2FsLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgbGV0IGRpZmZEYXlzID0gTWF0aC5mbG9vcihcbiAgICAgICAgICBkYXRlVXRpbHMuZGlmZkRheXMoY29uZmlnLnRpbWVsaW5lLnN0YXJ0LCBwLmRhdGUpXG4gICAgICAgICk7XG4gICAgICAgIGxldCBsZWZ0ID0gZGlmZkRheXMgKiBkYXlXaWR0aDtcbiAgICAgICAgbGV0IHBsb3QgPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lczogW1wicGxvdC12ZXJ0aWNhbFwiLCBwLmNsYXNzTmFtZSB8fCBcIlwiXSxcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgXCJtYXJnaW4tbGVmdFwiOiBsZWZ0ICsgXCJweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgKyBcInB4XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgICRlbGVtLmFwcGVuZENoaWxkKHBsb3QpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICByZWRyYXdQbG90SG9yaXpvbnRhbENvbnRhaW5lcihjb25maWcsICRlbGVtKSB7XG4gICAgJGVsZW0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLnBsb3RzICYmIGNvbmZpZy50aW1lbGluZS5wbG90cy5ob3Jpem9udGFsKSB7XG4gICAgICBsZXQgeyB3aWR0aCwgaXRlbUhlaWdodCB9ID0gdXRpbHMuZ2V0VGFibGVEaW1lbnNpb25zKGNvbmZpZyk7XG4gICAgICBjb25maWcudGltZWxpbmUucGxvdHMuaG9yaXpvbnRhbC5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBwLmlkTm9kZSwgcC50eXBlTm9kZSk7XG4gICAgICAgIGxldCB0b3BQb3NpdGlvbiA9IHV0aWxzLmdldFBvc2l0aW9uQnlJdGVtKGNvbmZpZywgaXRlbSwgXCJwYXJlbnRcIik7XG4gICAgICAgIGxldCBwbG90ID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZXM6IFtcInBsb3QtaG9yaXpvbnRhbFwiLCBwLmNsYXNzTmFtZSB8fCBcIlwiXSxcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgXCJtYXJnaW4tdG9wXCI6IHRvcFBvc2l0aW9uICogaXRlbUhlaWdodCArIFwicHhcIixcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCArIFwicHhcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgJGVsZW0uYXBwZW5kQ2hpbGQocGxvdCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuICRlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIENvcm5lciBJenF1aWVyZG9cbiAgICogU2UgdXNhIHBhcmEgOlxuICAgKiAgICAtIHRpdHVsb3MgcmVsYWNpb25hZG9zIGNvbiBsb3MgZGF0b3MgZGVsIHNpZGViYXIgaXpxdWllcmRvXG4gICAqICAgIC0gdGl0dWxvcyBwYXJhIGlucHV0cyBkZSBoZWFkZXIsIGFic29sdXRlIGEgbGEgZGVyZWNoYVxuICAgKiAgICAtIGJvdG9uIHBhcmEgbW9zdHJhci9vY3VsdGFyIHNpZGViYXIgaXpxdWllcmRvXG4gICAqICAgIC0gcHJvbWVkaW9zXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIENvcm5lclxuICAgKi9cbiAgY3JlYXRlQ29ybmVyKGNvbmZpZywgdGFiID0gbnVsbCkge1xuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNvcm5lclwiIH0pO1xuICAgIHJldHVybiB0aGlzLnJlZHJhd0Nvcm5lcigkZWxlbSwgY29uZmlnLCB0YWIpO1xuICB9LFxuXG4gIHJlZHJhd0Nvcm5lcigkZWxlbSwgY29uZmlnLCB0YWIgPSBudWxsKSB7XG4gICAgbGV0IGxhYmVsc0luaXRpYWxDb3JuZXIgPSBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC52YXJzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAodikgPT5cbiAgICAgICAgICB2Lm9ubHlUYWIgPT0gdW5kZWZpbmVkIHx8ICh2Lm9ubHlUYWIgJiYgdGFiICYmIHYub25seVRhYiA9PSB0YWIua2V5KVxuICAgICAgKVxuICAgICAgLm1hcCgoZCkgPT4gYDxzcGFuIGNsYXNzPVwiaXRlbS1jb2xcIj4ke2QubGFiZWx9PC9zcGFuPmApXG4gICAgICAuam9pbihcIlwiKTtcblxuICAgIGxldCBsYWJlbHNFeHRlbmRDb3JuZXIgPSBjb25maWcudGltZWxpbmUubmF2LmxlZnQuZXh0ZW5kLnZhcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh2KSA9PlxuICAgICAgICAgIHYub25seVRhYiA9PSB1bmRlZmluZWQgfHwgKHYub25seVRhYiAmJiB0YWIgJiYgdi5vbmx5VGFiID09IHRhYi5rZXkpXG4gICAgICApXG4gICAgICAubWFwKChkKSA9PiBgPHNwYW4gY2xhc3M9XCJpdGVtLWNvbFwiPiR7ZC5sYWJlbH08L3NwYW4+YClcbiAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgbGV0IGxhYmVsc0hlYWRlckV4dGVuZCA9IGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmRhdGFcbiAgICAgIC5tYXAoKGQpID0+IHtcbiAgICAgICAgaWYgKGQuaXNIaWRkZW4pIHJldHVybiBcIlwiO1xuXG4gICAgICAgIGxldCBhdmcgPSBcIlwiO1xuICAgICAgICBsZXQgdG9vbHRpcCA9IFwiXCI7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICBsZXQgaXNBY2NlbnQgPSBkLmlzQWNjZW50O1xuXG4gICAgICAgIGlmIChkLmF2ZXJhZ2UpIHtcbiAgICAgICAgICBhdmcgPSBgIDxzcGFuIGNsYXNzPVwiYXZlcmFnZSBcIj4gKCA8c3Bhbj4gPHNwYW4gY2xhc3M9XCJzeW1ib2xcIj54zIQ8L3NwYW4+ICR7ZC5hdmVyYWdlfSA8L3NwYW4+KSAgPC9zcGFuPiAgIGA7XG5cbiAgICAgICAgICB0b29sdGlwID0gYGNhcC10b29sdGlwPVwiUHJvbWVkaW8gJHtkLmxhYmVsfSA6ICR7ZC5hdmVyYWdlfSAke1xuICAgICAgICAgICAgZC5zdWZmaXggfHwgXCJcIlxuICAgICAgICAgIH1cImA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZC5jb2xvcikge1xuICAgICAgICAgIGlmIChpc0FjY2VudCkge1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gZC5jb2xvciA/IFwiYy1cIiArIGQuY29sb3IgKyBcIi0tYmFja2dyb3VuZFwiIDogXCJcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gZC5jb2xvciA/IFwiYy1cIiArIGQuY29sb3IgKyBcIi0tdGV4dCBcIiA6IFwiXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiaW5wdXQtdGl0bGUtY29udGFpbmVyICR7XG4gICAgICAgICAgaXNBY2NlbnQgPyBcImlucHV0LXRpdGxlLS1hY2NlbnRcIiA6IFwiXCJcbiAgICAgICAgfSAke2QuaXNQZXJzaXN0ZW50ID8gXCJwZXJzaXN0ZW50XCIgOiBcIlwifVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICR7dG9vbHRpcH0gY2xhc3M9XCJpbnB1dC10aXRsZSAke2NsYXNzTmFtZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YXZnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgbGV0IHRvZ2dsZVNpZGViYXJCdG5TdHJpbmcgPSBgXG4gICAgICAgICAgPGJ1dHRvbiB0b2dnbGUtc2lkZWJhciBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkIGNhcC1idG4tdG9nZ2xlLXNpZGViYXIgXCI+XG4gICAgICAgICAgJHtpY29ucy5jaGV2cm9uUmlnaHR9XG4gICAgICAgICAgPC9idXR0b24+IGA7XG5cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmhpZGVUb2dnbGVTaWRlYmFyQnV0dG9uKSB7XG4gICAgICB0b2dnbGVTaWRlYmFyQnRuU3RyaW5nID0gXCJcIjtcbiAgICB9XG5cbiAgICBsZXQgdGVtcGxhdGUgPSBgPGRpdj5cblxuICAgICAgICAgICR7dG9nZ2xlU2lkZWJhckJ0blN0cmluZ31cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvcm5lci10aXRsZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm90dG9tLXRleHRcIj5cbiAgICAgICAgICAgICR7Y29uZmlnLnRpbWVsaW5lLmNvcm5lci5sZWZ0LmxhYmVsfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImluaXRpYWwtY29ybmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluaXRpYWwtY29ybmVyLXRpdGxlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvdHRvbS1jb250YWluZXIgaGlkZVwiPlxuICAgICAgICAgICAgICAke2NvbmZpZy50aW1lbGluZS5jb3JuZXIuaW5pdGlhbC5sYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvdHRvbS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgJHtsYWJlbHNJbml0aWFsQ29ybmVyfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXh0ZW5kLWNvcm5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleC1jb3JuZXItdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm90dG9tLWNvbnRhaW5lciBoaWRlXCI+XG4gICAgICAgICAgICAgICR7Y29uZmlnLnRpbWVsaW5lLmNvcm5lci5leHRlbmQubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3R0b20tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICR7bGFiZWxzRXh0ZW5kQ29ybmVyfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtY29ybmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRpdGxlc1wiPlxuICAgICAgICAgICAgICAke2xhYmVsc0hlYWRlckV4dGVuZH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhciBwcm9ncmVzcy1iYXItbGVmdCBoaWRlLXByb2dyZXNzXCI+PC9kaXY+XG5cbiAgICAgIDwvZGl2PmA7XG5cbiAgICBsZXQgciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwodGVtcGxhdGUpO1xuXG4gICAgJGVsZW0uaW5uZXJIVE1MID0gXCJcIjtcbiAgICAkZWxlbS5hcHBlbmQocik7XG5cbiAgICBsZXQgdG9nZ2xlU2lkZWJhciA9ICRlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJbdG9nZ2xlLXNpZGViYXJdXCIpO1xuICAgIGlmICh0b2dnbGVTaWRlYmFyKSB7XG4gICAgICB0b2dnbGVTaWRlYmFyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICByLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwidG9nZ2xlU2lkZWJhclwiLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBDb3JuZXIgRGVyZWNob1xuICAgKiBTZSB1c2EgcGFyYSA6XG4gICAqICAgIC0gdGl0dWxvcyByZWxhY2lvbmFkb3MgY29uIGxvcyBkYXRvcyBkZWwgc2lkZWJhciBEZXJlY2hvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGNvcm5lclxuICAgKi9cbiAgY3JlYXRlQ29ybmVyUmlnaHQoY29uZmlnLCB0YWIgPSBudWxsKSB7XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWVzOiBbXCJjb3JuZXJcIiwgXCJyaWdodFwiXSB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdDb3JuZXJSaWdodCgkZWxlbSwgY29uZmlnLCB0YWIpO1xuICB9LFxuXG4gIHJlZHJhd0Nvcm5lclJpZ2h0KCRlbCwgY29uZmlnLCB0YWIgPSBudWxsKSB7XG4gICAgbGV0IGxhYmVsID0gXCJcIjtcblxuICAgIGlmIChjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmxhYmVsKSB7XG4gICAgICBgIDxzcGFuPlxuICAgICAgICAgICAgJHtjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmxhYmVsfVxuICAgICAgICAgIDwvc3Bhbj5gO1xuICAgIH1cblxuICAgIGxldCBzdHIgPSBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb3JuZXItdGl0bGVcIj5cbiAgICAgICAgJHtsYWJlbH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgcHJvZ3Jlc3MtYmFyLXJpZ2h0IGhpZGUtcHJvZ3Jlc3NcIj48L2Rpdj5cbiAgICBgO1xuICAgICRlbC5pbm5lckhUTUwgPSBzdHIudHJpbSgpO1xuICAgIGxldCAkYnRuQ29udGFpbmVyID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuYnRuLWNvbnRhaW5lclwiKTtcblxuICAgIGlmIChjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmJ1dHRvbnMpIHtcbiAgICAgIGNvbmZpZy50aW1lbGluZS5jb3JuZXIucmlnaHQuYnV0dG9ucy5mb3JFYWNoKChidG4pID0+IHtcbiAgICAgICAgbGV0IGlzRW5hYmxlZCA9IGJ0bi5nZXRJc0VuYWJsZWQgPyBidG4uZ2V0SXNFbmFibGVkKCkgOiB0cnVlO1xuICAgICAgICBpZiAoaXNFbmFibGVkKSB7XG4gICAgICAgICAgbGV0ICRidG4gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3JuZXItYnRuIGNhcC1idG4tcmFpc2VkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7YnRuLmxhYmVsIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gYCk7XG5cbiAgICAgICAgICBpZiAoYnRuLm9uQ2xpY2spIHtcbiAgICAgICAgICAgICRidG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGJ0bi5vbkNsaWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkYnRuQ29udGFpbmVyLmFwcGVuZENoaWxkKCRidG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5jb3JuZXIucmlnaHQuaW5wdXRzKSB7XG4gICAgICBjb25maWcudGltZWxpbmUuY29ybmVyLnJpZ2h0LmlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICBsZXQgJGlucHV0ID0gdGhpcy5jcmVhdGVDb3JuZXJSaWdodElucHV0KHsgaW5wdXRDb25maWc6IGlucHV0IH0pO1xuICAgICAgICAkYnRuQ29udGFpbmVyLmFwcGVuZENoaWxkKCRidG4pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAkZWw7XG4gIH0sXG5cbiAgY3JlYXRlQ29ybmVyUmlnaHRJbnB1dCh7IGlucHV0Q29uZmlnLCBkYXRhRGF5ID0gbnVsbCwgZGF5U2VsZWN0ZWQgPSBudWxsIH0pIHtcbiAgICBsZXQgciA9IG51bGw7XG4gICAgc3dpdGNoIChpbnB1dENvbmZpZy50eXBlKSB7XG4gICAgICBjYXNlIFwiYXV0b2NvbXBsZXRlLWNydWRcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlQ29ybmVyUmlnaHRJbnB1dEF1dG9jb21wbGV0ZUNydWQoe1xuICAgICAgICAgIGlucHV0Q29uZmlnLFxuICAgICAgICAgIGRhdGFEYXksXG4gICAgICAgICAgZGF5U2VsZWN0ZWQsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH0sXG5cbiAgY3JlYXRlQ29ybmVyUmlnaHRJbnB1dEF1dG9jb21wbGV0ZUNydWQoe1xuICAgIGlucHV0Q29uZmlnLFxuICAgIGRhdGFEYXksXG4gICAgZGF5U2VsZWN0ZWQsXG4gIH0pIHtcbiAgICBsZXQgZWxlbSA9IFwidGVzdFwiO1xuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIEhlYWRlciBUb3BcbiAgICogU2UgdXNhIHBhcmEgOlxuICAgKiAgICAtIE1hbmVqbyBkZSB0YWJzXG4gICAqICAgIC0gQm90b25lcyBkZSBuYXZlZ2FjacOzbiB5IHNlbGVjY2nDs24gZGUgZmVjaGFcbiAgICogICAgLSBCb3RvbiB0b2dnbGUgRGFyayBtb2RlXG4gICAqICAgIC0gQm90b24gdG9nZ2xlIEhlYWRlciBleHRlbmRlZFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbVxuICAgKi9cblxuICBjcmVhdGVIZWFkZXJUb3AoY29uZmlnLCB0YWJTZWxlY3RlZCA9IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdIZWFkZXJUb3AoY29uZmlnLCB0YWJTZWxlY3RlZCwgZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICB9LFxuXG4gIHJlZHJhd0hlYWRlclRvcChjb25maWcsIHRhYlNlbGVjdGVkID0gbnVsbCwgJGVsZW0pIHtcbiAgICBsZXQgc3RyID0gYFxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10b3BcIj5gO1xuXG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS50YWJzKSB7XG4gICAgICBsZXQgc2hvd1RhYnMgPSB0cnVlO1xuXG4gICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLnRhYnMuZmlsdGVyKCh0KSA9PiAhdC5pc0hpZGRlbikubGVuZ3RoID09IDApIHtcbiAgICAgICAgc2hvd1RhYnMgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3dUYWJzKSB7XG4gICAgICAgIHN0ciArPSBgIDxkaXYgY2xhc3M9XCJ0YWItc2VsZWN0LWNvbnRhaW5lciBjLWQtZGVza3RvcC1ub25lIGMtZC1tb2JpbGUtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInRhYnMtc2VsZWN0XCIgPmA7XG5cbiAgICAgICAgY29uZmlnLnRpbWVsaW5lLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgaWYgKCF0YWIuaXNIaWRkZW4pIHtcbiAgICAgICAgICAgIHN0ciArPSBgIDxvcHRpb24gJHtcbiAgICAgICAgICAgICAgdGFiID09IHRhYlNlbGVjdGVkID8gJ3NlbGVjdGVkPVwic2VsZWN0ZWRcIicgOiBcIlwiXG4gICAgICAgICAgICB9IHZhbHVlPVwiJHt0YWIuaWR9XCI+ICR7dGFiLmxhYmVsfSA8L29wdGlvbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyICs9IGA8L3NlbGVjdD4gPC9kaXY+YDtcblxuICAgICAgICBzdHIgKz0gYCA8ZGl2IGNsYXNzPVwidGFicy1jb250YWluZXIgYy1kLWRlc2t0b3AtZmxleCBjLWQtbW9iaWxlLW5vbmVcIj5gO1xuXG4gICAgICAgIGNvbmZpZy50aW1lbGluZS50YWJzLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgICAgIGlmICghdGFiLmlzSGlkZGVuKSB7XG4gICAgICAgICAgICBzdHIgKz0gYCA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYiAke3RhYi5kaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9ICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YWIgPT0gdGFiU2VsZWN0ZWQgPyBcImFjdGl2ZVwiIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSAgJHt0YWIuY29sb3J9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiJHt0YWIuY29sb3J9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7dGFiLmlkfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YWIudG9vbHRpcCA/ICdjYXAtdG9vbHRpcD1cIicgKyB0YWIudG9vbHRpcCArICdcIicgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+JHt0YWIubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAke3RhYi5pY29uIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzdHIgKz0gYDwvZGl2PmA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRhYlNlbGVjdGVkKSB7XG4gICAgICBpZiAodGFiU2VsZWN0ZWQubGVnZW5kcykge1xuICAgICAgICBzdHIgKz0gYCBcbiAgICAgICAgPGJ1dHRvbiB0b2dnbGUtbGVnZW5kcyBjbGFzcz1cImNhcC1idG4taWNvbiBjYXAtYnRuLWljb24tcmFpc2VkIFwiPlxuICAgICAgICAgICR7aWNvbnMudG9nZ2xlTGVnZW5kc31cbiAgICAgICAgPC9idXR0b24+IFxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmRzLWNvbnRhaW5lciBmb3JjZS1tb2JpbGUtc3R5bGUgaGlkZVwiPiBgO1xuXG4gICAgICAgIHRhYlNlbGVjdGVkLmxlZ2VuZHMuZm9yRWFjaCgobGVnZW5kKSA9PiB7XG4gICAgICAgICAgbGV0IGNvbG9yQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgIGxldCBjb2xvckJnID0gXCJcIjtcblxuICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGxlZ2VuZC5jb2xvcikpIHtcbiAgICAgICAgICAgIGNvbG9yQmcgPSBcImJhY2tncm91bmQ6XCIgKyBsZWdlbmQuY29sb3I7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbG9yQ2xhc3MgPSBsZWdlbmQuY29sb3IgPyBsZWdlbmQuY29sb3IgKyBcIi0tYmFja2dyb3VuZFwiIDogXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHIgKz0gYCA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsZWdlbmQgJHtsZWdlbmQuYWN0aXZlID8gXCJhY3RpdmVcIiA6IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke2xlZ2VuZC5rZXl9XCJcbiAgICAgICAgICAgICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnRvb2x0aXAgPyBgY2FwLXRvb2x0aXA9XCIke2xlZ2VuZC50b29sdGlwfVwiYCA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICB9ID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWxlZ2VuZCAke2NvbG9yQ2xhc3N9ICR7XG4gICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5zaGFwZVxuICAgICAgICAgICAgICAgICAgfVwiIHN0eWxlPVwiJHtjb2xvckJnfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4+JHtsZWdlbmQubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0ciArPSBgPC9kaXY+YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdHIgKz0gYFxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxuXG5cblxuICAgICAgICAgIDxidXR0b24gY2FwLWJ0bi1wcmV2IGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWRcIj5cbiAgICAgICAgICAgICAke2ljb25zLmFycm93TGVmdH1cbiAgICAgICAgICAgICAke2ljb25zLmxvYWRpbmdJY29ufSBcbiAgICAgICAgICA8L2J1dHRvbj5cblxuXG4gICAgICAgICAgPGJ1dHRvbiBjYXAtYnRuLWNhbGVuZGFyIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWRcIj5cbiAgICAgICAgICAgICR7aWNvbnMuY2FsZW5kYXJ9XG4gICAgICAgICAgICAke2ljb25zLmxvYWRpbmdJY29ufVxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvbiBjYXAtYnRuLW5leHQgY2xhc3M9XCJjYXAtYnRuLWljb24gY2FwLWJ0bi1pY29uLXJhaXNlZFwiPlxuICAgICAgICAgICAgJHtpY29ucy5hcnJvd1JpZ2h0fVxuICAgICAgICAgICAgJHtpY29ucy5sb2FkaW5nSWNvbn1cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cblxuICAgICAgICAgIDxidXR0b24gdG9nZ2xlLWRhcmsgY2xhc3M9XCJjYXAtYnRuLWljb24gY2FwLWJ0bi1oZWFkZXIgYy1kLW1vYmlsZS1ub25lICR7XG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUud2l0aERhcmtUb2dnbGUgPT0gZmFsc2UgPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAke2ljb25zLmRhcmt9XG4gICAgICAgICAgICAke2ljb25zLmxpZ2h0fVxuICAgICAgICAgIDwvYnV0dG9uPmA7XG5cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmhlYWRlci5leHRlbmQuZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICAgIHN0ciArPSBgPGJ1dHRvbiB0b2dnbGUtaGVhZGVyIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWRcIj5cbiAgICAgICAgICAke2ljb25zLmNoZXZyb25Eb3dufVxuICAgICAgICAgIDwvYnV0dG9uPmA7XG4gICAgfVxuXG4gICAgc3RyICs9IGAgPGRpdiBjbGFzcz1cImJ1dHRvbi1yaWdodC1jb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbiAgICAvKlxuICAgICAgICAgIGBcbiAgICAgICAgICA8YnV0dG9uIHRvZ2dsZS1zaWRlYmFyLXJpZ2h0IGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWRcIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6MjRweDtoZWlnaHQ6MjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTE1LjQxLDE2LjU4TDEwLjgzLDEyTDE1LjQxLDcuNDFMMTQsNkw4LDEyTDE0LDE4TDE1LjQxLDE2LjU4WlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICAgICovXG5cbiAgICBsZXQgJHIgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gICAgJGVsZW0ucmVwbGFjZVdpdGgoJHIpO1xuXG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5oZWFkZXIucmlnaHRCdXR0b25zKSB7XG4gICAgICBsZXQgJGJ1dHRvbkNvbnRhaW5lciA9ICRyLnF1ZXJ5U2VsZWN0b3IoXCIuYnV0dG9uLXJpZ2h0LWNvbnRhaW5lclwiKTtcbiAgICAgIGNvbmZpZy50aW1lbGluZS5oZWFkZXIucmlnaHRCdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICBsZXQgaGFzQmFkZ2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKGJ1dHRvbi5oYXNCYWRnZSkge1xuICAgICAgICAgIGhhc0JhZGdlID0gYnV0dG9uLmhhc0JhZGdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0ciA9IGA8YnV0dG9uIGNsYXNzPVwiY2FwLWJ0bi1pY29uIGNhcC1idG4taWNvbi1yYWlzZWQgJHtcbiAgICAgICAgICBoYXNCYWRnZSA/IFwiY2FwLWJ0bi1oYXMtYmFkZ2VcIiA6IFwiXCJcbiAgICAgICAgfVwiPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIDxzdmcgc3R5bGU9XCJ3aWR0aDoyNHB4O2hlaWdodDoyNHB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCIke2J1dHRvbi5pY29ufVwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPmA7XG4gICAgICAgIGxldCAkYnV0dG9uID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuICAgICAgICAkYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZ0KSA9PiBidXR0b24ub25DbGljayh7IGV2dCB9KSk7XG4gICAgICAgICRidXR0b25Db250YWluZXIuYXBwZW5kKCRidXR0b24pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0ICR0b2dnbGVEYXJrID0gJHIucXVlcnlTZWxlY3RvcihcIlt0b2dnbGUtZGFya11cIik7XG4gICAgaWYgKCR0b2dnbGVEYXJrKSB7XG4gICAgICAkdG9nZ2xlRGFyay5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJ0b2dnbGVEYXJrXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0ICRidG5DYWxlbmRhciA9ICRyLnF1ZXJ5U2VsZWN0b3IoXCJbY2FwLWJ0bi1jYWxlbmRhcl1cIik7XG4gICAgaWYgKCRidG5DYWxlbmRhcikge1xuICAgICAgJGJ0bkNhbGVuZGFyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgeCA9IGUueDtcbiAgICAgICAgbGV0IHkgPSBlLnk7XG4gICAgICAgICRyLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2xpY2tDYWxlbmRhckljb25cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7IHgsIHkgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0ICRidG5Ub2dnbGVIZWFkZXIgPSAkci5xdWVyeVNlbGVjdG9yKFwiW3RvZ2dsZS1oZWFkZXJdXCIpO1xuICAgIGlmICgkYnRuVG9nZ2xlSGVhZGVyKSB7XG4gICAgICAkYnRuVG9nZ2xlSGVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInRvZ2dsZUhlYWRlclwiLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qXG4gICAgJHIucXVlcnlTZWxlY3RvcihcIlt0b2dnbGUtc2lkZWJhci1yaWdodF1cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGUgPT4ge1xuICAgICAgJHIuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJ0b2dnbGVTaWRlYmFyUmlnaHRcIiwge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgICAqL1xuXG4gICAgJHIucXVlcnlTZWxlY3RvcihcIltjYXAtYnRuLXByZXZdXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiaGVhZGVyUHJldlwiLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgJHIucXVlcnlTZWxlY3RvcihcIltjYXAtYnRuLWNhbGVuZGFyXVwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICRyLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudChcImhlYWRlckNhbGVuZGFyXCIsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgb3JpZ2luYWxFdnQ6IGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAkci5xdWVyeVNlbGVjdG9yKFwiW2NhcC1idG4tbmV4dF1cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJoZWFkZXJOZXh0XCIsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgb3JpZ2luYWxFdnQ6IGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBsZXQgJHRvZ2dsZUxlZ2VuZHNCdG4gPSAkci5xdWVyeVNlbGVjdG9yKFwiW3RvZ2dsZS1sZWdlbmRzXVwiKTtcbiAgICBpZiAoJHRvZ2dsZUxlZ2VuZHNCdG4pIHtcbiAgICAgICR0b2dnbGVMZWdlbmRzQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgJGxlZ2VuZENvbnRhaW5lciA9ICRyLnF1ZXJ5U2VsZWN0b3IoXCIubGVnZW5kcy1jb250YWluZXJcIik7XG4gICAgICAgIGlmICgkbGVnZW5kQ29udGFpbmVyKSB7XG4gICAgICAgICAgJGxlZ2VuZENvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKFwiaGlkZVwiKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgJHIucXVlcnlTZWxlY3RvckFsbChcIi5sZWdlbmRcIikuZm9yRWFjaCgoJGxlZ2VuZCkgPT4ge1xuICAgICAgJGxlZ2VuZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IGtleSA9IGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIik7XG5cbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIGxldCBsZWdlbmRTZWxlY3RlZCA9IHRhYlNlbGVjdGVkLmxlZ2VuZHMuZmluZChcbiAgICAgICAgICAgICh0YWIpID0+IHRhYi5rZXkgPT09IGtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGxlZ2VuZFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJzZWxlY3RMZWdlbmRIZWFkZXJcIiwge1xuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICBsZWdlbmQ6IGxlZ2VuZFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgJGxlZ2VuZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgJHIucXVlcnlTZWxlY3RvckFsbChcIi50YWI6bm90KC5kaXNhYmxlZClcIikuZm9yRWFjaCgoJHRhYikgPT4ge1xuICAgICAgJHRhYi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IGtleSA9IGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIik7XG5cbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIGxldCB0YWJTZWxlY3RlZCA9IGNvbmZpZy50aW1lbGluZS50YWJzLmZpbmQoKHRhYikgPT4gdGFiLmlkID09IGtleSk7XG4gICAgICAgICAgaWYgKHRhYlNlbGVjdGVkKSB7XG4gICAgICAgICAgICAkci5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJzZWxlY3RUYWJIZWFkZXJcIiwge1xuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICB0YWI6IHRhYlNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkci5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYnMtc2VsZWN0Om5vdCguZGlzYWJsZWQpXCIpLmZvckVhY2goKCR0YWIpID0+IHtcbiAgICAgICR0YWIuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgICBsZXQga2V5ID0gcGFyc2VGbG9hdChlLmN1cnJlbnRUYXJnZXQudmFsdWUpO1xuXG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBsZXQgdGFiU2VsZWN0ZWQgPSBjb25maWcudGltZWxpbmUudGFicy5maW5kKCh0YWIpID0+IHRhYi5pZCA9PSBrZXkpO1xuICAgICAgICAgIGlmICh0YWJTZWxlY3RlZCkge1xuICAgICAgICAgICAgJHIuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwic2VsZWN0VGFiSGVhZGVyXCIsIHtcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgdGFiOiB0YWJTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICRyO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIEhlYWRlclxuICAgKiBTZSB1c2EgcGFyYSA6XG4gICAqICAgIC0gTW9zdHJhciBmZWNoYXMgZW4gaGVhZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tXG4gICAqL1xuICBjcmVhdGVIZWFkZXIoY29uZmlnKSB7XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJoZWFkZXJcIik7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3SGVhZGVyKGNvbmZpZywgJGVsZW0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgSGVhZGVyLCB1c2FkbyBwYXJhIHJlZGlidWphclxuICAgKiB1dGlsaXphICRlbGVtIGNvbW8gZWxlbWVudG8gZG9tIGRvbmRlIHJlY3JlYXJsb1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gJGVsZW0gLSBFbGVtZW50byBEb20gZG9uZGUgY3JlYSBIZWFkZXJcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb21cbiAgICovXG4gIHJlZHJhd0hlYWRlcihjb25maWcsICRlbGVtKSB7XG4gICAgbGV0IGRhdGVzVHJlZSA9IGRhdGVVdGlscy5nZXREYXRlVHJlZVJhbmdlKFxuICAgICAgbmV3IERhdGUoY29uZmlnLnRpbWVsaW5lLnN0YXJ0KSxcbiAgICAgIG5ldyBEYXRlKGNvbmZpZy50aW1lbGluZS5lbmQpXG4gICAgKTtcblxuICAgIGxldCBzdHIgPSBgPGRpdiBjbGFzcz1cImhlYWRlci1jb250YWluZXJcIj4gYDtcblxuICAgIE9iamVjdC5rZXlzKGRhdGVzVHJlZSkuZm9yRWFjaCgoa2V5WSkgPT4ge1xuICAgICAgbGV0IHllYXIgPSBkYXRlc1RyZWVba2V5WV07XG4gICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJhZ25vLWNhbGVuZGFyaW9cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZ25vIGhpZGVcIj4ke2tleVl9PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzZXNcIj5gO1xuXG4gICAgICBPYmplY3Qua2V5cyh5ZWFyKS5mb3JFYWNoKChrZXlNKSA9PiB7XG4gICAgICAgIGxldCBtb250aCA9IGRhdGVzVHJlZVtrZXlZXVtrZXlNXTtcbiAgICAgICAgc3RyICs9IGAgPGRpdiBjbGFzcz1cIm1lcy1jYWxlbmRhcmlvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXMgJHtcbiAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtb250aCkubGVuZ3RoIDwgNFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcIm1lcy1yZWR1Y2VkIG1lcy1yZWR1Y2VkLVwiICsgT2JqZWN0LmtleXMobW9udGgpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3V0aWxzLmdldE1vbnRoQnlQb3NpdGlvbihrZXlNKX0gJHtrZXlZfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpYXNcIj5gO1xuICAgICAgICBPYmplY3Qua2V5cyhtb250aCkuZm9yRWFjaCgoa2V5RCkgPT4ge1xuICAgICAgICAgIGxldCBkYXkgPSBkYXRlc1RyZWVba2V5WV1ba2V5TV1ba2V5RF07XG4gICAgICAgICAgbGV0IGlzV2Vla2VuZCA9IGRheS5pc1dlZWtlbmQ7XG4gICAgICAgICAgbGV0IGlzVG9kYXkgPSBkYXkuaXNUb2RheTtcbiAgICAgICAgICBsZXQgaGFzQWxlcnQgPSBjb25maWcudGltZWxpbmUuaGVhZGVyLmRhdGVIYXNBbGVydFxuICAgICAgICAgICAgPyBjb25maWcudGltZWxpbmUuaGVhZGVyLmRhdGVIYXNBbGVydChkYXkpXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIGxldCBkYXRlID0gZGF0ZVV0aWxzLmZvcm1hdERhdGUoZGF5LmRhdGUpO1xuICAgICAgICAgIHN0ciArPSBgPGRpdiBjbGFzcz1cImRpYS1jYWxlbmRhcmlvIFxuICAgICAgICAgICAgJHtpc1RvZGF5ID8gXCJ0b2RheVwiIDogXCJcIn1cbiAgICAgICAgICAgICR7aXNXZWVrZW5kID8gXCJ3ZWVrZW5kXCIgOiBcIlwifVxuICAgICAgICAgICAgJHtoYXNBbGVydCA/IFwiaGFzLWFsZXJ0XCIgOiBcIlwifVxuICAgICAgICAgICAgJHtjb25maWcudGltZWxpbmUuZGF0ZVNlbGVjdGFibGUgPyBcImlzLWNsaWNrZWFibGVcIiA6IFwiXCJ9XG4gICAgICAgICAgICAke2NvbmZpZy50aW1lbGluZS5kYXRlV2l0aENvbnRleHRNZW51ID8gXCJpcy1jbGlja2VhYmxlXCIgOiBcIlwifVxuICAgICAgICAgICAgXCIgZGF0ZT1cIiR7ZGF0ZX1cIj4ke2tleUR9PC9kaXY+YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHN0ciArPSBgPC9kaXY+PC9kaXY+YDtcbiAgICAgIH0pO1xuICAgICAgc3RyICs9IGA8L2Rpdj4gPC9kaXY+YDtcbiAgICB9KTtcblxuICAgIHN0ciArPSBgPC9kaXY+YDtcbiAgICAkZWxlbS5pbm5lckhUTUwgPSBcIlwiO1xuICAgICRlbGVtLmFwcGVuZChkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cikpO1xuXG4gICAgbGV0ICRkYXlzID0gJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcIi5kaWEtY2FsZW5kYXJpb1tkYXRlXVwiKTtcbiAgICAkZGF5cy5mb3JFYWNoKCgkZGlhKSA9PiB7XG4gICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmRhdGVXaXRoQ29udGV4dE1lbnUpIHtcbiAgICAgICAgJGRpYS5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgKGV2dCkgPT4ge1xuICAgICAgICAgICRlbGVtLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjb250ZXh0TWVudURhdGVcIiwge1xuICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgJGVsZW06ICRkaWEsXG4gICAgICAgICAgICAgICAgZGF0ZTogJGRpYS5nZXRBdHRyaWJ1dGUoXCJkYXRlXCIpLFxuICAgICAgICAgICAgICAgIGNsaWVudFg6IGV2dC5jbGllbnRYLFxuICAgICAgICAgICAgICAgIGNsaWVudFk6IGV2dC5jbGllbnRZLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcudGltZWxpbmUuZGF0ZVNlbGVjdGFibGUpIHtcbiAgICAgICAgJGRpYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2dCkgPT4ge1xuICAgICAgICAgICRlbGVtLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjbGlja0RhdGVcIiwge1xuICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgJGVsZW06ICRkaWEsXG4gICAgICAgICAgICAgICAgZGF0ZTogJGRpYS5nZXRBdHRyaWJ1dGUoXCJkYXRlXCIpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcudGltZWxpbmUub25Nb3VzZU92ZXJEYXRlKSB7XG4gICAgICAgICRkaWEuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm9uTW91c2VPdmVyRGF0ZSh7XG4gICAgICAgICAgICAkZGlhLFxuICAgICAgICAgICAgJGVsZW0sXG4gICAgICAgICAgICBkYXRlOiAkZGlhLmdldEF0dHJpYnV0ZShcImRhdGVcIiksXG4gICAgICAgICAgICBldnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy50aW1lbGluZS5vbk1vdXNlT3V0RGF0ZSkge1xuICAgICAgICAkZGlhLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm9uTW91c2VPdXREYXRlKHtcbiAgICAgICAgICAgICRkaWEsXG4gICAgICAgICAgICAkZWxlbSxcbiAgICAgICAgICAgIGRhdGU6ICRkaWEuZ2V0QXR0cmlidXRlKFwiZGF0ZVwiKSxcbiAgICAgICAgICAgIGV2dCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSGVhZGVyIGV4dGVuZGVkXG4gICAqIFNlIHVzYSBwYXJhIDpcbiAgICogICAgLU1vc3RyYXIgaW5wdXRzIHkgZGF0b3MgcGFyYSBmZWNoYXMgZW4gaGVhZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGhlYWRlckV4dGVuZGVkXG4gICAqL1xuICBjcmVhdGVIZWFkZXJFeHRlbmRlZChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmhlYWRlci5leHRlbmQuZW5hYmxlZCA9PSBmYWxzZSkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgZGF0ZXMgPSBkYXRlVXRpbHMuZ2V0RGF0ZVJhbmdlKFxuICAgICAgbmV3IERhdGUoY29uZmlnLnRpbWVsaW5lLnN0YXJ0KSxcbiAgICAgIG5ldyBEYXRlKGNvbmZpZy50aW1lbGluZS5lbmQpXG4gICAgKTtcbiAgICBsZXQgc3RyID0gYDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyLWV4dGVuZGVkXCI+YDtcblxuICAgIGNvbmZpZy50aW1lbGluZS5oZWFkZXIuZXh0ZW5kLmRhdGEuZm9yRWFjaCgoZCwgZF9pbmRleCkgPT4ge1xuICAgICAgaWYgKGQuaXNIaWRkZW4pIHJldHVybiBcIlwiO1xuXG4gICAgICBsZXQgaXNQZXJzaXN0ZW50ID0gZC5pc1BlcnNpc3RlbnQ7XG4gICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJpbnB1dC1saXN0ICR7aXNQZXJzaXN0ZW50ID8gXCJwZXJzaXN0ZW50XCIgOiBcIlwifVwiPmA7XG4gICAgICBzdHIgKz0gZGF0ZXNcbiAgICAgICAgLm1hcCgoZGF0ZSkgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICAgICAgbGV0IGlzRnV0dXJlID0gZGF0ZVV0aWxzLmlzRnV0dXJlKGRhdGUpO1xuICAgICAgICAgIGxldCBpc1RvZGF5ID0gZGF0ZVV0aWxzLmlzVG9kYXkoZGF0ZSk7XG5cbiAgICAgICAgICBpZiAoZC5kYXRhKSB7XG4gICAgICAgICAgICBsZXQgZGF0YUZvdW5kZWQgPSBkLmRhdGEuZmluZCgoZGF0YUlucHV0KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkYXRlVXRpbHMuaXNTYW1lRGF0ZShuZXcgRGF0ZShkYXRhSW5wdXQuZGF0ZSksIGRhdGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGF0YUZvdW5kZWQpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhRm91bmRlZC52YWx1ZSB8fCBcIlwiO1xuICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gZGF0YUZvdW5kZWQuY2xhc3NOYW1lICsgXCIgXCIgfHwgXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkLmVkaXRhYmxlID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKGlzRnV0dXJlICYmIGQuZWRpdGFibGVGdXR1cmUgPT0gZmFsc2UpIHx8XG4gICAgICAgICAgICAoaXNUb2RheSAmJiBkLmVkaXRhYmxlVG9kYXkgPT0gZmFsc2UpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0ZT1cIiR7ZGF0ZX1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD1cIiR7ZF9pbmRleH1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiAke2NsYXNzTmFtZX0gJHtkYXRlLnZhck5hbWUgfHwgXCJcIn0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuY29sb3IgPyBcImMtXCIgKyBkLmNvbG9yICsgXCItLXRleHRcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmVkaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaXNEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZGlhLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgICBkYXRlPVwiJHtkYXRlfVwiIFxuICAgICAgICAgICAgICAgICAgaW5kZXg9XCIke2RfaW5kZXh9XCIgXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci1pbnB1dCBcbiAgICAgICAgICAgICAgICAgICR7ZGF0ZS52YXJOYW1lfSAke2QuY29sb3IgPyBcImMtXCIgKyBkLmNvbG9yICsgXCItLXRleHRcIiA6IFwiXCJ9XCIgXG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9IFxuICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiXCIpO1xuICAgICAgc3RyICs9IGA8L2Rpdj5gO1xuICAgIH0pO1xuXG4gICAgc3RyICs9IGA8L2Rpdj5gO1xuXG4gICAgbGV0IHIgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG5cbiAgICByLnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dC5oZWFkZXItaW5wdXRcIikuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgZGF0ZSA9IGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoXCJkYXRlXCIpO1xuICAgICAgICBsZXQgaW5kZXggPSBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIik7XG4gICAgICAgIGxldCB2YWx1ZSA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgICAgbGV0IHR5cGVEYXRhID0gY29uZmlnLnRpbWVsaW5lLmhlYWRlci5leHRlbmQuZGF0YVtpbmRleF07XG5cbiAgICAgICAgLy9yZWZyZXNoIGNvbmZpZyB2YWx1ZVxuICAgICAgICBsZXQgZGF0YSA9IHR5cGVEYXRhLmRhdGEuZmluZCgoZCkgPT5cbiAgICAgICAgICBkYXRlVXRpbHMuaXNTYW1lRGF0ZShuZXcgRGF0ZShkLmRhdGUpLCBuZXcgRGF0ZShkYXRlKSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBkYXRhLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHlwZURhdGEuZGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2hhbmdlSW5wdXRIZWFkZXJcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgICAgIHR5cGVEYXRhOiB0eXBlRGF0YSxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcjtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXIgU2lkZWJhciBJenF1aWVyZG9cbiAgICogICAgLSBNYW5lamEgaXRlbXMgY29tbyBhcmJvbCBkZSAyIG5pdmVsZXMgKHBhcmVudCwgY2hpbGRyZW4pXG4gICAqICAgIC0gRWwgc2lkZWJhciBzZSBkaXZpZGUgZW4gbmF2TGlzdCAtIEluaXRpYWxOYXYgLSBleHRlbmRlZE5hdiAtIEJ0bk5hdlxuICAgKiAgICAtIFNlIGFncmVnYSBpdGVtRGV0YWlsLCBwYXJhIGRldGFsbGVzIGRlIGl0ZW1zXG4gICAqXG4gICAqXG4gICAqIFRPRE86IHBhcmEgZXZpdGFyIGluY3J1c3RhciBsYXMgaWRzIGVuIGxvcyBpbnB1dHMsIHNlIGRlYmVuIGNyZWFyXG4gICAqIGxvcyBub2RvcyB1bm8gcG9yIHVubyBjb21vIGVsZW1lbnRvIERPTSwgeSBhZ3JlZ2FybGVzIGxvcyBldmVudG9zIGRpcmVjdGFtZW50ZVxuICAgKiBhaG9yYSBzZSBoYWNlIHNlbGVjY2lvbmFuZG8gdG9kb3MgbG9zIGlucHV0cyBjb24gcXVlcnlTZWxlY3RvckFsbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBTaWRlYmFyIEl6cXVpZXJkb1xuICAgKi9cbiAgY3JlYXRlTmF2TGVmdChjb25maWcsIHRhYiA9IG51bGwpIHtcbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcIm5hdlwiLCB7IGNsYXNzTmFtZTogXCJsZWZ0XCIgfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3TmF2TGVmdCgkZWxlbSwgY29uZmlnLCB0YWIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgU2lkZWJhciBpenF1aWVyZG8sIHVzYWRvIHBhcmEgcmVkaWJ1amFyXG4gICAqIFV0aWxpemEgJGVsZW0gY29tbyBlbGVtZW50byBkb20gZG9uZGUgcmVjcmVhcmxvXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIERvbSBkb25kZSBjcmVhIGVsIHNpZGViYXIgaXpxdWllcmRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIG5hdkxlZnRcbiAgICovXG5cbiAgcmVkcmF3TmF2TGVmdCgkZWxlbSwgY29uZmlnLCB0YWIgPSBudWxsKSB7XG4gICAgbGV0IG5hdkxpc3QgPSBcIlwiO1xuICAgIGxldCBpbml0aWFsTmF2TGlzdCA9IFwiXCI7XG4gICAgbGV0IGV4TmF2TGlzdCA9IFwiXCI7XG4gICAgbGV0IGJ0bk5hdkxpc3QgPSBcIlwiO1xuICAgIGxldCBpc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgaWYgKGNvbmZpZy50aW1lbGluZS5lZGl0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIGlzRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbmZpZy5kYXRhLmZvckVhY2goKGQpID0+IHtcbiAgICAgIGlmIChkLmlzSGlkZGVuKSByZXR1cm47XG5cbiAgICAgIG5hdkxpc3QgKz0gYFxuICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtaXRlbVwiPlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtLWNvbnRhaW5lciBwYXJlbnRcIj5gO1xuXG4gICAgICBpZiAoZC5jaGlsZHJlbikge1xuICAgICAgICBuYXZMaXN0ICs9IGA8YnV0dG9uIGNsYXNzPVwidHJlZS1pY29uICR7XG4gICAgICAgICAgZC5pc0Nsb3NlZCA/IFwiXCIgOiBcImNhcC1yb3RhdGVcIlxuICAgICAgICB9XCIgaXRlbS1pZD1cIiR7ZC5pZCB8fCAtMX1cIiB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiID5cbiAgICAgICAgJHtpY29ucy5jaGV2cm9uRG93bn1cbiAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+YDtcbiAgICAgIH1cblxuICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tdGl0bGUgdHJ1bmNhdGUgZnVsbC13aWR0aCAke1xuICAgICAgICAgICAgZC5jbGlja2VhYmxlID8gXCJjbGlja2VhYmxlXCIgOiBcIlwiXG4gICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICR7ZC5uYXZPdmVyID8gXCJob3ZlcmFibGVcIiA6IFwiXCJ9IFwiIGl0ZW0taWQ9XCIke1xuICAgICAgICAgICAgICAgICAgICAgICAgZC5pZCB8fCAtMVxuICAgICAgICAgICAgICAgICAgICAgIH1cIiB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiID5cbiAgICAgICAgICAgICR7ZC5sYWJlbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlsZHJlbi1pdGVtcyAke1xuICAgICAgICAgICAgICAgIGQuaXNDbG9zZWQgPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICAgICAgfSBcIiBjaGlsZC1saXN0PVwiJHtkLmlkIHx8IC0xfVwiPmA7XG5cbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcblxuICAgICAgICAgIGxldCBsaWdodENvbG9yID0gbnVsbDtcbiAgICAgICAgICBsZXQgbGlnaHRDbGFzcyA9IG51bGw7XG4gICAgICAgICAgbGV0IGxpZ2h0U3BhbiA9IFwiXCI7XG4gICAgICAgICAgbGV0IG11bHRpQnV0dG9uc0RldGFpbFRtcGwgPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKGMubGlnaHQpIHtcbiAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGMubGlnaHQpKSB7XG4gICAgICAgICAgICAgIGxpZ2h0Q29sb3IgPSBjLmxpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGlnaHRDbGFzcyA9IGMubGlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGMubGlnaHQpIHtcbiAgICAgICAgICAgIGxpZ2h0U3BhbiA9IGA8c3BhbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWdodCAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0Q2xhc3MgPyBsaWdodENsYXNzICsgXCItbGlnaHRcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRDb2xvciA/IFwiLS1saWdodC1jb2xvcjpcIiArIGxpZ2h0Q29sb3IgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjLmhhc011bHRpYnV0dG9ucykge1xuICAgICAgICAgICAgbGV0IGljb25Gb3JtYXR0ZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC5tdWx0aWJ1dHRvbnMgJiZcbiAgICAgICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmluaXRpYWwubXVsdGlidXR0b25zLmljb25Gb3JtYXR0ZXJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpY29uRm9ybWF0dGVyID1cbiAgICAgICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC5tdWx0aWJ1dHRvbnMuaWNvbkZvcm1hdHRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBidG5Db250ZW50ID0gaWNvbkZvcm1hdHRlclxuICAgICAgICAgICAgICA/IGljb25Gb3JtYXR0ZXIoeyBpdGVtOiBjLCBjb25maWcgfSlcbiAgICAgICAgICAgICAgOiBcIlwiO1xuXG4gICAgICAgICAgICBtdWx0aUJ1dHRvbnNEZXRhaWxUbXBsID0gYDxidXR0b24gY2xhc3M9XCJtdWx0aWJ1dHRvbnMtYnRuXCIgXG4gICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCIgXG4gICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCIgXG4gICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9PlxuICAgICAgICAgICAgICAgICR7YnRuQ29udGVudH0gXG4gICAgICAgICAgICAgIDwvYnV0dG9uPmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaWxkLW5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1pdGVtLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6MjRweDtoZWlnaHQ6MjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTksMTVMMTMsMjFMMTEuNTgsMTkuNThMMTUuMTcsMTZINFY0SDZWMTRIMTUuMTdMMTEuNTgsMTAuNDJMMTMsOUwxOSwxNVpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICAgIG5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAke2xpZ2h0U3Bhbn1cbiAgICAgICAgICAgICAgICAgICAgJHttdWx0aUJ1dHRvbnNEZXRhaWxUbXBsfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS10aXRsZSAke2MuY2xpY2tlYWJsZSA/IFwiY2xpY2tlYWJsZVwiIDogXCJcIn0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMubmF2T3ZlciA/IFwiaG92ZXJhYmxlXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgfVwiIFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCIgXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtjLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfVxuXG4gICAgICBuYXZMaXN0ICs9IGA8L2Rpdj5gO1xuXG4gICAgICAvL2luaXRpYWxcbiAgICAgIGluaXRpYWxOYXZMaXN0ICs9IGA8ZGl2IGNsYXNzPVwiaW5pdGlhbC1uYXYtaXRlbSBwYXJlbnRcIj5gO1xuICAgICAgaWYgKGQud2l0aE5hdikge1xuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZC52YWx1ZXMsIHYudmFyTmFtZSk7XG5cbiAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLnJvdW5kKHZhbHVlLCB2LnJvdW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHYuaW5wdXQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodi5pbnB1dCkge1xuICAgICAgICAgICAgICBjYXNlIFwiaG91clwiOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgICAgIGxldCBoaFZhbHVlID0gdmFsdWVbMF07XG4gICAgICAgICAgICAgICAgbGV0IG1tVmFsdWUgPSB2YWx1ZVsxXTtcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7ZC5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtoaFZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7ZC5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2QudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaW5pdGlhbE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcbiAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgPGRpdiBjbGFzcz1cImNoaWxkLWluaXRpYWwtbmF2LWl0ZW0gJHtcbiAgICAgICAgICAgIGQuaXNDbG9zZWQgPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9XCIgY2hpbGQ9XCIke2QuaWQgfHwgLTF9XCI+YDtcblxuICAgICAgICAgIGlmIChjLndpdGhOYXYgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuaW5pdGlhbC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHYub25seVRhYiAmJiB0YWIgJiYgdi5vbmx5VGFiICE9PSB0YWIua2V5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGMudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5yb3VuZCh2YWx1ZSwgdi5yb3VuZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHYuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaGhWYWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbW1WYWx1ZSA9IHZhbHVlWzFdO1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHtoaFZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbml0aWFsTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vRXh0XG4gICAgICBleE5hdkxpc3QgKz0gYDxkaXYgY2xhc3M9XCJleC1uYXYtaXRlbSBwYXJlbnRcIj5gO1xuICAgICAgaWYgKGQud2l0aEV4TmF2KSB7XG4gICAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYubGVmdC5leHRlbmQudmFycy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGQudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgIGlmICh2LnJvdW5kICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdXRpbHMucm91bmQodmFsdWUsIHYucm91bmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodi5pbnB1dCkge1xuICAgICAgICAgICAgc3dpdGNoICh2LmlucHV0KSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJob3VyXCI6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdChcIjpcIik7XG4gICAgICAgICAgICAgICAgbGV0IGhoVmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgICAgICAgICBsZXQgbW1WYWx1ZSA9IHZhbHVlWzFdO1xuICAgICAgICAgICAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke2hoVmFsdWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj46PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LXR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiNTlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHt2LmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2QuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtkLnR5cGUgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7bW1WYWx1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1tXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtkLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICBpZiAoZC5jaGlsZHJlbikge1xuICAgICAgICBkLmNoaWxkcmVuLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICBpZiAoYy5pc0hpZGRlbikgcmV0dXJuO1xuICAgICAgICAgIGV4TmF2TGlzdCArPSBgPGRpdiBjbGFzcz1cImNoaWxkLWV4LW5hdi1pdGVtICR7XG4gICAgICAgICAgICBkLmlzQ2xvc2VkID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfVwiIGNoaWxkPVwiJHtkLmlkIHx8IC0xfVwiPmA7XG5cbiAgICAgICAgICBpZiAoYy53aXRoTmF2ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmV4dGVuZC52YXJzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHYub25seVRhYiAmJiB0YWIgJiYgdi5vbmx5VGFiICE9PSB0YWIua2V5KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGMudmFsdWVzLCB2LnZhck5hbWUpO1xuICAgICAgICAgICAgICBpZiAodi5yb3VuZCAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB1dGlscy5yb3VuZCh2YWx1ZSwgdi5yb3VuZCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodi5pbnB1dCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodi5pbnB1dCkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImhvdXJcIjpcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IHZhbHVlLnNwbGl0KFwiOlwiKSA6IFswLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhoVmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1tVmFsdWUgPSB2YWx1ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2wgaGFzLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG91ci1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LXR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHt2LmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2MuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7aGhWYWx1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImhoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQtdHlwZT1cInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCI1OVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke3Yua2V5IHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7Yy5pZCB8fCAtMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLW5vZGU9XCIke2MudHlwZSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiJHttbVZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXNEaXNhYmxlZCA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGV4TmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tY29sIGhhcy1pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIiR7di5pbnB1dCB8fCBcInRleHRcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC10eXBlPVwiJHt2LmlucHV0IHx8IFwidGV4dFwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7di5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7Yy50eXBlIHx8IFwiXCJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpc0Rpc2FibGVkID8gXCJkaXNhYmxlZFwiIDogXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke3ZhbHVlfVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleE5hdkxpc3QgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXhOYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy9idXR0b25zXG4gICAgICBidG5OYXZMaXN0ICs9IGA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtaXRlbSBwYXJlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXAtYnRuLW5hdi1pdGVtLWNvbnRlbnRcIj5gO1xuICAgICAgaWYgKFxuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucyAmJlxuICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzXG4gICAgICApIHtcbiAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5sZWZ0LmJ1dHRvbnMudmFycy5mb3JFYWNoKChidG4pID0+IHtcbiAgICAgICAgICBpZiAoZC53aXRoQnRuTmF2KSB7XG4gICAgICAgICAgICBsZXQgYnRuQ29udGVudCA9IFwiXCI7XG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gYnRuLmNsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICAgICAgICBpZiAoYnRuLmljb24pIHtcbiAgICAgICAgICAgICAgYnRuQ29udGVudCA9IGJ0bi5pY29uID8gYnRuLmljb24gOiBcIlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnRuLmljb25Gb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgYnRuQ29udGVudCA9IGJ0bi5pY29uRm9ybWF0dGVyID8gYnRuLmljb25Gb3JtYXR0ZXIoZCwgYnRuKSA6IFwiXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChidG4uc2hhcGUpIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIGNhcC1idG4tXCIgKyBidG4uc2hhcGU7XG4gICAgICAgICAgICAgIGJ0bkNvbnRlbnQgKz0gYDxzcGFuPiAke1xuICAgICAgICAgICAgICAgIGJ0bi5mb3JtYXR0ZXIgPyBidG4uZm9ybWF0dGVyKGQsIGJ0bikgOiBcIlwiXG4gICAgICAgICAgICAgIH0gPC9zcGFuPiBgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ0bi5idG5DbGFzc05hbWVGb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgbGV0IG5ld0NsYXNzTmFtZSA9IGJ0bi5idG5DbGFzc05hbWVGb3JtYXR0ZXIoZCwgYnRuKTtcbiAgICAgICAgICAgICAgaWYgKG5ld0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIG5ld0NsYXNzTmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhcC1idG4tc2hhcGUgJHtjbGFzc05hbWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1rZXk9XCIke2J0bi5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0taWQ9XCIke2QuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZC50eXBlIHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtidG5Db250ZW50fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcblxuICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcblxuICAgICAgICAgIC8vYnV0dG9uc1xuICAgICAgICAgIGJ0bk5hdkxpc3QgKz0gYDxkaXYgY2xhc3M9XCJjYXAtYnRuLWNoaWxkLW5hdi1pdGVtIHBhcmVudCAke1xuICAgICAgICAgICAgZC5pc0Nsb3NlZCA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH1cIiBjaGlsZD1cIiR7ZC5pZCB8fCAtMX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtaXRlbS1jb250ZW50XCI+YDtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy50aW1lbGluZS5uYXYubGVmdC5idXR0b25zICYmXG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25maWcudGltZWxpbmUubmF2LmxlZnQuYnV0dG9ucy52YXJzLmZvckVhY2goKGJ0bikgPT4ge1xuICAgICAgICAgICAgICBpZiAoYy53aXRoTmF2ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGxldCBidG5Db250ZW50ID0gXCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gYnRuLmNsYXNzTmFtZSB8fCBcIlwiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJ0bi5pY29uKSB7XG4gICAgICAgICAgICAgICAgICBidG5Db250ZW50ID0gYnRuLmljb24gPyBidG4uaWNvbiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJ0bi5pY29uRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICBidG5Db250ZW50ID0gYnRuLmljb25Gb3JtYXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgPyBidG4uaWNvbkZvcm1hdHRlcihjLCBidG4pXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYnRuLnNoYXBlKSB7XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgY2FwLWJ0bi1cIiArIGJ0bi5zaGFwZTtcbiAgICAgICAgICAgICAgICAgIGJ0bkNvbnRlbnQgKz0gYDxzcGFuPiAke1xuICAgICAgICAgICAgICAgICAgICBidG4uZm9ybWF0dGVyID8gYnRuLmZvcm1hdHRlcihjLCBidG4pIDogXCJcIlxuICAgICAgICAgICAgICAgICAgfSA8L3NwYW4+IGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChidG4uYnRuQ2xhc3NOYW1lRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgbmV3Q2xhc3NOYW1lID0gYnRuLmJ0bkNsYXNzTmFtZUZvcm1hdHRlcihjLCBidG4pO1xuICAgICAgICAgICAgICAgICAgaWYgKG5ld0NsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBuZXdDbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnRuTmF2TGlzdCArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhcC1idG4tc2hhcGUgJHtjbGFzc05hbWV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7YnRuLmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLWlkPVwiJHtjLmlkIHx8IC0xfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lzRGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtjLnR5cGUgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YnRuQ29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidG5OYXZMaXN0ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBpdGVtRGV0YWlsID0gYCA8ZGl2IGNsYXNzPVwiZGV0YWlsLW5hdi1pdGVtIGhpZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmdldERldGFpbE5hdkl0ZW1Db250ZW50KCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IHN0ciA9IGA8ZGl2IGNsYXNzPVwibmF2LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7aXRlbURldGFpbH1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke25hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5pdGlhbC1uYXYtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7aW5pdGlhbE5hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXh0ZW5kLW5hdi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHtleE5hdkxpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwLWJ0bi1uYXYtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICR7YnRuTmF2TGlzdH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IG5hdkNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgICAkZWxlbS5pbm5lckhUTUwgPSBcIlwiO1xuICAgICRlbGVtLmFwcGVuZChuYXZDb250YWluZXIpO1xuXG4gICAgLy9kZXRhbGxlIGRlIG5hdi1pdGVtXG4gICAgJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcIi5pdGVtLXRpdGxlLmhvdmVyYWJsZVwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IHBvcyA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbk5hdkxlZnQoY29uZmlnLCBlLCAkZWxlbSk7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQpO1xuICAgICAgICBsZXQgdHlwZU5vZGUgPSBpLmdldEF0dHJpYnV0ZShcInR5cGUtbm9kZVwiKTtcbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcIm92ZXJOYXZJdGVtXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBvcmlnaW5hbEV2dDogZSxcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICAgIHBvczogcG9zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvL29jdWx0YSBkZXRhbGxlIGRlIG5hdi1pdGVtLCBhbCBzYWxpciBkZWwgbmF2LWl0ZW0tbGlzdFxuICAgICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubmF2LWl0ZW0tbGlzdFwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIChlKSA9PiB7XG4gICAgICAgIGkuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJsZWF2ZU5hdkl0ZW1cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vb2N1bHRhIGRldGFsbGUgZGUgbmF2LWl0ZW0tbGlzdCwgYWwgc2FsaXIgZGUgbmF2LWl0ZW1cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGl0bGU6bm90KC5ob3ZlcmFibGUpXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCAoZSkgPT4ge1xuICAgICAgICBpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwibGVhdmVOYXZJdGVtXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLml0ZW0tdGl0bGUuY2xpY2tlYWJsZVwiKS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICBsZXQgaXRlbUlkID0gaS5nZXRBdHRyaWJ1dGUoXCJpdGVtLWlkXCIpO1xuICAgICAgICBsZXQgdHlwZU5vZGUgPSBpLmdldEF0dHJpYnV0ZShcInR5cGUtbm9kZVwiKTtcbiAgICAgICAgbGV0IHZhbHVlID0gaS52YWx1ZTtcbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNsaWNrTmF2TGVmdEl0ZW1cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICB0eXBlOiB0eXBlTm9kZSxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLm11bHRpYnV0dG9ucy1idG5cIikuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0IHBvcyA9IHV0aWxzLmV2ZW50VG9Qb3NpdGlvbk5hdkxlZnQoY29uZmlnLCBlLCAkZWxlbSk7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCB0eXBlTm9kZSA9IGkuZ2V0QXR0cmlidXRlKFwidHlwZS1ub2RlXCIpO1xuICAgICAgICBpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2xpY2tNdWx0aUJ1dHRvbnNCdG5cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICB0eXBlOiB0eXBlTm9kZSxcbiAgICAgICAgICAgICAgcG9zLFxuICAgICAgICAgICAgICBidXR0b246IGksXG4gICAgICAgICAgICAgIGV2ZW50OiBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAkZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIikuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgaS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBpbnB1dFR5cGUgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LXR5cGVcIik7XG4gICAgICAgIGxldCBrZXkgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgICAgbGV0IGl0ZW1JZCA9IGkuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgICAgbGV0IHR5cGVOb2RlID0gaS5nZXRBdHRyaWJ1dGUoXCJ0eXBlLW5vZGVcIik7XG4gICAgICAgIGxldCBpdGVtID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQpO1xuICAgICAgICBsZXQgdmFsdWUgPSBpLnZhbHVlO1xuICAgICAgICBpZiAoaW5wdXRUeXBlID09IFwidGltZVwiKSB7XG4gICAgICAgICAgbGV0IGhoX2lucHV0ID0gaS5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dC5oaFwiKS52YWx1ZTtcbiAgICAgICAgICBsZXQgbW1faW5wdXQgPSBpLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0Lm1tXCIpLnZhbHVlO1xuICAgICAgICAgIG1tX2lucHV0ID0gbW1faW5wdXQgPCAxMCA/IFwiMFwiICsgcGFyc2VGbG9hdChtbV9pbnB1dCkgOiBtbV9pbnB1dDtcbiAgICAgICAgICBpLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0Lm1tXCIpLnZhbHVlID0gbW1faW5wdXQ7XG4gICAgICAgICAgdmFsdWUgPSBoaF9pbnB1dCArIFwiOlwiICsgbW1faW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInNhdmVOYXZMZWZ0SW5wdXRcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgdGFiU2VsZWN0ZWQ6IHRhYixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgJGVsZW0ucXVlcnlTZWxlY3RvckFsbChcImJ1dHRvbi5jYXAtYnRuLXNoYXBlXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBrZXkgPSBpLmdldEF0dHJpYnV0ZShcImlucHV0LWtleVwiKTtcbiAgICAgICAgbGV0IGl0ZW1JZCA9IGkuZ2V0QXR0cmlidXRlKFwiaXRlbS1pZFwiKTtcbiAgICAgICAgbGV0IHR5cGVOb2RlID0gaS5nZXRBdHRyaWJ1dGUoXCJ0eXBlLW5vZGVcIik7XG4gICAgICAgIGkuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjbGlja05hdkxlZnRCdXR0b25cIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgICRlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCJidXR0b24udHJlZS1pY29uXCIpLmZvckVhY2goKGkpID0+IHtcbiAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIGxldCBpdGVtSWQgPSBpLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICAgIGxldCB0eXBlTm9kZSA9IGkuZ2V0QXR0cmlidXRlKFwidHlwZS1ub2RlXCIpO1xuICAgICAgICBsZXQgZGF0YUNvbmZpZyA9IGNvbmZpZy5kYXRhLmZpbmQoKGQpID0+IGQuaWQgPT0gaXRlbUlkKTtcblxuICAgICAgICBsZXQgJG5hdkl0ZW0gPSBlLmN1cnJlbnRUYXJnZXQuY2xvc2VzdChcIi5uYXYtaXRlbVwiKTtcbiAgICAgICAgbGV0ICRjaGlsZHJlbiA9ICRuYXZJdGVtLnF1ZXJ5U2VsZWN0b3IoXCIuY2hpbGRyZW4taXRlbXNcIik7XG4gICAgICAgIGxldCBpdGVtc1RvSGlkZSA9IGUuY3VycmVudFRhcmdldFxuICAgICAgICAgIC5jbG9zZXN0KFwibmF2LmxlZnRcIilcbiAgICAgICAgICAucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgIFwiW2NoaWxkPSdcIiArIGl0ZW1JZCArIFwiJ10sIFtjaGlsZC1saXN0PSdcIiArIGl0ZW1JZCArIFwiJ11cIlxuICAgICAgICAgICk7XG5cbiAgICAgICAgaWYgKCRjaGlsZHJlbikge1xuICAgICAgICAgIGlmICgkY2hpbGRyZW4uY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZVwiKSkge1xuICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJjYXAtcm90YXRlXCIpO1xuICAgICAgICAgICAgaXRlbXNUb0hpZGUuZm9yRWFjaCgoaSkgPT4gaS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKSk7XG4gICAgICAgICAgICBkYXRhQ29uZmlnLmlzQ2xvc2VkID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKFwiY2FwLXJvdGF0ZVwiKTtcbiAgICAgICAgICAgIGl0ZW1zVG9IaWRlLmZvckVhY2goKGkpID0+IGkuY2xhc3NMaXN0LmFkZChcImhpZGVcIikpO1xuICAgICAgICAgICAgZGF0YUNvbmZpZy5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNsaWNrTmF2TGVmdFRyZWVJY29uXCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZU5vZGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy9lLmN1cnJlbnRUYXJnZXQucGFyZW50XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBIdG1sIGNvbW8gU3RyaW5nLCBwYXJhIGVsIGRldGFsbGUgZGUgaXRlbXMgZW4gZWwgU2lkZWJhciBJenF1aWVyZG9cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtpdGVtPXt9XSAtIENvbmZpZ3VyYWNpb24gZGUgaXRlbVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IEh0bWwgZGUgdmVudGFuYSBkZSBkZXRhbGxlXG4gICAqL1xuICBnZXREZXRhaWxOYXZJdGVtQ29udGVudChpdGVtID0ge30pIHtcbiAgICBpZiAoaXRlbS5uYXZPdmVyID09IHVuZGVmaW5lZCkgaXRlbS5uYXZPdmVyID0ge307XG5cbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWRldGFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtdGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5sYWJlbCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5uYXZPdmVyLnN1YnRpdGxlIHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jaGlwICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxpZ2h0ID8gaXRlbS5saWdodCArIFwiLWxpZ2h0XCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgfSAgJHtpdGVtLm5hdk92ZXIuY2hpcCA/IFwiXCIgOiBcImhpZGVcIn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5uYXZPdmVyLmNoaXAgfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2l0ZW0ubmF2T3Zlci5jb250ZW50IHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgU2lkZWJhciBEZXJlY2hvXG4gICAqIFVzYWRvIHByaW5jaXBhbG1lbnRlIHBhcmEgZm9ybXVsYXJpbyBkZSBpbmdyZXNvIGRlIGRhdG9zIHBhcmEgbG9zIGRpYXNcbiAgICogc2VsZWNjaW9uYWRvc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbGEgY3JlYWNpb24gZGVsIGZvcm11bGFyaW9cbiAgICogQHJldHVybiB7T2JqZWN0fSB7ZWxlbWVudCwgaW5wdXRzfSwgZWxlbWVudCBlcyBlbCBlbGVtZW50byBEb20gZGVsIHNpZGViYXIsXG4gICAqICAgICAgICAgICAgICAgICAgaW5wdXRzIGVzIHVuIGFycmF5IGRlIGVsZW1lbnRvcyBEb20gZGUgY2FkYSBpbnB1dCBjcmVhZG9cbiAgICogICAgICAgICAgICAgICAgICAobm8gc29uIGVsZW1lbnRvcyBodG1sIGRlIHRpcG8gaW5wdXQpXG4gICAqL1xuICBjcmVhdGVOYXZSaWdodChjb25maWcsIHRhYiA9IG51bGwpIHtcbiAgICB2YXIgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcIm5hdlwiLCB7IGNsYXNzTmFtZTogXCJyaWdodFwiIH0pO1xuICAgIHJldHVybiB0aGlzLnJlZHJhd05hdlJpZ2h0KGNvbmZpZywgJGVsZW0sIHRhYiwgW10pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgU2lkZWJhciBEZXJlY2hvXG4gICAqIFV0aWxpemEgJGVsZW0gY29tbyBlbGVtZW50byBkb20gZG9uZGUgcmVjcmVhcmxvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkZWxlbSAtIEVsZW1lbnRvIERvbSBkb25kZSBjcmVhIGVsIHNpZGViYXIgZGVyZWNob1xuICAgKiBAcGFyYW0ge09iamVjdH0gdGFiIC0gVGFiIGRlIHJlZmVyZW5jaWEsIHBhcmEgbGEgY3JlYWNpb24gZGVsIGZvcm11bGFyaW9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSBkYXRvcyBkZWwgZGlhIHNlbGVjY2lvbmFuZG8sIHBhcmEgYXV0b3JyZWxsZW5vIGRlIGZvcm11bGFyaW9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRheVNlbGVjdGVkIC0gZGF0b3MgZGVsIGRpYSBzZWxlY2Npb25hZG9cbiAgICogQHBhcmFtIHtTdHJpbmd9IGRheVNlbGVjdGVkLmRhdGUgLSBmZWNoYSBkZWwgZGlhIHNlbGVjY2lvbmFkb1xuICAgKiBAcGFyYW0ge09iamVjdH0gZGF5U2VsZWN0ZWQuaXRlbSAtIEl0ZW0gZGUgU2lkZWJhciByZWxhY2lvbmFkbyBhbCBkaWEgc2VsZWNjaW9uYWRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXlTZWxlY3RlZC5wb3MgLSBwb3NpY2lvbiBkZSBkaWEgc2VsZWNjaW9uYWRvXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIFNpZGViYXIgRGVyZWNob1xuICAgKi9cbiAgcmVkcmF3TmF2UmlnaHQoXG4gICAgY29uZmlnLFxuICAgICRlbGVtLFxuICAgIHNlbGVjdGVkID0gbnVsbCxcbiAgICB0YWIgPSBudWxsLFxuICAgIGRhdGFEYXkgPSBudWxsLFxuICAgIGRheVNlbGVjdGVkID0gbnVsbFxuICApIHtcbiAgICBsZXQgJG5hdlJpZ2h0ID0gJGVsZW07IC8vZG9tLmNyZWF0ZUVsZW1lbnQoXCJuYXZcIix7Y2xhc3NOYW1lOlwicmlnaHRcIn0pO1xuICAgIGxldCAkZGl2Q29udGFpbmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIm5hdi1pbnB1dC1jb250YWluZXJcIixcbiAgICB9KTtcbiAgICBsZXQgJGlucHV0cyA9IFtdO1xuICAgIGxldCBjaGVja2JveElucHV0cyA9IFtdO1xuICAgIGxldCBpbnB1dHNXaXRoUmVsb2FkID0gW107XG4gICAgbGV0IHRhYlNlbGVjdGVkID0gdGFiO1xuICAgIHNlbGVjdGVkID0gc2VsZWN0ZWQgfHwgW2RheVNlbGVjdGVkXTtcblxuICAgIGlmICh0YWJTZWxlY3RlZCAmJiB0YWJTZWxlY3RlZC5pbnB1dHMpIHtcbiAgICAgIHRhYlNlbGVjdGVkLmlucHV0cy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgIGlmIChpLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICAgICAgbGV0ICRpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoXG4gICAgICAgICAgaSxcbiAgICAgICAgICBkYXRhRGF5LFxuICAgICAgICAgIGRheVNlbGVjdGVkLFxuICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgIHRhYlNlbGVjdGVkXG4gICAgICAgICk7XG4gICAgICAgIGlmICgkaW5wdXQpIHtcbiAgICAgICAgICAkZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKCRpbnB1dCk7XG4gICAgICAgICAgJGlucHV0cy5wdXNoKCRpbnB1dCk7XG5cbiAgICAgICAgICBpZiAoaS50eXBlID09IFwiY2hlY2tib3hcIikge1xuICAgICAgICAgICAgY2hlY2tib3hJbnB1dHMucHVzaCgkaW5wdXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpLnJlbG9hZE9uU2VsZWN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0c1dpdGhSZWxvYWQucHVzaCh7ICRpbnB1dCwgY29uZmlnOiBpIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy9tYW5lam8gZGUgZXZlbnRvcyBwYXJhIGlucHV0cyBjb24gc2hvd0lmXG4gICAgaWYgKGNoZWNrYm94SW5wdXRzKSB7XG4gICAgICBjaGVja2JveElucHV0cy5mb3JFYWNoKCgkYykgPT4ge1xuICAgICAgICAvL29idGllbmUga2V5IGRlIGNoZWNrYm94XG4gICAgICAgIGxldCBrZXkgPSAkYy5nZXRBdHRyaWJ1dGUoXCJpbnB1dC1rZXlcIik7XG4gICAgICAgIGxldCBwcm9wcyA9IHRhYlNlbGVjdGVkLmlucHV0cy5maW5kKChpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGkua2V5ID09IGtleTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGlzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGF0YURheSkge1xuICAgICAgICAgIGlzQ2hlY2tlZCA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vb2J0aWVuZSBpbnB1dHMgcmVsYWNpb25hZG9zIGRlc2RlIGNvbmZpZyBwYXJhIG1vc3RyYXIvb2N1bHRhclxuICAgICAgICBsZXQgaW5wdXRzVG9IaWRlID0gdGFiU2VsZWN0ZWQuaW5wdXRzLmZpbHRlcigoaSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpLnNob3dJZiAmJiBpLnNob3dJZiA9PSBrZXk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgaW5wdXRzVG9IaWRlS2V5cyA9IGlucHV0c1RvSGlkZS5tYXAoKGkpID0+IGkua2V5KTtcblxuICAgICAgICAvL29idGllbmUgaW5wdXRzIGRlbCBkb20sIGZpbHRyYW5kbyBjb24gaW5wdXRzVG9IaWRlXG4gICAgICAgIGxldCAkaW5wdXRzSGlkZGVuID0gJGlucHV0cy5maWx0ZXIoKCRpKSA9PiB7XG4gICAgICAgICAgbGV0IGlucHV0S2V5ID0gJGkuZ2V0QXR0cmlidXRlKFwiaW5wdXQta2V5XCIpO1xuICAgICAgICAgIHJldHVybiBpbnB1dHNUb0hpZGVLZXlzLmluZGV4T2YoaW5wdXRLZXkpID4gLTE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vc2kgaGF5IGlucHV0cyxcbiAgICAgICAgaWYgKCRpbnB1dHNIaWRkZW4pIHtcbiAgICAgICAgICBpZiAoIWlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgJGlucHV0c0hpZGRlbi5mb3JFYWNoKCgkaSkgPT4ge1xuICAgICAgICAgICAgICAkaS5jbGFzc0xpc3QuYWRkKFwiaGlkZVwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAkYy5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICRpbnB1dHNIaWRkZW4uZm9yRWFjaCgoJGkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGZuID0gJGMucXVlcnlTZWxlY3RvcihcImlucHV0W3R5cGU9J2NoZWNrYm94J11cIikuY2hlY2tlZFxuICAgICAgICAgICAgICAgID8gXCJyZW1vdmVcIlxuICAgICAgICAgICAgICAgIDogXCJhZGRcIjtcbiAgICAgICAgICAgICAgJGkuY2xhc3NMaXN0W2ZuXShcImhpZGVcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHNhdmVDYW5jZWxCdG5zID0gdGhpcy5jcmVhdGVOYXZSaWdodGJ1dHRvbnMoY29uZmlnKTtcbiAgICAkZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKHNhdmVDYW5jZWxCdG5zKTtcbiAgICAkbmF2UmlnaHQuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAkbmF2UmlnaHQuYXBwZW5kQ2hpbGQoJGRpdkNvbnRhaW5lcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudDogJG5hdlJpZ2h0LFxuICAgICAgaW5wdXRzOiAkaW5wdXRzLFxuICAgICAgaW5wdXRzV2l0aFJlbG9hZCxcbiAgICAgIHNhdmVDYW5jZWxCdG5zLFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgQ29ybmVyIGluZmVyaW9yIGl6cXVpZXJkbywgY29tbyB0aXR1bG8gcGFyYSBmb290ZXJcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgY3JlYXRlQ29ybmVyRm9vdGVyKGNvbmZpZykge1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy50aW1lbGluZS5mb290ZXIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmZvb3Rlci5lbmFibGVkID09IGZhbHNlXG4gICAgKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgbGV0IHN0ciA9IFwiXCI7XG5cbiAgICBpZiAoY29uZmlnLnRpbWVsaW5lLmZvb3Rlcikge1xuICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwiY29ybmVyLWZvb3RlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3JuZXItdGl0bGVcIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAke2NvbmZpZy50aW1lbGluZS5mb290ZXIubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgRm9vdGVyIHBhcmEgcGxhbmlsbGFcbiAgICogSW5pY2lhbG1lbnRlIGNyZWFkbyBwYXJhIHRvdGFsZXNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgY3JlYXRlRm9vdGVyKGNvbmZpZykge1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy50aW1lbGluZS5mb290ZXIgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmZvb3Rlci5lbmFibGVkID09IGZhbHNlXG4gICAgKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgc3RyID0gYFxuICAgICAgICA8Zm9vdGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgYDtcbiAgICBjb25maWcudGltZWxpbmUuZm9vdGVyLmRhdGEuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1pdGVtXCI+JHtkLnZhbHVlfTwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgICB9KTtcbiAgICBzdHIgKz0gYFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgICAgYDtcblxuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgRm9vdGVyIHBhcmEgcGxhbmlsbGFcbiAgICogSW5pY2lhbG1lbnRlIGNyZWFkbyBwYXJhIHRvdGFsZXNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3RbXX0gc2VsZWN0ZWQgLSBhcnJheSBkZSBvYmpldG9zLCBkZSBkaWFzIHNlbGVjY2lvbmFkb3NcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgY3JlYXRlU2VsZWN0Qm9hcmQoY29uZmlnLCBzZWxlY3RlZCkge1xuICAgIGxldCAkZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1jb250YWluZXJcIiB9KTtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdTZWxlY3RCb2FyZCgkZWxlbSwgc2VsZWN0ZWQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIGxpbmVhIHZlcnRpY2FsIHBhcmEgZmVjaGEgQWN0dWFsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIENvcm5lciBGb290ZXJcbiAgICovXG4gIGNyZWF0ZVRvZGF5TGluZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZWRyYXdUb2RheUxpbmUoXG4gICAgICBjb25maWcsXG4gICAgICBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0b2RheS1saW5lXCIgfSlcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgbGluZWEgdmVydGljYWwgcGFyYSBmZWNoYSBBY3R1YWxcbiAgICogc2kgZWwgZWxlbWVudG8gJGVsZW0gbm8gZXMgZW52aWFkbywgc2UgY3JlYSB1biBudWV2byBlbGVtZW50b1xuICAgKlxuICAgKiBTaSBlbCBkaWEgYWN0dWFsIG5vIGVzdGEgZGVudHJvIGRlbCByYW5nbyBkZSBmZWNoYXMgZGVsIGNvbmZpZyxcbiAgICogZGVzaGFiaWxpdGEgbGEgbGluZWEgY29uIGxhIGNsYXNlIGNzcyAuZGlzYWJsZS1saW5lXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbJGVsZW09bnVsbF0gLSBFbGVtZW50byBEb20gZG9uZGUgcmVjcmVhIGxhIGxpbmVhLCBzaSBlcyBudWxsLCBsYSBjcmVhXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIENvcm5lciBGb290ZXJcbiAgICovXG4gIHJlZHJhd1RvZGF5TGluZShjb25maWcsICRlbGVtID0gbnVsbCkge1xuICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoY29uZmlnLnRpbWVsaW5lLmVuZCkuZ2V0VGltZSgpO1xuICAgIGxldCB0b2RheVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBsZXQgeyBoZWlnaHQsIGRheVdpZHRoIH0gPSB1dGlscy5nZXRUYWJsZURpbWVuc2lvbnMoY29uZmlnKTtcblxuICAgIGlmICgkZWxlbSA9PSBudWxsKVxuICAgICAgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0b2RheS1saW5lXCIgfSk7XG5cbiAgICBpZiAoZW5kVGltZSA8IHRvZGF5VGltZSkge1xuICAgICAgJGVsZW0uY2xhc3NMaXN0LmFkZChcImRpc2FibGUtbGluZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGVsZW0uY2xhc3NMaXN0LnJlbW92ZShcImRpc2FibGUtbGluZVwiKTtcbiAgICB9XG5cbiAgICBsZXQgZGlmZkRheXMgPSBNYXRoLmZsb29yKFxuICAgICAgZGF0ZVV0aWxzLmRpZmZEYXlzKFxuICAgICAgICBjb25maWcudGltZWxpbmUuc3RhcnQsXG4gICAgICAgIGRhdGVVdGlscy5mb3JtYXREYXRlKG5ldyBEYXRlKCkpXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgZGlmZiA9IGRpZmZEYXlzICogZGF5V2lkdGg7XG4gICAgZGlmZiArPSBkYXlXaWR0aCAvIDIgLSAyOyAvLyBwYXJhIGNlbnRyYXIgbGluZWFcbiAgICBPYmplY3QuYXNzaWduKCRlbGVtLnN0eWxlLCB7XG4gICAgICBcIm1hcmdpbi1sZWZ0XCI6IGRpZmYgKyBcInB4XCIsXG4gICAgICBoZWlnaHQ6IGhlaWdodCArIFwicHhcIixcbiAgICB9KTtcbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgZWxlbWVudG8gRmxvYXRCb3gsIHF1ZSBjb250aWVuZSBsb3MgZGF0b3MgcXVlIHNlIG11ZXN0cmEgZW4gbGEgdGFibGFcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9IHRhYiAtIFRhYiBkZSByZWZlcmVuY2lhLCBwYXJhIG1vc3RyYXIgZGF0b3MgY29uZmlndXJhZG9zIHBvciB0YWJcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgY3JlYXRlRmxvYXRCb3goY29uZmlnLCB0YWIpIHtcbiAgICBsZXQgJGNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJmbG9hdC1ib3gtY29udGFpbmVyXCIsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmVkcmF3RmxvYXRCb3goY29uZmlnLCB0YWIsICRjb250YWluZXIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNyZWEgZWxlbWVudG8gRmxvYXRCb3gsIHF1ZSBjb250aWVuZSBsb3MgZGF0b3MgcXVlIHNlIG11ZXN0cmEgZW4gbGEgdGFibGFcbiAgICogU2UgdXNhIHByaW5jaXBhbG1lbnRlIHBhcmEgbW9zdHJhciBkYXRvcyBlbiBsYSB0YWJsYSBkZSBsYSBwbGFuaWxsYVxuICAgKiBsb3MgbXVlc3RyYSBkZSBtYW5lcmEgZmxvdGFudGUsIGNhbGN1bGFuZG8gZWwgVG9wIHkgZWwgTGVmdCBzZWd1biBsYSBwb3NjaW9uXG4gICAqXG4gICAqIFNlIGNvbnNpZGVyYW4gbG9zIGVsZW1lbnRvcyBwYWRyZXMgb2N1bHRvcywgcGFyYSBvY3VsdGFyIGxvcyBkYXRvc1xuICAgKlxuICAgKiBTZSBpbnNlcnRhbiBsb3MgZWxlbWVudG9zIEZsb2F0Qm94LCBjb21vIGVsZW1lbnRvIGNvbiBkYXRvcyBkZSB1biBpdGVtIHkgZGlhIGVzcGVjaWZpY29cbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIENvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9IHRhYiAtIFRhYiBkZSByZWZlcmVuY2lhLCBwYXJhIG1vc3RyYXIgZGF0b3MgY29uZmlndXJhZG9zIHBvciB0YWJcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gQ29ybmVyIEZvb3RlclxuICAgKi9cbiAgcmVkcmF3RmxvYXRCb3goY29uZmlnLCB0YWIsICRjb250YWluZXIpIHtcbiAgICAkY29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgLy9sZXQgdGFiU2VsZWN0ZWQgPSB0YWIgfHwgbnVsbDtcblxuICAgIGNvbmZpZy5kYXRhLmZvckVhY2goKGRlKSA9PiB7XG4gICAgICBpZiAoZGUuaXNIaWRkZW4pIHJldHVybjtcbiAgICAgIGRlLmNoaWxkcmVuLmZvckVhY2goKGRzKSA9PiB7XG4gICAgICAgIGlmIChkcy5pc0hpZGRlbikgcmV0dXJuO1xuXG4gICAgICAgIGRzLmRhdGEuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICghZGF0YS5tZXNzYWdlIHx8IGRhdGEubWVzc2FnZS52YWx1ZSA9PSBudWxsKSAmJlxuICAgICAgICAgICAgKGRhdGEudmFsdWVzID09IG51bGwgfHxcbiAgICAgICAgICAgICAgZGF0YS52YWx1ZXMgPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGRhdGEudmFsdWVzKS5sZW5ndGggPT09IDApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL2NoaWxkcmVuIERhdGFcbiAgICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uRmxvYXRCb3goY29uZmlnLCBkYXRhLCBkcyk7XG5cbiAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcblxuICAgICAgICAgIGlmIChkYXRhLmVycm9ycyAmJiBkYXRhLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gXCJoYXMtZXJyb3JzIFwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkZS5pc0Nsb3NlZCkge1xuICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiaGlkZSBcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbXNnID0gbnVsbDtcbiAgICAgICAgICBpZiAodGFiLmZsb2F0Qm94ICYmIHRhYi5mbG9hdEJveC5tZXNzYWdlUGF0aCkge1xuICAgICAgICAgICAgbXNnID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEsIHRhYi5mbG9hdEJveC5tZXNzYWdlUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1zZyB8fCAoZGF0YS5tZXNzYWdlICYmIGRhdGEubWVzc2FnZS52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcImhhcy1tZXNzYWdlIFwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBzdHIgPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsb2F0LWJveCAke2NsYXNzTmFtZX0gXCJcbiAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiJHtwb3NpdGlvbiA/IHBvc2l0aW9uIDogXCJcIn1cIlxuICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7ZHMuaWQgfHwgLTF9XCJcbiAgICAgICAgICAgICAgICAgICAgIHR5cGUtbm9kZT1cIiR7ZHMudHlwZSB8fCBcIlwifVwiPiBgO1xuXG4gICAgICAgICAgbGV0IHN0ckV4dCA9IGBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxvYXQtYm94LWV4dCAke2RlLmlzQ2xvc2VkID8gXCJoaWRlXCIgOiBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCIke3Bvc2l0aW9uID8gcG9zaXRpb24gOiBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS1pZD1cIiR7ZHMuaWQgfHwgLTF9LWV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZS1ub2RlPVwiJHtkcy50eXBlIHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9uZy1iYXItY29udGFpbmVyXCI+YDtcblxuICAgICAgICAgIGlmICh0YWIgJiYgdGFiLmZsb2F0Qm94KSB7XG4gICAgICAgICAgICBpZiAodGFiLmZsb2F0Qm94LnBsb3RzKSB7XG4gICAgICAgICAgICAgIHN0ciArPSBgPGRpdiBjbGFzcz1cInBsb3QtZmxvYXRib3gtY29udGFpbmVyXCI+YDtcbiAgICAgICAgICAgICAgdGFiLmZsb2F0Qm94LnBsb3RzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgY3NzVmFycyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi52YXJOYW1lKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgaWYgKG4uY29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY3NzVmFycyA9IGAtLWxvY2FsLWNvbG9yOiR7bi5jb2xvcn07YDtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gbi5jbGFzc05hbWUgfHwgXCJcIjtcblxuICAgICAgICAgICAgICAgICAgc3RyICs9IGA8ZGl2IGNsYXNzPVwicGxvdC1mbG9hdGJveCAke2NsYXNzTmFtZX0gJHtcbiAgICAgICAgICAgICAgICAgICAgbi5zdHlsZSB8fCBcIlwiXG4gICAgICAgICAgICAgICAgICB9XCIgc3R5bGU9XCIke2Nzc1ZhcnN9IFwiPjwvZGl2PmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YWIuZmxvYXRCb3guaWNvbnMpIHtcbiAgICAgICAgICAgICAgdGFiLmZsb2F0Qm94Lmljb25zLmZvckVhY2goKGljb25Db25maWcpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgY29sb3JDbGFzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgbGV0IGNvbG9yU3R5bGUgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGxldCB2aWV3Qm94ID0gXCIwIDAgMjQgMjRcIjtcbiAgICAgICAgICAgICAgICBsZXQgaWNvbiA9IGljb25Db25maWcuaWNvbiB8fCBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKGljb25Db25maWcudmFyTmFtZSkge1xuICAgICAgICAgICAgICAgICAgbGV0IGljb25WYXIgPSB1dGlscy5nZXRWYXJCeVBhdGgoXG4gICAgICAgICAgICAgICAgICAgIGRhdGEudmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICBpY29uQ29uZmlnLnZhck5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAoaWNvblZhcikge1xuICAgICAgICAgICAgICAgICAgICBpY29uID0gaWNvblZhcjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaWNvbkNvbmZpZy5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGljb25Db25maWcuY2xhc3NOYW1lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpY29uQ29uZmlnLmNvbG9yKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihpY29uQ29uZmlnLmNvbG9yKSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xvclN0eWxlID0gYC0tbG9jYWwtY29sb3I6ICR7aWNvbkNvbmZpZy5jb2xvcn07YDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yQ2xhc3MgPSBpY29uQ29uZmlnLmNvbG9yO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpY29uQ29uZmlnLmNvbG9yVmFyTmFtZSkge1xuICAgICAgICAgICAgICAgICAgbGV0IGNvbG9yVmFyID0gdXRpbHMuZ2V0VmFyQnlQYXRoKFxuICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbmZpZy5jb2xvclZhck5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAoY29sb3JWYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoY29sb3JWYXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3JTdHlsZSA9IGAtLWxvY2FsLWNvbG9yOiAke2NvbG9yVmFyfTtgO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQ2xhc3MgPSBjb2xvclZhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tZmxvYXRib3ggJHtjbGFzc05hbWV9ICR7XG4gICAgICAgICAgICAgICAgICBjb2xvckNsYXNzID8gXCJoYXMtY29sb3JcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICB9XCIgc3R5bGU9XCIke2NvbG9yU3R5bGV9XCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIke3ZpZXdCb3h9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCIke2ljb259XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL251bWVyb3MgZW4gZWwgZmxvYXRCb3hcbiAgICAgICAgICAgIGlmICh0YWIuZmxvYXRCb3gubnVtcykge1xuICAgICAgICAgICAgICB0YWIuZmxvYXRCb3gubnVtcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRhYi5sZWdlbmRzICYmIG4udGFiS2V5KSB7XG4gICAgICAgICAgICAgICAgICBsZXQgbGVnZW5kID0gdGFiLmxlZ2VuZHMuZmluZCgobCkgPT4gbC5rZXkgPT0gbi50YWJLZXkpO1xuICAgICAgICAgICAgICAgICAgaWYgKGxlZ2VuZCAmJiAhbGVnZW5kLmFjdGl2ZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBkYXRhRmxvYXRCb3ggPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGxldCBzaG93SWYgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGxldCBoaWRlSWYgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgY29sb3JDbGFzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgbGV0IGNvbG9yU3R5bGUgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGxldCBjbGFzc05hbWVzRXh0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgY29sb3JTdHlsZUV4dCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgbGV0IGNzc1ZhcnMgPSBcIlwiO1xuXG4gICAgICAgICAgICAgICAgaWYgKG4udmFyTmFtZSkge1xuICAgICAgICAgICAgICAgICAgZGF0YUZsb2F0Qm94ID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLnZhck5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuLnZhclNob3cpIHtcbiAgICAgICAgICAgICAgICAgIHNob3dJZiA9IEJvb2xlYW4odXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLnZhclNob3cpKTtcbiAgICAgICAgICAgICAgICAgIGRhdGFGbG9hdEJveCA9IGRhdGFGbG9hdEJveCB8fCBcIlwiO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuLnZhckhpZGUpIHtcbiAgICAgICAgICAgICAgICAgIGhpZGVJZiA9IEJvb2xlYW4odXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBuLnZhckhpZGUpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobi5zaGFwZSkge1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwic2hhcGUtXCIgKyBuLnNoYXBlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuLmNvbG9yKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihuLmNvbG9yKSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xvclN0eWxlID0gYC0tbG9jYWwtY29sb3I6ICR7bi5jb2xvcn07YDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yQ2xhc3MgPSBuLmNvbG9yO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuLmxvbmdCYXIpIHtcbiAgICAgICAgICAgICAgICAgIGxldCBsb25nQmFyQ29sb3IgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgbGV0IGxvbmdCYXJPcGFjaXR5ID0gXCJcIjtcblxuICAgICAgICAgICAgICAgICAgaWYgKG4ubG9uZ0JhckNvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvbmdCYXJDb2xvciA9IHV0aWxzLmdldFZhckJ5UGF0aChcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICBuLmxvbmdCYXJDb2xvclxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAobG9uZ0JhckNvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGxvbmdCYXJDb2xvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0eWxlRXh0ID0gYC0tbG9jYWwtY29sb3I6ICR7bG9uZ0JhckNvbG9yfTtgO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXNFeHQgKz0gbG9uZ0JhckNvbG9yICsgXCItbGlnaHQgXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sb3JDbGFzcyAmJiBjb2xvckNsYXNzICE9IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lc0V4dCArPSBjb2xvckNsYXNzO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2xvclN0eWxlICYmIGNvbG9yU3R5bGUgIT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb2xvclN0eWxlRXh0ID0gY29sb3JTdHlsZTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKG4ubG9uZ0Jhck9wYWNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0Jhck9wYWNpdHkgPVxuICAgICAgICAgICAgICAgICAgICAgIHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgbi5sb25nQmFyT3BhY2l0eSkgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvbmdCYXJPcGFjaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3JTdHlsZUV4dCArPVxuICAgICAgICAgICAgICAgICAgICAgICAgXCItLWxvY2FsLW9wYWNpdHk6IFwiICsgbG9uZ0Jhck9wYWNpdHkgKyBcIjtcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAobi5sb25nQmFyQ2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXNFeHQgKz1cbiAgICAgICAgICAgICAgICAgICAgICB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIG4ubG9uZ0JhckNsYXNzTmFtZSkgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgbGV0IGxvbmdCYXIgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIG4ubG9uZ0Jhcik7XG4gICAgICAgICAgICAgICAgICBpZiAobG9uZ0Jhcikge1xuICAgICAgICAgICAgICAgICAgICBjc3NWYXJzID0gYC0tbG9uZzoke2xvbmdCYXJ9O2A7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFGbG9hdEJveCAhPT0gbnVsbCAmJiBzaG93SWYgJiYgIWhpZGVJZikge1xuICAgICAgICAgICAgICAgICAgc3RyICs9IGA8c3BhbiBjbGFzcz1cImRhdGEgJHtjb2xvckNsYXNzfSAke2NsYXNzTmFtZX1cIiBzdHlsZT1cIiR7Y29sb3JTdHlsZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZGF0YUZsb2F0Qm94ID09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZGF0YUZsb2F0Qm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhRmxvYXRCb3ggPT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB1dGlscy5yb3VuZChkYXRhRmxvYXRCb3gsIG4ucm91bmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPmA7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChuLmxvbmdCYXIgJiYgY3NzVmFycykge1xuICAgICAgICAgICAgICAgICAgICBzdHJFeHQgKz0gYDxkaXYgY2xhc3M9XCJsb25nLWJhciAke2NsYXNzTmFtZXNFeHR9XCIgc3R5bGU9XCIke2NvbG9yU3R5bGVFeHR9ICR7Y3NzVmFyc30gXCI+PC9kaXY+IGA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9wdW50b3MgZW4gZWwgZmxvYXRCb3hcbiAgICAgICAgICAgIGlmICh0YWIuZmxvYXRCb3guZG90cykge1xuICAgICAgICAgICAgICBzdHIgKz0gYDxkaXYgY2xhc3M9XCJkb3QtY29udGFpbmVyLW1pZGRsZVwiPmA7XG4gICAgICAgICAgICAgIHRhYi5mbG9hdEJveC5kb3RzLmZvckVhY2goKGRvdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIGRvdC52YXJOYW1lKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICBsZXQgY29sb3JDbGFzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICBsZXQgY29sb3JTdHlsZSA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChkb3Quc2hhcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IGRvdC5zaGFwZTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGRvdC5jb2xvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihkb3QuY29sb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3JTdHlsZSA9IGAtLWxvY2FsLWNvbG9yOiAke2RvdC5jb2xvcn1gO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQ2xhc3MgPSBkb3QuY29sb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvdCAke2NvbG9yQ2xhc3N9ICR7Y2xhc3NOYW1lfVwiIHN0eWxlPVwiJHtjb2xvclN0eWxlfVwiID48L2Rpdj5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2ZpbGEgZGUgcHVudG9zIGVuIGZsb2F0Qm94XG4gICAgICAgICAgICBpZiAodGFiLmZsb2F0Qm94LnJvd0RvdHMpIHtcbiAgICAgICAgICAgICAgdGFiLmZsb2F0Qm94LnJvd0RvdHMuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZyZWVDb2x1bW5zID0gNDtcbiAgICAgICAgICAgICAgICBzdHIgKz0gYDxzcGFuIGNsYXNzPVwicm93ZG90LS1yb3cgXCI+YDtcblxuICAgICAgICAgICAgICAgIHJvdy5mb3JFYWNoKChkb3QpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0YWIubGVnZW5kcyAmJiBkb3QudGFiS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBsZWdlbmQgPSB0YWIubGVnZW5kcy5maW5kKChsKSA9PiBsLmtleSA9PSBkb3QudGFiS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlZ2VuZCAmJiAhbGVnZW5kLmFjdGl2ZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBsZXQgZGF0YUZsb2F0Qm94ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgbGV0IHNob3dJZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBsZXQgaGlkZUlmID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBsZXQgY29sb3JDbGFzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICBsZXQgY29sb3JTdHlsZSA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChkb3QudmFyTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhRmxvYXRCb3ggPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YS52YWx1ZXMsIGRvdC52YXJOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUZsb2F0Qm94ID0gcGFyc2VJbnQoZGF0YUZsb2F0Qm94KTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGRvdC52YXJTaG93KSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3dJZiA9IEJvb2xlYW4oXG4gICAgICAgICAgICAgICAgICAgICAgdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGEudmFsdWVzLCBkb3QudmFyU2hvdylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUZsb2F0Qm94ID0gZGF0YUZsb2F0Qm94IHx8IFwiXCI7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChkb3QudmFySGlkZSkge1xuICAgICAgICAgICAgICAgICAgICBoaWRlSWYgPSBCb29sZWFuKFxuICAgICAgICAgICAgICAgICAgICAgIHV0aWxzLmdldFZhckJ5UGF0aChkYXRhLnZhbHVlcywgZG90LnZhckhpZGUpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChkb3Quc2hhcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIHNoYXBlLVwiICsgZG90LnNoYXBlO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoZG90LmNvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGRvdC5jb2xvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0eWxlID0gYC0tbG9jYWwtY29sb3I6ICR7ZG90LmNvbG9yfWA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3JDbGFzcyA9IGRvdC5jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGRhdGFGbG9hdEJveCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRhRmxvYXRCb3ggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHNob3dJZiAmJlxuICAgICAgICAgICAgICAgICAgICAhaGlkZUlmICYmXG4gICAgICAgICAgICAgICAgICAgIGZyZWVDb2x1bW5zID4gMFxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuID1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhRmxvYXRCb3ggPiBmcmVlQ29sdW1ucyA/IGZyZWVDb2x1bW5zIDogZGF0YUZsb2F0Qm94O1xuICAgICAgICAgICAgICAgICAgICBmcmVlQ29sdW1ucyAtPSBuO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBgPGRpdiBjbGFzcz1cInJvd2RvdC0tZG90ICR7Y29sb3JDbGFzc30gJHtjbGFzc05hbWV9XCIgc3R5bGU9XCIke2NvbG9yU3R5bGV9XCI+PC9kaXY+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgc3RyICs9IGA8L3NwYW4+YDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIHN0ckV4dCArPSBgXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG5cbiAgICAgICAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG5cbiAgICAgICAgICBsZXQgJGVsZW1FeHQgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0ckV4dCk7XG5cbiAgICAgICAgICAkZWxlbS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdmVyXCIsIChlKSA9PiB7XG4gICAgICAgICAgICAkZWxlbS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJtb3VzZU92ZXJGbG9hdEJveFwiLCB7XG4gICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgIGl0ZW06IGRzLFxuICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgJGVsZW0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICAgICAkZWxlbS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjbGlja0Zsb2F0Qm94XCIsIHtcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgaXRlbTogZHMsXG4gICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdnQ6IGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAkY29udGFpbmVyLmFwcGVuZENoaWxkKCRlbGVtKTtcbiAgICAgICAgICAkY29udGFpbmVyLmFwcGVuZENoaWxkKCRlbGVtRXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkY29udGFpbmVyO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIERldGFpbERheSwgZGV0YWxsZSBkZSB2YWxvcmVzIGRlIGl0ZW0geSBEaWFcbiAgICogc2UgdXNhIHBhcmE6XG4gICAqICAgIC0gTXVlc3RyYSBub21icmUgZGUgaXRlbSB5IGRldGFsbGVzXG4gICAqICAgIC0gTXVlc3RyYSBjYXBzdWxhcyBkZSBkYXRvc1xuICAgKiAgICAtIE11ZXN0cmEgUGlsbHMsIHBpbGRvcmFzIGRlIGRhdG9zIHJlc3VtaWRvc1xuICAgKiAgICAtIE11ZXN0cmEgYWxlcnRhc1xuICAgKiAgICAtIE11ZXN0cmEgTWVuc2FqZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSAtIEl0ZW0gcmVsYWNpb25hZG9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWFcbiAgICogQHBhcmFtIHtCb29sZWFufSBbb25seVN0cmluZ0NvbnRlbnQgPSBmYWxzZV0gLSBwYXJhIGVzY29nZXIgc2kgZGV2dWVsdmUgU3RyaW5nIG8gRG9tRWxlbWVudFxuICAgKiBAcmV0dXJuIHtTdHJpbmd8T2JqZWN0fSBFbGVtZW50byBjb21vIFN0cmluZyBvIERvbUVsZW1lbnRcbiAgICovXG4gIGNyZWF0ZURldGFpbERheShcbiAgICBjb25maWcsXG4gICAgaXRlbSA9IHt9LFxuICAgIGRhdGFEYXksXG4gICAgdGFiU2VsZWN0ZWQsXG4gICAgb25seVN0cmluZ0NvbnRlbnQgPSBmYWxzZVxuICApIHtcbiAgICBsZXQgc3RyID0gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItZGV0YWlsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgJHtpdGVtLmxhYmVsIHx8IFwiXCJ9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAke2RhdGFEYXkgPyBkYXRlVXRpbHMuZm9ybWF0RGF0ZVJlYWRlYWJsZShkYXRhRGF5LmRhdGUpIDogXCJcIn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZGV0YWlsIGxpc3RcIj5gO1xuXG4gICAgLy9DQVBTVUxFU1xuICAgIGlmIChkYXRhRGF5KSB7XG4gICAgICBjb25maWcudGltZWxpbmUuZGV0YWlsRGF5LmNhcHN1bGVzLmZvckVhY2goKGNhcCkgPT4ge1xuICAgICAgICAvL3BhcmEgY29tcHJvYmFyIHNpIHRpZW5lIGRhdG9zLCBzZSBvYnRpZW5lIGVsIHByaW1lciB2YWxvclxuICAgICAgICAvL2RlIGxhIGxpc3RhIGRlIHZhbHVlcyBkZSB1bmEgY2Fwc3VsYVxuICAgICAgICBsZXQgaGFzVmFsdWVzID1cbiAgICAgICAgICBjYXAudmFsdWVzLmZpbHRlcihcbiAgICAgICAgICAgICh2KSA9PiB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheS52YWx1ZXMsIHYudmFyTmFtZSkgIT09IG51bGxcbiAgICAgICAgICApLmxlbmd0aCA+IDA7XG4gICAgICAgIGxldCBoaWRlSWYgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY2FwLmhpZGVJZikge1xuICAgICAgICAgIGhpZGVJZiA9IEJvb2xlYW4odXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXkudmFsdWVzLCBjYXAuaGlkZUlmKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29sb3JDbGFzcyA9IFwiXCI7XG4gICAgICAgIGxldCBjb2xvclN0eWxlID0gXCJcIjtcblxuICAgICAgICBpZiAoY2FwLmNvbG9yKSB7XG4gICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoY2FwLmNvbG9yKSkge1xuICAgICAgICAgICAgY29sb3JTdHlsZSA9IGAtLWxvY2FsLWNvbG9yOiAke2NhcC5jb2xvcn07YDtcbiAgICAgICAgICAgIGNvbG9yU3R5bGUgKz0gYC0tbG9jYWwtY29sb3ItZm9udDogJHtjYXAuY29sb3J9O2A7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbG9yQ2xhc3MgPSBjYXAuY29sb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNWYWx1ZXMgJiYgIWhpZGVJZikge1xuICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWRldGFpbCAke2NvbG9yQ2xhc3N9XCIgc3R5bGU9XCIke2NvbG9yU3R5bGV9XCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdC1pY29uICR7Y2FwLnNoYXBlIHx8IFwiXCJ9IFwiPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAke2NhcC50aXRsZSB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG5cbiAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWRlc2NyaXB0aW9uXCI+IGA7XG5cbiAgICAgICAgICBjYXAudmFsdWVzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHYudmFyTmFtZVxuICAgICAgICAgICAgICA/IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LnZhbHVlcywgdi52YXJOYW1lKVxuICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChjYXAuaXNMYWJlbGVkQXJyYXkpIHtcbiAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgodmFsdWVMYWJlbGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG91dHB1dFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVOYW1lID0gdi52YWx1ZU5hbWUgPyB2LnZhbHVlTmFtZSA6IFwidmFsdWVcIjtcblxuICAgICAgICAgICAgICAgIGxldCB0ZW1wVmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgodmFsdWVMYWJlbGVkLCB2YWx1ZU5hbWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRlbXBWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWUgPSB2LnJvdW5kXG4gICAgICAgICAgICAgICAgICAgID8gdXRpbHMucm91bmQodGVtcFZhbHVlLCB2LnJvdW5kKVxuICAgICAgICAgICAgICAgICAgICA6IHRlbXBWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID0gdi5mb3JtYXR0ZXIodmFsdWVMYWJlbGVkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG91dHB1dFZhbHVlID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID0gdXRpbHMuZm9ybWF0TnVtYmVyKG91dHB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdHIgKz1cbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlID09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgICAgIDogYFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjICR7di5zaG93Q29sdW1uID8gXCJkZXNjLWNvbHVtblwiIDogXCJcIn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3YuaGlkZUxhYmVsID8gXCJcIiA6IHZhbHVlTGFiZWxlZC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2ID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWxcIj5gICtcbiAgICAgICAgICAgICAgICAgICAgICAodi5oaWRlUHJlZmZpeCAhPT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJlZml4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt2LnByZWZpeCB8fCBcIlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgYDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke291dHB1dFZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+YCArXG4gICAgICAgICAgICAgICAgICAgICAgKHYuaGlkZVN1ZmZpeCAhPT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VmZml4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt2YWx1ZUxhYmVsZWQuc3VmZml4IHx8IHYuc3VmZml4IHx8IFwiXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxldCBvdXRwdXRWYWx1ZSA9IHYucm91bmQgPyB1dGlscy5yb3VuZCh2YWx1ZSwgdi5yb3VuZCkgOiB2YWx1ZTtcblxuICAgICAgICAgICAgICBpZiAodi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZSA9IHYuZm9ybWF0dGVyKHsgb3B0aW9uczogdiwgZGF0YURheSwgb3V0cHV0VmFsdWUgfSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodHlwZW9mIG91dHB1dFZhbHVlID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZSA9IHV0aWxzLmZvcm1hdE51bWJlcihvdXRwdXRWYWx1ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdHIgKz1cbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZSA9PSBudWxsXG4gICAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICAgIDogYFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByZWZpeFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7di5wcmVmaXggfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtvdXRwdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1ZmZpeFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7di5zdWZmaXggfHwgXCJcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgPC9kaXY+YDsgLy8gZW5kIC5pdGVtLWRldGFpbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzdHIgKz0gYFxuICAgICAgICA8L2Rpdj5gOyAvLyBsaXN0LWRldGFpbFxuXG4gICAgLy9QSUxMU1xuICAgIGlmIChcbiAgICAgIGNvbmZpZy50aW1lbGluZS5kZXRhaWxEYXkucGlsbHNWYXJOYW1lICYmXG4gICAgICBkYXRhRGF5ICYmXG4gICAgICBkYXRhRGF5LnZhbHVlc1tjb25maWcudGltZWxpbmUuZGV0YWlsRGF5LnBpbGxzVmFyTmFtZV1cbiAgICApIHtcbiAgICAgIHN0ciArPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVsZW1lbnRzLWRldGFpbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj4gJHtjb25maWcudGltZWxpbmUuZGV0YWlsRGF5LnBpbGxzVGl0bGV9IDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVsZW1lbnRzLWxpc3RcIj5gO1xuXG4gICAgICBkYXRhRGF5LnZhbHVlc1tjb25maWcudGltZWxpbmUuZGV0YWlsRGF5LnBpbGxzVmFyTmFtZV0uZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBlLnZhbHVlO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0cHV0VmFsdWUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHZhbHVlID0gdXRpbHMuZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxlbWVudC1kZXRhaWxcIj5cbiAgICAgICAgICAgICAgPGI+JHtlLmxhYmVsfTwvYj5cbiAgICAgICAgICAgICAgJHt2YWx1ZX1cbiAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICB9KTtcblxuICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+YDsgLy9lbmQgLmVsZW1lbnQtZGV0YWlsID4gLmVsZW1lbnQtbGlzdFxuICAgIH1cblxuICAgIC8vc3RyICs9IGA8L2Rpdj5gO1xuXG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS5lcnJvcnMgJiYgZGF0YURheS5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0YURheS5lcnJvcnMuZm9yRWFjaCgoZXJyKSA9PiB7XG4gICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0XCI+XG4gICAgICAgICAgICAke2ljb25zLmFsZXJ0fVxuICAgICAgICAgICAgJHtlcnIubGFiZWx9XG4gICAgICAgICAgPC9kaXY+YDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBtc2cgPSBudWxsO1xuICAgIGxldCBhdXRob3IgPSBudWxsO1xuICAgIGxldCBkYXRlTXNnID0gbnVsbDtcbiAgICBpZiAoZGF0YURheSAmJiB0YWJTZWxlY3RlZC5mbG9hdEJveCAmJiB0YWJTZWxlY3RlZC5mbG9hdEJveC5tZXNzYWdlUGF0aCkge1xuICAgICAgbXNnID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHRhYlNlbGVjdGVkLmZsb2F0Qm94Lm1lc3NhZ2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZiAoIW1zZyAmJiBkYXRhRGF5ICYmIGRhdGFEYXkubWVzc2FnZSAmJiBkYXRhRGF5Lm1lc3NhZ2UudmFsdWUpIHtcbiAgICAgIG1zZyA9IGRhdGFEYXkubWVzc2FnZS52YWx1ZTtcbiAgICAgIGF1dGhvciA9IGRhdGFEYXkubWVzc2FnZS5hdXRob3I7XG4gICAgICBkYXRlTXNnID0gZGF0ZVV0aWxzLmZvcm1hdERhdGVSZWFkZWFibGUobmV3IERhdGUoZGF0YURheS5tZXNzYWdlLmRhdGUpKTtcbiAgICB9XG5cbiAgICBpZiAobXNnKSB7XG4gICAgICAvL21zZyA9IG1zZy5yZXBsYWNlKC8oXFxyXFxufFxccnxcXG4pL2csICc8YnI+Jyk7XG4gICAgICBzdHIgKz0gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtc2otY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXNqXCI+XG4gICAgICAgICAgICA8cHJlPiR7bXNnIHx8IFwiXCJ9PC9wcmU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtc2otZGV0YWlsXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZW1haWxcIj4gJHthdXRob3IgfHwgXCJcIn0gPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGVcIj4gJHtkYXRlTXNnIHx8IFwiXCJ9IDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xuICAgIH1cblxuICAgIGxldCBzdHJDb250YWluZXIgPSBgPGRpdiBjbGFzcz1cImRldGFpbC1kYXkgZGQtaGlkZVwiPiAke3N0cn0gPC9kaXY+YDtcblxuICAgIGlmIChvbmx5U3RyaW5nQ29udGVudCkgcmV0dXJuIHN0cjtcblxuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0ckNvbnRhaW5lcik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3JlYSBIVE1MIGRlIGRldGFpbERheVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSAtIEl0ZW0gcmVsYWNpb25hZG9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWFcbiAgICogQHJldHVybiB7U3RyaW5nfSBFbGVtZW50byBjb21vIFN0cmluZywgZGUgZGV0YWlsRGF5XG4gICAqL1xuICByZWRyYXdEZXRhaWxEYXkoY29uZmlnLCBpdGVtLCBkYXRhRGF5LCB0YWJTZWxlY3RlZCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZURldGFpbERheShjb25maWcsIGl0ZW0sIGRhdGFEYXksIHRhYlNlbGVjdGVkLCB0cnVlKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwb3NpY2lvbmEgRmxvYXRCb3hcbiAgICogdmVyaWZpY2Egc2kgZWwgcGFyZW50IGVzdGEgZGVzcGxlZ2FkbywgcGFyYSBvY3VsdGFyIGxvcyBkYXRvc1xuICAgKlxuICAgKiBTb2xvIGFjdHVhbGl6YSBsYXMgYWx0dXJhcyBkZSBsb3MgZmxvYXRib3hcbiAgICogbm8gcmVjcmVhIGxvcyBmbG9hdGJveCwgZXMgbWFzIG9wdGltb1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSAtIEl0ZW0gcmVsYWNpb25hZG9cbiAgICovXG4gIHJlcG9zaXRpb25GbG9hdEJveChjb25maWcsICRmbG9hdEJveENvbnRhaW5lcikge1xuICAgICRmbG9hdEJveENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsb2F0LWJveFwiKS5mb3JFYWNoKCgkZikgPT4ge1xuICAgICAgbGV0IGl0ZW1JZCA9ICRmLmdldEF0dHJpYnV0ZShcIml0ZW0taWRcIik7XG4gICAgICBsZXQgaXRlbUhlaWdodCA9IHBhcnNlRmxvYXQoXG4gICAgICAgIHV0aWxzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpXG4gICAgICApO1xuICAgICAgbGV0IGl0ZW0sIHBhcmVudDtcbiAgICAgICh7IGl0ZW0sIHBhcmVudCB9ID0gdXRpbHMuZ2V0SXRlbUJ5SWQoY29uZmlnLCBpdGVtSWQsIFwiY2hpbGRcIiwgdHJ1ZSkpO1xuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgbGV0IHRvcCA9IHV0aWxzLmdldFBvc2l0aW9uQnlJdGVtKGNvbmZpZywgaXRlbSk7XG4gICAgICAgICRmLnN0eWxlLnRvcCA9IHRvcCAqIGl0ZW1IZWlnaHQgKyBcInB4XCI7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmlzQ2xvc2VkKSB7XG4gICAgICAgICAgJGYuY2xhc3NMaXN0LmFkZChcImhpZGVcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoJGYuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZVwiKSkge1xuICAgICAgICAgICRmLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3JlYSBpbmRpY2Fkb3JlcyBkZSBkaWFzIHNlbGVjY2lvbmFkb3NcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9ICRlbGVtIC0gRWxlbWVudG8gRG9tIGRvbmRlIGNyZWEgbG9zIGVsZW1lbnRvcyBzZWxlY2Npb25hZG9zXG4gICAqIEBwYXJhbSB7T2JqZWN0W119IHNlbGVjdGVkIC0gQXJyYXkgY29uIGxvcyBkaWFzIHNlbGVjY2lvbmFkb3NcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gcXVlIGNvbnRpZW5lIGxvcyBpbmRpY2Fkb3JlcyBkZSBkaWFzIHNlbGVjY2lvbmFkb3NcbiAgICovXG4gIHJlZHJhd1NlbGVjdEJvYXJkKCRlbGVtLCBzZWxlY3RlZCkge1xuICAgICRlbGVtLmlubmVySFRNTCA9IFwiXCI7XG4gICAgbGV0IGhhc051bWJlciA9IHRydWU7XG5cbiAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPT0gMSkgaGFzTnVtYmVyID0gZmFsc2U7XG5cbiAgICAgIHNlbGVjdGVkLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgbGV0IGF0dHJpYnV0ZXMgPSBbXTtcblxuICAgICAgICBpZiAoaGFzTnVtYmVyKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wdXNoKHsgbmFtZTogXCJjYXAtYmFkZ2VcIiwgdmFsdWU6IHMuaW5kZXggfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0ICRzID0gZG9tLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJzZWxlY3RlZC1kYXlcIixcbiAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICB9KTtcbiAgICAgICAgJHMuc3R5bGUubGVmdCA9IHMucG9zLmxlZnQgKyBcInB4XCI7XG4gICAgICAgICRzLnN0eWxlLnRvcCA9IHMucG9zLnRvcCArIFwicHhcIjtcbiAgICAgICAgJGVsZW0uYXBwZW5kKCRzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gJGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIE9idGllbmUgU3RyaW5nIGNvbiBlc3RpbG9zIENTUyBkZSBsYSBwb3NpY2lvbiBkZSB1biBmbG9hdEJveFxuICAgKiBjYWxjdWxhZG8gc2VndW4gaXRlbSB5IGZlY2hhIGRlIGxvcyB2YWxvcmVzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhLCBwYXJhIHZlciBmZWNoYSBkZSBpbmljaW9cbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBEYXRvcyBkZWwgZGlhIGluZGljYWRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtIC0gSXRlbSByZWxhY2lvbmFkb1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9IFN0cmluZyBDU1MgdG9wIHkgbGVmdCAsIHBhcmEgcG9zaWNpb25hciBmbG9hdEJveCBlbiB0YWJsZVxuICAgKi9cbiAgZ2V0UG9zaXRpb25GbG9hdEJveChjb25maWcsIGRhdGEsIGl0ZW0pIHtcbiAgICBsZXQgbGVmdCA9IGRhdGVVdGlscy5kaWZmRGF5cyhjb25maWcudGltZWxpbmUuc3RhcnQsIGRhdGEuZGF0ZSk7XG4gICAgbGV0IHRvcCA9IHV0aWxzLmdldFBvc2l0aW9uQnlJdGVtKGNvbmZpZywgaXRlbSk7XG4gICAgbGV0IGRheVdpZHRoID0gcGFyc2VGbG9hdCh1dGlscy5nZXRDU1NWYXJpYWJsZShjb25maWcsIFwiLS1kYXktd2lkdGhcIikpO1xuICAgIGxldCBpdGVtSGVpZ2h0ID0gcGFyc2VGbG9hdCh1dGlscy5nZXRDU1NWYXJpYWJsZShjb25maWcsIFwiLS1pdGVtLWhlaWdodFwiKSk7XG4gICAgbGVmdCAqPSBkYXlXaWR0aDtcbiAgICB0b3AgKj0gaXRlbUhlaWdodDtcbiAgICByZXR1cm4gXCJ0b3A6IFwiICsgdG9wICsgXCIuNXB4OyBsZWZ0OlwiICsgbGVmdCArIFwiLjVweDtcIjtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBCb3RvbiBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBwcm9waWVkYWRlcyBwYXJhIGJvdG9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wcy5jbGFzc05hbWUgLSBjbGFzc2VzIGNzcyBwYXJhIGJvdG9uXG4gICAqIEBwYXJhbSB7Kn0gcHJvcHMua2V5IC0ga2V5IHBhcmEgaWRlbnRpZmljYXIgYSBib3RvblxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcHMubGFiZWwgLSBUZXh0byBib3RvblxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgYm90b24gY3JlYWRvXG4gICAqL1xuICBjcmVhdGVCdXR0b24ocHJvcHMpIHtcbiAgICByZXR1cm4gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiJHtwcm9wcy5jbGFzc05hbWUgfHwgXCJcIn1cIiBpbnB1dC1rZXk9XCIke1xuICAgICAgICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsIHx8IFwiXCJ9XG4gICAgICAgICAgICA8L2J1dHRvbj5gKTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBCb3RvbmVzIGRlIGd1YXJkYXIgeSBjYW5jZWxhciBsb3MgZGF0b3MgZGUgZm9ybXVsYXJpbyBkZWwgc2lkZWJhciBkZXJlY2hvXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBib3RvbmVzIGNyZWFkb3NcbiAgICovXG4gIGNyZWF0ZU5hdlJpZ2h0YnV0dG9ucyhjb25maWcpIHtcbiAgICBsZXQgYnRuU2VjdGlvbiA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoXG4gICAgICBgPGRpdiBjbGFzcz1cImJ1dHRvbi1zZWN0aW9uXCI+PC9kaXY+YFxuICAgICk7XG4gICAgaWYgKFxuICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5yaWdodCAmJlxuICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5yaWdodC5oaWRlU2F2ZUJ1dHRvbiAhPSB0cnVlXG4gICAgKSB7XG4gICAgICBsZXQgc2F2ZUJ0biA9IHRoaXMuY3JlYXRlQnV0dG9uKHtcbiAgICAgICAgbGFiZWw6IFwiR3VhcmRhclwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiY2FwLWJ0bi1yYWlzZWRcIixcbiAgICAgIH0pO1xuXG4gICAgICBidG5TZWN0aW9uLmFwcGVuZENoaWxkKHNhdmVCdG4pO1xuICAgICAgc2F2ZUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgc2F2ZUJ0bi5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInNhdmVNdWx0aUlucHV0XCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5yaWdodCAmJlxuICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5yaWdodC5oaWRlQ2FuY2VsQnV0dG9uICE9IHRydWVcbiAgICApIHtcbiAgICAgIGNvbnN0IGNhbmNlbExhYmVsQnV0dG9uID1cbiAgICAgICAgY29uZmlnLnRpbWVsaW5lLm5hdi5yaWdodC5jYW5jZWxMYWJlbEJ1dHRvbiB8fCBcIkNhbmNlbGFyXCI7XG4gICAgICBsZXQgY2FuY2VsQnRuID0gdGhpcy5jcmVhdGVCdXR0b24oe1xuICAgICAgICBsYWJlbDogY2FuY2VsTGFiZWxCdXR0b24sXG4gICAgICAgIGNsYXNzTmFtZTogXCJjYXAtYnRuLW91dGxpbmVcIixcbiAgICAgIH0pO1xuXG4gICAgICBidG5TZWN0aW9uLmFwcGVuZENoaWxkKGNhbmNlbEJ0bik7XG5cbiAgICAgIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgY2FuY2VsQnRuLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFwiY2FuY2VsTXVsdGlJbnB1dFwiLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBidG5TZWN0aW9uO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbZGF0YURheSA9IG51bGxdIC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcGFyYW0ge09iamVjdH0gW2RheVNlbGVjdGVkID0gbnVsbF0gLSBkYXRvcyBkZWwgZGlhIHNlbGVjY2lvbmFkb1xuICAgKiBAcGFyYW0ge09iamVjdFtdfSBbc2VsZWN0ZWQgPSBbXV0gLSBhcnJheSBkZSBvYmpldG9zLCBkZSBkaWFzIHNlbGVjY2lvbmFkb3NcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXQoXG4gICAgcHJvcHMsXG4gICAgZGF0YURheSA9IG51bGwsXG4gICAgZGF5U2VsZWN0ZWQgPSBudWxsLFxuICAgIHNlbGVjdGVkID0gW10sXG4gICAgdGFiU2VsZWN0ZWRcbiAgKSB7XG4gICAgbGV0IHIgPSBudWxsO1xuXG4gICAgaWYgKHByb3BzLmlnbm9yZVJlbmRlciA9PSB0cnVlKSByZXR1cm4gcjtcblxuICAgIHN3aXRjaCAocHJvcHMudHlwZSkge1xuICAgICAgY2FzZSBcImN1c3RvbVwiOlxuICAgICAgICByID0gcHJvcHMucmVuZGVyXG4gICAgICAgICAgPyBwcm9wcy5yZW5kZXIoeyBwcm9wcywgZGF0YURheSwgZGF5U2VsZWN0ZWQsIHNlbGVjdGVkIH0pXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICByLnNldEF0dHJpYnV0ZShcImlucHV0LWtleVwiLCBwcm9wcy5rZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRTZWxlY3QocHJvcHMsIGRhdGFEYXksIGRheVNlbGVjdGVkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dEZpbGUocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJmaWxlTGlua1wiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVGaWxlTGluayhwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlVGV4dChwcm9wcywgc2VsZWN0ZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0aXRsZVwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVUaXRsZShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dE51bWJlcihwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImZsb2F0XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0RmxvYXQocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0TWVzc2FnZShwcm9wcywgZGF0YURheSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0VGV4dEFyZWEocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJjaGVja2JveFwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dENoZWNrYm94KHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaW5wdXRMaXN0XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0TGlzdChwcm9wcywgZGF0YURheSwgZGF5U2VsZWN0ZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpbnB1dC1ib3hcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRCb3gocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsaXN0XCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUxpc3QocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkYXRhLWxpc3RcIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlRGF0YUxpc3QoXG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgZGF0YURheSxcbiAgICAgICAgICBkYXlTZWxlY3RlZCxcbiAgICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgICB0YWJTZWxlY3RlZFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJidXR0b25cIjpcbiAgICAgICAgciA9IHRoaXMuY3JlYXRlSW5wdXRCdXR0b24ocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJidXR0b25zLWdyb3VwXCI6XG4gICAgICAgIHIgPSB0aGlzLmNyZWF0ZUlucHV0QnV0dG9uc0dyb3VwKHByb3BzLCBkYXRhRGF5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dFRpbWUocHJvcHMsIGRhdGFEYXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpbnB1dC10ZXh0XCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByID0gdGhpcy5jcmVhdGVJbnB1dFRleHQocHJvcHMsIGRhdGFEYXkpO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IGNvbiBmb3JtYXRvIEhvcmEsIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIFVzYSAyIGlucHV0cywgaG9yYSB5IG1pbnV0b3NcbiAgICpcbiAgICogZWwgdmFsdWUgcXVlIGludGVycHJldGEgZXMgU3RyaW5nIEhIOk1NXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbZGF0YURheSA9IG51bGxdIC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dFRpbWUocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgaGhWYWx1ZSA9IFwiXCI7XG4gICAgbGV0IG1tVmFsdWUgPSBcIlwiO1xuXG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcblxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICAgICAgICBoaFZhbHVlID0gdmFsdWVbMF07XG4gICAgICAgIG1tVmFsdWUgPSB2YWx1ZVsxXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgJGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsIHx8IFwiXCJ9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaG91clwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjAwXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICBtYXg9XCI5OVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke2hoVmFsdWV9XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzeW1ib2xcIj46PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pbnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMDBcIlxuICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjU5XCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7bW1WYWx1ZX1cIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1oaW50XCI+XG4gICAgICAgICAgICAgICAgJHtwcm9wcy50ZXh0SGludCB8fCBcIlwifVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCAkaGhJbnB1dCA9ICRlbGVtLnF1ZXJ5U2VsZWN0b3IoXCIuaG91clwiKTtcbiAgICBsZXQgJG1tSW5wdXQgPSAkZWxlbS5xdWVyeVNlbGVjdG9yKFwiLm1pbnV0ZXNcIik7XG5cbiAgICAkaGhJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgICRoaElucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudChcImNoYW5nZVRpbWVJbnB1dEhIXCIsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAga2V5OiBwcm9wcy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogZS5zcmNFbGVtZW50LnZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgJG1tSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB7XG4gICAgICAkbW1JbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoXCJjaGFuZ2VUaW1lSW5wdXRNTVwiLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGtleTogcHJvcHMua2V5LFxuICAgICAgICAgICAgdmFsdWU6IGUuc3JjRWxlbWVudC52YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKCRoaElucHV0LCAkZWxlbSwgcHJvcHMpO1xuICAgIHRoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKCRtbUlucHV0LCAkZWxlbSwgcHJvcHMpO1xuXG4gICAgcmV0dXJuICRlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIFRleHQgY29tbyBlbGVtZW50byBEb21cbiAgICogU2UgY29uZmlndXJhIGNvbW8gaW5wdXQsIHBlcm8gbm8gZGV2dWVsdmUgZGF0b3MsIGVzIHVuIHRleHRvXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZVRleHQocHJvcHMsIHNlbGVjdGVkKSB7XG4gICAgbGV0IGxhYmVsID0gcHJvcHMubGFiZWw7XG4gICAgaWYgKHByb3BzLmZvcm1hdHRlcikge1xuICAgICAgbGFiZWwgPSBwcm9wcy5mb3JtYXR0ZXIoeyBzZWxlY3RlZCB9KTtcbiAgICB9XG4gICAgbGV0ICRlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZSBcIiA6IFwiXCJ9ICR7XG4gICAgICAgICAgICBwcm9wcy50b0xlZnQgPyBcInRvLWxlZnQgXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIke3Byb3BzLmNsYXNzTmFtZXMgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgICR7bGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+YCk7XG4gICAgcmV0dXJuICRlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIFRpdGxlIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqIFNlIGNvbmZpZ3VyYSBjb21vIGlucHV0LCBwZXJvIG5vIGRldnVlbHZlIGRhdG9zLCBlcyB1biB0ZXh0b1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVUaXRsZShwcm9wcykge1xuICAgIGxldCBjbGFzc05hbWVzID0gXCJ0ZXh0LXRpdGxlXCI7XG4gICAgaWYgKHByb3BzLmlzU3VidGl0bGUpIHtcbiAgICAgIGNsYXNzTmFtZXMgPSBcInRleHQtc3VidGl0bGVcIjtcbiAgICB9XG4gICAgcmV0dXJuIGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiJHtjbGFzc05hbWVzfVwiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PmApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IHRpcG8gTnVtZXJpY28gY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0TnVtYmVyKHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgfVxuICAgIHZhbHVlID0gdmFsdWUgfHwgXCJcIjtcblxuICAgIGxldCBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5jbGFzc05hbWVzIHx8IFwiXCJ9ICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTIgXCI+XG4gICAgICAgICAgICAgICAgJHtwcm9wcy5zdWZmaXggPyBcIihcIiArIHByb3BzLnN1ZmZpeCArIFwiKVwiIDogXCJcIn1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIiR7dmFsdWV9XCI+XG5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhpbnRcIj5cbiAgICAgICAgICAgICAgICAgICR7cHJvcHMudGV4dEhpbnQgfHwgXCJcIn1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgaW5wdXRFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG5cbiAgICB0aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cyhpbnB1dEVsZW0sIGVsZW0sIHByb3BzKTtcblxuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0IHRpcG8gRklsZXBpY2tlciBjb21vIGVsZW1lbnRvIERvbVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBjb25maWcgcGFyYSBJbnB1dFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YURheSAtIHZhbG9yZXMgZGUgaXRlbSB5IERpYSwgb3BjaW9uYWxcbiAgICogQHJldHVybiB7T2JqZWN0fSBFbGVtZW50byBEb20gZGVsIGlucHV0IGNyZWFkb1xuICAgKi9cbiAgY3JlYXRlSW5wdXRGaWxlKHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICBsZXQgZmlsZU5hbWUgPSBcIlwiO1xuICAgIGxldCBmaWxlUGF0aCA9IFwiXCI7XG5cbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgICBmaWxlTmFtZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy5maWxlTmFtZVZhbHVlKTtcbiAgICAgIGZpbGVQYXRoID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLmZpbGVQYXRoVmFsdWUpO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgfHwgXCJcIjtcbiAgICBmaWxlTmFtZSA9IGZpbGVOYW1lIHx8IFwiXCI7XG4gICAgZmlsZVBhdGggPSBmaWxlUGF0aCB8fCBcIlwiO1xuXG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmNsYXNzTmFtZXMgfHwgXCJcIn0gJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pbnB1dC1maWxlXCIgPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic21hbGwtY2xvc2UgY2xlYXItZmlsZS1pbnB1dFwiPng8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGxhYmVsID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1pbnB1dC1maWxlLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAke3Byb3BzLnBpY2tlckxhYmVsIHx8IFwiU2VsZWNjaW9uYXIgQXJjaGl2b1wifVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiB2YWx1ZT1cIiR7dmFsdWV9XCI+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tbGlua1wiPlxuICAgICAgICAgICAgICA8YSBocmVmPVwiJHtmaWxlUGF0aH1cIiB0YXJnZXQ9XCJfYmxhbmtcIiA+XG4gICAgICAgICAgICAgICAgJHtmaWxlTmFtZX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCAkaW5wdXRFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgbGV0ICRjbGVhckJ0biA9IGVsZW0ucXVlcnlTZWxlY3RvcihcIi5jbGVhci1maWxlLWlucHV0XCIpO1xuICAgIGxldCAkZmlsZUlucHV0TGFiZWwgPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCIubmF2LWlucHV0LWZpbGUtbGFiZWxcIik7XG5cbiAgICAkaW5wdXRFbGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGV2dCkgPT4ge1xuICAgICAgbGV0IGZpbGVOYW1lID0gJGlucHV0RWxlbS5maWxlc1swXS5uYW1lO1xuICAgICAgJGZpbGVJbnB1dExhYmVsLnRleHRDb250ZW50ID0gZmlsZU5hbWU7XG4gICAgfSk7XG5cbiAgICAkY2xlYXJCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldnQpID0+IHtcbiAgICAgICRpbnB1dEVsZW0udmFsdWUgPSBcIlwiO1xuICAgICAgJGZpbGVJbnB1dExhYmVsLnRleHRDb250ZW50ID0gcHJvcHMucGlja2VyTGFiZWwgfHwgXCJTZWxlY2Npb25hciBBcmNoaXZvXCI7XG4gICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICBjcmVhdGVGaWxlTGluayhwcm9wcywgZGF0YURheSkge1xuICAgIGxldCBmaWxlTmFtZSA9IFwiXCI7XG4gICAgbGV0IGZpbGVQYXRoID0gXCJcIjtcblxuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICAvL3ZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgICAgZmlsZU5hbWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMuZmlsZU5hbWVWYWx1ZSk7XG4gICAgICBmaWxlUGF0aCA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy5maWxlUGF0aFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZmlsZU5hbWUgPT0gXCJcIikgcmV0dXJuIG51bGw7XG5cbiAgICBmaWxlTmFtZSA9IGZpbGVOYW1lIHx8IFwiXCI7XG4gICAgZmlsZVBhdGggPSBmaWxlUGF0aCB8fCBcIlwiO1xuXG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmNsYXNzTmFtZXMgfHwgXCJcIn0gJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tbGlua1wiPlxuICAgICAgICAgICAgICA8YSBocmVmPVwiJHtmaWxlUGF0aH1cIiB0YXJnZXQ9XCJfYmxhbmtcIiA+XG4gICAgICAgICAgICAgICAgJHtmaWxlTmFtZX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIHJldHVybiBlbGVtO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIGxpc3RhIGRlIElucHV0cywgY29uIGFycmF5IGRlIHZhbG9yZXMsIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcGFyYW0ge09iamVjdH0gW2RheVNlbGVjdGVkID0gbnVsbF0gLSBkYXRvcyBkZWwgZGlhIHNlbGVjY2lvbmFkb1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dExpc3QocHJvcHMsIGRhdGFEYXksIGRheVNlbGVjdGVkID0gbnVsbCkge1xuICAgIGxldCBpbnB1dExpc3QgPSBbXTtcblxuICAgIC8vb2J0aWVuZSBpbnB1dHMgZGVmYXVsdCwgcGFyYSBjcmVhcmxvcywgc2luIHZhbG9yZXNcbiAgICBpZiAoXG4gICAgICBkYXlTZWxlY3RlZCAmJlxuICAgICAgQXJyYXkuaXNBcnJheShkYXlTZWxlY3RlZC5pdGVtLnZhbHVlc1twcm9wcy5pbnB1dExpc3RdKVxuICAgICkge1xuICAgICAgaW5wdXRMaXN0ID0gZGF5U2VsZWN0ZWQuaXRlbS52YWx1ZXNbcHJvcHMuaW5wdXRMaXN0XS5tYXAoKGlucHV0Um93KSA9PiB7XG4gICAgICAgIC8vbGltcGlhIGlucHV0TGlzdCBpbnB1dHNcbiAgICAgICAgaW5wdXRSb3cuaW5wdXRzLm1hcCgoaW5wdXQpID0+IHtcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9KTtcblxuICAgICAgICAvL29idGllbmUgdmFsb3JlcyBkZWwgZGlhXG4gICAgICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICAgICAgbGV0IGlucHV0VmFsdWVzID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhbHVlc1BhdGgpO1xuXG4gICAgICAgICAgLy9hdXRvcnJlbGxlbmFcbiAgICAgICAgICBpZiAoaW5wdXRWYWx1ZXMpIHtcbiAgICAgICAgICAgIGlucHV0Um93LmlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgdmFsdWVzID0gaW5wdXRWYWx1ZXMuZmluZCgodikgPT4gdi5pZCA9PSBpbnB1dFJvdy5pZCk7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWVzID8gdmFsdWVzW2lucHV0LnZhck5hbWVdIDogbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnB1dFJvdztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBzdHIgPSBgPGRpdiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiIGNsYXNzPVwiaW5wdXQtc2VjdGlvbi1saXN0ICR7XG4gICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgIH0gXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+IFxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICBpbnB1dExpc3QuZm9yRWFjaCgoaW5wdXRSb3cpID0+IHtcbiAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy50b1JpZ2h0ID8gXCJ0by1yaWdodFwiIDogXCJcIlxuICAgICAgICAgICAgICAgICAgfVwiID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aW5wdXRSb3cubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPmA7XG5cbiAgICAgIGlucHV0Um93LmlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICBzdHIgKz0gYCBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24tY29sXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7aW5wdXQubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1pZD1cIiR7aW5wdXRSb3cuaWR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1sYWJlbD1cIiR7aW5wdXQubGFiZWx9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1pbnB1dCBzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke2lucHV0LnZhbHVlfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSk7XG4gICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICB9KTtcbiAgICBzdHIgKz0gYDwvZGl2PmA7XG5cbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcblxuICAgIGxldCBpbnB1dHNFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIik7XG4gICAgaW5wdXRzRWxlbS5mb3JFYWNoKChpbnB1dEVsZW0pID0+XG4gICAgICB0aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cyhpbnB1dEVsZW0sIGVsZW0sIHByb3BzKVxuICAgICk7XG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgY3JlYXRlSW5wdXRTZWxlY3QocHJvcHMsIGRhdGFEYXksIGRheVNlbGVjdGVkID0gbnVsbCkge1xuICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgbGV0IG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuXG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIGxldCB2YWwgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgICB2YWx1ZSA9IHZhbCA/IHZhbC52YWx1ZSA6IG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHN0ciA9IGA8ZGl2IGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCIgY2xhc3M9XCIke1xuICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICB9XCIgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtc2VsZWN0XCI+XG5cbiAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiICR7dmFsdWUgPT0gbnVsbCA/IFwic2VsZWN0ZWRcIiA6IFwiXCJ9PlxuICAgICAgICAgICAgICAgICAgJHtwcm9wcy5ub0RhdGFMYWJlbCB8fCBcIi0tIHNpbiBhc2lnbmFyIC0tXCJ9XG4gICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuXG4gICAgICAgIGA7XG5cbiAgICBvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIiR7b3B0aW9uLmlkfVwiICR7XG4gICAgICAgICAgICAgICAgICAgb3B0aW9uLmlkID09IHZhbHVlID8gXCJzZWxlY3RlZFwiIDogXCJcIlxuICAgICAgICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgICAke29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgYDtcbiAgICB9KTtcbiAgICBzdHIgKz0gYFxuXG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+YDtcblxuICAgIGxldCBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuXG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgZGUgdGV4dG8gVGV4dEFyZWEgY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0VGV4dEFyZWEocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICB9XG4gICAgbGV0IGVsZW0gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiXCIgdmFsdWU9XCIke3ZhbHVlfVwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgaW5wdXRFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwidGV4dGFyZWFcIik7XG4gICAgdGhpcy5hZGRLZXlEb3duSW5wdXRFdmVudHMoaW5wdXRFbGVtLCBlbGVtLCBwcm9wcyk7XG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgZGUgTWVuc2FqZSBjb21vIGVsZW1lbnRvIERvbVxuICAgKiB1dGlsaXphIFRleHRBcmVhXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dE1lc3NhZ2UocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBkYXRhRGF5ID8gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpIDogbnVsbDtcbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uIHRvLWxlZnQgbXNqLWlucHV0LWNvbnRhaW5lciAke1xuICAgICAgICAgICAgcHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJcbiAgICAgICAgICB9IFwiXG4gICAgICAgICAgICAgIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgZC1ibG9ja1wiPlxuICAgICAgICAgICAgICBNZW5zYWplXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJtc2pcIj4ke3ZhbHVlIHx8IFwiXCJ9PC90ZXh0YXJlYT5cbiAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCBpbnB1dEVsZW0gPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJ0ZXh0YXJlYVwiKTtcbiAgICAvL3RoaXMuYWRkS2V5RG93bklucHV0RXZlbnRzKGlucHV0RWxlbSk7XG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWEgSW5wdXQgZGUgdGV4dG8gY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0VGV4dChwcm9wcywgZGF0YURheSkge1xuICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgaWYgKGRhdGFEYXkgJiYgZGF0YURheS52YWx1ZXMpIHtcbiAgICAgIHZhbHVlID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpO1xuICAgIH1cbiAgICBsZXQgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7XG4gICAgICAgICAgICBwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIlxuICAgICAgICAgIH0gXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWJ0aXRsZSBkLWJsb2NrXCI+XG4gICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm5hdi1pbnB1dFwiIHZhbHVlPVwiJHt2YWx1ZX1cIj5cbiAgICAgICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCBpbnB1dEVsZW0gPSBlbGVtLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtcbiAgICB0aGlzLmFkZEtleURvd25JbnB1dEV2ZW50cyhpbnB1dEVsZW0sIGVsZW0sIHByb3BzKTtcbiAgICByZXR1cm4gZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBJbnB1dCBOdW1lcm8gRmxvdGFudGUsIGNvbW8gZWxlbWVudG8gRG9tXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dEZsb2F0KHByb3BzLCBkYXRhRGF5KSB7XG4gICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICBpZiAoZGF0YURheSAmJiBkYXRhRGF5LnZhbHVlcykge1xuICAgICAgdmFsdWUgPSB1dGlscy5nZXRWYXJCeVBhdGgoZGF0YURheSwgcHJvcHMudmFyTmFtZSk7XG4gICAgfVxuICAgIGxldCBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtcbiAgICAgICAgICAgIHByb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwiXG4gICAgICAgICAgfSBcIiBpbnB1dC1rZXk9XCIke3Byb3BzLmtleSB8fCBcIlwifVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlIGQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJuYXYtaW5wdXRcIiB2YWx1ZT1cIiR7dmFsdWV9XCI+XG4gICAgICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgaW5wdXRFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgdGhpcy5hZGRLZXlEb3duSW5wdXRFdmVudHMoaW5wdXRFbGVtLCBlbGVtLCBwcm9wcyk7XG4gICAgcmV0dXJuIGVsZW07XG4gIH0sXG5cbiAgY3JlYXRlRGF0YUxpc3QocHJvcHMsIGRhdGFEYXksIGRheVNlbGVjdGVkLCBzZWxlY3RlZCwgdGFiU2VsZWN0ZWQpIHtcbiAgICBsZXQgbGlzdCA9IFtdO1xuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICBsaXN0ID0gdXRpbHMuZ2V0VmFyQnlQYXRoKGRhdGFEYXksIHByb3BzLnZhck5hbWUpIHx8IFtdO1xuICAgIH1cblxuICAgIGxldCBzZWFyY2hJbnB1dCA9IHByb3BzLmhpZGVTZWFyY2hcbiAgICAgID8gXCJcIlxuICAgICAgOiBgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cIlwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIlwiIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJidXNjYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlYXJjaC1pbnB1dC1jbGVhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke2ljb25zLmNsb3NlSWNvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0IGVkaXRCdG4gPSBcIlwiO1xuXG4gICAgaWYgKHByb3BzLmVkaXRCdXR0b24pIHtcbiAgICAgIGVkaXRCdG4gPSBgPGJ1dHRvbiBjbGFzcz1cImNhcC1idG4tcmFpc2VkIGNhcC1idG4tc20gZWRpdC1idG5cIiBpbnB1dC1rZXk9XCIke3Byb3BzLmVkaXRCdXR0b24ua2V5fVwiPlxuICAgICAgICAgICAgICAgICAgICAke3Byb3BzLmVkaXRCdXR0b24ubGFiZWx9IFxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+IGA7XG4gICAgfVxuXG4gICAgbGV0IHN0ciA9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7cHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJ9IFwiIGlucHV0LWtleT1cIiR7XG4gICAgICAgIHByb3BzLmtleSB8fCBcIlwiXG4gICAgICB9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgJHtlZGl0QnRufVx0XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG4gICAgICAgICAgICAke3NlYXJjaElucHV0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PiBgO1xuXG4gICAgbGV0ICRlbCA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgICBsZXQgJHNlYXJjaElucHV0ID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLWlucHV0XCIpO1xuICAgIGxldCAkc2VhcmNoSW5wdXRDbGVhciA9ICRlbC5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1pbnB1dC1jbGVhclwiKTtcbiAgICBsZXQgJGlucHV0Qm94ID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuaW5wdXQtYm94XCIpO1xuXG4gICAgbGV0ICRpdGVtcyA9IGxpc3QubWFwKChpdGVtLCBqKSA9PiB7XG4gICAgICBsZXQgbGFiZWwgPVxuICAgICAgICB1dGlscy5nZXRWYXJCeVBhdGgoaXRlbSwgcHJvcHMudmFyTmFtZUxhYmVsKSB8fCBkYXRhRGF5LmxhYmVsIHx8IFwiX19cIjtcblxuICAgICAgbGV0ICRlbEl0ZW0gPSB0aGlzLmNyZWF0ZURhdGFMaXN0SXRlbSh7XG4gICAgICAgIGxhYmVsLFxuICAgICAgICB2YWx1ZVRleHQ6IHV0aWxzLmdldFZhckJ5UGF0aChpdGVtLCBwcm9wcy52YXJOYW1lVmFsdWVUZXh0KSB8fCBcIlwiLFxuICAgICAgICBzdWJUZXh0OiB1dGlscy5nZXRWYXJCeVBhdGgoaXRlbSwgcHJvcHMudmFyTmFtZVN1YlRleHQpIHx8IFwiXCIsXG4gICAgICAgIGlkOiBcImxpc3QtaXRlbS1cIiArIChkYXRhRGF5LmlkIHx8IGopLFxuICAgICAgICBrZXk6IFwibGlzdC1pdGVtLVwiICsgKGRhdGFEYXkuaWQgfHwgaiksXG4gICAgICAgIHRvb2x0aXA6IHV0aWxzLmdldFZhckJ5UGF0aChpdGVtLCBwcm9wcy52YXJOYW1lVG9vbHRpcCkgfHwgbGFiZWwsXG4gICAgICAgIC8vY29sb3JJY29uOiBcImMtcmVkXCIsXG4gICAgICAgIGxpbms6IHV0aWxzLmdldFZhckJ5UGF0aChpdGVtLCBwcm9wcy52YXJOYW1lTGluaykgfHwgbnVsbCxcbiAgICAgICAgc3VmZml4OiB1dGlscy5nZXRWYXJCeVBhdGgoaXRlbSwgcHJvcHMudmFyTmFtZVN1ZmZpeCkgfHwgXCJcIixcbiAgICAgICAgLy92YWx1ZTogSlNPTi5zdHJpbmdpZnkodXRpbHMuZ2V0VmFyQnlQYXRoKGl0ZW0sIHByb3BzLnZhck5hbWVJbnB1dCkpIHx8IHt9XG4gICAgICB9KTtcbiAgICAgICRpbnB1dEJveC5hcHBlbmRDaGlsZCgkZWxJdGVtKTtcbiAgICB9KTtcblxuICAgIGlmICgkc2VhcmNoSW5wdXQpIHtcbiAgICAgICRzZWFyY2hJbnB1dENsZWFyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAkc2VhcmNoSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAkc2VhcmNoSW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgfSk7XG5cbiAgICAgICRzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgICAkc2VhcmNoSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAkc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB7XG4gICAgICAgIGxldCAkaW5wdXRzID0gW107XG4gICAgICAgICRpbnB1dHMgPSAkZWwucXVlcnlTZWxlY3RvckFsbChcIi5taW5pLWlucHV0LXNlY3Rpb25cIikgfHwgW107XG4gICAgICAgICRpbnB1dHMuZm9yRWFjaCgoJGkpID0+IHtcbiAgICAgICAgICBsZXQgbGFiZWwgPSAkaS5nZXRBdHRyaWJ1dGUoXCJsYWJlbFwiKTtcbiAgICAgICAgICBsZXQgc2VhcmNoID0gJHNlYXJjaElucHV0LnZhbHVlO1xuICAgICAgICAgIGlmIChsYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgJGkuY2xhc3NMaXN0LnJlbW92ZShcImhpZGVcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRpLmNsYXNzTGlzdC5hZGQoXCJoaWRlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZWRpdEJ1dHRvbi5vbkNsaWNrKSB7XG4gICAgICBsZXQgYnV0dG9uID0gJGVsLnF1ZXJ5U2VsZWN0b3IoXCJidXR0b24uZWRpdC1idG5cIik7XG4gICAgICBpZiAoYnV0dG9uICYmIHByb3BzLmVkaXRCdXR0b24pIHtcbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT5cbiAgICAgICAgICBwcm9wcy5lZGl0QnV0dG9uLm9uQ2xpY2soe1xuICAgICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIGRhdGFEYXksXG4gICAgICAgICAgICBkYXlTZWxlY3RlZCxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgJGVsZW1lbnQ6ICRlbCxcbiAgICAgICAgICAgIHRhYlNlbGVjdGVkLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAkaXRlbXMuZm9yRWFjaCgoJGkpID0+IHtcbiAgICAgICAgJGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgIHByb3BzLmVkaXRCdXR0b24ub25DbGljayh7XG4gICAgICAgICAgICBldmVudDogZSxcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgZGF0YURheSxcbiAgICAgICAgICAgIGRheVNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAkZWxlbWVudDogJGVsLFxuICAgICAgICAgICAgdGFiU2VsZWN0ZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICRlbDtcbiAgfSxcblxuICBjcmVhdGVEYXRhTGlzdEl0ZW0oe1xuICAgIGxhYmVsID0gXCJcIixcbiAgICB2YWx1ZVRleHQgPSBcIlwiLFxuICAgIHN1YlRleHQgPSBcIlwiLFxuICAgIGlkID0gXCJcIixcbiAgICBrZXkgPSBcIlwiLFxuICAgIHRvb2x0aXAgPSBcIlwiLFxuICAgIGNvbG9ySWNvbiA9IFwiXCIsXG4gICAgbGluayA9IG51bGwsXG4gICAgc3VmZml4ID0gbnVsbCxcbiAgICB2YWx1ZSA9IFwiXCIsXG4gIH0pIHtcbiAgICBsZXQgdG9vbHRpcFN0ciA9IFwiXCI7XG4gICAgbGV0IGljb25TdHIgPSBudWxsO1xuICAgIGxldCBsaW5rU3RyID0gXCJcIjtcbiAgICBsZXQgc3RyID0gXCJcIjtcblxuICAgIGlmICh0b29sdGlwKSB7XG4gICAgICB0b29sdGlwU3RyID0gYFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAke3Rvb2x0aXB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgIH1cblxuICAgIGlmIChjb2xvckljb24pIHtcbiAgICAgIGlmICh1dGlscy5pc0hleENvbG9yKGl0ZW1Gb3JtYXRlZC5jb2xvckljb24pKSB7XG4gICAgICAgIGljb25TdHIgPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvblwiIHN0eWxlPVwiYmFja2dyb3VuZDoke2NvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGljb25TdHIgPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvbiAke2NvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGluaykge1xuICAgICAgbGlua1N0ciA9IGA8YSBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tbGlua1wiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIke2xpbmt9XCI+JHtpY29ucy5saW5rSWNvbn08L2E+IGA7XG4gICAgfVxuXG4gICAgc3RyICs9IGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24gY2xpY2tlYWJsZSAke1xuICAgICAgICAgICAgICBpY29uU3RyID8gXCJoYXMtaWNvblwiIDogXCJcIlxuICAgICAgICAgICAgfSBcIiBcbiAgICAgICAgICAgICAgICBsYWJlbD1cIiR7bGFiZWx9XCIgXG4gICAgICAgICAgICAgICAgZGF0YS1pZD1cIiR7aWR9XCJcbiAgICAgICAgICAgICAgICBkYXRhLWtleT1cIiR7a2V5fVwiXG4gICAgICAgICAgICAgICAgZGF0YS12YWx1ZT1cIiR7dmFsdWUgfHwgXCJcIn1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICR7aWNvblN0ciB8fCBcIlwifVxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGVzXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS10aXRsZSB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAke2xhYmVsfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1zdWJ0aXRsZSB0cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAke3N1YlRleHR9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWNvbnRlbnRcIiA+XG4gICAgICAgICAgICAgICAgICAke3ZhbHVlVGV4dH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1zdWZmaXhcIiA+XG4gICAgICAgICAgICAgICAgICAke3N1ZmZpeH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICR7bGlua1N0cn1cblxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAke3Rvb2x0aXBTdHJ9XG4gICAgICAgICAgICA8L2Rpdj5gO1xuICAgIHJldHVybiBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKHN0cik7XG4gIH0sXG5cbiAgY3JlYXRlTGlzdChwcm9wcywgZGF0YURheSkge1xuICAgIGxldCB0YWJzQ29udGFpbmVyID0gXCJcIjtcblxuICAgIGlmIChwcm9wcy50YWJzKSB7XG4gICAgICBsZXQgdGFicyA9IFwiXCI7XG4gICAgICBwcm9wcy50YWJzLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgICB0YWJzICs9IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveC10YWJcIiB0YWIta2V5PVwiJHt0YWIua2V5fVwiPlxuICAgICAgICAgICR7dGFiLm5hbWV9XG4gICAgICAgIDwvZGl2PmA7XG4gICAgICB9KTtcblxuICAgICAgdGFic0NvbnRhaW5lciA9IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveC10YWItY29udGFpbmVyXCI+XG4gICAgICAgICR7dGFic31cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH1cblxuICAgIGxldCBzZWFyY2hJbnB1dCA9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICAgIDxpbnB1dCBpZD1cIlwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIlwiIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJidXNjYXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlYXJjaC1pbnB1dC1jbGVhclwiPlxuICAgICAgICAgJHtpY29ucy5jbG9zZUljb259XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgYDtcblxuICAgIGxldCBzdHIgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwifSBcIiBpbnB1dC1rZXk9XCIke1xuICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgfVwiPlxuICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3VidGl0bGUgZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAke3Byb3BzLmxhYmVsfVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAke3RhYnNDb250YWluZXJ9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3ggXCIgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIj5cblxuICAgICAgICAgICAgJHtzZWFyY2hJbnB1dH1cbiAgICAgIGA7XG5cbiAgICAvL1RPRE8gb2J0ZW5lciBpbnB1dCBzZWd1biBmaWxhXG4gICAgaWYgKHByb3BzLmlucHV0cykge1xuICAgICAgcHJvcHMuaW5wdXRzLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgaWYgKGkuaXNUaXRsZSkge1xuICAgICAgICAgIGxldCB0b29sdGlwID0gXCJcIjtcbiAgICAgICAgICBsZXQgaWNvbiA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoaS50b29sdGlwKSB7XG4gICAgICAgICAgICB0b29sdGlwID0gYFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAke2kudG9vbHRpcH1cbiAgICAgICAgICAgICAgICAgICAgJHtpLnN1ZmZpeCA/IFwiKFwiICsgaS5zdWZmaXggKyBcIilcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpLmNvbG9ySWNvbikge1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoaS5jb2xvckljb24pKSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvblwiIHN0eWxlPVwiYmFja2dyb3VuZDoke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWNvbiA9IGA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1pY29uICR7aS5jb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24gaXMtdGl0bGUgICR7XG4gICAgICAgICAgICAgIGljb24gPyBcImhhcy1pY29uXCIgOiBcIlwiXG4gICAgICAgICAgICB9XCIgaW5wdXQtdGFiLWtleT1cIiR7aS50YWJLZXkgfHwgXCJcIn1cIiBsYWJlbD1cIiR7aS5sYWJlbH1cIj5cbiAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICR7aWNvbiB8fCBcIlwifVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRpdGxlIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAke2kubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICR7dG9vbHRpcH1cbiAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHRvb2x0aXAgPSBcIlwiO1xuICAgICAgICAgIGxldCBpY29uID0gbnVsbDtcbiAgICAgICAgICBsZXQgbGluayA9IFwiXCI7XG5cbiAgICAgICAgICBpZiAoaS50b29sdGlwKSB7XG4gICAgICAgICAgICB0b29sdGlwID0gYFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAke2kudG9vbHRpcH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkuY29sb3JJY29uKSB7XG4gICAgICAgICAgICBpZiAodXRpbHMuaXNIZXhDb2xvcihpLmNvbG9ySWNvbikpIHtcbiAgICAgICAgICAgICAgaWNvbiA9IGA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1pY29uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiR7aS5jb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpY29uID0gYDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLWljb24gJHtpLmNvbG9ySWNvbn1cIj4gPC9kaXY+YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaS5saW5rKSB7XG4gICAgICAgICAgICBsaW5rID0gYDxhIGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1saW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIiR7aS5saW5rfVwiPlxuICAgICAgICAgICAgICAgICR7aWNvbnMubGlua0ljb259XG4gICAgICAgICAgICAgICAgPC9hPiBgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ciArPSBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uICAke1xuICAgICAgICAgICAgICBpY29uID8gXCJoYXMtaWNvblwiIDogXCJcIlxuICAgICAgICAgICAgfVwiIGlucHV0LXRhYi1rZXk9XCIke2kudGFiS2V5IHx8IFwiXCJ9XCIgbGFiZWw9XCIke2kubGFiZWx9XCI+XG4gICAgICAgICAgICAgIDxsYWJlbD5cblxuICAgICAgICAgICAgICAgICR7aWNvbn1cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRpdGxlIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAke2kubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1zdWZmaXhcIiA+JHtcbiAgICAgICAgICAgICAgICAgIGkuc3VmZml4ID8gXCIoXCIgKyBpLnN1ZmZpeCArIFwiKVwiIDogXCJcIlxuICAgICAgICAgICAgICAgIH08L2Rpdj5cblxuICAgICAgICAgICAgICAgICR7bGlua31cblxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXJ0XCI+IHN0YXJ0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZW5kXCI+IGVuZCA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAke3Rvb2x0aXB9XG4gICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzdHIgKz0gYFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PiBgO1xuXG4gICAgbGV0ICRlbCA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RyKTtcbiAgICBsZXQgJHRhYnMgPSAkZWwucXVlcnlTZWxlY3RvckFsbChcIi5pbnB1dC1ib3gtdGFiW3RhYi1rZXldXCIpIHx8IFtdO1xuICAgIGxldCAkc2VhcmNoSW5wdXQgPSAkZWwucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtaW5wdXRcIikgfHwgbnVsbDtcbiAgICBsZXQgJHNlYXJjaElucHV0Q2xlYXIgPSAkZWwucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtaW5wdXQtY2xlYXJcIikgfHwgbnVsbDtcblxuICAgICR0YWJzLmZvckVhY2goKHQpID0+IHtcbiAgICAgIHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0SW5wdXRCb3hUYWIodCwgJGVsKTtcbiAgICAgICAgJHNlYXJjaElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgJHNlYXJjaElucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKCRzZWFyY2hJbnB1dENsZWFyKSB7XG4gICAgICAkc2VhcmNoSW5wdXRDbGVhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgJHNlYXJjaElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgJHNlYXJjaElucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgkc2VhcmNoSW5wdXQpIHtcbiAgICAgICRzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xuICAgICAgICBpZiAoZS5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgICAkc2VhcmNoSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICRzZWFyY2hJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAkc2VhcmNoSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB7XG4gICAgICAgIGxldCAkdGFiU2VsZWN0ZWQgPVxuICAgICAgICAgICRlbC5xdWVyeVNlbGVjdG9yKFwiLmlucHV0LWJveC10YWJbdGFiLWtleV0uYWN0aXZlXCIpIHx8IG51bGw7XG4gICAgICAgIGxldCAkaW5wdXRzID0gW107XG4gICAgICAgIGlmICgkdGFiU2VsZWN0ZWQpIHtcbiAgICAgICAgICBsZXQgdGFiS2V5ID0gJHRhYlNlbGVjdGVkLmdldEF0dHJpYnV0ZShcInRhYi1rZXlcIik7XG4gICAgICAgICAgJGlucHV0cyA9XG4gICAgICAgICAgICAkZWwucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgXCIubWluaS1pbnB1dC1zZWN0aW9uW2lucHV0LXRhYi1rZXk9J1wiICsgdGFiS2V5ICsgXCInXVwiXG4gICAgICAgICAgICApIHx8IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRpbnB1dHMgPSAkZWwucXVlcnlTZWxlY3RvckFsbChcIi5taW5pLWlucHV0LXNlY3Rpb25cIikgfHwgW107XG4gICAgICAgIH1cbiAgICAgICAgJGlucHV0cy5mb3JFYWNoKCgkaSkgPT4ge1xuICAgICAgICAgIGxldCBsYWJlbCA9ICRpLmdldEF0dHJpYnV0ZShcImxhYmVsXCIpO1xuICAgICAgICAgIGxldCBzZWFyY2ggPSAkc2VhcmNoSW5wdXQudmFsdWU7XG4gICAgICAgICAgaWYgKGxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAkaS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGkuY2xhc3NMaXN0LmFkZChcImhpZGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0SW5wdXRCb3hUYWIoXy5maXJzdCgkdGFicyksICRlbCk7XG5cbiAgICByZXR1cm4gJGVsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhIElucHV0Qm94LCBjb21vIGVsZW1lbnRvIERvbVxuICAgKiB1biBJbnB1dEJveCBlcyB1biBjb250ZW5lZG9yIGNvbiB1bmEgbGlzdGEgZGUgaW5wdXRzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIGNvbmZpZyBwYXJhIElucHV0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhRGF5IC0gdmFsb3JlcyBkZSBpdGVtIHkgRGlhLCBvcGNpb25hbFxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEVsZW1lbnRvIERvbSBkZWwgaW5wdXQgY3JlYWRvXG4gICAqL1xuICBjcmVhdGVJbnB1dEJveChwcm9wcywgZGF0YURheSkge1xuICAgIGxldCB2YWx1ZSA9IFtdO1xuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICB9XG5cbiAgICBsZXQgdGFic0NvbnRhaW5lciA9IFwiXCI7XG5cbiAgICBpZiAocHJvcHMudGFicykge1xuICAgICAgbGV0IHRhYnMgPSBcIlwiO1xuICAgICAgcHJvcHMudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgdGFicyArPSBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3gtdGFiXCIgdGFiLWtleT1cIiR7dGFiLmtleX1cIj5cbiAgICAgICAgICAke3RhYi5uYW1lfVxuICAgICAgICA8L2Rpdj5gO1xuICAgICAgfSk7XG5cbiAgICAgIHRhYnNDb250YWluZXIgPSBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3gtdGFiLWNvbnRhaW5lclwiPlxuICAgICAgICAke3RhYnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9XG5cbiAgICBsZXQgc2VhcmNoSW5wdXQgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICA8aW5wdXQgaWQ9XCJcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJcIiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiYnVzY2FyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWFyY2gtaW5wdXQtY2xlYXJcIj5cbiAgICAgICAgICR7aWNvbnMuY2xvc2VJY29ufVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG5cbiAgICBsZXQgc3RyID0gYFxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXNlY3Rpb24gJHtwcm9wcy5pc0hpZGRlbiA/IFwiaGlkZVwiIDogXCJcIn0gXCIgaW5wdXQta2V5PVwiJHtcbiAgICAgICAgcHJvcHMua2V5IHx8IFwiXCJcbiAgICAgIH1cIj5cbiAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlIGQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgJHtwcm9wcy5sYWJlbH1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgJHt0YWJzQ29udGFpbmVyfVxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94IFwiIGlucHV0LWtleT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCI+XG5cbiAgICAgICAgICAgICR7c2VhcmNoSW5wdXR9XG4gICAgICBgO1xuXG4gICAgaWYgKHByb3BzLmlucHV0cykge1xuICAgICAgcHJvcHMuaW5wdXRzLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgaWYgKGkuaXNUaXRsZSkge1xuICAgICAgICAgIGxldCB0b29sdGlwID0gXCJcIjtcbiAgICAgICAgICBsZXQgaWNvbiA9IFwiXCI7XG5cbiAgICAgICAgICBpZiAoaS50b29sdGlwKSB7XG4gICAgICAgICAgICB0b29sdGlwID0gYFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAke2kudG9vbHRpcH1cbiAgICAgICAgICAgICAgICAgICAgJHtpLnN1ZmZpeCA/IFwiKFwiICsgaS5zdWZmaXggKyBcIilcIiA6IFwiXCJ9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpLmNvbG9ySWNvbikge1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoaS5jb2xvckljb24pKSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvblwiIHN0eWxlPVwiYmFja2dyb3VuZDoke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWNvbiA9IGA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1pY29uICR7aS5jb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24gaXMtdGl0bGVcIiBpbnB1dC10YWIta2V5PVwiJHtcbiAgICAgICAgICAgICAgaS50YWJLZXkgfHwgXCJcIlxuICAgICAgICAgICAgfVwiIGxhYmVsPVwiJHtpLmxhYmVsfVwiPlxuICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgJHtpY29ufVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRpdGxlIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAke2kubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICR7dG9vbHRpcH1cbiAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHZhbHVlX2ZvdW5kID0gdmFsdWUgPyB2YWx1ZS5maW5kKCh2YWwpID0+IHZhbC5pZCA9PSBpLmlkKSA6IG51bGw7XG4gICAgICAgICAgbGV0IHYgPSB2YWx1ZV9mb3VuZCB8fCBcIlwiO1xuICAgICAgICAgIGxldCBpbnB1dFZhbHVlID1cbiAgICAgICAgICAgIHByb3BzLnZhck5hbWVJbnB1dCAmJiB2W3Byb3BzLnZhck5hbWVJbnB1dF1cbiAgICAgICAgICAgICAgPyB2W3Byb3BzLnZhck5hbWVJbnB1dF1cbiAgICAgICAgICAgICAgOiB2LnZhbHVlO1xuICAgICAgICAgIGxldCB0b29sdGlwID0gXCJcIjtcbiAgICAgICAgICBsZXQgaWNvbiA9IFwiXCI7XG4gICAgICAgICAgbGV0IGxpbmsgPSBcIlwiO1xuXG4gICAgICAgICAgaWYgKGkudG9vbHRpcCkge1xuICAgICAgICAgICAgdG9vbHRpcCA9IGBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtpLnRvb2x0aXB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpLmNvbG9ySWNvbikge1xuICAgICAgICAgICAgaWYgKHV0aWxzLmlzSGV4Q29sb3IoaS5jb2xvckljb24pKSB7XG4gICAgICAgICAgICAgIGljb24gPSBgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0taWNvblwiIHN0eWxlPVwiYmFja2dyb3VuZDoke2kuY29sb3JJY29ufVwiPiA8L2Rpdj5gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWNvbiA9IGA8ZGl2IGNsYXNzPVwibWluaS1pbnB1dC1zZWN0aW9uLS1pY29uICR7aS5jb2xvckljb259XCI+IDwvZGl2PmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkubGluaykge1xuICAgICAgICAgICAgbGluayA9IGA8YSBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tbGlua1wiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIke2kubGlua31cIj5cbiAgICAgICAgICAgICAgICAke2ljb25zLmxpbmtJY29ufVxuICAgICAgICAgICAgICAgIDwvYT4gYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHIgKz0gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbiAke1xuICAgICAgICAgICAgICBpY29uID8gXCJoYXMtaWNvblwiIDogXCJcIlxuICAgICAgICAgICAgfVwiIGlucHV0LXRhYi1rZXk9XCIke2kudGFiS2V5IHx8IFwiXCJ9XCIgbGFiZWw9XCIke2kubGFiZWx9XCI+XG4gICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaW5pLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dC1pZD1cIiR7aS5pZCB8fCBcIlwifVwiXG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQta2V5PVwiJHtpLmtleSB8fCBpLmxhYmVsfVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke2lucHV0VmFsdWUgfHwgXCJcIn1cIj5cblxuICAgICAgICAgICAgICAgICR7aWNvbiB8fCBcIlwifVxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktaW5wdXQtc2VjdGlvbi0tdGl0bGUgdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICR7aS5sYWJlbH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLWlucHV0LXNlY3Rpb24tLXN1ZmZpeFwiID4ke1xuICAgICAgICAgICAgICAgICAgaS5zdWZmaXggPyBcIihcIiArIGkuc3VmZml4ICsgXCIpXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgfTwvZGl2PlxuXG4gICAgICAgICAgICAgICAgJHtsaW5rfVxuXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICR7dG9vbHRpcH1cbiAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0ciArPSBgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+IGA7XG5cbiAgICBsZXQgJGVsID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChzdHIpO1xuICAgIGxldCAkdGFicyA9ICRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmlucHV0LWJveC10YWJbdGFiLWtleV1cIikgfHwgW107XG4gICAgbGV0ICRpbnB1dHMgPSAkZWwucXVlcnlTZWxlY3RvckFsbChcImlucHV0Lm1pbmktaW5wdXRcIikgfHwgW107XG4gICAgbGV0ICRzZWFyY2hJbnB1dCA9ICRlbC5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1pbnB1dFwiKSB8fCBudWxsO1xuICAgIGxldCAkc2VhcmNoSW5wdXRDbGVhciA9ICRlbC5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1pbnB1dC1jbGVhclwiKSB8fCBudWxsO1xuXG4gICAgJHRhYnMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RJbnB1dEJveFRhYih0LCAkZWwpO1xuICAgICAgICAkc2VhcmNoSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAkc2VhcmNoSW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoJHNlYXJjaElucHV0Q2xlYXIpIHtcbiAgICAgICRzZWFyY2hJbnB1dENsZWFyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAkc2VhcmNoSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAkc2VhcmNoSW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCRzZWFyY2hJbnB1dCkge1xuICAgICAgJHNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgICAgICRzZWFyY2hJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgJHNlYXJjaElucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgICRzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgKGUpID0+IHtcbiAgICAgICAgbGV0ICR0YWJTZWxlY3RlZCA9XG4gICAgICAgICAgJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuaW5wdXQtYm94LXRhYlt0YWIta2V5XS5hY3RpdmVcIikgfHwgbnVsbDtcbiAgICAgICAgbGV0ICRpbnB1dHMgPSBbXTtcbiAgICAgICAgaWYgKCR0YWJTZWxlY3RlZCkge1xuICAgICAgICAgIGxldCB0YWJLZXkgPSAkdGFiU2VsZWN0ZWQuZ2V0QXR0cmlidXRlKFwidGFiLWtleVwiKTtcbiAgICAgICAgICAkaW5wdXRzID1cbiAgICAgICAgICAgICRlbC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICBcIi5taW5pLWlucHV0LXNlY3Rpb25baW5wdXQtdGFiLWtleT0nXCIgKyB0YWJLZXkgKyBcIiddXCJcbiAgICAgICAgICAgICkgfHwgW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGlucHV0cyA9ICRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiLm1pbmktaW5wdXQtc2VjdGlvblwiKSB8fCBbXTtcbiAgICAgICAgfVxuICAgICAgICAkaW5wdXRzLmZvckVhY2goKCRpKSA9PiB7XG4gICAgICAgICAgbGV0IGxhYmVsID0gJGkuZ2V0QXR0cmlidXRlKFwibGFiZWxcIik7XG4gICAgICAgICAgbGV0IHNlYXJjaCA9ICRzZWFyY2hJbnB1dC52YWx1ZTtcbiAgICAgICAgICBpZiAobGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICRpLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkaS5jbGFzc0xpc3QuYWRkKFwiaGlkZVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RJbnB1dEJveFRhYihfLmZpcnN0KCR0YWJzKSwgJGVsKTtcblxuICAgICRpbnB1dHMuZm9yRWFjaCgoaSkgPT4gdGhpcy5hZGRLZXlEb3duSW5wdXRFdmVudHMoaSwgJGVsLCBwcm9wcykpO1xuXG4gICAgcmV0dXJuICRlbDtcbiAgfSxcblxuICBzZWxlY3RJbnB1dEJveFRhYigkdGFiLCAkZWwpIHtcbiAgICBsZXQgJHRhYnMgPSAkZWwucXVlcnlTZWxlY3RvckFsbChcIi5pbnB1dC1ib3gtdGFiW3RhYi1rZXldXCIpIHx8IFtdO1xuICAgIGxldCAkaW5wdXRTZWN0aW9ucyA9ICRlbC5xdWVyeVNlbGVjdG9yQWxsKFwiLm1pbmktaW5wdXQtc2VjdGlvblwiKSB8fCBbXTtcblxuICAgICR0YWJzLmZvckVhY2goKHQpID0+IHtcbiAgICAgIHQuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcbiAgICB9KTtcblxuICAgIGlmICgkdGFiKSB7XG4gICAgICAkdGFiLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cbiAgICAgICRpbnB1dFNlY3Rpb25zLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgbGV0IGtleSA9IGkuZ2V0QXR0cmlidXRlKFwiaW5wdXQtdGFiLWtleVwiKTtcbiAgICAgICAgaWYgKGtleSA9PSAkdGFiLmdldEF0dHJpYnV0ZShcInRhYi1rZXlcIikpIHtcbiAgICAgICAgICBpLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGkuY2xhc3NMaXN0LmFkZChcImhpZGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQ3JlYSBDaGVja2JveCwgY29tbyBlbGVtZW50byBEb21cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gY29uZmlnIHBhcmEgSW5wdXRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFEYXkgLSB2YWxvcmVzIGRlIGl0ZW0geSBEaWEsIG9wY2lvbmFsXG4gICAqIEByZXR1cm4ge09iamVjdH0gRWxlbWVudG8gRG9tIGRlbCBpbnB1dCBjcmVhZG9cbiAgICovXG4gIGNyZWF0ZUlucHV0Q2hlY2tib3gocHJvcHMsIGRhdGFEYXkpIHtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgIGlmIChkYXRhRGF5ICYmIGRhdGFEYXkudmFsdWVzKSB7XG4gICAgICB2YWx1ZSA9IHV0aWxzLmdldFZhckJ5UGF0aChkYXRhRGF5LCBwcm9wcy52YXJOYW1lKTtcbiAgICB9XG4gICAgbGV0IHIgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7cHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJ9IFwiIGlucHV0LWtleT1cIiR7XG4gICAgICAgIHByb3BzLmtleSB8fCBcIlwiXG4gICAgICB9XCI+XG4gICAgICAgIDxsYWJlbD5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIiR7cHJvcHMua2V5IHx8IFwiXCJ9XCIgaW5wdXQta2V5PVwiJHtcbiAgICAgICAgICAgIHByb3BzLmtleSB8fCBcIlwiXG4gICAgICAgICAgfVwiICR7dmFsdWUgPyBcImNoZWNrZWRcIiA6IFwiXCJ9PlxuICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5gKTtcblxuICAgIHJldHVybiByO1xuICB9LFxuXG4gIGNyZWF0ZUlucHV0QnV0dG9uc0dyb3VwKHByb3BzKSB7XG4gICAgbGV0ICRjb250YWluZXIgPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKGBcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1zZWN0aW9uICR7cHJvcHMuaXNIaWRkZW4gPyBcImhpZGVcIiA6IFwiXCJ9IFwiIGlucHV0LWtleT1cIiR7XG4gICAgICAgIHByb3BzLmtleSB8fCBcIlwiXG4gICAgICB9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWdyb3VwXCI+IDwvZGl2PlxuICAgICAgPC9kaXY+YCk7XG5cbiAgICBsZXQgJGNvbnRhaW5lckJ1dHRvbkdyb3VwID0gJGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmJ1dHRvbnMtZ3JvdXBcIik7XG5cbiAgICBsZXQgJGJ1dHRvbnMgPSBbXTtcbiAgICAkYnV0dG9ucyA9IHByb3BzLmJ1dHRvbnMubWFwKChidXR0b25Qcm9wKSA9PiB7XG4gICAgICBsZXQgYnV0dG9uU3RyID0gYFxuICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgIG5hbWU9XCIke2J1dHRvblByb3Aua2V5IHx8IFwiXCJ9XCIgXG4gICAgICAgICAgaW5wdXQta2V5PVwiJHtidXR0b25Qcm9wLmtleSB8fCBcIlwifVwiXG4gICAgICAgICAgY2xhc3M9XCJjYXAtYnRuLW91dGxpbmUgY2FwLWJ0bi1zbSAke1xuICAgICAgICAgICAgYnV0dG9uUHJvcC5pc1NlbGVjdGVkID8gXCJzZWxlY3RlZFwiIDogXCJcIlxuICAgICAgICAgIH0gXCI+XG4gICAgICAgICAgJHtidXR0b25Qcm9wLmxhYmVsfVxuICAgICAgICA8L2J1dHRvbj5gO1xuXG4gICAgICBsZXQgJGJ1dHRvbiA9IGRvbVV0aWxzLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChidXR0b25TdHIpO1xuICAgICAgJGNvbnRhaW5lckJ1dHRvbkdyb3VwLmFwcGVuZCgkYnV0dG9uKTtcblxuICAgICAgJGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLmlzU2VsZWN0YWJsZSkge1xuICAgICAgICAgICRidXR0b25zLmZvckVhY2goKCRiKSA9PiAkYi5jbGFzc0xpc3QucmVtb3ZlKFwic2VsZWN0ZWRcIikpO1xuICAgICAgICAgICRidXR0b24uY2xhc3NMaXN0LmFkZChcInNlbGVjdGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJ1dHRvblByb3Aub25DbGljayh7IHByb3BzLCBldmVudDogZSwgYnV0dG9uc0VsZW1lbnRzOiAkYnV0dG9ucyB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICRidXR0b247XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGNvbnRhaW5lcjtcbiAgfSxcblxuICBjcmVhdGVJbnB1dEJ1dHRvbihwcm9wcywgZGF0YURheSkge1xuICAgIGxldCByID0gZG9tLmNyZWF0ZUVsZW1lbnRGcm9tSFRNTChgXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtc2VjdGlvbiAke3Byb3BzLmlzSGlkZGVuID8gXCJoaWRlXCIgOiBcIlwifSBcIiBpbnB1dC1rZXk9XCIke1xuICAgICAgICBwcm9wcy5rZXkgfHwgXCJcIlxuICAgICAgfVwiPlxuICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICBuYW1lPVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgaW5wdXQta2V5PVwiJHtwcm9wcy5rZXkgfHwgXCJcIn1cIlxuICAgICAgICAgICAgY2xhc3M9XCJjYXAtYnRuLW91dGxpbmVcIj5cbiAgICAgICAgICAgICR7cHJvcHMubGFiZWx9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5gKTtcblxuICAgIGxldCBidXR0b24gPSByLnF1ZXJ5U2VsZWN0b3IoXCJidXR0b25cIik7XG4gICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT5cbiAgICAgIHByb3BzLm9uQ2xpY2soeyBwcm9wcywgZXZlbnQ6IGUsIGRhdGFEYXkgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHI7XG4gIH0sXG5cbiAgYWRkS2V5RG93bklucHV0RXZlbnRzKCRpbnB1dCwgJGlucHV0Q29udGFpbmVyLCBwcm9wcykge1xuICAgICRpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAvL0VOVEVSXG4gICAgICAgICRpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcInNhdmVNdWx0aUlucHV0XCIsIHtcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgICBjYW5jZWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgIC8vRVNDXG4gICAgICAgICRpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudChcImNhbmNlbE11bHRpSW5wdXRcIiwge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgJGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4ge1xuICAgICAgaWYgKHByb3BzLm9uSW5wdXQpIHtcbiAgICAgICAgcHJvcHMub25JbnB1dCh7XG4gICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgICAgdmFsdWU6IGUuc3JjRWxlbWVudC52YWx1ZSxcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAkZWxlbWVudDogJGlucHV0Q29udGFpbmVyLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBjcmVhdGVDb250ZXh0TWVudSh7XG4gICAgY29uZmlnLFxuICAgIHRhcmdldCxcbiAgICAkY2FwaWJhcmFFbGVtID0gbnVsbCxcbiAgICBldnQgPSBudWxsLFxuICAgIGRhdGUgPSBudWxsLFxuICAgIGl0ZW0gPSBudWxsLFxuICAgIHNlbGVjdGVkID0gW10sXG4gICAgdGFiU2VsZWN0ZWQgPSBudWxsLFxuICAgIGxlZnQgPSBudWxsLFxuICAgIHRvcCA9IG51bGwsXG4gICAgbmFtZSA9IFwiXCIsXG4gIH0pIHtcbiAgICBpZiAoXG4gICAgICBjb25maWcudGltZWxpbmUuY29udGV4dE1lbnUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgY29uZmlnLnRpbWVsaW5lLmNvbnRleHRNZW51Lm9wdGlvbnMgPT0gdW5kZWZpbmVkXG4gICAgKVxuICAgICAgcmV0dXJuIHsgZWxlbTogbnVsbCwgaXNWaXNpYmxlOiBmYWxzZSB9O1xuXG4gICAgbGV0IGNsYXNzTmFtZSA9IFwiXCI7XG4gICAgbGV0IHN0eWxlID0gXCJcIjtcbiAgICBsZXQgc3RySHRtbCA9IFwiXCI7XG4gICAgbGV0IGxlZnRQb3NpdGlvbiA9IG51bGw7XG4gICAgbGV0IHRvcFBvc2l0aW9uID0gbnVsbDtcbiAgICBsZXQgaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICBsZXQgYm91bmRSZWN0Q2FwaWJhcmEgPSBudWxsO1xuICAgIGxldCBnYXAgPSAxNTsgLy9weFxuXG4gICAgaWYgKCRjYXBpYmFyYUVsZW0pIHtcbiAgICAgIGJvdW5kUmVjdENhcGliYXJhID0gJGNhcGliYXJhRWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG5cbiAgICBpZiAoZXZ0ICYmIGJvdW5kUmVjdENhcGliYXJhKSB7XG4gICAgICBsZWZ0ID0gZXZ0LmNsaWVudFg7XG4gICAgICB0b3AgPSBldnQuY2xpZW50WSAtIGJvdW5kUmVjdENhcGliYXJhLnRvcDtcbiAgICB9XG5cbiAgICBpZiAobGVmdCkge1xuICAgICAgbGVmdFBvc2l0aW9uID0gbGVmdDtcbiAgICB9XG5cbiAgICBpZiAodG9wKSB7XG4gICAgICB0b3BQb3NpdGlvbiA9IHRvcDtcbiAgICB9XG5cbiAgICBpZiAoKGxlZnRQb3NpdGlvbiAhPT0gbnVsbCkgJiAodG9wUG9zaXRpb24gIT09IG51bGwpKSB7XG4gICAgICBpZiAoYm91bmRSZWN0Q2FwaWJhcmEpIHtcbiAgICAgICAgbGV0IHRyYW5zZm9ybVN0eWxlID0gXCJcIjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRvcFBvc2l0aW9uID4gKGJvdW5kUmVjdENhcGliYXJhLmhlaWdodCAqIDIpIC8gNiAmJlxuICAgICAgICAgIHRvcFBvc2l0aW9uIDw9IChib3VuZFJlY3RDYXBpYmFyYS5oZWlnaHQgKiA0KSAvIDZcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJhbnNmb3JtU3R5bGUgKz0gYHRyYW5zbGF0ZVkoLTUwJSlgO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3BQb3NpdGlvbiA+IChib3VuZFJlY3RDYXBpYmFyYS5oZWlnaHQgKiA0KSAvIDYpIHtcbiAgICAgICAgICB0cmFuc2Zvcm1TdHlsZSArPSBgdHJhbnNsYXRlWSgtMTAwJSlgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxlZnRQb3NpdGlvbiA+IChib3VuZFJlY3RDYXBpYmFyYS53aWR0aCAqIDQpIC8gNikge1xuICAgICAgICAgIHRyYW5zZm9ybVN0eWxlICs9IGB0cmFuc2xhdGVYKC0xMDAlKWA7XG4gICAgICAgICAgbGVmdFBvc2l0aW9uIC09IGdhcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZWZ0UG9zaXRpb24gKz0gZ2FwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmFuc2Zvcm1TdHlsZSAhPSBcIlwiKSB7XG4gICAgICAgICAgc3R5bGUgKz0gYCB0cmFuc2Zvcm06ICR7dHJhbnNmb3JtU3R5bGV9O2A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3R5bGUgKz0gYHRvcDogJHt0b3BQb3NpdGlvbn1weDsgbGVmdDogJHtsZWZ0UG9zaXRpb259cHg7YDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xhc3NOYW1lICs9IFwiY20taGlkZVwiO1xuICAgICAgaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc3RySHRtbCArPSBgIDxkaXYgY2xhc3M9XCJjYXAtY29udGV4dC1tZW51LWNvbnRhaW5lciAke2NsYXNzTmFtZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcC1jb250ZXh0LW1lbnVcIiBzdHlsZT1cIiR7c3R5bGV9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuXG4gICAgbGV0ICRjb250ZXh0TWVudUNvbnRhaW5lciA9IGRvbS5jcmVhdGVFbGVtZW50RnJvbUhUTUwoc3RySHRtbCk7XG4gICAgbGV0ICRjb250ZXh0TWVudSA9ICRjb250ZXh0TWVudUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmNhcC1jb250ZXh0LW1lbnVcIik7XG4gICAgbGV0IGhhc1NvbWVvcHRpb24gPSBmYWxzZTtcblxuICAgIGNvbmZpZy50aW1lbGluZS5jb250ZXh0TWVudS5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgaWYgKG9wdGlvbi5zaG93SWYpIHtcbiAgICAgICAgbGV0IHNob3cgPSBvcHRpb24uc2hvd0lmKHsgaXRlbSwgZGF0ZSwgc2VsZWN0ZWQsIG5hbWUsIHRhYlNlbGVjdGVkIH0pO1xuICAgICAgICBpZiAoIXNob3cpIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzRW5hYmxlZCA9IHRydWU7XG4gICAgICBsZXQgaXNDbGlja2VhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChvcHRpb24uZW5hYmxlSWYpIHtcbiAgICAgICAgaXNFbmFibGVkID0gb3B0aW9uLmVuYWJsZUlmKHtcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB0YWJTZWxlY3RlZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBvcHRpb25DbGFzc05hbWUgPSBcIlwiO1xuICAgICAgbGV0IHN0ckljb24gPSBcIlwiO1xuICAgICAgbGV0IGxhYmVsID0gXCJcIjtcblxuICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICAgICAgb3B0aW9uQ2xhc3NOYW1lICs9IFwiaXMtZGlzYWJsZWQgXCI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb24uaXNEaXZpZGVyKSB7XG4gICAgICAgIGlzQ2xpY2tlYWJsZSA9IGZhbHNlO1xuICAgICAgICBvcHRpb25DbGFzc05hbWUgKz0gXCJpcy1kaXZpZGVyIFwiO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uLmxhYmVsKSB7XG4gICAgICAgIGxhYmVsID0gYDxzcGFuPiR7b3B0aW9uLmxhYmVsfTwvc3Bhbj5gO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uLmljb24pIHtcbiAgICAgICAgc3RySWNvbiA9IGA8ZGl2IGNsYXNzPVwiY2FwLWNvbnRleHQtbWVudV9pdGVtX2ljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCIke29wdGlvbi5pY29ufVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3B0aW9uU3RySHRtbCA9IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcC1jb250ZXh0LW1lbnVfaXRlbSAke29wdGlvbkNsYXNzTmFtZX1cIj5cbiAgICAgICAgICAke3N0ckljb259XG4gICAgICAgICAgJHtsYWJlbH1cbiAgICAgICAgPC9kaXY+YDtcblxuICAgICAgbGV0ICRvcHRpb24gPSBkb20uY3JlYXRlRWxlbWVudEZyb21IVE1MKG9wdGlvblN0ckh0bWwpO1xuXG4gICAgICBpZiAoaXNFbmFibGVkICYmIGlzQ2xpY2tlYWJsZSkge1xuICAgICAgICAkb3B0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZ0Q2xpY2spID0+XG4gICAgICAgICAgb3B0aW9uLm9uQ2xpY2soe1xuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgZXZ0OiBldnRDbGljayxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICB0YWJTZWxlY3RlZCxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJG9wdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2dENsaWNrKSA9PiB7XG4gICAgICAgICAgZXZ0Q2xpY2sucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldnRDbGljay5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgICRjb250ZXh0TWVudS5hcHBlbmQoJG9wdGlvbik7XG4gICAgICBoYXNTb21lb3B0aW9uID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBlbGVtOiAkY29udGV4dE1lbnVDb250YWluZXIsXG4gICAgICBpc1Zpc2libGUsXG4gICAgfTtcbiAgfSxcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUZBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQVFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQVBBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUhBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBSEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFIQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBSEE7QUFXQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdDQTtBQStDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0NBO0FBK0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0NBO0FBK0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3Q0E7QUErQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBSEE7QUFXQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFIQTtBQVVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFIQTtBQVlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQUhBO0FBYUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFIQTtBQVVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBSEE7QUFVQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUtBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFGQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFsRUE7QUFDQTtBQW9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSEE7QUFTQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFIQTtBQVNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRkE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBYUE7QUFJQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBbHdJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/util/tableElements.js\n");
|
|
259
259
|
|
|
260
260
|
/***/ }),
|
|
261
261
|
|
|
@@ -267,7 +267,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _uti
|
|
|
267
267
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
268
268
|
|
|
269
269
|
"use strict";
|
|
270
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util_dateUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/dateUtils */ \"./src/util/dateUtils.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n tablePositions: {\n scrollLeft: 0,\n scrollTop: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n boundingClientTable: null,\n boundingClientContainer: null,\n containerWidth: 0,\n containerHeight: 0,\n navLeftWidth: 0,\n headerHeight: 0,\n dayWidth: 0,\n itemHeight: 0\n },\n\n /**\n * Obtiene valor de un objeto segun su ruta\n * la ruta usa formato separada por punto\n * compatible con arrays\n *\n * Si no se encuentra, retorna null\n *\n * @param {Object} obj - objeto donde se busca el valor\n * @param {String} [path=''] - ruta del valor\n * @return {*} Valor encontrado\n */\n getVarByPath(obj = null, path = '', defaultReturn = null) {\n let paths = path.split('.');\n let current = obj || {};\n\n for (let i = 0; i < paths.length; ++i) {\n const pathSegment = paths[i]; // Verificar si el segmento de ruta contiene una referencia a un array\n\n if (pathSegment.includes('[') && pathSegment.includes(']')) {\n const arrName = pathSegment.split('[')[0];\n const arrIndex = parseInt(pathSegment.split('[')[1].replace(']', ''));\n\n if (current[arrName] === undefined || !Array.isArray(current[arrName])) {\n return defaultReturn;\n } else {\n current = current[arrName][arrIndex];\n }\n } else {\n // Si no es un array, trata la ruta como una propiedad de objeto normal\n if (current[pathSegment] === undefined) {\n return defaultReturn;\n } else {\n current = current[pathSegment];\n }\n }\n }\n\n if (current === undefined) return defaultReturn;\n return current;\n },\n\n /**\n * Obtiene posicion de elemento de un array segun date e item\n * Usada para obtener posicion del dia seleccionado\n *\n * la lista de dias seleccionados en list contienen:\n * {\n * date: Date,\n * item: {\n * id: Integer, \n * }\n * },\n *\n * Si no lo encuentra devuelve -1;\n *\n * @param {Array} list - Arreglo de dias seleccionados\n * @param {Object} props - propiedades de dia seleccionado\n * @param {Date} props.date - fecha para comparar posicion horizontal\n * @param {Object} props.item - item de sidebar para comparar posicion vertical\n * @return {[TODO:type]} [TODO:description]\n */\n indexSelectedDay(list, props) {\n let index = -1;\n list.forEach((l, i) => {\n if (l.date == props.date && l.item.id == props.item.id) {\n index = i;\n }\n });\n return index;\n },\n\n /**\n * Obtiene posicion vertical del item segun los datos\n * mostrados en la planilla\n *\n * si el arbol de un item padre no esta desplegado, no lo considera\n *\n * si no lo encuentra, devuelve -1\n *\n * TODO dar posibilidad de position para parents\n *\n * @param {Array} data - Arreglo de datos, con formato capibara\n * @param {item} item - Item a buscar en Array\n * @return {Integer} Posicion, default -1\n */\n getPositionByItem(config, item, typeNode = \"child\") {\n let position = -1;\n let finalPosition = -1;\n config.data.forEach(d => {\n if (d.isHidden) return;\n position++;\n\n if (d.id == item.id && typeNode == \"parent\") {\n finalPosition = position;\n }\n\n d.children.forEach(c => {\n if (c.isHidden) return;\n\n if (!d.isClosed) {\n position++;\n\n if (typeNode == \"child\" && c.id == item.id) {\n finalPosition = position;\n }\n }\n });\n });\n return finalPosition;\n },\n\n /**\n * Obtiene item que corresponda a la posicion de mouse\n * usado en eventos click\n *\n * si el arbol de un item padre no esta desplegado, no lo considera\n *\n * si no lo encuentra, devuelve null;\n *\n * @param {Object} config - Capibara config\n * @param {Object} evt - Evento mouse click\n * @param {Object} $table - Elemento de dom $table de planilla\n * @return {Object} Item encontrado\n */\n getItemByEvent(config, evt, $table) {\n let item = null;\n let actualPosition = 0;\n let pos = this.eventToPosition(config, evt, $table);\n let position = pos.y;\n config.data.forEach(d => {\n if (d.isHidden) return;\n\n if (actualPosition == position && d.selectable !== false) {\n item = d;\n }\n\n actualPosition++;\n\n if (!d.isClosed) {\n d.children.forEach(c => {\n if (c.isHidden) return;\n\n if (actualPosition == position && c.selectable !== false) {\n item = c;\n }\n\n actualPosition++;\n });\n }\n });\n return item;\n },\n\n /**\n * Obtiene fecha por posicion de mouse\n * usa evento click en $table\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} evt - Evento mouse click\n * @param {Object} $table - Elemento de dom $table de planilla\n * @return {String} Fecha formateada correspondiente\n */\n getDayByEvent(config, evt, $table) {\n let pos = this.eventToPosition(config, evt, $table);\n let day = _util_dateUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].addDaysString(config.timeline.start, pos.x);\n return day;\n },\n\n /**\n * Obtiene item de config.data capibara, usando ID\n *\n * @param {Object} data - Configuracion Capibara\n * @param {Integer} id - Id a buscar\n * @param {String} [type] - tipo de item a buscar en config.data\n * @param {Boolean} [withParent] - Si se devuelve solo el item o con el parent\n * @return {Object} item o {item, parent}\n */\n getItemById(config, id, typeNode = \"child\", withParent = false) {\n let item = null;\n let parent = null;\n config.data.forEach(d => {\n if (d.id == id && typeNode == \"parent\") {\n item = d;\n }\n\n d.children.forEach(c => {\n if (c.id == id && typeNode == \"child\") {\n item = c;\n parent = d;\n }\n });\n });\n\n if (withParent) {\n return {\n item,\n parent\n };\n }\n\n return item;\n },\n\n /**\n * Obtiene posicion de mouse segun evento\n * con respecto a la planilla\n * left : posicion desde izquierda en pixeles, en multiplos del ancho del dia,\n * top : posicion desde arriba en pixeles, como multiplo del alto del item,\n * x : posicion desde izquierda, en orden numerico,\n * y : posicion desde arriba, en orden numerico,\n * _real : {\n * topOffset : differencia entre posicion izquierda de pantalla y de table,\n * leftOffset : differencia entre posicion superior de pantalla y de table,\n * left : posicion en pixeles,\n * top : posicion en pixeles\n * }\n *\n * @param {Object} config - configuracion capibara\n * @param {Object} ev - evento mouse\n * @param {Object} elem - Elemento dom Target, para usar en calculos\n * @return {Object} objeto con posiciones\n */\n eventToPosition(config, ev, $table) {\n //console.log(\"eventToPosition\");\n let $container = $table.parentElement;\n let rectTable = this.tablePositions.boundingClientTable; //target.getBoundingClientRect();\n\n let rectContainer = this.tablePositions.boundingClientContainer; //target.getBoundingClientRect();\n\n let itemHeight = parseFloat(this.getCSSVariable(config, \"--item-height\"));\n let dayWidth = parseFloat(this.getCSSVariable(config, \"--day-width\"));\n let headerHeight = parseFloat(this.getCSSVariable(config, \"--header-height\"));\n let navWidth = parseFloat(this.getCSSVariable(config, \"--nav-width\")) + parseFloat(this.getCSSVariable(config, \"--ex-nav-width\")) + parseFloat(this.getCSSVariable(config, \"--btn-nav-width\")) + parseFloat(this.getCSSVariable(config, \"--initial-nav-width\"));\n let paddingLeft = parseInt($table.style.paddingLeft || 0); // + parseInt(elem.offsetLeft);\n\n let paddingTop = parseInt($table.style.paddingTop || 0); // + parseInt(elem.offsetTop);\n\n let leftPosition = ev.clientX - paddingLeft - parseInt(rectTable.left);\n leftPosition = leftPosition >= 0 ? leftPosition : 0;\n let topPosition = ev.clientY - paddingTop - parseInt(rectTable.top);\n topPosition = topPosition >= 0 ? topPosition : 0;\n let leftRounded = leftPosition - Math.abs(leftPosition % dayWidth);\n let topRounded = topPosition - Math.abs(topPosition % itemHeight);\n let leftClient = leftPosition - this.tablePositions.scrollLeft;\n let topClient = topPosition - this.tablePositions.scrollTop;\n let visibleWidth = rectContainer.width - navWidth;\n let visibleHeight = rectContainer.height - headerHeight;\n let position = {\n leftClient,\n // left en pixeles, relativo al sector visible\n topClient,\n // top en pixeles, relativo al sector visible\n leftPosition,\n // left en pixeles, relativo al elemento\n topPosition,\n // top en pixeles, relativo al elemento\n left: leftRounded,\n // left en pixeles, relativo al elemento, redondeado\n top: topRounded,\n // top en pixeles, relativo al elemento, redondeado\n x: leftRounded / dayWidth,\n // left en posicion en dias\n y: topRounded / itemHeight,\n // top en posicion de items\n yPercent: _.round(topClient / visibleHeight * 100, 2),\n // left en porcentaje, relativo al sector visible\n xPercent: _.round(leftClient / visibleWidth * 100, 2),\n // top en porcentaje, relativo al sector visible\n yInnerPercent: _.round(topPosition / (this.tablePositions.scrollHeight - headerHeight) * 100, 2),\n // left en porcentaje, relativo al sector visible\n xInnerPercent: _.round(leftPosition / (this.tablePositions.scrollWidth - navWidth) * 100, 2) // top en porcentaje, relativo al sector visible\n\n /*\n visibleWidth,\n visibleHeight,\n navWidth,\n _real : {\n topOffset : paddingTop + parseInt(rectTable.top),\n leftOffset : paddingLeft + parseInt(rectTable.left),\n left : leftPosition,\n top : topPosition\n }\n */\n\n }; //console.table(position);\n //console.log(JSON.stringify(position));\n\n return position;\n },\n\n eventToPositionNavLeft(config, ev, elem) {\n let target = elem || ev.currentTarget;\n let rect = elem.getBoundingClientRect();\n let rectParent = elem.parentElement.getBoundingClientRect();\n let itemHeight = parseFloat(this.getCSSVariable(config, \"--item-height\"));\n let headerHeight = parseFloat(this.getCSSVariable(config, \"--header-height\"));\n let paddingTop = parseInt(target.style.paddingTop || 0);\n let topPosition = ev.clientY - paddingTop - parseInt(rect.top);\n topPosition = topPosition >= 0 ? topPosition : 0;\n let topRounded = topPosition - Math.abs(topPosition % itemHeight);\n let topClient = topPosition - elem.parentElement.scrollTop;\n let position = {\n topClient,\n // top en pixeles, relativo al sector visible\n top: topRounded,\n // top en pixeles, relativo al elemento\n y: topRounded / itemHeight,\n // top en posicion de items\n yPercent: _.round(topClient / (rectParent.height - headerHeight) * 100, 2) // top en porcentaje, relativo al sector visible\n\n };\n return position;\n },\n\n getPositionByItemDate(config, item, date) {\n let h = parseFloat(this.getCSSVariable(config, \"--item-height\"));\n let w = parseFloat(this.getCSSVariable(config, \"--day-width\"));\n let y = this.getPositionByItem(config, item);\n let x = _util_dateUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].diffDays(config.timeline.start, date);\n let left = x * w;\n let top = y * h;\n let position = {\n left,\n top,\n x,\n y\n };\n return position;\n },\n\n /**\n * Obtiene promedio de datos, de una lista de datos\n * entre una fecha y los dias indicados, hacia el pasado\n *\n * si cuenta 0, devuelve null\n *\n * @param {Object} data - Datos para buscar\n * @param {Date} date - fecha de busqueda\n * @param {Integer} days - diferencia de dias\n * @return {Float} promedio de valores\n */\n getAverage(data, date, days) {\n let total = 0;\n let count = 0;\n let dataSorted = data.sort((a, b) => b.unix - a.unix);\n let from = new Date(date);\n let to = new Date(date);\n from.setDate(from.getDate() - days);\n dataSorted.forEach(d => {\n let dDate = new Date(d.date);\n\n if (from < dDate && dDate < to) {\n let value = parseFloat(d.value);\n\n if (!isNaN(value) && value > 0) {\n total += value;\n count++;\n } else {\n from.setDate(from.getDate() - 1);\n }\n }\n });\n return this.round(count > 0 ? total / count : 0, 2);\n },\n\n /**\n * Meses por posicion, en español\n *\n * @param {Integer} pos - Posicion de mes\n * @return {String} Nombre de mes\n */\n getMonthByPosition(pos) {\n let months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];\n return months[pos];\n },\n\n /**\n * Redondea numeros\n * @param {Float} num - numero decimal para redondear\n * @param {Integer} decimal - cantidad de decimales para redondear\n * @return {Float} Numero redondeado\n */\n round(num, decimal = 2) {\n //let base10 = 10 * decimal;\n //return base10 ? Math.round(num * base10) / base10 : Math.round(num);\n return _.round(num, decimal);\n },\n\n /**\n * Edita variable CSS desde Root\n * @param {String} varName - nombre de variable CSS\n * @param {Any} value - valor a asignar a variable CSS\n */\n setCSSVariable(config, varName, value) {\n let containerElement = document.querySelector(config.selector);\n\n if (containerElement) {\n containerElement.style.setProperty(varName, value);\n }\n },\n\n /**\n * Obtiene valor de variable CSS desde Root\n * @param {String} varName - nombre de variable CSS\n * @return {Float} Numero redondeado\n */\n getCSSVariable(config, varName) {\n let containerElement = document.querySelector(config.selector);\n return containerElement ? getComputedStyle(containerElement).getPropertyValue(varName) : null;\n },\n\n /**\n * Verifica si la pantalla tiene un tamaño mobile\n * modifica this.isMobile\n * breakpoint 960e\n * \n * @return { Boolean } - si el tamaño de pantalla es menor al breakpoint\n */\n checkIsMobile() {\n let breakPoint = 960;\n return Boolean(window.matchMedia(\"(max-width: \" + (breakPoint - 1) + \"px)\").matches);\n },\n\n getTableDimensions(config) {\n let h = parseFloat(this.getCSSVariable(config, \"--item-height\"));\n let w = parseFloat(this.getCSSVariable(config, \"--day-width\"));\n let start = new Date(config.timeline.start);\n let end = new Date(config.timeline.end);\n let rows = 0;\n end.setTime(end.getTime() + _util_dateUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dayInMilliseconds); // add 24 hours\n\n let diff_time = end.getTime() - start.getTime();\n let days = diff_time / _util_dateUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dayInMilliseconds;\n config.data.forEach(d => {\n if (d.isHidden) return;\n rows++;\n\n if (d.children && !d.isClosed) {\n rows += d.children.filter(c => !c.isHidden).length;\n }\n });\n let height = rows * h;\n let width = days * w;\n return {\n height,\n width,\n dayWidth: w,\n itemHeight: h\n };\n },\n\n //https://stackoverflow.com/questions/8027423/how-to-check-if-a-string-is-a-valid-hex-color-representation\n isHexColor(str) {\n let reg = /^#([0-9a-f]{3}){1,2}$/i;\n return reg.test(str);\n },\n\n toCapitalize(str) {\n return (\" \" + str).toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (m, chr) => chr.toUpperCase());\n },\n\n formatNumber(num) {\n return new Intl.NumberFormat(\"es-CL\").format(num).replace(\".\", \" \");\n },\n\n //https://stackoverflow.com/questions/35228052/debounce-function-implemented-with-promises\n debounce(f, interval) {\n let timer = null;\n return (...args) => {\n clearTimeout(timer);\n return new Promise(resolve => {\n timer = setTimeout(() => resolve(f(...args)), interval);\n });\n };\n },\n\n //https://stackoverflow.com/questions/27078285/simple-throttle-in-javascript/27078401#27078401\n throttle(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n\n var later = function () {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n return function () {\n var now = Date.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n }\n\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdXRpbC91dGlscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0NhcGliYXJhLy4vc3JjL3V0aWwvdXRpbHMuanM/OGUxNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGF0ZVV0aWxzIGZyb20gJy4uL3V0aWwvZGF0ZVV0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICB0YWJsZVBvc2l0aW9uczoge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwLFxuICAgIHNjcm9sbFdpZHRoOiAwLFxuICAgIHNjcm9sbEhlaWdodDogMCxcbiAgICBib3VuZGluZ0NsaWVudFRhYmxlOiBudWxsLFxuICAgIGJvdW5kaW5nQ2xpZW50Q29udGFpbmVyOiBudWxsLFxuXG4gICAgY29udGFpbmVyV2lkdGg6IDAsXG4gICAgY29udGFpbmVySGVpZ2h0OiAwLFxuICAgIG5hdkxlZnRXaWR0aDogMCxcbiAgICBoZWFkZXJIZWlnaHQ6IDAsXG4gICAgZGF5V2lkdGg6IDAsXG4gICAgaXRlbUhlaWdodDogMFxuICB9LFxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHZhbG9yIGRlIHVuIG9iamV0byBzZWd1biBzdSBydXRhXG4gICAqIGxhIHJ1dGEgdXNhIGZvcm1hdG8gc2VwYXJhZGEgcG9yIHB1bnRvXG4gICAqIGNvbXBhdGlibGUgY29uIGFycmF5c1xuICAgKlxuICAgKiBTaSBubyBzZSBlbmN1ZW50cmEsIHJldG9ybmEgbnVsbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gb2JqZXRvIGRvbmRlIHNlIGJ1c2NhIGVsIHZhbG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbcGF0aD0nJ10gLSBydXRhIGRlbCB2YWxvclxuICAgKiBAcmV0dXJuIHsqfSBWYWxvciBlbmNvbnRyYWRvXG4gICAqL1xuXG4gIGdldFZhckJ5UGF0aChvYmogPSBudWxsLCBwYXRoID0gJycsIGRlZmF1bHRSZXR1cm4gPSBudWxsKSB7XG4gICAgbGV0IHBhdGhzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gb2JqIHx8IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgcGF0aFNlZ21lbnQgPSBwYXRoc1tpXTtcblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIHNlZ21lbnRvIGRlIHJ1dGEgY29udGllbmUgdW5hIHJlZmVyZW5jaWEgYSB1biBhcnJheVxuICAgICAgaWYgKHBhdGhTZWdtZW50LmluY2x1ZGVzKCdbJykgJiYgcGF0aFNlZ21lbnQuaW5jbHVkZXMoJ10nKSkge1xuICAgICAgICBjb25zdCBhcnJOYW1lID0gcGF0aFNlZ21lbnQuc3BsaXQoJ1snKVswXTtcbiAgICAgICAgY29uc3QgYXJySW5kZXggPSBwYXJzZUludChwYXRoU2VnbWVudC5zcGxpdCgnWycpWzFdLnJlcGxhY2UoJ10nLCAnJykpO1xuXG4gICAgICAgIGlmIChjdXJyZW50W2Fyck5hbWVdID09PSB1bmRlZmluZWQgfHwgIUFycmF5LmlzQXJyYXkoY3VycmVudFthcnJOYW1lXSkpIHtcbiAgICAgICAgICByZXR1cm4gZGVmYXVsdFJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudFthcnJOYW1lXVthcnJJbmRleF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNpIG5vIGVzIHVuIGFycmF5LCB0cmF0YSBsYSBydXRhIGNvbW8gdW5hIHByb3BpZWRhZCBkZSBvYmpldG8gbm9ybWFsXG4gICAgICAgIGlmIChjdXJyZW50W3BhdGhTZWdtZW50XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRSZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGF0aFNlZ21lbnRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRSZXR1cm47XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH0sXG5cblxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHBvc2ljaW9uIGRlIGVsZW1lbnRvIGRlIHVuIGFycmF5IHNlZ3VuIGRhdGUgZSBpdGVtXG4gICAqIFVzYWRhIHBhcmEgb2J0ZW5lciBwb3NpY2lvbiBkZWwgZGlhIHNlbGVjY2lvbmFkb1xuICAgKlxuICAgKiBsYSBsaXN0YSBkZSBkaWFzIHNlbGVjY2lvbmFkb3MgZW4gbGlzdCBjb250aWVuZW46XG4gICAqICAge1xuICAgKiAgICAgZGF0ZTogRGF0ZSxcbiAgICogICAgIGl0ZW06IHtcbiAgICogICAgICAgaWQ6IEludGVnZXIsICAgIFxuICAgKiAgICAgfVxuICAgKiAgIH0sXG4gICAqXG4gICAqIFNpIG5vIGxvIGVuY3VlbnRyYSBkZXZ1ZWx2ZSAtMTtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gbGlzdCAtIEFycmVnbG8gZGUgZGlhcyBzZWxlY2Npb25hZG9zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIHByb3BpZWRhZGVzIGRlIGRpYSBzZWxlY2Npb25hZG9cbiAgICogQHBhcmFtIHtEYXRlfSBwcm9wcy5kYXRlIC0gZmVjaGEgcGFyYSBjb21wYXJhciBwb3NpY2lvbiBob3Jpem9udGFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcy5pdGVtIC0gaXRlbSBkZSBzaWRlYmFyIHBhcmEgY29tcGFyYXIgcG9zaWNpb24gdmVydGljYWxcbiAgICogQHJldHVybiB7W1RPRE86dHlwZV19IFtUT0RPOmRlc2NyaXB0aW9uXVxuICAgKi9cbiAgaW5kZXhTZWxlY3RlZERheShsaXN0LCBwcm9wcykge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGxpc3QuZm9yRWFjaCgobCwgaSkgPT4ge1xuICAgICAgaWYgKGwuZGF0ZSA9PSBwcm9wcy5kYXRlICYmIGwuaXRlbS5pZCA9PSBwcm9wcy5pdGVtLmlkKSB7XG4gICAgICAgIGluZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBpbmRleDtcbiAgfSxcblxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHBvc2ljaW9uIHZlcnRpY2FsIGRlbCBpdGVtIHNlZ3VuIGxvcyBkYXRvc1xuICAgKiBtb3N0cmFkb3MgZW4gbGEgcGxhbmlsbGFcbiAgICpcbiAgICogc2kgZWwgYXJib2wgZGUgdW4gaXRlbSBwYWRyZSBubyBlc3RhIGRlc3BsZWdhZG8sIG5vIGxvIGNvbnNpZGVyYVxuICAgKlxuICAgKiBzaSBubyBsbyBlbmN1ZW50cmEsIGRldnVlbHZlIC0xXG4gICAqXG4gICAqIFRPRE8gZGFyIHBvc2liaWxpZGFkIGRlIHBvc2l0aW9uIHBhcmEgcGFyZW50c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhIC0gQXJyZWdsbyBkZSBkYXRvcywgY29uIGZvcm1hdG8gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtpdGVtfSBpdGVtIC0gSXRlbSBhIGJ1c2NhciBlbiBBcnJheVxuICAgKiBAcmV0dXJuIHtJbnRlZ2VyfSBQb3NpY2lvbiwgZGVmYXVsdCAtMVxuICAgKi9cbiAgZ2V0UG9zaXRpb25CeUl0ZW0oY29uZmlnLCBpdGVtLCB0eXBlTm9kZSA9IFwiY2hpbGRcIikge1xuICAgIGxldCBwb3NpdGlvbiA9IC0xO1xuICAgIGxldCBmaW5hbFBvc2l0aW9uID0gLTE7XG5cbiAgICBjb25maWcuZGF0YS5mb3JFYWNoKGQgPT4ge1xuICAgICAgaWYgKGQuaXNIaWRkZW4pIHJldHVybjtcbiAgICAgIHBvc2l0aW9uKys7XG4gICAgICBpZiAoZC5pZCA9PSBpdGVtLmlkICYmIHR5cGVOb2RlID09IFwicGFyZW50XCIpIHtcbiAgICAgICAgZmluYWxQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xuICAgICAgICBpZiAoYy5pc0hpZGRlbikgcmV0dXJuO1xuICAgICAgICBpZiAoIWQuaXNDbG9zZWQpIHtcbiAgICAgICAgICBwb3NpdGlvbisrO1xuICAgICAgICAgIGlmICh0eXBlTm9kZSA9PSBcImNoaWxkXCIgJiYgYy5pZCA9PSBpdGVtLmlkKSB7XG4gICAgICAgICAgICBmaW5hbFBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbmFsUG9zaXRpb247XG4gIH0sXG5cblxuICAvKipcbiAgICogT2J0aWVuZSBpdGVtIHF1ZSBjb3JyZXNwb25kYSBhIGxhIHBvc2ljaW9uIGRlIG1vdXNlXG4gICAqIHVzYWRvIGVuIGV2ZW50b3MgY2xpY2tcbiAgICpcbiAgICogc2kgZWwgYXJib2wgZGUgdW4gaXRlbSBwYWRyZSBubyBlc3RhIGRlc3BsZWdhZG8sIG5vIGxvIGNvbnNpZGVyYVxuICAgKlxuICAgKiBzaSBubyBsbyBlbmN1ZW50cmEsIGRldnVlbHZlIG51bGw7XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDYXBpYmFyYSBjb25maWdcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtIEV2ZW50byBtb3VzZSBjbGlja1xuICAgKiBAcGFyYW0ge09iamVjdH0gJHRhYmxlIC0gRWxlbWVudG8gZGUgZG9tICR0YWJsZSBkZSBwbGFuaWxsYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEl0ZW0gZW5jb250cmFkb1xuICAgKi9cbiAgZ2V0SXRlbUJ5RXZlbnQoY29uZmlnLCBldnQsICR0YWJsZSkge1xuICAgIGxldCBpdGVtID0gbnVsbDtcbiAgICBsZXQgYWN0dWFsUG9zaXRpb24gPSAwO1xuICAgIGxldCBwb3MgPSB0aGlzLmV2ZW50VG9Qb3NpdGlvbihjb25maWcsIGV2dCwgJHRhYmxlKTtcbiAgICBsZXQgcG9zaXRpb24gPSBwb3MueTtcbiAgICBjb25maWcuZGF0YS5mb3JFYWNoKGQgPT4ge1xuICAgICAgaWYgKGQuaXNIaWRkZW4pIHJldHVybjtcbiAgICAgIGlmIChhY3R1YWxQb3NpdGlvbiA9PSBwb3NpdGlvbiAmJiBkLnNlbGVjdGFibGUgIT09IGZhbHNlKSB7XG4gICAgICAgIGl0ZW0gPSBkO1xuICAgICAgfVxuICAgICAgYWN0dWFsUG9zaXRpb24rKztcbiAgICAgIGlmICghZC5pc0Nsb3NlZCkge1xuICAgICAgICBkLmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgaWYgKGMuaXNIaWRkZW4pIHJldHVybjtcbiAgICAgICAgICBpZiAoYWN0dWFsUG9zaXRpb24gPT0gcG9zaXRpb24gJiYgYy5zZWxlY3RhYmxlICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgaXRlbSA9IGM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdHVhbFBvc2l0aW9uKys7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpdGVtO1xuICB9LFxuXG5cbiAgLyoqXG4gICAqIE9idGllbmUgZmVjaGEgcG9yIHBvc2ljaW9uIGRlIG1vdXNlXG4gICAqIHVzYSBldmVudG8gY2xpY2sgZW4gJHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldnQgLSBFdmVudG8gbW91c2UgY2xpY2tcbiAgICogQHBhcmFtIHtPYmplY3R9ICR0YWJsZSAtIEVsZW1lbnRvIGRlIGRvbSAkdGFibGUgZGUgcGxhbmlsbGFcbiAgICogQHJldHVybiB7U3RyaW5nfSBGZWNoYSBmb3JtYXRlYWRhIGNvcnJlc3BvbmRpZW50ZVxuICAgKi9cbiAgZ2V0RGF5QnlFdmVudChjb25maWcsIGV2dCwgJHRhYmxlKSB7XG4gICAgbGV0IHBvcyA9IHRoaXMuZXZlbnRUb1Bvc2l0aW9uKGNvbmZpZywgZXZ0LCAkdGFibGUpO1xuICAgIGxldCBkYXkgPSBkYXRlVXRpbHMuYWRkRGF5c1N0cmluZyhjb25maWcudGltZWxpbmUuc3RhcnQsIHBvcy54KTtcbiAgICByZXR1cm4gZGF5O1xuICB9LFxuXG5cbiAgLyoqXG4gICAqIE9idGllbmUgaXRlbSBkZSBjb25maWcuZGF0YSBjYXBpYmFyYSwgdXNhbmRvIElEXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gQ29uZmlndXJhY2lvbiBDYXBpYmFyYVxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IGlkIC0gSWQgYSBidXNjYXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFt0eXBlXSAtIHRpcG8gZGUgaXRlbSBhIGJ1c2NhciBlbiBjb25maWcuZGF0YVxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFt3aXRoUGFyZW50XSAtIFNpIHNlIGRldnVlbHZlIHNvbG8gZWwgaXRlbSBvIGNvbiBlbCBwYXJlbnRcbiAgICogQHJldHVybiB7T2JqZWN0fSBpdGVtIG8ge2l0ZW0sIHBhcmVudH1cbiAgICovXG4gIGdldEl0ZW1CeUlkKGNvbmZpZywgaWQsIHR5cGVOb2RlID0gXCJjaGlsZFwiLCB3aXRoUGFyZW50ID0gZmFsc2UpIHtcbiAgICBsZXQgaXRlbSA9IG51bGw7XG4gICAgbGV0IHBhcmVudCA9IG51bGw7XG5cbiAgICBjb25maWcuZGF0YS5mb3JFYWNoKGQgPT4ge1xuICAgICAgaWYgKGQuaWQgPT0gaWQgJiYgdHlwZU5vZGUgPT0gXCJwYXJlbnRcIikge1xuICAgICAgICBpdGVtID0gZDtcbiAgICAgIH1cbiAgICAgIGQuY2hpbGRyZW4uZm9yRWFjaChjID0+IHtcbiAgICAgICAgaWYgKGMuaWQgPT0gaWQgJiYgdHlwZU5vZGUgPT0gXCJjaGlsZFwiKSB7XG4gICAgICAgICAgaXRlbSA9IGM7XG4gICAgICAgICAgcGFyZW50ID0gZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAod2l0aFBhcmVudCkge1xuICAgICAgcmV0dXJuIHsgaXRlbSwgcGFyZW50IH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH0sXG5cblxuICAvKipcbiAgICogT2J0aWVuZSBwb3NpY2lvbiBkZSBtb3VzZSBzZWd1biBldmVudG9cbiAgICogY29uIHJlc3BlY3RvIGEgbGEgcGxhbmlsbGFcblxuICAgKiAgIGxlZnQgOiBwb3NpY2lvbiBkZXNkZSBpenF1aWVyZGEgZW4gcGl4ZWxlcywgZW4gbXVsdGlwbG9zIGRlbCBhbmNobyBkZWwgZGlhLFxuICAgKiAgIHRvcCAgOiBwb3NpY2lvbiBkZXNkZSBhcnJpYmEgZW4gcGl4ZWxlcywgY29tbyBtdWx0aXBsbyBkZWwgYWx0byBkZWwgaXRlbSxcbiAgICogICB4ICAgIDogcG9zaWNpb24gZGVzZGUgaXpxdWllcmRhLCBlbiBvcmRlbiBudW1lcmljbyxcbiAgICogICB5ICAgIDogcG9zaWNpb24gZGVzZGUgYXJyaWJhLCBlbiBvcmRlbiBudW1lcmljbyxcbiAgICogICBfcmVhbCA6IHtcbiAgICogICAgIHRvcE9mZnNldCAgOiBkaWZmZXJlbmNpYSBlbnRyZSBwb3NpY2lvbiBpenF1aWVyZGEgZGUgcGFudGFsbGEgeSBkZSB0YWJsZSxcbiAgICogICAgIGxlZnRPZmZzZXQgOiBkaWZmZXJlbmNpYSBlbnRyZSBwb3NpY2lvbiBzdXBlcmlvciBkZSBwYW50YWxsYSB5IGRlIHRhYmxlLFxuICAgKiAgICAgbGVmdCAgICAgICA6IHBvc2ljaW9uIGVuIHBpeGVsZXMsXG4gICAqICAgICB0b3AgICAgICAgIDogcG9zaWNpb24gZW4gcGl4ZWxlc1xuICAgKiAgIH1cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIGNvbmZpZ3VyYWNpb24gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2IC0gZXZlbnRvIG1vdXNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtIC0gRWxlbWVudG8gZG9tIFRhcmdldCwgcGFyYSB1c2FyIGVuIGNhbGN1bG9zXG4gICAqIEByZXR1cm4ge09iamVjdH0gb2JqZXRvIGNvbiBwb3NpY2lvbmVzXG4gICAqL1xuICBldmVudFRvUG9zaXRpb24oY29uZmlnLCBldiwgJHRhYmxlKSB7XG4gICAgLy9jb25zb2xlLmxvZyhcImV2ZW50VG9Qb3NpdGlvblwiKTtcbiAgICBsZXQgJGNvbnRhaW5lciA9ICR0YWJsZS5wYXJlbnRFbGVtZW50O1xuICAgIGxldCByZWN0VGFibGUgPSB0aGlzLnRhYmxlUG9zaXRpb25zLmJvdW5kaW5nQ2xpZW50VGFibGU7IC8vdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCByZWN0Q29udGFpbmVyID0gdGhpcy50YWJsZVBvc2l0aW9ucy5ib3VuZGluZ0NsaWVudENvbnRhaW5lcjsgLy90YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgbGV0IGl0ZW1IZWlnaHQgPSBwYXJzZUZsb2F0KHRoaXMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0taXRlbS1oZWlnaHRcIikpO1xuICAgIGxldCBkYXlXaWR0aCA9IHBhcnNlRmxvYXQodGhpcy5nZXRDU1NWYXJpYWJsZShjb25maWcsIFwiLS1kYXktd2lkdGhcIikpO1xuICAgIGxldCBoZWFkZXJIZWlnaHQgPSBwYXJzZUZsb2F0KHRoaXMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0taGVhZGVyLWhlaWdodFwiKSk7XG4gICAgbGV0IG5hdldpZHRoID1cbiAgICAgIHBhcnNlRmxvYXQodGhpcy5nZXRDU1NWYXJpYWJsZShjb25maWcsIFwiLS1uYXYtd2lkdGhcIikpICtcbiAgICAgIHBhcnNlRmxvYXQodGhpcy5nZXRDU1NWYXJpYWJsZShjb25maWcsIFwiLS1leC1uYXYtd2lkdGhcIikpICtcbiAgICAgIHBhcnNlRmxvYXQodGhpcy5nZXRDU1NWYXJpYWJsZShjb25maWcsIFwiLS1idG4tbmF2LXdpZHRoXCIpKSArXG4gICAgICBwYXJzZUZsb2F0KHRoaXMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0taW5pdGlhbC1uYXYtd2lkdGhcIikpO1xuXG4gICAgbGV0IHBhZGRpbmdMZWZ0ID0gcGFyc2VJbnQoJHRhYmxlLnN0eWxlLnBhZGRpbmdMZWZ0IHx8IDApOyAgICAgICAgICAgLy8gICsgcGFyc2VJbnQoZWxlbS5vZmZzZXRMZWZ0KTtcbiAgICBsZXQgcGFkZGluZ1RvcCA9IHBhcnNlSW50KCR0YWJsZS5zdHlsZS5wYWRkaW5nVG9wIHx8IDApOyAgICAgICAgICAgIC8vICsgcGFyc2VJbnQoZWxlbS5vZmZzZXRUb3ApO1xuXG4gICAgbGV0IGxlZnRQb3NpdGlvbiA9IGV2LmNsaWVudFggLSBwYWRkaW5nTGVmdCAtIHBhcnNlSW50KHJlY3RUYWJsZS5sZWZ0KTtcbiAgICBsZWZ0UG9zaXRpb24gPSBsZWZ0UG9zaXRpb24gPj0gMCA/IGxlZnRQb3NpdGlvbiA6IDA7XG5cbiAgICBsZXQgdG9wUG9zaXRpb24gPSBldi5jbGllbnRZIC0gcGFkZGluZ1RvcCAtIHBhcnNlSW50KHJlY3RUYWJsZS50b3ApO1xuICAgIHRvcFBvc2l0aW9uID0gdG9wUG9zaXRpb24gPj0gMCA/IHRvcFBvc2l0aW9uIDogMDtcblxuICAgIGxldCBsZWZ0Um91bmRlZCA9IGxlZnRQb3NpdGlvbiAtIE1hdGguYWJzKGxlZnRQb3NpdGlvbiAlIGRheVdpZHRoKTtcbiAgICBsZXQgdG9wUm91bmRlZCA9IHRvcFBvc2l0aW9uIC0gTWF0aC5hYnModG9wUG9zaXRpb24gJSBpdGVtSGVpZ2h0KTtcblxuICAgIGxldCBsZWZ0Q2xpZW50ID0gbGVmdFBvc2l0aW9uIC0gdGhpcy50YWJsZVBvc2l0aW9ucy5zY3JvbGxMZWZ0O1xuICAgIGxldCB0b3BDbGllbnQgPSB0b3BQb3NpdGlvbiAtIHRoaXMudGFibGVQb3NpdGlvbnMuc2Nyb2xsVG9wO1xuICAgIGxldCB2aXNpYmxlV2lkdGggPSByZWN0Q29udGFpbmVyLndpZHRoIC0gbmF2V2lkdGg7XG4gICAgbGV0IHZpc2libGVIZWlnaHQgPSByZWN0Q29udGFpbmVyLmhlaWdodCAtIGhlYWRlckhlaWdodDtcblxuICAgIGxldCBwb3NpdGlvbiA9IHtcbiAgICAgIGxlZnRDbGllbnQsICAgICAgLy8gbGVmdCBlbiBwaXhlbGVzLCByZWxhdGl2byBhbCBzZWN0b3IgdmlzaWJsZVxuICAgICAgdG9wQ2xpZW50LCAgICAgICAvLyB0b3AgZW4gcGl4ZWxlcywgcmVsYXRpdm8gYWwgc2VjdG9yIHZpc2libGVcbiAgICAgIGxlZnRQb3NpdGlvbiwgICAgLy8gbGVmdCBlbiBwaXhlbGVzLCByZWxhdGl2byBhbCBlbGVtZW50b1xuICAgICAgdG9wUG9zaXRpb24sICAgICAvLyB0b3AgZW4gcGl4ZWxlcywgcmVsYXRpdm8gYWwgZWxlbWVudG9cbiAgICAgIGxlZnQ6IGxlZnRSb3VuZGVkLCAgICAgICAgICAgICAgLy8gbGVmdCBlbiBwaXhlbGVzLCByZWxhdGl2byBhbCBlbGVtZW50bywgcmVkb25kZWFkb1xuICAgICAgdG9wOiB0b3BSb3VuZGVkLCAgICAgICAgICAgICAgIC8vIHRvcCBlbiBwaXhlbGVzLCByZWxhdGl2byBhbCBlbGVtZW50bywgcmVkb25kZWFkb1xuICAgICAgeDogbGVmdFJvdW5kZWQgLyBkYXlXaWR0aCwgICAvLyBsZWZ0IGVuIHBvc2ljaW9uIGVuIGRpYXNcbiAgICAgIHk6IHRvcFJvdW5kZWQgLyBpdGVtSGVpZ2h0LCAgLy8gdG9wIGVuIHBvc2ljaW9uIGRlIGl0ZW1zXG4gICAgICB5UGVyY2VudDogXy5yb3VuZCgodG9wQ2xpZW50IC8gdmlzaWJsZUhlaWdodCkgKiAxMDAsIDIpLCAgIC8vIGxlZnQgZW4gcG9yY2VudGFqZSwgcmVsYXRpdm8gYWwgc2VjdG9yIHZpc2libGVcbiAgICAgIHhQZXJjZW50OiBfLnJvdW5kKChsZWZ0Q2xpZW50IC8gdmlzaWJsZVdpZHRoKSAqIDEwMCwgMiksICAgLy8gdG9wIGVuIHBvcmNlbnRhamUsIHJlbGF0aXZvIGFsIHNlY3RvciB2aXNpYmxlXG4gICAgICB5SW5uZXJQZXJjZW50OiBfLnJvdW5kKCh0b3BQb3NpdGlvbiAvICh0aGlzLnRhYmxlUG9zaXRpb25zLnNjcm9sbEhlaWdodCAtIGhlYWRlckhlaWdodCkpICogMTAwLCAyKSwgICAvLyBsZWZ0IGVuIHBvcmNlbnRhamUsIHJlbGF0aXZvIGFsIHNlY3RvciB2aXNpYmxlXG4gICAgICB4SW5uZXJQZXJjZW50OiBfLnJvdW5kKChsZWZ0UG9zaXRpb24gLyAodGhpcy50YWJsZVBvc2l0aW9ucy5zY3JvbGxXaWR0aCAtIG5hdldpZHRoKSkgKiAxMDAsIDIpLCAgIC8vIHRvcCBlbiBwb3JjZW50YWplLCByZWxhdGl2byBhbCBzZWN0b3IgdmlzaWJsZVxuXG4gICAgICAvKlxuICAgICAgICB2aXNpYmxlV2lkdGgsXG4gICAgICAgIHZpc2libGVIZWlnaHQsXG4gICAgICAgIG5hdldpZHRoLFxuICAgICAgICBfcmVhbCAgICA6IHtcbiAgICAgICAgICAgIHRvcE9mZnNldCAgOiBwYWRkaW5nVG9wICsgcGFyc2VJbnQocmVjdFRhYmxlLnRvcCksXG4gICAgICAgICAgICBsZWZ0T2Zmc2V0IDogcGFkZGluZ0xlZnQgKyBwYXJzZUludChyZWN0VGFibGUubGVmdCksXG4gICAgICAgICAgICBsZWZ0ICAgICAgIDogbGVmdFBvc2l0aW9uLFxuICAgICAgICAgICAgdG9wICAgICAgICA6IHRvcFBvc2l0aW9uXG4gICAgICAgIH1cbiAgICAgICAgKi9cbiAgICB9XG4gICAgLy9jb25zb2xlLnRhYmxlKHBvc2l0aW9uKTtcbiAgICAvL2NvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHBvc2l0aW9uKSk7XG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9LFxuXG5cbiAgZXZlbnRUb1Bvc2l0aW9uTmF2TGVmdChjb25maWcsIGV2LCBlbGVtKSB7XG4gICAgbGV0IHRhcmdldCA9IGVsZW0gfHwgZXYuY3VycmVudFRhcmdldDtcbiAgICBsZXQgcmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgbGV0IHJlY3RQYXJlbnQgPSBlbGVtLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgbGV0IGl0ZW1IZWlnaHQgPSBwYXJzZUZsb2F0KHRoaXMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0taXRlbS1oZWlnaHRcIikpO1xuICAgIGxldCBoZWFkZXJIZWlnaHQgPSBwYXJzZUZsb2F0KHRoaXMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0taGVhZGVyLWhlaWdodFwiKSk7XG5cbiAgICBsZXQgcGFkZGluZ1RvcCA9IHBhcnNlSW50KHRhcmdldC5zdHlsZS5wYWRkaW5nVG9wIHx8IDApO1xuICAgIGxldCB0b3BQb3NpdGlvbiA9IGV2LmNsaWVudFkgLSBwYWRkaW5nVG9wIC0gcGFyc2VJbnQocmVjdC50b3ApO1xuICAgIHRvcFBvc2l0aW9uID0gdG9wUG9zaXRpb24gPj0gMCA/IHRvcFBvc2l0aW9uIDogMDtcbiAgICBsZXQgdG9wUm91bmRlZCA9IHRvcFBvc2l0aW9uIC0gTWF0aC5hYnModG9wUG9zaXRpb24gJSBpdGVtSGVpZ2h0KTtcbiAgICBsZXQgdG9wQ2xpZW50ID0gdG9wUG9zaXRpb24gLSBlbGVtLnBhcmVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIGxldCBwb3NpdGlvbiA9IHtcbiAgICAgIHRvcENsaWVudCwgLy8gdG9wIGVuIHBpeGVsZXMsIHJlbGF0aXZvIGFsIHNlY3RvciB2aXNpYmxlXG4gICAgICB0b3A6IHRvcFJvdW5kZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG9wIGVuIHBpeGVsZXMsIHJlbGF0aXZvIGFsIGVsZW1lbnRvXG4gICAgICB5OiB0b3BSb3VuZGVkIC8gaXRlbUhlaWdodCwgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvcCBlbiBwb3NpY2lvbiBkZSBpdGVtc1xuICAgICAgeVBlcmNlbnQ6IF8ucm91bmQoKHRvcENsaWVudCAvIChyZWN0UGFyZW50LmhlaWdodCAtIGhlYWRlckhlaWdodCkpICogMTAwLCAyKSwgICAvLyB0b3AgZW4gcG9yY2VudGFqZSwgcmVsYXRpdm8gYWwgc2VjdG9yIHZpc2libGVcbiAgICB9XG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9LFxuXG5cblxuXG4gIGdldFBvc2l0aW9uQnlJdGVtRGF0ZShjb25maWcsIGl0ZW0sIGRhdGUpIHtcblxuICAgIGxldCBoID0gcGFyc2VGbG9hdCh0aGlzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpKTtcbiAgICBsZXQgdyA9IHBhcnNlRmxvYXQodGhpcy5nZXRDU1NWYXJpYWJsZShjb25maWcsIFwiLS1kYXktd2lkdGhcIikpO1xuICAgIGxldCB5ID0gdGhpcy5nZXRQb3NpdGlvbkJ5SXRlbShjb25maWcsIGl0ZW0pO1xuICAgIGxldCB4ID0gZGF0ZVV0aWxzLmRpZmZEYXlzKGNvbmZpZy50aW1lbGluZS5zdGFydCwgZGF0ZSk7XG4gICAgbGV0IGxlZnQgPSB4ICogdztcbiAgICBsZXQgdG9wID0geSAqIGg7XG5cbiAgICBsZXQgcG9zaXRpb24gPSB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgeCxcbiAgICAgIHlcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH0sXG5cblxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHByb21lZGlvIGRlIGRhdG9zLCBkZSB1bmEgbGlzdGEgZGUgZGF0b3NcbiAgICogZW50cmUgdW5hIGZlY2hhIHkgbG9zIGRpYXMgaW5kaWNhZG9zLCBoYWNpYSBlbCBwYXNhZG9cbiAgICpcbiAgICogc2kgY3VlbnRhIDAsIGRldnVlbHZlIG51bGxcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBEYXRvcyBwYXJhIGJ1c2NhclxuICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBmZWNoYSBkZSBidXNxdWVkYVxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IGRheXMgLSBkaWZlcmVuY2lhIGRlIGRpYXNcbiAgICogQHJldHVybiB7RmxvYXR9IHByb21lZGlvIGRlIHZhbG9yZXNcbiAgICovXG4gIGdldEF2ZXJhZ2UoZGF0YSwgZGF0ZSwgZGF5cykge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBsZXQgZGF0YVNvcnRlZCA9IGRhdGEuc29ydCgoYSwgYikgPT4gYi51bml4IC0gYS51bml4KTtcbiAgICBsZXQgZnJvbSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIGxldCB0byA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIGZyb20uc2V0RGF0ZShmcm9tLmdldERhdGUoKSAtIGRheXMpO1xuXG4gICAgZGF0YVNvcnRlZC5mb3JFYWNoKGQgPT4ge1xuICAgICAgbGV0IGREYXRlID0gbmV3IERhdGUoZC5kYXRlKTtcbiAgICAgIGlmIChmcm9tIDwgZERhdGUgJiYgZERhdGUgPCB0bykge1xuICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUZsb2F0KGQudmFsdWUpO1xuICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSA+IDApIHtcbiAgICAgICAgICB0b3RhbCArPSB2YWx1ZTtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZyb20uc2V0RGF0ZShmcm9tLmdldERhdGUoKSAtIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucm91bmQoY291bnQgPiAwID8gdG90YWwgLyBjb3VudCA6IDAsIDIpO1xuICB9LFxuXG5cblxuXG4gIC8qKlxuICAgKiBNZXNlcyBwb3IgcG9zaWNpb24sIGVuIGVzcGHDsW9sXG4gICAqXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gcG9zIC0gUG9zaWNpb24gZGUgbWVzXG4gICAqIEByZXR1cm4ge1N0cmluZ30gTm9tYnJlIGRlIG1lc1xuICAgKi9cbiAgZ2V0TW9udGhCeVBvc2l0aW9uKHBvcykge1xuICAgIGxldCBtb250aHMgPSBbXG4gICAgICAnRW5lcm8nLFxuICAgICAgJ0ZlYnJlcm8nLFxuICAgICAgJ01hcnpvJyxcbiAgICAgICdBYnJpbCcsXG4gICAgICAnTWF5bycsXG4gICAgICAnSnVuaW8nLFxuICAgICAgJ0p1bGlvJyxcbiAgICAgICdBZ29zdG8nLFxuICAgICAgJ1NlcHRpZW1icmUnLFxuICAgICAgJ09jdHVicmUnLFxuICAgICAgJ05vdmllbWJyZScsXG4gICAgICAnRGljaWVtYnJlJ107XG4gICAgcmV0dXJuIG1vbnRoc1twb3NdO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWRvbmRlYSBudW1lcm9zXG4gICAqIEBwYXJhbSB7RmxvYXR9IG51bSAtIG51bWVybyBkZWNpbWFsIHBhcmEgcmVkb25kZWFyXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gIGRlY2ltYWwgLSBjYW50aWRhZCBkZSBkZWNpbWFsZXMgcGFyYSByZWRvbmRlYXJcbiAgICogQHJldHVybiB7RmxvYXR9IE51bWVybyByZWRvbmRlYWRvXG4gICAqL1xuICByb3VuZChudW0sIGRlY2ltYWwgPSAyKSB7XG4gICAgLy9sZXQgYmFzZTEwID0gMTAgKiBkZWNpbWFsO1xuICAgIC8vcmV0dXJuIGJhc2UxMCA/IE1hdGgucm91bmQobnVtICogYmFzZTEwKSAvIGJhc2UxMCA6IE1hdGgucm91bmQobnVtKTtcbiAgICByZXR1cm4gXy5yb3VuZChudW0sIGRlY2ltYWwpO1xuICB9LFxuXG5cbiAgLyoqXG4gICAqIEVkaXRhIHZhcmlhYmxlIENTUyBkZXNkZSBSb290XG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YXJOYW1lIC0gbm9tYnJlIGRlIHZhcmlhYmxlIENTU1xuICAgKiBAcGFyYW0ge0FueX0gdmFsdWUgLSB2YWxvciBhIGFzaWduYXIgYSB2YXJpYWJsZSBDU1NcbiAgICovXG5cbiAgc2V0Q1NTVmFyaWFibGUoY29uZmlnLCB2YXJOYW1lLCB2YWx1ZSkge1xuICAgIGxldCBjb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihjb25maWcuc2VsZWN0b3IpO1xuICAgIGlmIChjb250YWluZXJFbGVtZW50KSB7XG4gICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHZhck5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIE9idGllbmUgdmFsb3IgZGUgdmFyaWFibGUgQ1NTIGRlc2RlIFJvb3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhck5hbWUgLSBub21icmUgZGUgdmFyaWFibGUgQ1NTXG4gICAqIEByZXR1cm4ge0Zsb2F0fSBOdW1lcm8gcmVkb25kZWFkb1xuICAgKi9cblxuICBnZXRDU1NWYXJpYWJsZShjb25maWcsIHZhck5hbWUpIHtcbiAgICBsZXQgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY29uZmlnLnNlbGVjdG9yKTtcbiAgICByZXR1cm4gY29udGFpbmVyRWxlbWVudCA/IGdldENvbXB1dGVkU3R5bGUoY29udGFpbmVyRWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSh2YXJOYW1lKSA6IG51bGw7XG4gIH0sXG5cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgbGEgcGFudGFsbGEgdGllbmUgdW4gdGFtYcOxbyBtb2JpbGVcbiAgICogbW9kaWZpY2EgdGhpcy5pc01vYmlsZVxuICAgKiBicmVha3BvaW50IDk2MGVcbiAgICogXG4gICAqIEByZXR1cm4geyBCb29sZWFuIH0gLSBzaSBlbCB0YW1hw7FvIGRlIHBhbnRhbGxhIGVzIG1lbm9yIGFsIGJyZWFrcG9pbnRcbiAgICovXG4gIGNoZWNrSXNNb2JpbGUoKSB7XG4gICAgbGV0IGJyZWFrUG9pbnQgPSA5NjA7XG4gICAgcmV0dXJuIEJvb2xlYW4od2luZG93Lm1hdGNoTWVkaWEoXG4gICAgICBcIihtYXgtd2lkdGg6IFwiICsgKGJyZWFrUG9pbnQgLSAxKSArIFwicHgpXCJcbiAgICApLm1hdGNoZXMpO1xuICB9LFxuXG5cbiAgZ2V0VGFibGVEaW1lbnNpb25zKGNvbmZpZykge1xuICAgIGxldCBoID0gcGFyc2VGbG9hdCh0aGlzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpKTtcbiAgICBsZXQgdyA9IHBhcnNlRmxvYXQodGhpcy5nZXRDU1NWYXJpYWJsZShjb25maWcsIFwiLS1kYXktd2lkdGhcIikpO1xuICAgIGxldCBzdGFydCA9IG5ldyBEYXRlKGNvbmZpZy50aW1lbGluZS5zdGFydCk7XG4gICAgbGV0IGVuZCA9IG5ldyBEYXRlKGNvbmZpZy50aW1lbGluZS5lbmQpO1xuICAgIGxldCByb3dzID0gMDtcblxuICAgIGVuZC5zZXRUaW1lKGVuZC5nZXRUaW1lKCkgKyBkYXRlVXRpbHMuZGF5SW5NaWxsaXNlY29uZHMpOy8vIGFkZCAyNCBob3Vyc1xuXG4gICAgbGV0IGRpZmZfdGltZSA9IGVuZC5nZXRUaW1lKCkgLSBzdGFydC5nZXRUaW1lKCk7XG4gICAgbGV0IGRheXMgPSBkaWZmX3RpbWUgLyBkYXRlVXRpbHMuZGF5SW5NaWxsaXNlY29uZHM7XG5cbiAgICBjb25maWcuZGF0YS5mb3JFYWNoKGQgPT4ge1xuICAgICAgaWYgKGQuaXNIaWRkZW4pIHJldHVybjtcbiAgICAgIHJvd3MrKztcbiAgICAgIGlmIChkLmNoaWxkcmVuICYmICFkLmlzQ2xvc2VkKSB7XG4gICAgICAgIHJvd3MgKz0gZC5jaGlsZHJlbi5maWx0ZXIoYyA9PiAhYy5pc0hpZGRlbikubGVuZ3RoO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGhlaWdodCA9IHJvd3MgKiBoO1xuICAgIGxldCB3aWR0aCA9IGRheXMgKiB3O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodCxcbiAgICAgIHdpZHRoLFxuICAgICAgZGF5V2lkdGg6IHcsXG4gICAgICBpdGVtSGVpZ2h0OiBoXG4gICAgfVxuXG4gIH0sXG5cbiAgLy9odHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84MDI3NDIzL2hvdy10by1jaGVjay1pZi1hLXN0cmluZy1pcy1hLXZhbGlkLWhleC1jb2xvci1yZXByZXNlbnRhdGlvblxuICBpc0hleENvbG9yKHN0cikge1xuICAgIGxldCByZWcgPSAvXiMoWzAtOWEtZl17M30pezEsMn0kL2k7XG4gICAgcmV0dXJuIHJlZy50ZXN0KHN0cilcbiAgfSxcblxuICB0b0NhcGl0YWxpemUoc3RyKSB7XG4gICAgcmV0dXJuIChcIiBcIiArIHN0cikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtekEtWjAtOV0rKC4pL2csIChtLCBjaHIpID0+IGNoci50b1VwcGVyQ2FzZSgpKTtcbiAgfSxcblxuICBmb3JtYXROdW1iZXIobnVtKSB7XG4gICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdChcImVzLUNMXCIpLmZvcm1hdChudW0pLnJlcGxhY2UoXCIuXCIsIFwiIFwiKTtcbiAgfSxcblxuXG4gIC8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzUyMjgwNTIvZGVib3VuY2UtZnVuY3Rpb24taW1wbGVtZW50ZWQtd2l0aC1wcm9taXNlc1xuICBkZWJvdW5jZShmLCBpbnRlcnZhbCkge1xuICAgIGxldCB0aW1lciA9IG51bGw7XG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKGYoLi4uYXJncykpLCBpbnRlcnZhbCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9LFxuXG4gIC8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjcwNzgyODUvc2ltcGxlLXRocm90dGxlLWluLWphdmFzY3JpcHQvMjcwNzg0MDEjMjcwNzg0MDFcbiAgdGhyb3R0bGUoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgIHZhciBjb250ZXh0LCBhcmdzLCByZXN1bHQ7XG4gICAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gICAgdmFyIGxhdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IERhdGUubm93KCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChub3cgLSBwcmV2aW91cyk7XG4gICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgcmVtYWluaW5nID4gd2FpdCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG5cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekJBO0FBMkJBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBTEE7QUFNQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBdGlCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/util/utils.js\n");
|
|
270
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util_dateUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/dateUtils */ \"./src/util/dateUtils.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n tablePositions: {\n scrollLeft: 0,\n scrollTop: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n boundingClientTable: null,\n boundingClientContainer: null,\n containerWidth: 0,\n containerHeight: 0,\n navLeftWidth: 0,\n headerHeight: 0,\n dayWidth: 0,\n itemHeight: 0\n },\n\n /**\n * Obtiene valor de un objeto segun su ruta\n * la ruta usa formato separada por punto\n * compatible con arrays\n *\n * Si no se encuentra, retorna null\n *\n * @param {Object} obj - objeto donde se busca el valor\n * @param {String} [path=''] - ruta del valor\n * @return {*} Valor encontrado\n */\n getVarByPath(obj = null, path = '', defaultReturn = null) {\n let paths = path.split('.');\n let current = obj || {};\n\n for (let i = 0; i < paths.length; ++i) {\n const pathSegment = paths[i]; // Verificar si el segmento de ruta contiene una referencia a un array\n\n if (pathSegment.includes('[') && pathSegment.includes(']')) {\n const arrName = pathSegment.split('[')[0];\n const arrIndex = parseInt(pathSegment.split('[')[1].replace(']', ''));\n\n if (current[arrName] === undefined || !Array.isArray(current[arrName])) {\n return defaultReturn;\n } else {\n current = current[arrName][arrIndex];\n }\n } else {\n // Si no es un array, trata la ruta como una propiedad de objeto normal\n if (current[pathSegment] === undefined) {\n return defaultReturn;\n } else {\n current = current[pathSegment];\n }\n }\n }\n\n if (current === undefined) return defaultReturn;\n return current;\n },\n\n /**\n * Obtiene posicion de elemento de un array segun date e item\n * Usada para obtener posicion del dia seleccionado\n *\n * la lista de dias seleccionados en list contienen:\n * {\n * date: Date,\n * item: {\n * id: Integer, \n * }\n * },\n *\n * Si no lo encuentra devuelve -1;\n *\n * @param {Array} list - Arreglo de dias seleccionados\n * @param {Object} props - propiedades de dia seleccionado\n * @param {Date} props.date - fecha para comparar posicion horizontal\n * @param {Object} props.item - item de sidebar para comparar posicion vertical\n * @return {[TODO:type]} [TODO:description]\n */\n indexSelectedDay(list, props) {\n let index = -1;\n list.forEach((l, i) => {\n if (l.date == props.date && l.item.id == props.item.id) {\n index = i;\n }\n });\n return index;\n },\n\n /**\n * Obtiene posicion vertical del item segun los datos\n * mostrados en la planilla\n *\n * si el arbol de un item padre no esta desplegado, no lo considera\n *\n * si no lo encuentra, devuelve -1\n *\n * TODO dar posibilidad de position para parents\n *\n * @param {Array} data - Arreglo de datos, con formato capibara\n * @param {item} item - Item a buscar en Array\n * @return {Integer} Posicion, default -1\n */\n getPositionByItem(config, item, typeNode = \"child\") {\n let position = -1;\n let finalPosition = -1;\n config.data.forEach(d => {\n if (d.isHidden) return;\n position++;\n\n if (d.id == item.id && typeNode == \"parent\") {\n finalPosition = position;\n }\n\n d.children.forEach(c => {\n if (c.isHidden) return;\n\n if (!d.isClosed) {\n position++;\n\n if (typeNode == \"child\" && c.id == item.id) {\n finalPosition = position;\n }\n }\n });\n });\n return finalPosition;\n },\n\n /**\n * Obtiene item que corresponda a la posicion de mouse\n * usado en eventos click\n *\n * si el arbol de un item padre no esta desplegado, no lo considera\n *\n * si no lo encuentra, devuelve null;\n *\n * @param {Object} config - Capibara config\n * @param {Object} evt - Evento mouse click\n * @param {Object} $table - Elemento de dom $table de planilla\n * @return {Object} Item encontrado\n */\n getItemByEvent(config, evt, $table) {\n let item = null;\n let actualPosition = 0;\n let pos = this.eventToPosition(config, evt, $table);\n let position = pos.y;\n config.data.forEach(d => {\n if (d.isHidden) return;\n\n if (actualPosition == position) {\n item = d;\n }\n\n actualPosition++;\n\n if (!d.isClosed) {\n d.children.forEach(c => {\n if (c.isHidden) return;\n\n if (actualPosition == position) {\n item = c;\n }\n\n actualPosition++;\n });\n }\n });\n return item;\n },\n\n /**\n * Obtiene fecha por posicion de mouse\n * usa evento click en $table\n *\n * @param {Object} config - Configuracion capibara\n * @param {Object} evt - Evento mouse click\n * @param {Object} $table - Elemento de dom $table de planilla\n * @return {String} Fecha formateada correspondiente\n */\n getDayByEvent(config, evt, $table) {\n let pos = this.eventToPosition(config, evt, $table);\n let day = _util_dateUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].addDaysString(config.timeline.start, pos.x);\n return day;\n },\n\n /**\n * Obtiene item de config.data capibara, usando ID\n *\n * @param {Object} data - Configuracion Capibara\n * @param {Integer} id - Id a buscar\n * @param {String} [type] - tipo de item a buscar en config.data\n * @param {Boolean} [withParent] - Si se devuelve solo el item o con el parent\n * @return {Object} item o {item, parent}\n */\n getItemById(config, id, typeNode = \"child\", withParent = false) {\n let item = null;\n let parent = null;\n config.data.forEach(d => {\n if (d.id == id && typeNode == \"parent\") {\n item = d;\n }\n\n d.children.forEach(c => {\n if (c.id == id && typeNode == \"child\") {\n item = c;\n parent = d;\n }\n });\n });\n\n if (withParent) {\n return {\n item,\n parent\n };\n }\n\n return item;\n },\n\n /**\n * Obtiene posicion de mouse segun evento\n * con respecto a la planilla\n * left : posicion desde izquierda en pixeles, en multiplos del ancho del dia,\n * top : posicion desde arriba en pixeles, como multiplo del alto del item,\n * x : posicion desde izquierda, en orden numerico,\n * y : posicion desde arriba, en orden numerico,\n * _real : {\n * topOffset : differencia entre posicion izquierda de pantalla y de table,\n * leftOffset : differencia entre posicion superior de pantalla y de table,\n * left : posicion en pixeles,\n * top : posicion en pixeles\n * }\n *\n * @param {Object} config - configuracion capibara\n * @param {Object} ev - evento mouse\n * @param {Object} elem - Elemento dom Target, para usar en calculos\n * @return {Object} objeto con posiciones\n */\n eventToPosition(config, ev, $table) {\n //console.log(\"eventToPosition\");\n let $container = $table.parentElement;\n let rectTable = this.tablePositions.boundingClientTable; //target.getBoundingClientRect();\n\n let rectContainer = this.tablePositions.boundingClientContainer; //target.getBoundingClientRect();\n\n let itemHeight = parseFloat(this.getCSSVariable(config, \"--item-height\"));\n let dayWidth = parseFloat(this.getCSSVariable(config, \"--day-width\"));\n let headerHeight = parseFloat(this.getCSSVariable(config, \"--header-height\"));\n let navWidth = parseFloat(this.getCSSVariable(config, \"--nav-width\")) + parseFloat(this.getCSSVariable(config, \"--ex-nav-width\")) + parseFloat(this.getCSSVariable(config, \"--btn-nav-width\")) + parseFloat(this.getCSSVariable(config, \"--initial-nav-width\"));\n let paddingLeft = parseInt($table.style.paddingLeft || 0); // + parseInt(elem.offsetLeft);\n\n let paddingTop = parseInt($table.style.paddingTop || 0); // + parseInt(elem.offsetTop);\n\n let leftPosition = ev.clientX - paddingLeft - parseInt(rectTable.left);\n leftPosition = leftPosition >= 0 ? leftPosition : 0;\n let topPosition = ev.clientY - paddingTop - parseInt(rectTable.top);\n topPosition = topPosition >= 0 ? topPosition : 0;\n let leftRounded = leftPosition - Math.abs(leftPosition % dayWidth);\n let topRounded = topPosition - Math.abs(topPosition % itemHeight);\n let leftClient = leftPosition - this.tablePositions.scrollLeft;\n let topClient = topPosition - this.tablePositions.scrollTop;\n let visibleWidth = rectContainer.width - navWidth;\n let visibleHeight = rectContainer.height - headerHeight;\n let position = {\n leftClient,\n // left en pixeles, relativo al sector visible\n topClient,\n // top en pixeles, relativo al sector visible\n leftPosition,\n // left en pixeles, relativo al elemento\n topPosition,\n // top en pixeles, relativo al elemento\n left: leftRounded,\n // left en pixeles, relativo al elemento, redondeado\n top: topRounded,\n // top en pixeles, relativo al elemento, redondeado\n x: leftRounded / dayWidth,\n // left en posicion en dias\n y: topRounded / itemHeight,\n // top en posicion de items\n yPercent: _.round(topClient / visibleHeight * 100, 2),\n // left en porcentaje, relativo al sector visible\n xPercent: _.round(leftClient / visibleWidth * 100, 2),\n // top en porcentaje, relativo al sector visible\n yInnerPercent: _.round(topPosition / (this.tablePositions.scrollHeight - headerHeight) * 100, 2),\n // left en porcentaje, relativo al sector visible\n xInnerPercent: _.round(leftPosition / (this.tablePositions.scrollWidth - navWidth) * 100, 2) // top en porcentaje, relativo al sector visible\n\n /*\n visibleWidth,\n visibleHeight,\n navWidth,\n _real : {\n topOffset : paddingTop + parseInt(rectTable.top),\n leftOffset : paddingLeft + parseInt(rectTable.left),\n left : leftPosition,\n top : topPosition\n }\n */\n\n }; //console.table(position);\n //console.log(JSON.stringify(position));\n\n return position;\n },\n\n eventToPositionNavLeft(config, ev, elem) {\n let target = elem || ev.currentTarget;\n let rect = elem.getBoundingClientRect();\n let rectParent = elem.parentElement.getBoundingClientRect();\n let itemHeight = parseFloat(this.getCSSVariable(config, \"--item-height\"));\n let headerHeight = parseFloat(this.getCSSVariable(config, \"--header-height\"));\n let paddingTop = parseInt(target.style.paddingTop || 0);\n let topPosition = ev.clientY - paddingTop - parseInt(rect.top);\n topPosition = topPosition >= 0 ? topPosition : 0;\n let topRounded = topPosition - Math.abs(topPosition % itemHeight);\n let topClient = topPosition - elem.parentElement.scrollTop;\n let position = {\n topClient,\n // top en pixeles, relativo al sector visible\n top: topRounded,\n // top en pixeles, relativo al elemento\n y: topRounded / itemHeight,\n // top en posicion de items\n yPercent: _.round(topClient / (rectParent.height - headerHeight) * 100, 2) // top en porcentaje, relativo al sector visible\n\n };\n return position;\n },\n\n getPositionByItemDate(config, item, date) {\n let h = parseFloat(this.getCSSVariable(config, \"--item-height\"));\n let w = parseFloat(this.getCSSVariable(config, \"--day-width\"));\n let y = this.getPositionByItem(config, item);\n let x = _util_dateUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].diffDays(config.timeline.start, date);\n let left = x * w;\n let top = y * h;\n let position = {\n left,\n top,\n x,\n y\n };\n return position;\n },\n\n /**\n * Obtiene promedio de datos, de una lista de datos\n * entre una fecha y los dias indicados, hacia el pasado\n *\n * si cuenta 0, devuelve null\n *\n * @param {Object} data - Datos para buscar\n * @param {Date} date - fecha de busqueda\n * @param {Integer} days - diferencia de dias\n * @return {Float} promedio de valores\n */\n getAverage(data, date, days) {\n let total = 0;\n let count = 0;\n let dataSorted = data.sort((a, b) => b.unix - a.unix);\n let from = new Date(date);\n let to = new Date(date);\n from.setDate(from.getDate() - days);\n dataSorted.forEach(d => {\n let dDate = new Date(d.date);\n\n if (from < dDate && dDate < to) {\n let value = parseFloat(d.value);\n\n if (!isNaN(value) && value > 0) {\n total += value;\n count++;\n } else {\n from.setDate(from.getDate() - 1);\n }\n }\n });\n return this.round(count > 0 ? total / count : 0, 2);\n },\n\n /**\n * Meses por posicion, en español\n *\n * @param {Integer} pos - Posicion de mes\n * @return {String} Nombre de mes\n */\n getMonthByPosition(pos) {\n let months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];\n return months[pos];\n },\n\n /**\n * Redondea numeros\n * @param {Float} num - numero decimal para redondear\n * @param {Integer} decimal - cantidad de decimales para redondear\n * @return {Float} Numero redondeado\n */\n round(num, decimal = 2) {\n //let base10 = 10 * decimal;\n //return base10 ? Math.round(num * base10) / base10 : Math.round(num);\n return _.round(num, decimal);\n },\n\n /**\n * Edita variable CSS desde Root\n * @param {String} varName - nombre de variable CSS\n * @param {Any} value - valor a asignar a variable CSS\n */\n setCSSVariable(config, varName, value) {\n let containerElement = document.querySelector(config.selector);\n\n if (containerElement) {\n containerElement.style.setProperty(varName, value);\n }\n },\n\n /**\n * Obtiene valor de variable CSS desde Root\n * @param {String} varName - nombre de variable CSS\n * @return {Float} Numero redondeado\n */\n getCSSVariable(config, varName) {\n let containerElement = document.querySelector(config.selector);\n return containerElement ? getComputedStyle(containerElement).getPropertyValue(varName) : null;\n },\n\n /**\n * Verifica si la pantalla tiene un tamaño mobile\n * modifica this.isMobile\n * breakpoint 960e\n * \n * @return { Boolean } - si el tamaño de pantalla es menor al breakpoint\n */\n checkIsMobile() {\n let breakPoint = 960;\n return Boolean(window.matchMedia(\"(max-width: \" + (breakPoint - 1) + \"px)\").matches);\n },\n\n getTableDimensions(config) {\n let h = parseFloat(this.getCSSVariable(config, \"--item-height\"));\n let w = parseFloat(this.getCSSVariable(config, \"--day-width\"));\n let start = new Date(config.timeline.start);\n let end = new Date(config.timeline.end);\n let rows = 0;\n end.setTime(end.getTime() + _util_dateUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dayInMilliseconds); // add 24 hours\n\n let diff_time = end.getTime() - start.getTime();\n let days = diff_time / _util_dateUtils__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dayInMilliseconds;\n config.data.forEach(d => {\n if (d.isHidden) return;\n rows++;\n\n if (d.children && !d.isClosed) {\n rows += d.children.filter(c => !c.isHidden).length;\n }\n });\n let height = rows * h;\n let width = days * w;\n return {\n height,\n width,\n dayWidth: w,\n itemHeight: h\n };\n },\n\n //https://stackoverflow.com/questions/8027423/how-to-check-if-a-string-is-a-valid-hex-color-representation\n isHexColor(str) {\n let reg = /^#([0-9a-f]{3}){1,2}$/i;\n return reg.test(str);\n },\n\n toCapitalize(str) {\n return (\" \" + str).toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (m, chr) => chr.toUpperCase());\n },\n\n formatNumber(num) {\n return new Intl.NumberFormat(\"es-CL\").format(num).replace(\".\", \" \");\n },\n\n //https://stackoverflow.com/questions/35228052/debounce-function-implemented-with-promises\n debounce(f, interval) {\n let timer = null;\n return (...args) => {\n clearTimeout(timer);\n return new Promise(resolve => {\n timer = setTimeout(() => resolve(f(...args)), interval);\n });\n };\n },\n\n //https://stackoverflow.com/questions/27078285/simple-throttle-in-javascript/27078401#27078401\n throttle(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n\n var later = function () {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n return function () {\n var now = Date.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n }\n\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvdXRpbC91dGlscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0NhcGliYXJhLy4vc3JjL3V0aWwvdXRpbHMuanM/OGUxNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGF0ZVV0aWxzIGZyb20gJy4uL3V0aWwvZGF0ZVV0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICB0YWJsZVBvc2l0aW9uczoge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwLFxuICAgIHNjcm9sbFdpZHRoOiAwLFxuICAgIHNjcm9sbEhlaWdodDogMCxcbiAgICBib3VuZGluZ0NsaWVudFRhYmxlOiBudWxsLFxuICAgIGJvdW5kaW5nQ2xpZW50Q29udGFpbmVyOiBudWxsLFxuXG4gICAgY29udGFpbmVyV2lkdGg6IDAsXG4gICAgY29udGFpbmVySGVpZ2h0OiAwLFxuICAgIG5hdkxlZnRXaWR0aDogMCxcbiAgICBoZWFkZXJIZWlnaHQ6IDAsXG4gICAgZGF5V2lkdGg6IDAsXG4gICAgaXRlbUhlaWdodDogMFxuICB9LFxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHZhbG9yIGRlIHVuIG9iamV0byBzZWd1biBzdSBydXRhXG4gICAqIGxhIHJ1dGEgdXNhIGZvcm1hdG8gc2VwYXJhZGEgcG9yIHB1bnRvXG4gICAqIGNvbXBhdGlibGUgY29uIGFycmF5c1xuICAgKlxuICAgKiBTaSBubyBzZSBlbmN1ZW50cmEsIHJldG9ybmEgbnVsbFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gb2JqZXRvIGRvbmRlIHNlIGJ1c2NhIGVsIHZhbG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbcGF0aD0nJ10gLSBydXRhIGRlbCB2YWxvclxuICAgKiBAcmV0dXJuIHsqfSBWYWxvciBlbmNvbnRyYWRvXG4gICAqL1xuXG4gIGdldFZhckJ5UGF0aChvYmogPSBudWxsLCBwYXRoID0gJycsIGRlZmF1bHRSZXR1cm4gPSBudWxsKSB7XG4gICAgbGV0IHBhdGhzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gb2JqIHx8IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgcGF0aFNlZ21lbnQgPSBwYXRoc1tpXTtcblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIHNlZ21lbnRvIGRlIHJ1dGEgY29udGllbmUgdW5hIHJlZmVyZW5jaWEgYSB1biBhcnJheVxuICAgICAgaWYgKHBhdGhTZWdtZW50LmluY2x1ZGVzKCdbJykgJiYgcGF0aFNlZ21lbnQuaW5jbHVkZXMoJ10nKSkge1xuICAgICAgICBjb25zdCBhcnJOYW1lID0gcGF0aFNlZ21lbnQuc3BsaXQoJ1snKVswXTtcbiAgICAgICAgY29uc3QgYXJySW5kZXggPSBwYXJzZUludChwYXRoU2VnbWVudC5zcGxpdCgnWycpWzFdLnJlcGxhY2UoJ10nLCAnJykpO1xuXG4gICAgICAgIGlmIChjdXJyZW50W2Fyck5hbWVdID09PSB1bmRlZmluZWQgfHwgIUFycmF5LmlzQXJyYXkoY3VycmVudFthcnJOYW1lXSkpIHtcbiAgICAgICAgICByZXR1cm4gZGVmYXVsdFJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudFthcnJOYW1lXVthcnJJbmRleF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNpIG5vIGVzIHVuIGFycmF5LCB0cmF0YSBsYSBydXRhIGNvbW8gdW5hIHByb3BpZWRhZCBkZSBvYmpldG8gbm9ybWFsXG4gICAgICAgIGlmIChjdXJyZW50W3BhdGhTZWdtZW50XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRSZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGF0aFNlZ21lbnRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRSZXR1cm47XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH0sXG5cblxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHBvc2ljaW9uIGRlIGVsZW1lbnRvIGRlIHVuIGFycmF5IHNlZ3VuIGRhdGUgZSBpdGVtXG4gICAqIFVzYWRhIHBhcmEgb2J0ZW5lciBwb3NpY2lvbiBkZWwgZGlhIHNlbGVjY2lvbmFkb1xuICAgKlxuICAgKiBsYSBsaXN0YSBkZSBkaWFzIHNlbGVjY2lvbmFkb3MgZW4gbGlzdCBjb250aWVuZW46XG4gICAqICAge1xuICAgKiAgICAgZGF0ZTogRGF0ZSxcbiAgICogICAgIGl0ZW06IHtcbiAgICogICAgICAgaWQ6IEludGVnZXIsICAgIFxuICAgKiAgICAgfVxuICAgKiAgIH0sXG4gICAqXG4gICAqIFNpIG5vIGxvIGVuY3VlbnRyYSBkZXZ1ZWx2ZSAtMTtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gbGlzdCAtIEFycmVnbG8gZGUgZGlhcyBzZWxlY2Npb25hZG9zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIHByb3BpZWRhZGVzIGRlIGRpYSBzZWxlY2Npb25hZG9cbiAgICogQHBhcmFtIHtEYXRlfSBwcm9wcy5kYXRlIC0gZmVjaGEgcGFyYSBjb21wYXJhciBwb3NpY2lvbiBob3Jpem9udGFsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcy5pdGVtIC0gaXRlbSBkZSBzaWRlYmFyIHBhcmEgY29tcGFyYXIgcG9zaWNpb24gdmVydGljYWxcbiAgICogQHJldHVybiB7W1RPRE86dHlwZV19IFtUT0RPOmRlc2NyaXB0aW9uXVxuICAgKi9cbiAgaW5kZXhTZWxlY3RlZERheShsaXN0LCBwcm9wcykge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGxpc3QuZm9yRWFjaCgobCwgaSkgPT4ge1xuICAgICAgaWYgKGwuZGF0ZSA9PSBwcm9wcy5kYXRlICYmIGwuaXRlbS5pZCA9PSBwcm9wcy5pdGVtLmlkKSB7XG4gICAgICAgIGluZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBpbmRleDtcbiAgfSxcblxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHBvc2ljaW9uIHZlcnRpY2FsIGRlbCBpdGVtIHNlZ3VuIGxvcyBkYXRvc1xuICAgKiBtb3N0cmFkb3MgZW4gbGEgcGxhbmlsbGFcbiAgICpcbiAgICogc2kgZWwgYXJib2wgZGUgdW4gaXRlbSBwYWRyZSBubyBlc3RhIGRlc3BsZWdhZG8sIG5vIGxvIGNvbnNpZGVyYVxuICAgKlxuICAgKiBzaSBubyBsbyBlbmN1ZW50cmEsIGRldnVlbHZlIC0xXG4gICAqXG4gICAqIFRPRE8gZGFyIHBvc2liaWxpZGFkIGRlIHBvc2l0aW9uIHBhcmEgcGFyZW50c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhIC0gQXJyZWdsbyBkZSBkYXRvcywgY29uIGZvcm1hdG8gY2FwaWJhcmFcbiAgICogQHBhcmFtIHtpdGVtfSBpdGVtIC0gSXRlbSBhIGJ1c2NhciBlbiBBcnJheVxuICAgKiBAcmV0dXJuIHtJbnRlZ2VyfSBQb3NpY2lvbiwgZGVmYXVsdCAtMVxuICAgKi9cbiAgZ2V0UG9zaXRpb25CeUl0ZW0oY29uZmlnLCBpdGVtLCB0eXBlTm9kZSA9IFwiY2hpbGRcIikge1xuICAgIGxldCBwb3NpdGlvbiA9IC0xO1xuICAgIGxldCBmaW5hbFBvc2l0aW9uID0gLTE7XG5cbiAgICBjb25maWcuZGF0YS5mb3JFYWNoKGQgPT4ge1xuICAgICAgaWYgKGQuaXNIaWRkZW4pIHJldHVybjtcbiAgICAgIHBvc2l0aW9uKys7XG4gICAgICBpZiAoZC5pZCA9PSBpdGVtLmlkICYmIHR5cGVOb2RlID09IFwicGFyZW50XCIpIHtcbiAgICAgICAgZmluYWxQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgfVxuICAgICAgZC5jaGlsZHJlbi5mb3JFYWNoKGMgPT4ge1xuICAgICAgICBpZiAoYy5pc0hpZGRlbikgcmV0dXJuO1xuICAgICAgICBpZiAoIWQuaXNDbG9zZWQpIHtcbiAgICAgICAgICBwb3NpdGlvbisrO1xuICAgICAgICAgIGlmICh0eXBlTm9kZSA9PSBcImNoaWxkXCIgJiYgYy5pZCA9PSBpdGVtLmlkKSB7XG4gICAgICAgICAgICBmaW5hbFBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbmFsUG9zaXRpb247XG4gIH0sXG5cblxuICAvKipcbiAgICogT2J0aWVuZSBpdGVtIHF1ZSBjb3JyZXNwb25kYSBhIGxhIHBvc2ljaW9uIGRlIG1vdXNlXG4gICAqIHVzYWRvIGVuIGV2ZW50b3MgY2xpY2tcbiAgICpcbiAgICogc2kgZWwgYXJib2wgZGUgdW4gaXRlbSBwYWRyZSBubyBlc3RhIGRlc3BsZWdhZG8sIG5vIGxvIGNvbnNpZGVyYVxuICAgKlxuICAgKiBzaSBubyBsbyBlbmN1ZW50cmEsIGRldnVlbHZlIG51bGw7XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBDYXBpYmFyYSBjb25maWdcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2dCAtIEV2ZW50byBtb3VzZSBjbGlja1xuICAgKiBAcGFyYW0ge09iamVjdH0gJHRhYmxlIC0gRWxlbWVudG8gZGUgZG9tICR0YWJsZSBkZSBwbGFuaWxsYVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEl0ZW0gZW5jb250cmFkb1xuICAgKi9cbiAgZ2V0SXRlbUJ5RXZlbnQoY29uZmlnLCBldnQsICR0YWJsZSkge1xuICAgIGxldCBpdGVtID0gbnVsbDtcbiAgICBsZXQgYWN0dWFsUG9zaXRpb24gPSAwO1xuICAgIGxldCBwb3MgPSB0aGlzLmV2ZW50VG9Qb3NpdGlvbihjb25maWcsIGV2dCwgJHRhYmxlKTtcbiAgICBsZXQgcG9zaXRpb24gPSBwb3MueTtcbiAgICBjb25maWcuZGF0YS5mb3JFYWNoKGQgPT4ge1xuICAgICAgaWYgKGQuaXNIaWRkZW4pIHJldHVybjtcbiAgICAgIGlmIChhY3R1YWxQb3NpdGlvbiA9PSBwb3NpdGlvbiApIHtcbiAgICAgICAgaXRlbSA9IGQ7XG4gICAgICB9XG4gICAgICBhY3R1YWxQb3NpdGlvbisrO1xuICAgICAgaWYgKCFkLmlzQ2xvc2VkKSB7XG4gICAgICAgIGQuY2hpbGRyZW4uZm9yRWFjaChjID0+IHtcbiAgICAgICAgICBpZiAoYy5pc0hpZGRlbikgcmV0dXJuO1xuICAgICAgICAgIGlmIChhY3R1YWxQb3NpdGlvbiA9PSBwb3NpdGlvbiApIHtcbiAgICAgICAgICAgIGl0ZW0gPSBjO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3R1YWxQb3NpdGlvbisrO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXRlbTtcbiAgfSxcblxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGZlY2hhIHBvciBwb3NpY2lvbiBkZSBtb3VzZVxuICAgKiB1c2EgZXZlbnRvIGNsaWNrIGVuICR0YWJsZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gQ29uZmlndXJhY2lvbiBjYXBpYmFyYVxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZ0IC0gRXZlbnRvIG1vdXNlIGNsaWNrXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAkdGFibGUgLSBFbGVtZW50byBkZSBkb20gJHRhYmxlIGRlIHBsYW5pbGxhXG4gICAqIEByZXR1cm4ge1N0cmluZ30gRmVjaGEgZm9ybWF0ZWFkYSBjb3JyZXNwb25kaWVudGVcbiAgICovXG4gIGdldERheUJ5RXZlbnQoY29uZmlnLCBldnQsICR0YWJsZSkge1xuICAgIGxldCBwb3MgPSB0aGlzLmV2ZW50VG9Qb3NpdGlvbihjb25maWcsIGV2dCwgJHRhYmxlKTtcbiAgICBsZXQgZGF5ID0gZGF0ZVV0aWxzLmFkZERheXNTdHJpbmcoY29uZmlnLnRpbWVsaW5lLnN0YXJ0LCBwb3MueCk7XG4gICAgcmV0dXJuIGRheTtcbiAgfSxcblxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGl0ZW0gZGUgY29uZmlnLmRhdGEgY2FwaWJhcmEsIHVzYW5kbyBJRFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIENvbmZpZ3VyYWNpb24gQ2FwaWJhcmFcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBpZCAtIElkIGEgYnVzY2FyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbdHlwZV0gLSB0aXBvIGRlIGl0ZW0gYSBidXNjYXIgZW4gY29uZmlnLmRhdGFcbiAgICogQHBhcmFtIHtCb29sZWFufSBbd2l0aFBhcmVudF0gLSBTaSBzZSBkZXZ1ZWx2ZSBzb2xvIGVsIGl0ZW0gbyBjb24gZWwgcGFyZW50XG4gICAqIEByZXR1cm4ge09iamVjdH0gaXRlbSBvIHtpdGVtLCBwYXJlbnR9XG4gICAqL1xuICBnZXRJdGVtQnlJZChjb25maWcsIGlkLCB0eXBlTm9kZSA9IFwiY2hpbGRcIiwgd2l0aFBhcmVudCA9IGZhbHNlKSB7XG4gICAgbGV0IGl0ZW0gPSBudWxsO1xuICAgIGxldCBwYXJlbnQgPSBudWxsO1xuXG4gICAgY29uZmlnLmRhdGEuZm9yRWFjaChkID0+IHtcbiAgICAgIGlmIChkLmlkID09IGlkICYmIHR5cGVOb2RlID09IFwicGFyZW50XCIpIHtcbiAgICAgICAgaXRlbSA9IGQ7XG4gICAgICB9XG4gICAgICBkLmNoaWxkcmVuLmZvckVhY2goYyA9PiB7XG4gICAgICAgIGlmIChjLmlkID09IGlkICYmIHR5cGVOb2RlID09IFwiY2hpbGRcIikge1xuICAgICAgICAgIGl0ZW0gPSBjO1xuICAgICAgICAgIHBhcmVudCA9IGQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKHdpdGhQYXJlbnQpIHtcbiAgICAgIHJldHVybiB7IGl0ZW0sIHBhcmVudCB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9LFxuXG5cbiAgLyoqXG4gICAqIE9idGllbmUgcG9zaWNpb24gZGUgbW91c2Ugc2VndW4gZXZlbnRvXG4gICAqIGNvbiByZXNwZWN0byBhIGxhIHBsYW5pbGxhXG5cbiAgICogICBsZWZ0IDogcG9zaWNpb24gZGVzZGUgaXpxdWllcmRhIGVuIHBpeGVsZXMsIGVuIG11bHRpcGxvcyBkZWwgYW5jaG8gZGVsIGRpYSxcbiAgICogICB0b3AgIDogcG9zaWNpb24gZGVzZGUgYXJyaWJhIGVuIHBpeGVsZXMsIGNvbW8gbXVsdGlwbG8gZGVsIGFsdG8gZGVsIGl0ZW0sXG4gICAqICAgeCAgICA6IHBvc2ljaW9uIGRlc2RlIGl6cXVpZXJkYSwgZW4gb3JkZW4gbnVtZXJpY28sXG4gICAqICAgeSAgICA6IHBvc2ljaW9uIGRlc2RlIGFycmliYSwgZW4gb3JkZW4gbnVtZXJpY28sXG4gICAqICAgX3JlYWwgOiB7XG4gICAqICAgICB0b3BPZmZzZXQgIDogZGlmZmVyZW5jaWEgZW50cmUgcG9zaWNpb24gaXpxdWllcmRhIGRlIHBhbnRhbGxhIHkgZGUgdGFibGUsXG4gICAqICAgICBsZWZ0T2Zmc2V0IDogZGlmZmVyZW5jaWEgZW50cmUgcG9zaWNpb24gc3VwZXJpb3IgZGUgcGFudGFsbGEgeSBkZSB0YWJsZSxcbiAgICogICAgIGxlZnQgICAgICAgOiBwb3NpY2lvbiBlbiBwaXhlbGVzLFxuICAgKiAgICAgdG9wICAgICAgICA6IHBvc2ljaW9uIGVuIHBpeGVsZXNcbiAgICogICB9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBjb25maWd1cmFjaW9uIGNhcGliYXJhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldiAtIGV2ZW50byBtb3VzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gZWxlbSAtIEVsZW1lbnRvIGRvbSBUYXJnZXQsIHBhcmEgdXNhciBlbiBjYWxjdWxvc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IG9iamV0byBjb24gcG9zaWNpb25lc1xuICAgKi9cbiAgZXZlbnRUb1Bvc2l0aW9uKGNvbmZpZywgZXYsICR0YWJsZSkge1xuICAgIC8vY29uc29sZS5sb2coXCJldmVudFRvUG9zaXRpb25cIik7XG4gICAgbGV0ICRjb250YWluZXIgPSAkdGFibGUucGFyZW50RWxlbWVudDtcbiAgICBsZXQgcmVjdFRhYmxlID0gdGhpcy50YWJsZVBvc2l0aW9ucy5ib3VuZGluZ0NsaWVudFRhYmxlOyAvL3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBsZXQgcmVjdENvbnRhaW5lciA9IHRoaXMudGFibGVQb3NpdGlvbnMuYm91bmRpbmdDbGllbnRDb250YWluZXI7IC8vdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCBpdGVtSGVpZ2h0ID0gcGFyc2VGbG9hdCh0aGlzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpKTtcbiAgICBsZXQgZGF5V2lkdGggPSBwYXJzZUZsb2F0KHRoaXMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0tZGF5LXdpZHRoXCIpKTtcbiAgICBsZXQgaGVhZGVySGVpZ2h0ID0gcGFyc2VGbG9hdCh0aGlzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWhlYWRlci1oZWlnaHRcIikpO1xuICAgIGxldCBuYXZXaWR0aCA9XG4gICAgICBwYXJzZUZsb2F0KHRoaXMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0tbmF2LXdpZHRoXCIpKSArXG4gICAgICBwYXJzZUZsb2F0KHRoaXMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0tZXgtbmF2LXdpZHRoXCIpKSArXG4gICAgICBwYXJzZUZsb2F0KHRoaXMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0tYnRuLW5hdi13aWR0aFwiKSkgK1xuICAgICAgcGFyc2VGbG9hdCh0aGlzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWluaXRpYWwtbmF2LXdpZHRoXCIpKTtcblxuICAgIGxldCBwYWRkaW5nTGVmdCA9IHBhcnNlSW50KCR0YWJsZS5zdHlsZS5wYWRkaW5nTGVmdCB8fCAwKTsgICAgICAgICAgIC8vICArIHBhcnNlSW50KGVsZW0ub2Zmc2V0TGVmdCk7XG4gICAgbGV0IHBhZGRpbmdUb3AgPSBwYXJzZUludCgkdGFibGUuc3R5bGUucGFkZGluZ1RvcCB8fCAwKTsgICAgICAgICAgICAvLyArIHBhcnNlSW50KGVsZW0ub2Zmc2V0VG9wKTtcblxuICAgIGxldCBsZWZ0UG9zaXRpb24gPSBldi5jbGllbnRYIC0gcGFkZGluZ0xlZnQgLSBwYXJzZUludChyZWN0VGFibGUubGVmdCk7XG4gICAgbGVmdFBvc2l0aW9uID0gbGVmdFBvc2l0aW9uID49IDAgPyBsZWZ0UG9zaXRpb24gOiAwO1xuXG4gICAgbGV0IHRvcFBvc2l0aW9uID0gZXYuY2xpZW50WSAtIHBhZGRpbmdUb3AgLSBwYXJzZUludChyZWN0VGFibGUudG9wKTtcbiAgICB0b3BQb3NpdGlvbiA9IHRvcFBvc2l0aW9uID49IDAgPyB0b3BQb3NpdGlvbiA6IDA7XG5cbiAgICBsZXQgbGVmdFJvdW5kZWQgPSBsZWZ0UG9zaXRpb24gLSBNYXRoLmFicyhsZWZ0UG9zaXRpb24gJSBkYXlXaWR0aCk7XG4gICAgbGV0IHRvcFJvdW5kZWQgPSB0b3BQb3NpdGlvbiAtIE1hdGguYWJzKHRvcFBvc2l0aW9uICUgaXRlbUhlaWdodCk7XG5cbiAgICBsZXQgbGVmdENsaWVudCA9IGxlZnRQb3NpdGlvbiAtIHRoaXMudGFibGVQb3NpdGlvbnMuc2Nyb2xsTGVmdDtcbiAgICBsZXQgdG9wQ2xpZW50ID0gdG9wUG9zaXRpb24gLSB0aGlzLnRhYmxlUG9zaXRpb25zLnNjcm9sbFRvcDtcbiAgICBsZXQgdmlzaWJsZVdpZHRoID0gcmVjdENvbnRhaW5lci53aWR0aCAtIG5hdldpZHRoO1xuICAgIGxldCB2aXNpYmxlSGVpZ2h0ID0gcmVjdENvbnRhaW5lci5oZWlnaHQgLSBoZWFkZXJIZWlnaHQ7XG5cbiAgICBsZXQgcG9zaXRpb24gPSB7XG4gICAgICBsZWZ0Q2xpZW50LCAgICAgIC8vIGxlZnQgZW4gcGl4ZWxlcywgcmVsYXRpdm8gYWwgc2VjdG9yIHZpc2libGVcbiAgICAgIHRvcENsaWVudCwgICAgICAgLy8gdG9wIGVuIHBpeGVsZXMsIHJlbGF0aXZvIGFsIHNlY3RvciB2aXNpYmxlXG4gICAgICBsZWZ0UG9zaXRpb24sICAgIC8vIGxlZnQgZW4gcGl4ZWxlcywgcmVsYXRpdm8gYWwgZWxlbWVudG9cbiAgICAgIHRvcFBvc2l0aW9uLCAgICAgLy8gdG9wIGVuIHBpeGVsZXMsIHJlbGF0aXZvIGFsIGVsZW1lbnRvXG4gICAgICBsZWZ0OiBsZWZ0Um91bmRlZCwgICAgICAgICAgICAgIC8vIGxlZnQgZW4gcGl4ZWxlcywgcmVsYXRpdm8gYWwgZWxlbWVudG8sIHJlZG9uZGVhZG9cbiAgICAgIHRvcDogdG9wUm91bmRlZCwgICAgICAgICAgICAgICAvLyB0b3AgZW4gcGl4ZWxlcywgcmVsYXRpdm8gYWwgZWxlbWVudG8sIHJlZG9uZGVhZG9cbiAgICAgIHg6IGxlZnRSb3VuZGVkIC8gZGF5V2lkdGgsICAgLy8gbGVmdCBlbiBwb3NpY2lvbiBlbiBkaWFzXG4gICAgICB5OiB0b3BSb3VuZGVkIC8gaXRlbUhlaWdodCwgIC8vIHRvcCBlbiBwb3NpY2lvbiBkZSBpdGVtc1xuICAgICAgeVBlcmNlbnQ6IF8ucm91bmQoKHRvcENsaWVudCAvIHZpc2libGVIZWlnaHQpICogMTAwLCAyKSwgICAvLyBsZWZ0IGVuIHBvcmNlbnRhamUsIHJlbGF0aXZvIGFsIHNlY3RvciB2aXNpYmxlXG4gICAgICB4UGVyY2VudDogXy5yb3VuZCgobGVmdENsaWVudCAvIHZpc2libGVXaWR0aCkgKiAxMDAsIDIpLCAgIC8vIHRvcCBlbiBwb3JjZW50YWplLCByZWxhdGl2byBhbCBzZWN0b3IgdmlzaWJsZVxuICAgICAgeUlubmVyUGVyY2VudDogXy5yb3VuZCgodG9wUG9zaXRpb24gLyAodGhpcy50YWJsZVBvc2l0aW9ucy5zY3JvbGxIZWlnaHQgLSBoZWFkZXJIZWlnaHQpKSAqIDEwMCwgMiksICAgLy8gbGVmdCBlbiBwb3JjZW50YWplLCByZWxhdGl2byBhbCBzZWN0b3IgdmlzaWJsZVxuICAgICAgeElubmVyUGVyY2VudDogXy5yb3VuZCgobGVmdFBvc2l0aW9uIC8gKHRoaXMudGFibGVQb3NpdGlvbnMuc2Nyb2xsV2lkdGggLSBuYXZXaWR0aCkpICogMTAwLCAyKSwgICAvLyB0b3AgZW4gcG9yY2VudGFqZSwgcmVsYXRpdm8gYWwgc2VjdG9yIHZpc2libGVcblxuICAgICAgLypcbiAgICAgICAgdmlzaWJsZVdpZHRoLFxuICAgICAgICB2aXNpYmxlSGVpZ2h0LFxuICAgICAgICBuYXZXaWR0aCxcbiAgICAgICAgX3JlYWwgICAgOiB7XG4gICAgICAgICAgICB0b3BPZmZzZXQgIDogcGFkZGluZ1RvcCArIHBhcnNlSW50KHJlY3RUYWJsZS50b3ApLFxuICAgICAgICAgICAgbGVmdE9mZnNldCA6IHBhZGRpbmdMZWZ0ICsgcGFyc2VJbnQocmVjdFRhYmxlLmxlZnQpLFxuICAgICAgICAgICAgbGVmdCAgICAgICA6IGxlZnRQb3NpdGlvbixcbiAgICAgICAgICAgIHRvcCAgICAgICAgOiB0b3BQb3NpdGlvblxuICAgICAgICB9XG4gICAgICAgICovXG4gICAgfVxuICAgIC8vY29uc29sZS50YWJsZShwb3NpdGlvbik7XG4gICAgLy9jb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShwb3NpdGlvbikpO1xuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSxcblxuXG4gIGV2ZW50VG9Qb3NpdGlvbk5hdkxlZnQoY29uZmlnLCBldiwgZWxlbSkge1xuICAgIGxldCB0YXJnZXQgPSBlbGVtIHx8IGV2LmN1cnJlbnRUYXJnZXQ7XG4gICAgbGV0IHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCByZWN0UGFyZW50ID0gZWxlbS5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxldCBpdGVtSGVpZ2h0ID0gcGFyc2VGbG9hdCh0aGlzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWl0ZW0taGVpZ2h0XCIpKTtcbiAgICBsZXQgaGVhZGVySGVpZ2h0ID0gcGFyc2VGbG9hdCh0aGlzLmdldENTU1ZhcmlhYmxlKGNvbmZpZywgXCItLWhlYWRlci1oZWlnaHRcIikpO1xuXG4gICAgbGV0IHBhZGRpbmdUb3AgPSBwYXJzZUludCh0YXJnZXQuc3R5bGUucGFkZGluZ1RvcCB8fCAwKTtcbiAgICBsZXQgdG9wUG9zaXRpb24gPSBldi5jbGllbnRZIC0gcGFkZGluZ1RvcCAtIHBhcnNlSW50KHJlY3QudG9wKTtcbiAgICB0b3BQb3NpdGlvbiA9IHRvcFBvc2l0aW9uID49IDAgPyB0b3BQb3NpdGlvbiA6IDA7XG4gICAgbGV0IHRvcFJvdW5kZWQgPSB0b3BQb3NpdGlvbiAtIE1hdGguYWJzKHRvcFBvc2l0aW9uICUgaXRlbUhlaWdodCk7XG4gICAgbGV0IHRvcENsaWVudCA9IHRvcFBvc2l0aW9uIC0gZWxlbS5wYXJlbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICBsZXQgcG9zaXRpb24gPSB7XG4gICAgICB0b3BDbGllbnQsIC8vIHRvcCBlbiBwaXhlbGVzLCByZWxhdGl2byBhbCBzZWN0b3IgdmlzaWJsZVxuICAgICAgdG9wOiB0b3BSb3VuZGVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvcCBlbiBwaXhlbGVzLCByZWxhdGl2byBhbCBlbGVtZW50b1xuICAgICAgeTogdG9wUm91bmRlZCAvIGl0ZW1IZWlnaHQsICAgICAgICAgICAgICAgICAgICAgICAvLyB0b3AgZW4gcG9zaWNpb24gZGUgaXRlbXNcbiAgICAgIHlQZXJjZW50OiBfLnJvdW5kKCh0b3BDbGllbnQgLyAocmVjdFBhcmVudC5oZWlnaHQgLSBoZWFkZXJIZWlnaHQpKSAqIDEwMCwgMiksICAgLy8gdG9wIGVuIHBvcmNlbnRhamUsIHJlbGF0aXZvIGFsIHNlY3RvciB2aXNpYmxlXG4gICAgfVxuICAgIHJldHVybiBwb3NpdGlvbjtcbiAgfSxcblxuXG5cblxuICBnZXRQb3NpdGlvbkJ5SXRlbURhdGUoY29uZmlnLCBpdGVtLCBkYXRlKSB7XG5cbiAgICBsZXQgaCA9IHBhcnNlRmxvYXQodGhpcy5nZXRDU1NWYXJpYWJsZShjb25maWcsIFwiLS1pdGVtLWhlaWdodFwiKSk7XG4gICAgbGV0IHcgPSBwYXJzZUZsb2F0KHRoaXMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0tZGF5LXdpZHRoXCIpKTtcbiAgICBsZXQgeSA9IHRoaXMuZ2V0UG9zaXRpb25CeUl0ZW0oY29uZmlnLCBpdGVtKTtcbiAgICBsZXQgeCA9IGRhdGVVdGlscy5kaWZmRGF5cyhjb25maWcudGltZWxpbmUuc3RhcnQsIGRhdGUpO1xuICAgIGxldCBsZWZ0ID0geCAqIHc7XG4gICAgbGV0IHRvcCA9IHkgKiBoO1xuXG4gICAgbGV0IHBvc2l0aW9uID0ge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHgsXG4gICAgICB5XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9LFxuXG5cblxuICAvKipcbiAgICogT2J0aWVuZSBwcm9tZWRpbyBkZSBkYXRvcywgZGUgdW5hIGxpc3RhIGRlIGRhdG9zXG4gICAqIGVudHJlIHVuYSBmZWNoYSB5IGxvcyBkaWFzIGluZGljYWRvcywgaGFjaWEgZWwgcGFzYWRvXG4gICAqXG4gICAqIHNpIGN1ZW50YSAwLCBkZXZ1ZWx2ZSBudWxsXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gRGF0b3MgcGFyYSBidXNjYXJcbiAgICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gZmVjaGEgZGUgYnVzcXVlZGFcbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBkYXlzIC0gZGlmZXJlbmNpYSBkZSBkaWFzXG4gICAqIEByZXR1cm4ge0Zsb2F0fSBwcm9tZWRpbyBkZSB2YWxvcmVzXG4gICAqL1xuICBnZXRBdmVyYWdlKGRhdGEsIGRhdGUsIGRheXMpIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IGRhdGFTb3J0ZWQgPSBkYXRhLnNvcnQoKGEsIGIpID0+IGIudW5peCAtIGEudW5peCk7XG4gICAgbGV0IGZyb20gPSBuZXcgRGF0ZShkYXRlKTtcbiAgICBsZXQgdG8gPSBuZXcgRGF0ZShkYXRlKTtcbiAgICBmcm9tLnNldERhdGUoZnJvbS5nZXREYXRlKCkgLSBkYXlzKTtcblxuICAgIGRhdGFTb3J0ZWQuZm9yRWFjaChkID0+IHtcbiAgICAgIGxldCBkRGF0ZSA9IG5ldyBEYXRlKGQuZGF0ZSk7XG4gICAgICBpZiAoZnJvbSA8IGREYXRlICYmIGREYXRlIDwgdG8pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gcGFyc2VGbG9hdChkLnZhbHVlKTtcbiAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkgJiYgdmFsdWUgPiAwKSB7XG4gICAgICAgICAgdG90YWwgKz0gdmFsdWU7XG4gICAgICAgICAgY291bnQrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcm9tLnNldERhdGUoZnJvbS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnJvdW5kKGNvdW50ID4gMCA/IHRvdGFsIC8gY291bnQgOiAwLCAyKTtcbiAgfSxcblxuXG5cblxuICAvKipcbiAgICogTWVzZXMgcG9yIHBvc2ljaW9uLCBlbiBlc3Bhw7FvbFxuICAgKlxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IHBvcyAtIFBvc2ljaW9uIGRlIG1lc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9IE5vbWJyZSBkZSBtZXNcbiAgICovXG4gIGdldE1vbnRoQnlQb3NpdGlvbihwb3MpIHtcbiAgICBsZXQgbW9udGhzID0gW1xuICAgICAgJ0VuZXJvJyxcbiAgICAgICdGZWJyZXJvJyxcbiAgICAgICdNYXJ6bycsXG4gICAgICAnQWJyaWwnLFxuICAgICAgJ01heW8nLFxuICAgICAgJ0p1bmlvJyxcbiAgICAgICdKdWxpbycsXG4gICAgICAnQWdvc3RvJyxcbiAgICAgICdTZXB0aWVtYnJlJyxcbiAgICAgICdPY3R1YnJlJyxcbiAgICAgICdOb3ZpZW1icmUnLFxuICAgICAgJ0RpY2llbWJyZSddO1xuICAgIHJldHVybiBtb250aHNbcG9zXTtcbiAgfSxcblxuICAvKipcbiAgICogUmVkb25kZWEgbnVtZXJvc1xuICAgKiBAcGFyYW0ge0Zsb2F0fSBudW0gLSBudW1lcm8gZGVjaW1hbCBwYXJhIHJlZG9uZGVhclxuICAgKiBAcGFyYW0ge0ludGVnZXJ9ICBkZWNpbWFsIC0gY2FudGlkYWQgZGUgZGVjaW1hbGVzIHBhcmEgcmVkb25kZWFyXG4gICAqIEByZXR1cm4ge0Zsb2F0fSBOdW1lcm8gcmVkb25kZWFkb1xuICAgKi9cbiAgcm91bmQobnVtLCBkZWNpbWFsID0gMikge1xuICAgIC8vbGV0IGJhc2UxMCA9IDEwICogZGVjaW1hbDtcbiAgICAvL3JldHVybiBiYXNlMTAgPyBNYXRoLnJvdW5kKG51bSAqIGJhc2UxMCkgLyBiYXNlMTAgOiBNYXRoLnJvdW5kKG51bSk7XG4gICAgcmV0dXJuIF8ucm91bmQobnVtLCBkZWNpbWFsKTtcbiAgfSxcblxuXG4gIC8qKlxuICAgKiBFZGl0YSB2YXJpYWJsZSBDU1MgZGVzZGUgUm9vdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFyTmFtZSAtIG5vbWJyZSBkZSB2YXJpYWJsZSBDU1NcbiAgICogQHBhcmFtIHtBbnl9IHZhbHVlIC0gdmFsb3IgYSBhc2lnbmFyIGEgdmFyaWFibGUgQ1NTXG4gICAqL1xuXG4gIHNldENTU1ZhcmlhYmxlKGNvbmZpZywgdmFyTmFtZSwgdmFsdWUpIHtcbiAgICBsZXQgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY29uZmlnLnNlbGVjdG9yKTtcbiAgICBpZiAoY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgY29udGFpbmVyRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSh2YXJOYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHZhbG9yIGRlIHZhcmlhYmxlIENTUyBkZXNkZSBSb290XG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YXJOYW1lIC0gbm9tYnJlIGRlIHZhcmlhYmxlIENTU1xuICAgKiBAcmV0dXJuIHtGbG9hdH0gTnVtZXJvIHJlZG9uZGVhZG9cbiAgICovXG5cbiAgZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCB2YXJOYW1lKSB7XG4gICAgbGV0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbmZpZy5zZWxlY3Rvcik7XG4gICAgcmV0dXJuIGNvbnRhaW5lckVsZW1lbnQgPyBnZXRDb21wdXRlZFN0eWxlKGNvbnRhaW5lckVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUodmFyTmFtZSkgOiBudWxsO1xuICB9LFxuXG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGxhIHBhbnRhbGxhIHRpZW5lIHVuIHRhbWHDsW8gbW9iaWxlXG4gICAqIG1vZGlmaWNhIHRoaXMuaXNNb2JpbGVcbiAgICogYnJlYWtwb2ludCA5NjBlXG4gICAqIFxuICAgKiBAcmV0dXJuIHsgQm9vbGVhbiB9IC0gc2kgZWwgdGFtYcOxbyBkZSBwYW50YWxsYSBlcyBtZW5vciBhbCBicmVha3BvaW50XG4gICAqL1xuICBjaGVja0lzTW9iaWxlKCkge1xuICAgIGxldCBicmVha1BvaW50ID0gOTYwO1xuICAgIHJldHVybiBCb29sZWFuKHdpbmRvdy5tYXRjaE1lZGlhKFxuICAgICAgXCIobWF4LXdpZHRoOiBcIiArIChicmVha1BvaW50IC0gMSkgKyBcInB4KVwiXG4gICAgKS5tYXRjaGVzKTtcbiAgfSxcblxuXG4gIGdldFRhYmxlRGltZW5zaW9ucyhjb25maWcpIHtcbiAgICBsZXQgaCA9IHBhcnNlRmxvYXQodGhpcy5nZXRDU1NWYXJpYWJsZShjb25maWcsIFwiLS1pdGVtLWhlaWdodFwiKSk7XG4gICAgbGV0IHcgPSBwYXJzZUZsb2F0KHRoaXMuZ2V0Q1NTVmFyaWFibGUoY29uZmlnLCBcIi0tZGF5LXdpZHRoXCIpKTtcbiAgICBsZXQgc3RhcnQgPSBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuc3RhcnQpO1xuICAgIGxldCBlbmQgPSBuZXcgRGF0ZShjb25maWcudGltZWxpbmUuZW5kKTtcbiAgICBsZXQgcm93cyA9IDA7XG5cbiAgICBlbmQuc2V0VGltZShlbmQuZ2V0VGltZSgpICsgZGF0ZVV0aWxzLmRheUluTWlsbGlzZWNvbmRzKTsvLyBhZGQgMjQgaG91cnNcblxuICAgIGxldCBkaWZmX3RpbWUgPSBlbmQuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpO1xuICAgIGxldCBkYXlzID0gZGlmZl90aW1lIC8gZGF0ZVV0aWxzLmRheUluTWlsbGlzZWNvbmRzO1xuXG4gICAgY29uZmlnLmRhdGEuZm9yRWFjaChkID0+IHtcbiAgICAgIGlmIChkLmlzSGlkZGVuKSByZXR1cm47XG4gICAgICByb3dzKys7XG4gICAgICBpZiAoZC5jaGlsZHJlbiAmJiAhZC5pc0Nsb3NlZCkge1xuICAgICAgICByb3dzICs9IGQuY2hpbGRyZW4uZmlsdGVyKGMgPT4gIWMuaXNIaWRkZW4pLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBoZWlnaHQgPSByb3dzICogaDtcbiAgICBsZXQgd2lkdGggPSBkYXlzICogdztcblxuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQsXG4gICAgICB3aWR0aCxcbiAgICAgIGRheVdpZHRoOiB3LFxuICAgICAgaXRlbUhlaWdodDogaFxuICAgIH1cblxuICB9LFxuXG4gIC8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODAyNzQyMy9ob3ctdG8tY2hlY2staWYtYS1zdHJpbmctaXMtYS12YWxpZC1oZXgtY29sb3ItcmVwcmVzZW50YXRpb25cbiAgaXNIZXhDb2xvcihzdHIpIHtcbiAgICBsZXQgcmVnID0gL14jKFswLTlhLWZdezN9KXsxLDJ9JC9pO1xuICAgIHJldHVybiByZWcudGVzdChzdHIpXG4gIH0sXG5cbiAgdG9DYXBpdGFsaXplKHN0cikge1xuICAgIHJldHVybiAoXCIgXCIgKyBzdHIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXpBLVowLTldKyguKS9nLCAobSwgY2hyKSA9PiBjaHIudG9VcHBlckNhc2UoKSk7XG4gIH0sXG5cbiAgZm9ybWF0TnVtYmVyKG51bSkge1xuICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlcy1DTFwiKS5mb3JtYXQobnVtKS5yZXBsYWNlKFwiLlwiLCBcIiBcIik7XG4gIH0sXG5cblxuICAvL2h0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1MjI4MDUyL2RlYm91bmNlLWZ1bmN0aW9uLWltcGxlbWVudGVkLXdpdGgtcHJvbWlzZXNcbiAgZGVib3VuY2UoZiwgaW50ZXJ2YWwpIHtcbiAgICBsZXQgdGltZXIgPSBudWxsO1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShmKC4uLmFyZ3MpKSwgaW50ZXJ2YWwpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfSxcblxuICAvL2h0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI3MDc4Mjg1L3NpbXBsZS10aHJvdHRsZS1pbi1qYXZhc2NyaXB0LzI3MDc4NDAxIzI3MDc4NDAxXG4gIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29udGV4dCwgYXJncywgcmVzdWx0O1xuICAgIHZhciB0aW1lb3V0ID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXMgPSAwO1xuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBEYXRlLm5vdygpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICBpZiAoIXByZXZpb3VzICYmIG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UpIHByZXZpb3VzID0gbm93O1xuICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfVxuXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFiQTtBQUNBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpCQTtBQTJCQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUxBO0FBTUE7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQXRpQkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/util/utils.js\n");
|
|
271
271
|
|
|
272
272
|
/***/ })
|
|
273
273
|
|