/*!*************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./assets/styles/app.css ***!
  \*************************************************************************************************/


/*!***************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/ui/AsyncExporter.vue?vue&type=style&index=0&id=58fda506&scoped=true&lang=css ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************/

.progress[data-v-58fda506] { border-radius: 8px;
}
.progress-bar[data-v-58fda506] { font-weight: 600; transition: width .3s ease;
}

/*!**************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/admin/Dashboard.vue?vue&type=style&index=0&id=c60c3cae&scoped=true&lang=css ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************/

.dashboard-wrap[data-v-c60c3cae] { padding: 8px;
}
.kpi-card[data-v-c60c3cae] {
    background: #fff;
    border-radius: 14px;
    padding: 1.25rem;
    display: flex;
    align-items: center;
    gap: 1rem;
    box-shadow: 0 4px 14px rgba(0,0,0,.06);
    border: 1px solid rgba(0,0,0,.04);
    height: 100%;
    transition: transform .2s ease, box-shadow .2s ease;
}
.kpi-card[data-v-c60c3cae]:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,.1);
}
.kpi-icon[data-v-c60c3cae] {
    width: 56px; height: 56px;
    border-radius: 14px;
    display: flex; align-items: center; justify-content: center;
    font-size: 1.5rem; color: #fff;
    flex-shrink: 0;
}
.kpi-blue   .kpi-icon[data-v-c60c3cae] { background: linear-gradient(135deg, #3b82f6, #1d4ed8);
}
.kpi-green  .kpi-icon[data-v-c60c3cae] { background: linear-gradient(135deg, #10b981, #047857);
}
.kpi-yellow .kpi-icon[data-v-c60c3cae] { background: linear-gradient(135deg, #f59e0b, #b45309);
}
.kpi-red    .kpi-icon[data-v-c60c3cae] { background: linear-gradient(135deg, #ef4444, #b91c1c);
}
.kpi-label[data-v-c60c3cae] { font-size: .8rem; color: #6b7280; text-transform: uppercase; letter-spacing: .5px; font-weight: 600;
}
.kpi-value[data-v-c60c3cae] { font-size: 1.6rem; font-weight: 700; color: #111827; line-height: 1.1; margin: 2px 0;
}
.kpi-sub[data-v-c60c3cae]   { font-size: .8rem; color: #6b7280;
}
.chart-card[data-v-c60c3cae] {
    background: #fff;
    border-radius: 14px;
    box-shadow: 0 4px 14px rgba(0,0,0,.06);
    border: 1px solid rgba(0,0,0,.04);
    overflow: hidden;
    height: 100%;
}
.chart-card-header[data-v-c60c3cae] {
    padding: 1rem 1.25rem .25rem;
    border-bottom: 1px solid #f1f5f9;
}
.chart-card-body[data-v-c60c3cae] { padding: 1rem 1.25rem;
}
.dash-header h2[data-v-c60c3cae] { color: #111827;
}
.filters .form-label[data-v-c60c3cae] { color: #6b7280;
}

/*!*************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/ui/MultiSelect.vue?vue&type=style&index=0&id=c276d5d6&lang=css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************/

.multi-select {
    position: relative;
}
.multi-select input {
    outline: none;
    min-width: 150px;
}
.list-group-item {
    cursor: pointer;
}

/*!********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/company/DetailCompany.vue?vue&type=style&index=0&id=2a6c8c22&lang=css ***!
  \********************************************************************************************************************************************************************************************************************************************************************************/

.fade-enter-active,
.fade-leave-active {
    transition: all 0.4s;
}
.fade-enter-from,
.fade-leave-to {
    opacity: 0;
    transform: translateY(10px);
}

/*!**********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/customer/DetailCustomer.vue?vue&type=style&index=0&id=ae3ef696&lang=css ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************/

.fade-enter-active,
.fade-leave-active {
    transition: all 0.4s;
}
.fade-enter-from,
.fade-leave-to {
    opacity: 0;
    transform: translateY(10px);
}

/*!**********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/invoice/RichEmailEditor.vue?vue&type=style&index=0&id=dec417c0&scoped=true&lang=css ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************/

.color-dot[data-v-dec417c0] {
    display: inline-block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    border: 1px solid #aaa;
}
.editor-content[data-v-dec417c0] .ProseMirror {
    min-height: 260px;
    outline: none;
    font-size: 0.95rem;
}
.editor-content[data-v-dec417c0] .ProseMirror p {
    margin-bottom: 0.4rem;
}
.editor-content[data-v-dec417c0] .ProseMirror h1,
.editor-content[data-v-dec417c0] .ProseMirror h2,
.editor-content[data-v-dec417c0] .ProseMirror h3 {
    margin-top: 0.6rem;
    margin-bottom: 0.4rem;
}
.editor-content[data-v-dec417c0] .ProseMirror ul,
.editor-content[data-v-dec417c0] .ProseMirror ol {
    padding-left: 1.5rem;
    margin-bottom: 0.4rem;
}
.editor-content[data-v-dec417c0] .ProseMirror a {
    color: #0d6efd;
    text-decoration: underline;
    cursor: pointer;
}
.editor-content[data-v-dec417c0] .ProseMirror img {
    max-width: 100%;
    height: auto;
    border-radius: 4px;
    display: block;
    margin: 0.5rem 0;
}
.editor-content[data-v-dec417c0] .ProseMirror table {
    border-collapse: collapse;
    width: 100%;
    margin: 0.5rem 0;
    table-layout: fixed;
}
.editor-content[data-v-dec417c0] .ProseMirror th,
.editor-content[data-v-dec417c0] .ProseMirror td {
    border: 1px solid #dee2e6;
    padding: 6px 10px;
    min-width: 60px;
    vertical-align: top;
    position: relative;
}
.editor-content[data-v-dec417c0] .ProseMirror th {
    background: #f8f9fa;
    font-weight: 600;
}
.editor-content[data-v-dec417c0] .ProseMirror .selectedCell::after {
    content: '';
    position: absolute;
    inset: 0;
    background: rgba(13, 110, 253, 0.12);
    pointer-events: none;
}

/*!*******************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/invoice/EmailInvoice.vue?vue&type=style&index=0&id=7652a18e&scoped=true&lang=css ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************************/

.email-body[data-v-7652a18e] {
    font-size: 0.95rem;
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFrU0EsNkJBQVksa0JBQWtCO0FBQUU7QUFDaEMsaUNBQWdCLGdCQUFnQixFQUFFLDBCQUEwQjtBQUFFOzs7Ozs7QUN1RDlELG1DQUFrQixZQUFZO0FBQUU7QUFFaEM7SUFDSSxnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLGdCQUFnQjtJQUNoQixhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLFNBQVM7SUFDVCxzQ0FBc0M7SUFDdEMsaUNBQWlDO0lBQ2pDLFlBQVk7SUFDWixtREFBbUQ7QUFDdkQ7QUFDQSxtQ0FBa0IsMkJBQTJCLEVBQUUsc0NBQXNDO0FBQUU7QUFDdkY7SUFDSSxXQUFXLEVBQUUsWUFBWTtJQUN6QixtQkFBbUI7SUFDbkIsYUFBYSxFQUFFLG1CQUFtQixFQUFFLHVCQUF1QjtJQUMzRCxpQkFBaUIsRUFBRSxXQUFXO0lBQzlCLGNBQWM7QUFDbEI7QUFDQSx5Q0FBd0IscURBQXFEO0FBQUU7QUFDL0UseUNBQXdCLHFEQUFxRDtBQUFFO0FBQy9FLHlDQUF3QixxREFBcUQ7QUFBRTtBQUMvRSx5Q0FBd0IscURBQXFEO0FBQUU7QUFFL0UsOEJBQWEsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQjtBQUFFO0FBQ2xILDhCQUFhLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhO0FBQUU7QUFDbkcsOEJBQWEsZ0JBQWdCLEVBQUUsY0FBYztBQUFFO0FBRS9DO0lBQ0ksZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixzQ0FBc0M7SUFDdEMsaUNBQWlDO0lBQ2pDLGdCQUFnQjtJQUNoQixZQUFZO0FBQ2hCO0FBQ0E7SUFDSSw0QkFBNEI7SUFDNUIsZ0NBQWdDO0FBQ3BDO0FBQ0Esb0NBQW1CLHFCQUFxQjtBQUFFO0FBRTFDLG1DQUFrQixjQUFjO0FBQUU7QUFDbEMsd0NBQXVCLGNBQWM7QUFBRTs7Ozs7O0FDbFV2QztJQUNJLGtCQUFrQjtBQUN0QjtBQUVBO0lBQ0ksYUFBYTtJQUNiLGdCQUFnQjtBQUNwQjtBQUVBO0lBQ0ksZUFBZTtBQUNuQjs7Ozs7O0FDMERBOztJQUVJLG9CQUFvQjtBQUN4QjtBQUVBOztJQUVJLFVBQVU7SUFDViwyQkFBMkI7QUFDL0I7Ozs7OztBQ3dDQTs7SUFFSSxvQkFBb0I7QUFDeEI7QUFFQTs7SUFFSSxVQUFVO0lBQ1YsMkJBQTJCO0FBQy9COzs7Ozs7QUNpRkE7SUFDSSxxQkFBcUI7SUFDckIsV0FBVztJQUNYLFlBQVk7SUFDWixrQkFBa0I7SUFDbEIsc0JBQXNCO0FBQzFCO0FBRUE7SUFDSSxpQkFBaUI7SUFDakIsYUFBYTtJQUNiLGtCQUFrQjtBQUN0QjtBQUVBO0lBQ0kscUJBQXFCO0FBQ3pCO0FBRUE7OztJQUdJLGtCQUFrQjtJQUNsQixxQkFBcUI7QUFDekI7QUFFQTs7SUFFSSxvQkFBb0I7SUFDcEIscUJBQXFCO0FBQ3pCO0FBRUE7SUFDSSxjQUFjO0lBQ2QsMEJBQTBCO0lBQzFCLGVBQWU7QUFDbkI7QUFFQTtJQUNJLGVBQWU7SUFDZixZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLGNBQWM7SUFDZCxnQkFBZ0I7QUFDcEI7QUFFQTtJQUNJLHlCQUF5QjtJQUN6QixXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtBQUN2QjtBQUVBOztJQUVJLHlCQUF5QjtJQUN6QixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixrQkFBa0I7QUFDdEI7QUFFQTtJQUNJLG1CQUFtQjtJQUNuQixnQkFBZ0I7QUFDcEI7QUFFQTtJQUNJLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsUUFBUTtJQUNSLG9DQUFvQztJQUNwQyxvQkFBb0I7QUFDeEI7Ozs7OztBQ1lBO0lBQ0ksa0JBQWtCO0FBQ3RCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2NvbXBvbmVudHMvdWkvQXN5bmNFeHBvcnRlci52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2NvbXBvbmVudHMvYWRtaW4vRGFzaGJvYXJkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY29tcG9uZW50cy91aS9NdWx0aVNlbGVjdC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2NvbXBvbmVudHMvY29tcGFueS9EZXRhaWxDb21wYW55LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY29tcG9uZW50cy9jdXN0b21lci9EZXRhaWxDdXN0b21lci52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2NvbXBvbmVudHMvaW52b2ljZS9SaWNoRW1haWxFZGl0b3IudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9jb21wb25lbnRzL2ludm9pY2UvRW1haWxJbnZvaWNlLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XG4gICAgICAgIDwhLS0gQm90b24gdHJpZ2dlciBkZWwgbW9kYWwgLS0+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCJcbiAgICAgICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCIgOmRhdGEtYnMtdGFyZ2V0PVwibW9kYWxUYXJnZXRcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImxvYWRGaWx0ZXJzXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWxlLWV4cG9ydCBtZS0xIGQtbm9uZVwiPjwvaT4gRXhwb3J0YXIge3sgZW50aXR5TGFiZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLSBNb2RhbCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiA6aWQ9XCJtb2RhbElkXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2xvdWQtZG93bmxvYWQtYWx0IG1lLTJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0YXIge3sgZW50aXR5TGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgOmRpc2FibGVkPVwibG9hZGluZ1wiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaWx0cm9zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwiIWxvYWRpbmcgJiYgIWRvbmVcIiBjbGFzcz1cInJvdyBnLTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIHNtYWxsIG1iLTFcIj5Gb3JtYXRvPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCIgdi1tb2RlbD1cImZvcm1hdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInhsc3hcIj5FeGNlbCAoLnhsc3gpPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY3N2XCI+Q1NWICguY3N2KTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiB2LWlmPVwic2hvd0RhdGVGaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbCBtYi0xXCI+RGVzZGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiB2LW1vZGVsPVwiZmlsdGVycy5mcm9tXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCIgdi1pZj1cInNob3dEYXRlRmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGwgbWItMVwiPkhhc3RhPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgdi1tb2RlbD1cImZpbHRlcnMudG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbCBtYi0xXCI+RW1wcmVzYTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIHYtbW9kZWw9XCJmaWx0ZXJzLmNvbXBhbnlJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlRvZGFzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtZm9yPVwiYyBpbiBjb21wYW5pZXNcIiA6a2V5PVwiYy5pZFwiIDp2YWx1ZT1cImMuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiB2LWlmPVwiZW50aXR5ID09PSAnaW52b2ljZXMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGwgbWItMVwiPkVzdGF0dXM8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIiB2LW1vZGVsPVwiZmlsdGVycy5zdGF0dXNJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlRvZG9zPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtZm9yPVwicyBpbiBzdGF0dXNlc1wiIDprZXk9XCJzLmlkXCIgOnZhbHVlPVwicy5pZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHMubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmVzdW1lbiBkZSBpbmljaW8gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCJsb2FkaW5nIHx8IGRvbmVcIiBjbGFzcz1cInRleHQtY2VudGVyIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTEgZnctc2VtaWJvbGRcIj57eyBlbnRpdHlMYWJlbCB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInNtYWxsIHRleHQtbXV0ZWQgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbDogPHN0cm9uZz57eyB0b3RhbFJvd3MudG9Mb2NhbGVTdHJpbmcoKSB9fTwvc3Ryb25nPiByZWdpc3Ryb3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHt7IHRvdGFsUGFnZXMgfX0gcGFnaW5hcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQcm9ncmVzbyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cImxvYWRpbmcgfHwgZG9uZVwiIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiIHN0eWxlPVwiaGVpZ2h0OiAyNHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdHJpcGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7ICdwcm9ncmVzcy1iYXItYW5pbWF0ZWQnOiBsb2FkaW5nLCAnYmctc3VjY2Vzcyc6IGRvbmUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7IHdpZHRoOiBwZXJjZW50YWdlICsgJyUnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcGVyY2VudGFnZSB9fSU8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrIG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXNwaW5uZXIgZmEtc3BpbiBtZS0xXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VzYW5kbyBwYWdpbmEge3sgY3VycmVudFBhZ2UgfX0gZGUge3sgdG90YWxQYWdlcyB9fS4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZS1pZj1cImRvbmVcIiBjbGFzcz1cInRleHQtc3VjY2Vzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hlY2stY2lyY2xlIG1lLTFcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBvcnQgY29tcGxldGFkby4gRGVzY2FyZ2FsbyBhYmFqby5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFcnJvcmVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwiZXJyb3JcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIG1lLTFcIj48L2k+IHt7IGVycm9yIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFc3RhZG8gaW5pY2lhbDogaGludCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cIiFsb2FkaW5nICYmICFkb25lICYmICFlcnJvclwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBzbWFsbCBtYi0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhIGxvcyBmaWx0cm9zIHkgcHJlc2lvbmEgPHN0cm9uZz5JbmljaWFyIGV4cG9ydDwvc3Ryb25nPi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbCBwcm9jZXNvIHNlIHJlYWxpemEgZW4gbG90ZXM7IG5vIGNpZXJyZXMgZXN0YSB2ZW50YW5hIG1pZW50cmFzIGF2YW56YS5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHYtaWY9XCIhZG9uZSAmJiAhbG9hZGluZ1wiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxhclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdi1pZj1cImxvYWRpbmdcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJhYm9ydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXN0b3AgbWUtMVwiPjwvaT4gRGV0ZW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdi1pZj1cIiFsb2FkaW5nICYmICFkb25lXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgQGNsaWNrPVwic3RhcnRFeHBvcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbGF5IG1lLTFcIj48L2k+IEluaWNpYXIgZXhwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1pZj1cImRvbmVcIiA6aHJlZj1cImRvd25sb2FkVXJsXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwib25Eb3dubG9hZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZG93bmxvYWQgbWUtMVwiPjwvaT4gRGVzY2FyZ2FyIGFyY2hpdm9cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB2LWlmPVwiZG9uZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJyZXNldFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51ZXZvIGV4cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnQXN5bmNFeHBvcnRlcicsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZW50aXR5OiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSwgLy8gY3VzdG9tZXJzIHwgaW52b2ljZXMgfCBwYXltZW50c1xuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogJycsXG4gICAgICAgICAgICBmb3JtYXQ6ICd4bHN4JyxcbiAgICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgICAgICBmcm9tOiAnJyxcbiAgICAgICAgICAgICAgICB0bzogJycsXG4gICAgICAgICAgICAgICAgY29tcGFueUlkOiAnJyxcbiAgICAgICAgICAgICAgICBzdGF0dXNJZDogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tcGFuaWVzOiBbXSxcbiAgICAgICAgICAgIHN0YXR1c2VzOiBbXSxcbiAgICAgICAgICAgIGZpbGVOYW1lOiAnJyxcbiAgICAgICAgICAgIGRvd25sb2FkVXJsOiAnJyxcbiAgICAgICAgICAgIHRvdGFsUm93czogMCxcbiAgICAgICAgICAgIHRvdGFsUGFnZXM6IDAsXG4gICAgICAgICAgICBjdXJyZW50UGFnZTogMCxcbiAgICAgICAgICAgIGFib3J0ZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgZW50aXR5TGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGN1c3RvbWVyczogJ0RldWRvcmVzJyxcbiAgICAgICAgICAgICAgICBpbnZvaWNlczogJ0ZhY3R1cmFzJyxcbiAgICAgICAgICAgICAgICBwYXltZW50czogJ1BhZ29zJyxcbiAgICAgICAgICAgIH1bdGhpcy5lbnRpdHldIHx8IHRoaXMuZW50aXR5O1xuICAgICAgICB9LFxuICAgICAgICBtb2RhbElkKCkge1xuICAgICAgICAgICAgcmV0dXJuIGBleHBvcnRNb2RhbF8ke3RoaXMuZW50aXR5fWA7XG4gICAgICAgIH0sXG4gICAgICAgIG1vZGFsVGFyZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGAjZXhwb3J0TW9kYWxfJHt0aGlzLmVudGl0eX1gO1xuICAgICAgICB9LFxuICAgICAgICBzaG93RGF0ZUZpbHRlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVudGl0eSA9PT0gJ2ludm9pY2VzJyB8fCB0aGlzLmVudGl0eSA9PT0gJ3BheW1lbnRzJztcbiAgICAgICAgfSxcbiAgICAgICAgcGVyY2VudGFnZSgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgPT09IDApIHJldHVybiAwO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgodGhpcy5jdXJyZW50UGFnZSAvIHRoaXMudG90YWxQYWdlcykgKiAxMDApKTtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgYXN5bmMgbG9hZEZpbHRlcnMoKSB7XG4gICAgICAgICAgICAvLyBSZXVzYXIgZWwgZW5kcG9pbnQgZGVsIGRhc2hib2FyZCBxdWUgeWEgdGllbmUgY29tcGFuaWVzIHkgc3RhdHVzZXNcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiRheGlvcy5nZXQoJy9hcGkvZGFzaGJvYXJkL2ZpbHRlcnMnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBhbmllcyA9IGRhdGEuY29tcGFuaWVzIHx8IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzZXMgPSBkYXRhLnN0YXR1c2VzIHx8IFtdO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIE5vIGNyaXRpY28sIGRlamFyIGxpc3RhcyB2YWNpYXNcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIHNlIHB1ZGllcm9uIGNhcmdhciBsb3MgZmlsdHJvcycsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhc3luYyBzdGFydEV4cG9ydCgpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gMS4gSW5pdFxuICAgICAgICAgICAgICAgIGNvbnN0IGluaXRQYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IHRoaXMuZm9ybWF0LFxuICAgICAgICAgICAgICAgICAgICBmcm9tOiB0aGlzLmZpbHRlcnMuZnJvbSB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0bzogdGhpcy5maWx0ZXJzLnRvIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhbnlJZDogdGhpcy5maWx0ZXJzLmNvbXBhbnlJZCB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogdGhpcy5maWx0ZXJzLnN0YXR1c0lkIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0UmVzID0gYXdhaXQgdGhpcy4kYXhpb3MucG9zdChcbiAgICAgICAgICAgICAgICAgICAgYC9hcGkvZXhwb3J0LyR7dGhpcy5lbnRpdHl9L2luaXRgLCBpbml0UGF5bG9hZFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVOYW1lID0gaW5pdFJlcy5kYXRhLmZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxSb3dzID0gaW5pdFJlcy5kYXRhLnRvdGFsUm93cztcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBpbml0UmVzLmRhdGEudG90YWxQYWdlcztcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkVXJsID0gaW5pdFJlcy5kYXRhLmRvd25sb2FkVXJsO1xuXG4gICAgICAgICAgICAgICAgaWYgKGluaXRSZXMuZGF0YS5mb3JtYXQgIT09IHRoaXMuZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVsIGJhY2tlbmQgaGl6byBmYWxsYmFjayAoZWo6IHhsc3gg4oaSIGNzdiBzaSBPcGVuU3BvdXQgbm8gZXN0YSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGBGb3JtYXRvIGNhbWJpYWRvIGEgJHtpbml0UmVzLmRhdGEuZm9ybWF0fSAoT3BlblNwb3V0IG5vIGluc3RhbGFkbykuIENvbnRpbnVhbmRvLi4uYDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBpbml0UmVzLmRhdGEuZm9ybWF0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvdGFsUm93cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ05vIGhheSByZWdpc3Ryb3MgcGFyYSBleHBvcnRhciBjb24gZXNvcyBmaWx0cm9zLic7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gMi4gUHJvY2VzYXIgY2h1bmtzIHNlY3VlbmNpYWxtZW50ZVxuICAgICAgICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAxOyBwYWdlIDw9IHRoaXMudG90YWxQYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRXhwb3J0IGNhbmNlbGFkbyBwb3IgZWwgdXN1YXJpby4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiRheGlvcy5wb3N0KGAvYXBpL2V4cG9ydC8ke3RoaXMuZW50aXR5fS9jaHVua2AsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmluaXRQYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZS5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfHwgZS5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIHx8ICdFcnJvciBpbmVzcGVyYWRvIGFsIGV4cG9ydGFyLic7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhYm9ydCgpIHtcbiAgICAgICAgICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc2V0KCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnJztcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuICAgICAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gMDtcbiAgICAgICAgICAgIHRoaXMudG90YWxSb3dzID0gMDtcbiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMuZG93bmxvYWRVcmwgPSAnJztcbiAgICAgICAgfSxcbiAgICAgICAgb25Eb3dubG9hZGVkKCkge1xuICAgICAgICAgICAgLy8gRGVzcHVlcyBkZSB1biBicmV2ZSBkZWxheSBjZXJyYXIgZWwgbW9kYWxcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGFsRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm1vZGFsSWQpO1xuICAgICAgICAgICAgICAgIGlmIChtb2RhbEVsICYmIHdpbmRvdy5ib290c3RyYXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kYWwgPSB3aW5kb3cuYm9vdHN0cmFwLk1vZGFsLmdldEluc3RhbmNlKG1vZGFsRWwpO1xuICAgICAgICAgICAgICAgICAgICBtb2RhbD8uaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9LFxuICAgIH0sXG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4ucHJvZ3Jlc3MgeyBib3JkZXItcmFkaXVzOiA4cHg7IH1cbi5wcm9ncmVzcy1iYXIgeyBmb250LXdlaWdodDogNjAwOyB0cmFuc2l0aW9uOiB3aWR0aCAuM3MgZWFzZTsgfVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLXdyYXBcIj5cbiAgICAgICAgPCEtLSBFbmNhYmV6YWRvICsgZmlsdHJvcyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhc2gtaGVhZGVyIGQtZmxleCBmbGV4LXdyYXAgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0zIG1iLTRcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwibWItMSBmdy1ib2xkXCI+RGFzaGJvYXJkIGRlIENvYnJhbnphPC9oMj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgbWItMFwiPlJlc3VtZW4gZWplY3V0aXZvIGRlIGZhY3R1cmFjaW9uIHkgcGFnb3M8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzIGQtZmxleCBmbGV4LXdyYXAgZ2FwLTIgYWxpZ24taXRlbXMtZW5kXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbCBtYi0xXCI+RGVzZGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiB2LW1vZGVsPVwiZmlsdGVycy5mcm9tXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbCBtYi0xXCI+SGFzdGE8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiB2LW1vZGVsPVwiZmlsdGVycy50b1wiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGwgbWItMVwiPkVtcHJlc2E8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIiB2LW1vZGVsPVwiZmlsdGVycy5jb21wYW55SWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5Ub2Rhczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cImMgaW4gY2F0YWxvZ3MuY29tcGFuaWVzXCIgOmtleT1cImMuaWRcIiA6dmFsdWU9XCJjLmlkXCI+e3sgYy5uYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGwgbWItMVwiPkVzdGF0dXM8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIiB2LW1vZGVsPVwiZmlsdGVycy5zdGF0dXNJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlRvZG9zPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtZm9yPVwicyBpbiBjYXRhbG9ncy5zdGF0dXNlc1wiIDprZXk9XCJzLmlkXCIgOnZhbHVlPVwicy5pZFwiPnt7IHMubmFtZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIEBjbGljaz1cImxvYWRBbGxcIiA6ZGlzYWJsZWQ9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbSBtZS0xXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICBBcGxpY2FyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBLUEkgY2FyZHMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zIG1iLTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wteGwtM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrcGktY2FyZCBrcGktYmx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLWljb25cIj48aSBjbGFzcz1cImZhcyBmYS1maWxlLWludm9pY2UtZG9sbGFyXCI+PC9pPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrcGktbGFiZWxcIj5GYWN0dXJhZG88L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrcGktdmFsdWVcIj57eyBtb25leShrcGlzLmludm9pY2VkLnRvdGFsKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtwaS1zdWJcIj57eyBrcGlzLmludm9pY2VkLnF0eSB9fSBmYWN0dXJhczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC14bC0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtwaS1jYXJkIGtwaS1ncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLWljb25cIj48aSBjbGFzcz1cImZhcyBmYS1oYW5kLWhvbGRpbmctdXNkXCI+PC9pPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrcGktbGFiZWxcIj5Db2JyYWRvPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLXZhbHVlXCI+e3sgbW9uZXkoa3Bpcy5jb2xsZWN0ZWQudG90YWwpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLXN1YlwiPnt7IGtwaXMuY29sbGVjdGVkLnF0eSB9fSBwYWdvcyB8IHt7IGtwaXMuY29sbGVjdGlvblJhdGUgfX0lIGVmZWN0aXZpZGFkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXhsLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLWNhcmQga3BpLXllbGxvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLWljb25cIj48aSBjbGFzcz1cImZhcyBmYS1jbG9ja1wiPjwvaT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtwaS1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLWxhYmVsXCI+UG9yIENvYnJhcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtwaS12YWx1ZVwiPnt7IG1vbmV5KGtwaXMub3V0c3RhbmRpbmcudG90YWwpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLXN1YlwiPnt7IGtwaXMub3V0c3RhbmRpbmcucXR5IH19IGZhY3R1cmFzIHBlbmRpZW50ZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wteGwtM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrcGktY2FyZCBrcGktcmVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrcGktaWNvblwiPjxpIGNsYXNzPVwiZmFzIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtwaS1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLWxhYmVsXCI+VmVuY2lkbzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtwaS12YWx1ZVwiPnt7IG1vbmV5KGtwaXMub3ZlcmR1ZS50b3RhbCkgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrcGktc3ViXCI+e3sga3Bpcy5vdmVyZHVlLnF0eSB9fSB2ZW5jaWRhcyB8IHt7IGtwaXMuZHVlU29vbi5xdHkgfX0gcG9yIHZlbmNlciAoMzBkKTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIENoYXJ0cyByb3cgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zIG1iLTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtN1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFydC1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFydC1jYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMFwiPlRlbmRlbmNpYSBtZW5zdWFsPC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj5GYWN0dXJhY2lvbiB2cyBjb2JyYW56YTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhcnQtY2FyZC1ib2R5XCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDogMzIwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIHJlZj1cIm1vbnRobHlDaGFydFJlZlwiPjwvY2FudmFzPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14bC01XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYXJ0LWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYXJ0LWNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0wXCI+QWdpbmcgZGUgY2FydGVyYTwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+U2FsZG8gcGVuZGllbnRlIHBvciBhbnRpZ3VlZGFkPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFydC1jYXJkLWJvZHlcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgaGVpZ2h0OiAzMjBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjYW52YXMgcmVmPVwiYWdpbmdDaGFydFJlZlwiPjwvY2FudmFzPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFRvcCBkZXVkb3JlcyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhcnQtY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhcnQtY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTBcIj5Ub3AgMTAgZGV1ZG9yZXM8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPkNsaWVudGVzIGNvbiBtYXlvciBzYWxkbyBwZW5kaWVudGU8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYXJ0LWNhcmQtYm9keSBwLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtaG92ZXIgbWItMCBhbGlnbi1taWRkbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwidGFibGUtbGlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDo0MHB4XCI+IzwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkNsaWVudGU8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyXCI+RmFjdHVyYXM8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtZW5kXCI+U2FsZG8gcGVuZGllbnRlPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozMCVcIj4lIGRlbCB0b3RhbDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgdi1pZj1cIiF0b3BEZWJ0b3JzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBweS00XCI+U2luIGRhdG9zPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgdi1mb3I9XCIoZCwgaWR4KSBpbiB0b3BEZWJ0b3JzXCIgOmtleT1cImQuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnlcIj57eyBpZHggKyAxIH19PC9zcGFuPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZnctc2VtaWJvbGRcIj57eyBkLm5hbWUgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCI+e3sgZC5xdHkgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZW5kIGZ3LWJvbGQgdGV4dC1kYW5nZXJcIj57eyBtb25leShkLnRvdGFsKSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzIGZsZXgtZ3Jvdy0xXCIgc3R5bGU9XCJoZWlnaHQ6OHB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhciBiZy1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwieyB3aWR0aDogcGN0T2ZUb3AoZC50b3RhbCkgKyAnJScgfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCIgc3R5bGU9XCJ3aWR0aDo0MnB4OyB0ZXh0LWFsaWduOnJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcGN0T2ZUb3AoZC50b3RhbCkgfX0lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBDaGFydCwgcmVnaXN0ZXJhYmxlcyB9IGZyb20gJ2NoYXJ0LmpzJztcbkNoYXJ0LnJlZ2lzdGVyKC4uLnJlZ2lzdGVyYWJsZXMpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ0Rhc2hib2FyZENvbXBvbmVudCcsXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgICAgICAgIGZyb206IHRoaXMuZmlyc3REYXlNb250aHMoMTEpLFxuICAgICAgICAgICAgICAgIHRvOiB0aGlzLnRvZGF5U3RyKCksXG4gICAgICAgICAgICAgICAgY29tcGFueUlkOiAnJyxcbiAgICAgICAgICAgICAgICBzdGF0dXNJZDogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2F0YWxvZ3M6IHsgY29tcGFuaWVzOiBbXSwgc3RhdHVzZXM6IFtdIH0sXG4gICAgICAgICAgICBrcGlzOiB7XG4gICAgICAgICAgICAgICAgaW52b2ljZWQ6IHsgdG90YWw6IDAsIHF0eTogMCB9LFxuICAgICAgICAgICAgICAgIGNvbGxlY3RlZDogeyB0b3RhbDogMCwgcXR5OiAwIH0sXG4gICAgICAgICAgICAgICAgb3V0c3RhbmRpbmc6IHsgdG90YWw6IDAsIHF0eTogMCB9LFxuICAgICAgICAgICAgICAgIG92ZXJkdWU6IHsgdG90YWw6IDAsIHF0eTogMCB9LFxuICAgICAgICAgICAgICAgIGR1ZVNvb246IHsgdG90YWw6IDAsIHF0eTogMCB9LFxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25SYXRlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFnaW5nOiB7IGxhYmVsczogW10sIGRhdGE6IFtdIH0sXG4gICAgICAgICAgICBtb250aGx5OiB7IGxhYmVsczogW10sIGludm9pY2VkOiBbXSwgY29sbGVjdGVkOiBbXSB9LFxuICAgICAgICAgICAgdG9wRGVidG9yczogW10sXG4gICAgICAgICAgICBjaGFydHM6IHsgbW9udGhseTogbnVsbCwgYWdpbmc6IG51bGwgfSxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICAgIHRoaXMubG9hZENhdGFsb2dzKCkudGhlbigoKSA9PiB0aGlzLmxvYWRBbGwoKSk7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIHRvZGF5U3RyKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpcnN0RGF5TW9udGhzKG1vbnRoc0JhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZC5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZC5zZXRNb250aChkLmdldE1vbnRoKCkgLSBtb250aHNCYWNrKTtcbiAgICAgICAgICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApO1xuICAgICAgICB9LFxuICAgICAgICBtb25leShuKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gTnVtYmVyKG4pIHx8IDA7XG4gICAgICAgICAgICByZXR1cm4gdi50b0xvY2FsZVN0cmluZygnZXMtTVgnLCB7IHN0eWxlOiAnY3VycmVuY3knLCBjdXJyZW5jeTogJ01YTicsIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMCB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcGN0T2ZUb3AodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHRoaXMudG9wRGVidG9ycy5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWF4KGEsIE51bWJlcihiLnRvdGFsKSB8fCAwKSwgMCk7XG4gICAgICAgICAgICByZXR1cm4gbWF4ID4gMCA/IE1hdGgucm91bmQoKE51bWJlcih2YWx1ZSkgLyBtYXgpICogMTAwKSA6IDA7XG4gICAgICAgIH0sXG4gICAgICAgIHBhcmFtcygpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZnJvbTogdGhpcy5maWx0ZXJzLmZyb20sXG4gICAgICAgICAgICAgICAgdG86IHRoaXMuZmlsdGVycy50byxcbiAgICAgICAgICAgICAgICBjb21wYW55SWQ6IHRoaXMuZmlsdGVycy5jb21wYW55SWQgfHwgJycsXG4gICAgICAgICAgICAgICAgc3RhdHVzSWQ6IHRoaXMuZmlsdGVycy5zdGF0dXNJZCB8fCAnJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGxvYWRDYXRhbG9ncygpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoJy9hcGkvZGFzaGJvYXJkL2ZpbHRlcnMnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGFsb2dzID0gZGF0YTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBwdWRpZXJvbiBjYXJnYXIgY2F0YWxvZ29zJywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIGxvYWRBbGwoKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gdGhpcy5wYXJhbXMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBbaywgYSwgbSwgdF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIGF4aW9zLmdldCgnL2FwaS9kYXNoYm9hcmQva3BpcycsIHsgcGFyYW1zOiBwIH0pLFxuICAgICAgICAgICAgICAgICAgICBheGlvcy5nZXQoJy9hcGkvZGFzaGJvYXJkL2FnaW5nJywgeyBwYXJhbXM6IHAgfSksXG4gICAgICAgICAgICAgICAgICAgIGF4aW9zLmdldCgnL2FwaS9kYXNoYm9hcmQvbW9udGhseScsIHsgcGFyYW1zOiBwIH0pLFxuICAgICAgICAgICAgICAgICAgICBheGlvcy5nZXQoJy9hcGkvZGFzaGJvYXJkL3RvcC1kZWJ0b3JzJywgeyBwYXJhbXM6IHAgfSksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5rcGlzID0gay5kYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuYWdpbmcgPSBhLmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5tb250aGx5ID0gbS5kYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMudG9wRGVidG9ycyA9IHQuZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyTW9udGhseUNoYXJ0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQWdpbmdDaGFydCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNhcmdhbmRvIGRhc2hib2FyZCcsIGUpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVuZGVyTW9udGhseUNoYXJ0KCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnRzLm1vbnRobHkpIHRoaXMuY2hhcnRzLm1vbnRobHkuZGVzdHJveSgpO1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy4kcmVmcy5tb250aGx5Q2hhcnRSZWY/LmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5jaGFydHMubW9udGhseSA9IG5ldyBDaGFydChjdHgsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGluZScsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbHM6IHRoaXMubW9udGhseS5sYWJlbHMsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdGYWN0dXJhZG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMubW9udGhseS5pbnZvaWNlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyMzYjgyZjYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoNTksMTMwLDI0NiwuMTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5zaW9uOiAwLjM1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRSYWRpdXM6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQ29icmFkbycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcy5tb250aGx5LmNvbGxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyMxMGI5ODEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMTYsMTg1LDEyOSwuMTUpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5zaW9uOiAwLjM1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRSYWRpdXM6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtYWludGFpbkFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVnZW5kOiB7IHBvc2l0aW9uOiAnYm90dG9tJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogKGMpID0+IGAke2MuZGF0YXNldC5sYWJlbH06ICR7dGhpcy5tb25leShjLnJhdyl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6ICh2KSA9PiB0aGlzLm1vbmV5KHYpLnJlcGxhY2UoJ01YTicsICcnKS50cmltKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZW5kZXJBZ2luZ0NoYXJ0KCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnRzLmFnaW5nKSB0aGlzLmNoYXJ0cy5hZ2luZy5kZXN0cm95KCk7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLiRyZWZzLmFnaW5nQ2hhcnRSZWY/LmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5jaGFydHMuYWdpbmcgPSBuZXcgQ2hhcnQoY3R4LCB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2JhcicsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbHM6IHRoaXMuYWdpbmcubGFiZWxzLFxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0czogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnU2FsZG8gcGVuZGllbnRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuYWdpbmcuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogWycjMTBiOTgxJywgJyMzYjgyZjYnLCAnI2Y1OWUwYicsICcjZjk3MzE2JywgJyNlZjQ0NDQnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOCxcbiAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwbHVnaW5zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWdlbmQ6IHsgZGlzcGxheTogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IChjKSA9PiB0aGlzLm1vbmV5KGMucmF3KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5BdFplcm86IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja3M6IHsgY2FsbGJhY2s6ICh2KSA9PiB0aGlzLm1vbmV5KHYpLnJlcGxhY2UoJ01YTicsICcnKS50cmltKCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH0sXG4gICAgYmVmb3JlVW5tb3VudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhcnRzLm1vbnRobHkpIHRoaXMuY2hhcnRzLm1vbnRobHkuZGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5jaGFydHMuYWdpbmcpIHRoaXMuY2hhcnRzLmFnaW5nLmRlc3Ryb3koKTtcbiAgICB9LFxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmRhc2hib2FyZC13cmFwIHsgcGFkZGluZzogOHB4OyB9XG5cbi5rcGktY2FyZCB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBib3JkZXItcmFkaXVzOiAxNHB4O1xuICAgIHBhZGRpbmc6IDEuMjVyZW07XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMXJlbTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAxNHB4IHJnYmEoMCwwLDAsLjA2KTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsMCwwLC4wNCk7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMnMgZWFzZSwgYm94LXNoYWRvdyAuMnMgZWFzZTtcbn1cbi5rcGktY2FyZDpob3ZlciB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsgYm94LXNoYWRvdzogMCAxMHB4IDI0cHggcmdiYSgwLDAsMCwuMSk7IH1cbi5rcGktaWNvbiB7XG4gICAgd2lkdGg6IDU2cHg7IGhlaWdodDogNTZweDtcbiAgICBib3JkZXItcmFkaXVzOiAxNHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMS41cmVtOyBjb2xvcjogI2ZmZjtcbiAgICBmbGV4LXNocmluazogMDtcbn1cbi5rcGktYmx1ZSAgIC5rcGktaWNvbiB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMzYjgyZjYsICMxZDRlZDgpOyB9XG4ua3BpLWdyZWVuICAua3BpLWljb24geyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMTBiOTgxLCAjMDQ3ODU3KTsgfVxuLmtwaS15ZWxsb3cgLmtwaS1pY29uIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2Y1OWUwYiwgI2I0NTMwOSk7IH1cbi5rcGktcmVkICAgIC5rcGktaWNvbiB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNlZjQ0NDQsICNiOTFjMWMpOyB9XG5cbi5rcGktbGFiZWwgeyBmb250LXNpemU6IC44cmVtOyBjb2xvcjogIzZiNzI4MDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6IC41cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IH1cbi5rcGktdmFsdWUgeyBmb250LXNpemU6IDEuNnJlbTsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICMxMTE4Mjc7IGxpbmUtaGVpZ2h0OiAxLjE7IG1hcmdpbjogMnB4IDA7IH1cbi5rcGktc3ViICAgeyBmb250LXNpemU6IC44cmVtOyBjb2xvcjogIzZiNzI4MDsgfVxuXG4uY2hhcnQtY2FyZCB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBib3JkZXItcmFkaXVzOiAxNHB4O1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDE0cHggcmdiYSgwLDAsMCwuMDYpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwwLDAsLjA0KTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGhlaWdodDogMTAwJTtcbn1cbi5jaGFydC1jYXJkLWhlYWRlciB7XG4gICAgcGFkZGluZzogMXJlbSAxLjI1cmVtIC4yNXJlbTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YxZjVmOTtcbn1cbi5jaGFydC1jYXJkLWJvZHkgeyBwYWRkaW5nOiAxcmVtIDEuMjVyZW07IH1cblxuLmRhc2gtaGVhZGVyIGgyIHsgY29sb3I6ICMxMTE4Mjc7IH1cbi5maWx0ZXJzIC5mb3JtLWxhYmVsIHsgY29sb3I6ICM2YjcyODA7IH1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cIm11bHRpLXNlbGVjdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBkLWZsZXggZmxleC13cmFwIGFsaWduLWl0ZW1zLWNlbnRlclwiIEBjbGljaz1cImZvY3VzSW5wdXRcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyAnaXMtaW52YWxpZCc6IGVycm9yIH1cIj5cbiAgICAgICAgICAgIDxzcGFuIHYtZm9yPVwiaXRlbSBpbiBzZWxlY3RlZFwiIDprZXk9XCJpdGVtLmlkXCIgY2xhc3M9XCJiYWRnZSBtZS0xIG1iLTFcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZSBidG4tY2xvc2UtYmxhY2sgYnRuLXNtIG1zLTFcIiBAY2xpY2suc3RvcD1cInJlbW92ZShpdGVtKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cInNlYXJjaFwiIEBpbnB1dD1cImZpbHRlck9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIEBrZXlkb3duLmVudGVyLnByZXZlbnQ9XCJzZWxlY3RPcHRpb24oZmlsdGVyZWRbMF0pXCIgY2xhc3M9XCJib3JkZXItMCBmbGV4LWdyb3ctMVwiIHJlZj1cImlucHV0XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjY2lvbmUuLi5cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPHJvdyB5IGNvbCBlbGltaW5hZG9zIC0tPlxuICAgICAgICA8dWwgdi1pZj1cImZpbHRlcmVkLmxlbmd0aCA+IDBcIiBjbGFzcz1cImxpc3QtZ3JvdXAgbXQtMSBwb3NpdGlvbi1hYnNvbHV0ZSB6LTNcIlxuICAgICAgICAgICAgOnN0eWxlPVwieyB3aWR0aDogJHJlZnMuaW5wdXQgPyAkcmVmcy5pbnB1dC5vZmZzZXRXaWR0aCArICdweCcgOiAnMTAwJScsIG1heEhlaWdodDogJzIwMHB4Jywgb3ZlcmZsb3dZOiAnYXV0bycgfVwiPlxuICAgICAgICAgICAgPGxpIHYtZm9yPVwib3B0aW9uIGluIGZpbHRlcmVkXCIgOmtleT1cIm9wdGlvbi5pZFwiIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25cIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE9wdGlvbihvcHRpb24pXCI+XG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdNdWx0aVNlbGVjdCcsXG4gICAgcHJvcHM6IHtcbiAgICAgICAgb3B0aW9uczogeyB0eXBlOiBBcnJheSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogKCkgPT4gW10gfSxcbiAgICAgICAgZXJyb3I6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICAgIH0sXG4gICAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSwgICBcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0ZWQ6IFsuLi50aGlzLm1vZGVsVmFsdWVdLFxuICAgICAgICAgICAgc2VhcmNoOiAnJyxcbiAgICAgICAgICAgIGZpbHRlcmVkOiBbXVxuICAgICAgICB9XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICBtb2RlbFZhbHVlKG5ld1ZhbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFsuLi5uZXdWYWxdO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGZvY3VzSW5wdXQoKSB7XG4gICAgICAgICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlck9wdGlvbnMoKSB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hMb3dlciA9IHRoaXMuc2VhcmNoLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkID0gdGhpcy5vcHRpb25zLmZpbHRlcihvID0+XG4gICAgICAgICAgICAgICAgby5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoTG93ZXIpICYmICF0aGlzLnNlbGVjdGVkLnNvbWUocyA9PiBzLmlkID09PSBvLmlkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0T3B0aW9uKG9wdGlvbikge1xuICAgICAgICAgICAgaWYgKCFvcHRpb24pIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChvcHRpb24pO1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkID0gW107XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZShvcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkLmZpbHRlcihzID0+IHMuaWQgIT09IG9wdGlvbi5pZCk7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbi5tdWx0aS1zZWxlY3Qge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm11bHRpLXNlbGVjdCBpbnB1dCB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBtaW4td2lkdGg6IDE1MHB4O1xufVxuXG4ubGlzdC1ncm91cC1pdGVtIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2PlxuICAgICAgICA8ZGl2IHYtaWY9XCIhaXNSZWFkeVwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDgwdmg7XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgc3R5bGU9XCJ3aWR0aDogM3JlbTsgaGVpZ2h0OiAzcmVtO1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtM1wiPkNhcmdhbmRvIGRhdG9zIGRlIGVtcHJlc2EuLi48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgdi1lbHNlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyB0ZXh0LWNlbnRlciBtYi00IG0tc20tMFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIDpzcmM9XCJjb21wYW55TG9nb1wiIGFsdD1cIkxvZ29cIiBjbGFzcz1cImltZy1mbHVpZCByb3VuZGVkIHNoYWRvdy1zbSBib3JkZXIgdy01MFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj57eyBjb21wYW55Lm5hbWUgfX08L2gyPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTJcIj48c3Ryb25nPlJGQzo8L3N0cm9uZz4ge3sgY29tcGFueS5yZmMgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMlwiPjxzdHJvbmc+QWJyZXZpYWNpw7NuOjwvc3Ryb25nPiB7eyBjb21wYW55LmFiYnJldmlhdGlvbiB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkRpZ2l0YWxpemFjacOzbjo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgbXgtMSB0ZXh0LXdoaXRlXCIgOmNsYXNzPVwiY29tcGFueS5kaWdpdGl6YXRpb24gPyAnYmctc3VjY2VzcycgOiAnYmctc2Vjb25kYXJ5J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXBhbnkuZGlnaXRpemF0aW9uID8gJ1PDrScgOiAnTm8nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkVzdGF0dXM6PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIG14LTEgdGV4dC13aGl0ZVwiIDpjbGFzcz1cImNvbXBhbnkuYWN0aXZlID8gJ2JnLXN1Y2Nlc3MnIDogJ2JnLXNlY29uZGFyeSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21wYW55LmFjdGl2ZSA/ICdBY3Rpdm8nIDogJ0luYWN0aXZvJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5TZWN0b3Jlczo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZm9yPVwic2VjdG9yIGluIGNvbXBhbnkuc2VjdG9yc1wiIDprZXk9XCJzZWN0b3IuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2Ugcm91bmRlZC1waWxsIGJnLXByaW1hcnkgbXgtMSB0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VjdG9yLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UHJveWVjdG9zOjwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1mb3I9XCJwcm9qZWN0IGluIGNvbXBhbnkucHJvamVjdHNcIiA6a2V5PVwicHJvamVjdC5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSByb3VuZGVkLXBpbGwgYmctaW5mbyBteC0xIHRleHQtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb2plY3QubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBUYWJzIC0tPlxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgc3RpY2t5LXRvcCBiZy13aGl0ZSBwdC0zIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiIGRhdGEtYnMtdGFyZ2V0PVwiI2FkZHJlc3Nlc1wiPvCfk41cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWNjaW9uZXM8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2LWxpbmtcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbnRhY3RzXCI+8J+RpVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250YWN0b3M8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50IGJvcmRlciBwLTQgc2hhZG93LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERpcmVjY2lvbmVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1wYW5lIGZhZGUgc2hvdyBhY3RpdmVcIiBpZD1cImFkZHJlc3Nlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cImNvbXBhbnkuYWRkcmVzc2VzLmxlbmd0aFwiIGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCIoYWRkcmVzcywgaW5kZXgpIGluIGNvbXBhbnkuYWRkcmVzc2VzXCIgOmtleT1cImluZGV4XCIgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwiZnctYm9sZFwiPkRpcmVjY2nDs24ge3sgaW5kZXggKyAxIH19PC9oNj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+e3sgYWRkcmVzcy5zdHJlZXQgfX0ge3sgYWRkcmVzcy5leHRlcmlvcl9udW1iZXIgfX0ge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MuaW50ZXJpb3JfbnVtYmVyIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj5Db2xvbmlhOiB7eyBhZGRyZXNzLmNvbG9ueSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+Q2l1ZGFkOiB7eyBhZGRyZXNzLmNpdHkgfX0sIEVzdGFkbzoge3sgYWRkcmVzcy5zdGF0ZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+UGHDrXM6IHt7IGFkZHJlc3MuY291bnRyeSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+Q1A6IHt7IGFkZHJlc3MucG9zdGFsX2NvZGUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2UgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+U2luIGRpcmVjY2lvbmVzIHJlZ2lzdHJhZGFzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb250YWN0b3MgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgZmFkZVwiIGlkPVwiY29udGFjdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCJjb21wYW55LmNvbnRhY3RzLmxlbmd0aFwiIGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCIoY29udGFjdCwgaW5kZXgpIGluIGNvbXBhbnkuY29udGFjdHNcIiA6a2V5PVwiaW5kZXhcIiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDY+e3sgY29udGFjdC5uYW1lIH19IHt7IGNvbnRhY3QubGFzdG5hbWUgfX08L2g2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj48aSBjbGFzcz1cImJpIGJpLWVudmVsb3BlLWZpbGwgbWUtMSB0ZXh0LXByaW1hcnlcIj48L2k+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhY3QuZW1haWwgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiPjxpIGNsYXNzPVwiYmkgYmktcGhvbmUtZmlsbCBtZS0xIHRleHQtc3VjY2Vzc1wiPjwvaT57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFjdC5jZWxscGhvbmUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2UgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+U2luIGNvbnRhY3RvcyByZWdpc3RyYWRvczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ0RldGFpbENvbXBhbnknLFxuICAgIHByb3BzOiB7IGNvbXBhbnlJZDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH0gfSxcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNSZWFkeTogZmFsc2UsXG4gICAgICAgICAgICBjb21wYW55OiBudWxsXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgICBjb21wYW55TG9nbygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhbnk/LmxvZ28gfHwgJ2h0dHBzOi8vYmNhc3NldGNkbi5jb20vcHVibGljL2Jsb2cvd3AtY29udGVudC91cGxvYWRzLzIwMjIvMDkvMDEyMDMzNTUvYmx1ZS1idWlsZGluZy1jaXJjbGUtYnktc2ltcGxlcGl4ZWxzbC1icmFuZGNyb3dkLnBuZyc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hDb21wYW55KCk7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFzeW5jIGZldGNoQ29tcGFueSgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNSZWFkeSA9IGZhbHNlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuJGF4aW9zLmdldChgL2FwaS9jb21wYW55LyR7dGhpcy5jb21wYW55SWR9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wYW55ID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY29tcGFueTonLCBlcnJvcik7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbi5mYWRlLWVudGVyLWFjdGl2ZSxcbi5mYWRlLWxlYXZlLWFjdGl2ZSB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNHM7XG59XG5cbi5mYWRlLWVudGVyLWZyb20sXG4uZmFkZS1sZWF2ZS10byB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICAgIDxkaXY+XG4gICAgICAgIDxkaXYgdi1pZj1cIiFpc1JlYWR5XCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImhlaWdodDogODB2aDtcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnlcIiBzdHlsZT1cIndpZHRoOiAzcmVtOyBoZWlnaHQ6IDNyZW07XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+Q2FyZ2FuZG8gZGF0b3MgZGVsIGRldWRvci4uLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IHYtZWxzZT5cbiAgICAgICAgICAgIDwhLS0gSGVhZGVyIGRlbCBkZXVkb3IgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIHRleHQtY2VudGVyIG1iLTQgbS1zbS0wXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgOnNyYz1cImN1c3RvbWVyTG9nb1wiIGFsdD1cIkxvZ29cIiBjbGFzcz1cImltZy1mbHVpZCByb3VuZGVkIHNoYWRvdy1zbSBib3JkZXIgdy01MFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LWJvbGRcIj57eyBjdXN0b21lci5uYW1lIH19PC9oMj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+PHN0cm9uZz5SRkM6PC9zdHJvbmc+IHt7IGN1c3RvbWVyLnJmYyB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+PHN0cm9uZz5Ew61hcyBkZSBjcsOpZGl0bzo8L3N0cm9uZz4ge3sgY3VzdG9tZXIuY3JlZGl0IH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTJcIj48c3Ryb25nPk7Dum1lcm8gZGUgY3VlbnRhOjwvc3Ryb25nPiB7eyBjdXN0b21lci5hY2NvdW50IH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTJcIj48c3Ryb25nPlByb3llY3RvOjwvc3Ryb25nPiB7eyBjdXN0b21lci5wcm9qZWN0IH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTJcIj48c3Ryb25nPlNlY3Rvcjo8L3N0cm9uZz4ge3sgY3VzdG9tZXIuc2VjdG9yIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTJcIj48c3Ryb25nPlN1Y2VwdGlibGU6PC9zdHJvbmc+IHt7IGN1c3RvbWVyLmRpZ2l0aXphdGlvbiA/ICdTw60nIDogJ05vJyB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkVzdGF0dXM6PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIG14LTEgdGV4dC13aGl0ZVwiIDpjbGFzcz1cImN1c3RvbWVyLmFjdGl2ZSA/ICdiZy1zdWNjZXNzJyA6ICdiZy1zZWNvbmRhcnknXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VzdG9tZXIuYWN0aXZlID8gJ0FjdGl2bycgOiAnSW5hY3Rpdm8nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFRhYnMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBzdGlja3ktdG9wIGJnLXdoaXRlIHB0LTMgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5hdi1saW5rIGFjdGl2ZVwiIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCIgZGF0YS1icy10YXJnZXQ9XCIjYWRkcmVzc2VzXCI+8J+TjVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY2Npb25lczwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuYXYtbGlua1wiIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCIgZGF0YS1icy10YXJnZXQ9XCIjY29udGFjdHNcIj7wn5GlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhY3RvczwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuYXYtbGlua1wiIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCIgZGF0YS1icy10YXJnZXQ9XCIjbGlmZWN5Y2xlc1wiPvCflIQgQ2ljbG8gZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkYTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnQgYm9yZGVyIHAtNCBzaGFkb3ctc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGlyZWNjaW9uZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgZmFkZSBzaG93IGFjdGl2ZVwiIGlkPVwiYWRkcmVzc2VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwiY3VzdG9tZXIuYWRkcmVzc2VzLmxlbmd0aFwiIGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCIoYWRkcmVzcywgaW5kZXgpIGluIGN1c3RvbWVyLmFkZHJlc3Nlc1wiIDprZXk9XCJpbmRleFwiIGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgaC0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cImZ3LWJvbGRcIj5EaXJlY2Npw7NuIHt7IGluZGV4ICsgMSB9fTwvaDY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPnt7IGFkZHJlc3Muc3RyZWV0IH19IHt7IGFkZHJlc3MuZXh0ZXJpb3JfbnVtYmVyIH19IHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLmludGVyaW9yX251bWJlciB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+Q29sb25pYToge3sgYWRkcmVzcy5jb2xvbnkgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPkNpdWRhZDoge3sgYWRkcmVzcy5jaXR5IH19LCBFc3RhZG86IHt7IGFkZHJlc3Muc3RhdGUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlBhw61zOiB7eyBhZGRyZXNzLmNvdW50cnkgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiPkNQOiB7eyBhZGRyZXNzLnBvc3RhbF9jb2RlIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwidGV4dC1tdXRlZFwiPlNpbiBkaXJlY2Npb25lcyByZWdpc3RyYWRhczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ29udGFjdG9zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1wYW5lIGZhZGVcIiBpZD1cImNvbnRhY3RzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwiY3VzdG9tZXIuY29udGFjdHMubGVuZ3RoXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj1cIihjb250YWN0LCBpbmRleCkgaW4gY3VzdG9tZXIuY29udGFjdHNcIiA6a2V5PVwiaW5kZXhcIiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDY+e3sgY29udGFjdC5uYW1lIH19IHt7IGNvbnRhY3QubGFzdG5hbWUgfX08L2g2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj48aSBjbGFzcz1cImJpIGJpLWVudmVsb3BlLWZpbGwgbWUtMSB0ZXh0LXByaW1hcnlcIj48L2k+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhY3QuZW1haWwgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiPjxpIGNsYXNzPVwiYmkgYmktcGhvbmUtZmlsbCBtZS0xIHRleHQtc3VjY2Vzc1wiPjwvaT57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFjdC5jZWxscGhvbmUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2UgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+U2luIGNvbnRhY3RvcyByZWdpc3RyYWRvczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2ljbG8gZGUgVmlkYSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItcGFuZSBmYWRlXCIgaWQ9XCJsaWZlY3ljbGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwiY3VzdG9tZXIubGlmZWN5Y2xlcy5sZW5ndGhcIiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPVwiKHN0ZXAsIGluZGV4KSBpbiBjdXN0b21lci5saWZlY3ljbGVzXCIgOmtleT1cImluZGV4XCIgY2xhc3M9XCJjb2wtbWQtMTIgbWItNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgc2hhZG93LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJmdy1ib2xkXCI+UGFzbyB7eyBpbmRleCArIDEgfX06IHt7IHN0ZXAuc3RlcCB9fTwvaDY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPkRlc3BhY2hvOiB7eyBzdGVwLmRpc3BhdGNoIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj5Ew61hOiB7eyBzdGVwLmRheSB9fSB8IEhvcmFyaW86IHt7IHN0ZXAuc2NoZWR1bGUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPkRlcGFydGFtZW50bzoge3sgc3RlcC5hcGFydG1lbnQgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMlwiPjxzdHJvbmc+Q29tZW50YXJpbzo8L3N0cm9uZz4ge3sgc3RlcC5jb21tZW50IH19PC9wPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cInN0ZXAuYWRkcmVzc2VzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5EaXJlY2Npb25lczo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgdi1mb3I9XCIoYSwgaSkgaW4gc3RlcC5hZGRyZXNzZXNcIiA6a2V5PVwiaVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhLnN0cmVldCB9fSB7eyBhLmV4dGVyaW9yX251bWJlciB9fSB7eyBhLmludGVyaW9yX251bWJlciB9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuY29sb255IH19LCB7eyBhLmNpdHkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwic3RlcC5jb250YWN0cy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Q29udGFjdG9zOjwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSB2LWZvcj1cIihjLCBpKSBpbiBzdGVwLmNvbnRhY3RzXCIgOmtleT1cImlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYy5uYW1lIH19IHt7IGMubGFzdG5hbWUgfX0gLSB7eyBjLmVtYWlsIH19IC0ge3sgYy5jZWxscGhvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwic3RlcC5kb2N1bWVudHMgJiYgc3RlcC5kb2N1bWVudHMubGVuZ3RoXCIgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkRvY3VtZW50b3MgcmVxdWVyaWRvczo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXNtIHRhYmxlLWJvcmRlcmVkIG10LTEgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cInRhYmxlLWxpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5Eb2N1bWVudG88L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOjgwcHhcIj5Db3BpYXM8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk5vdGEgLyBJbnN0cnVjY2nDs248L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgdi1mb3I9XCIoZCwgaSkgaW4gc3RlcC5kb2N1bWVudHNcIiA6a2V5PVwiaVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGQuZG9jdW1lbnQgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXJcIj57eyBkLmNvcGllcyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgZC5ub3RlIHx8ICfigJQnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwibXQtMiB0ZXh0LW11dGVkIHNtYWxsXCI+U2luIGRvY3VtZW50b3MgcmVxdWVyaWRvczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwidGV4dC1tdXRlZFwiPlNpbiBwYXNvcyByZWdpc3RyYWRvczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ0RldGFpbEN1c3RvbWVyJyxcbiAgICBwcm9wczogeyBjdXN0b21lcklkOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSB9LFxuICAgIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc1JlYWR5OiBmYWxzZSxcbiAgICAgICAgICAgIGN1c3RvbWVyOiBudWxsXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgICBjdXN0b21lckxvZ28oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21lcj8ubG9nbyB8fCAnaHR0cHM6Ly9iY2Fzc2V0Y2RuLmNvbS9wdWJsaWMvYmxvZy93cC1jb250ZW50L3VwbG9hZHMvMjAyMi8wOS8wMTIwMzM1NS9ibHVlLWJ1aWxkaW5nLWNpcmNsZS1ieS1zaW1wbGVwaXhlbHNsLWJyYW5kY3Jvd2QucG5nJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgICAgdGhpcy5mZXRjaEN1c3RvbWVyKCk7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFzeW5jIGZldGNoQ3VzdG9tZXIoKSB7XG4gICAgICAgICAgICB0aGlzLmlzUmVhZHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLiRheGlvcy5nZXQoYC9hcGkvY3VzdG9tZXIvJHt0aGlzLmN1c3RvbWVySWR9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21lciA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGN1c3RvbWVyOicsIGVycm9yKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG48L3NjcmlwdD5cbjxzdHlsZT5cbi5mYWRlLWVudGVyLWFjdGl2ZSxcbi5mYWRlLWxlYXZlLWFjdGl2ZSB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNHM7XG59XG5cbi5mYWRlLWVudGVyLWZyb20sXG4uZmFkZS1sZWF2ZS10byB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwicmljaC1lZGl0b3IgYm9yZGVyIHJvdW5kZWRcIj5cblxuICAgICAgICA8IS0tIFRvb2xiYXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3ItdG9vbGJhciBkLWZsZXggZmxleC13cmFwIGdhcC0xIHAtMiBib3JkZXItYm90dG9tIGJnLWxpZ2h0XCI+XG5cbiAgICAgICAgICAgIDwhLS0gRGVzaGFjZXIgLyBSZWhhY2VyIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtc20gbWUtMVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cImVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnVuZG8oKS5ydW4oKVwiIHRpdGxlPVwiRGVzaGFjZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdW5kb1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJlZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5yZWRvKCkucnVuKClcIiB0aXRsZT1cIlJlaGFjZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcmVkb1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEZvcm1hdG8gdGV4dG8gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSBtZS0xXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwieyBhY3RpdmU6IGVkaXRvcj8uaXNBY3RpdmUoJ2JvbGQnKSB9XCJcbiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpXCIgdGl0bGU9XCJOZWdyaXRhXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWJvbGRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwieyBhY3RpdmU6IGVkaXRvcj8uaXNBY3RpdmUoJ2l0YWxpYycpIH1cIlxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJlZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVJdGFsaWMoKS5ydW4oKVwiIHRpdGxlPVwiQ3Vyc2l2YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pdGFsaWNcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwieyBhY3RpdmU6IGVkaXRvcj8uaXNBY3RpdmUoJ3VuZGVybGluZScpIH1cIlxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJlZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVVbmRlcmxpbmUoKS5ydW4oKVwiIHRpdGxlPVwiU3VicmF5YWRvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXVuZGVybGluZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IGFjdGl2ZTogZWRpdG9yPy5pc0FjdGl2ZSgnc3RyaWtlJykgfVwiXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cImVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN0cmlrZSgpLnJ1bigpXCIgdGl0bGU9XCJUYWNoYWRvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXN0cmlrZXRocm91Z2hcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBFbmNhYmV6YWRvcyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIG1lLTFcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgZnctYm9sZFwiXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cInsgYWN0aXZlOiBlZGl0b3I/LmlzQWN0aXZlKCdoZWFkaW5nJywgeyBsZXZlbDogMSB9KSB9XCJcbiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSGVhZGluZyh7IGxldmVsOiAxIH0pLnJ1bigpXCIgdGl0bGU9XCJUw610dWxvIDFcIj5cbiAgICAgICAgICAgICAgICAgICAgSDFcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IGFjdGl2ZTogZWRpdG9yPy5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWw6IDIgfSkgfVwiXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cImVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMiB9KS5ydW4oKVwiIHRpdGxlPVwiVMOtdHVsbyAyXCI+XG4gICAgICAgICAgICAgICAgICAgIEgyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwieyBhY3RpdmU6IGVkaXRvcj8uaXNBY3RpdmUoJ2hlYWRpbmcnLCB7IGxldmVsOiAzIH0pIH1cIlxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJlZGl0b3I/LmNoYWluKCkuZm9jdXMoKS50b2dnbGVIZWFkaW5nKHsgbGV2ZWw6IDMgfSkucnVuKClcIiB0aXRsZT1cIlTDrXR1bG8gM1wiPlxuICAgICAgICAgICAgICAgICAgICBIM1xuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gTGlzdGFzIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtc20gbWUtMVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cInsgYWN0aXZlOiBlZGl0b3I/LmlzQWN0aXZlKCdidWxsZXRMaXN0JykgfVwiXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cImVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUJ1bGxldExpc3QoKS5ydW4oKVwiIHRpdGxlPVwiTGlzdGEgY29uIHZpw7FldGFzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWxpc3QtdWxcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwieyBhY3RpdmU6IGVkaXRvcj8uaXNBY3RpdmUoJ29yZGVyZWRMaXN0JykgfVwiXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cImVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKClcIiB0aXRsZT1cIkxpc3RhIG51bWVyYWRhXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWxpc3Qtb2xcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBBbGluZWFjacOzbiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIG1lLTFcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IGFjdGl2ZTogZWRpdG9yPy5pc0FjdGl2ZSh7IHRleHRBbGlnbjogJ2xlZnQnIH0pIH1cIlxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJlZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oJ2xlZnQnKS5ydW4oKVwiIHRpdGxlPVwiQWxpbmVhciBpenF1aWVyZGFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYWxpZ24tbGVmdFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IGFjdGl2ZTogZWRpdG9yPy5pc0FjdGl2ZSh7IHRleHRBbGlnbjogJ2NlbnRlcicgfSkgfVwiXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cImVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbignY2VudGVyJykucnVuKClcIiB0aXRsZT1cIkNlbnRyYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYWxpZ24tY2VudGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cInsgYWN0aXZlOiBlZGl0b3I/LmlzQWN0aXZlKHsgdGV4dEFsaWduOiAncmlnaHQnIH0pIH1cIlxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJlZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oJ3JpZ2h0JykucnVuKClcIiB0aXRsZT1cIkFsaW5lYXIgZGVyZWNoYVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hbGlnbi1yaWdodFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIENvbG9yIGRlIHRleHRvIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtc20gbWUtMVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgbWItMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgdGl0bGU9XCJDb2xvciBkZSB0ZXh0b1wiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7IHBhZGRpbmc6IDAuMnJlbSAwLjVyZW07IGdhcDogNHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZm9udFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1kb3RcIiA6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvciB9XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgOnZhbHVlPVwiY3VycmVudENvbG9yXCIgQGlucHV0PVwic2V0Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OjA7IHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDowOyBoZWlnaHQ6MDtcIj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRW5sYWNlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtc20gbWUtMVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cInsgYWN0aXZlOiBlZGl0b3I/LmlzQWN0aXZlKCdsaW5rJykgfVwiXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInRvZ2dsZUxpbmtJbnB1dFwiIHRpdGxlPVwiSW5zZXJ0YXIgZW5sYWNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWxpbmtcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB2LWlmPVwiZWRpdG9yPy5pc0FjdGl2ZSgnbGluaycpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cImVkaXRvcj8uY2hhaW4oKS5mb2N1cygpLnVuc2V0TGluaygpLnJ1bigpXCIgdGl0bGU9XCJRdWl0YXIgZW5sYWNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXVubGlua1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEltYWdlbiBwb3IgVVJMIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtc20gbWUtMVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInRvZ2dsZUltYWdlSW5wdXRcIiB0aXRsZT1cIkluc2VydGFyIGltYWdlbiBwb3IgVVJMXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWltYWdlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVGFibGEgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSBtZS0xXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiaW5zZXJ0VGFibGVcIiB0aXRsZT1cIkluc2VydGFyIHRhYmxhIDPDlzNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGFibGVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJlZGl0b3I/LmlzQWN0aXZlKCd0YWJsZScpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuYWRkUm93QWZ0ZXIoKS5ydW4oKVwiIHRpdGxlPVwiQWdyZWdhciBmaWxhIGFiYWpvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICArZmlsYVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJlZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5kZWxldGVSb3coKS5ydW4oKVwiIHRpdGxlPVwiRWxpbWluYXIgZmlsYVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgLWZpbGFcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuYWRkQ29sdW1uQWZ0ZXIoKS5ydW4oKVwiIHRpdGxlPVwiQWdyZWdhciBjb2x1bW5hIGRlcmVjaGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICtjb2xcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuZGVsZXRlQ29sdW1uKCkucnVuKClcIiB0aXRsZT1cIkVsaW1pbmFyIGNvbHVtbmFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIC1jb2xcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlciBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuZGVsZXRlVGFibGUoKS5ydW4oKVwiIHRpdGxlPVwiRWxpbWluYXIgdGFibGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBJbnB1dCBkZSBVUkwgcGFyYSBlbmxhY2UgLS0+XG4gICAgICAgIDxkaXYgdi1pZj1cInNob3dMaW5rSW5wdXRcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcC0yIGJvcmRlci1ib3R0b20gYmctbGlnaHRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21hbGwgdGV4dC1tdXRlZFwiPlVSTCBkZWwgZW5sYWNlOjwvc3Bhbj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgdi1tb2RlbD1cImxpbmtVcmxcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiaHR0cHM6Ly9lamVtcGxvLmNvbVwiIEBrZXlkb3duLmVudGVyLnByZXZlbnQ9XCJhcHBseUxpbmtcIiBhdXRvZm9jdXM+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBAY2xpY2s9XCJhcHBseUxpbmtcIj5BcGxpY2FyPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiIEBjbGljaz1cInNob3dMaW5rSW5wdXQgPSBmYWxzZVwiPkNhbmNlbGFyPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gSW5wdXQgZGUgVVJMIHBhcmEgaW1hZ2VuIC0tPlxuICAgICAgICA8ZGl2IHYtaWY9XCJzaG93SW1hZ2VJbnB1dFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgYm9yZGVyLWJvdHRvbSBiZy1saWdodFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWFsbCB0ZXh0LW11dGVkXCI+VVJMIGRlIGltYWdlbjo8L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInVybFwiIHYtbW9kZWw9XCJpbWFnZVVybFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJodHRwczovL2VqZW1wbG8uY29tL2ltYWdlbi5wbmdcIiBAa2V5ZG93bi5lbnRlci5wcmV2ZW50PVwiYXBwbHlJbWFnZVwiIGF1dG9mb2N1cz5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIEBjbGljaz1cImFwcGx5SW1hZ2VcIj5JbnNlcnRhcjwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiBAY2xpY2s9XCJzaG93SW1hZ2VJbnB1dCA9IGZhbHNlXCI+Q2FuY2VsYXI8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSDDgXJlYSBkZSBlc2NyaXR1cmEgLS0+XG4gICAgICAgIDxlZGl0b3ItY29udGVudCA6ZWRpdG9yPVwiZWRpdG9yXCIgY2xhc3M9XCJlZGl0b3ItY29udGVudCBweC0zIHB5LTJcIiAvPlxuXG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50IH0gZnJvbSAnQHRpcHRhcC92dWUtMyc7XG5pbXBvcnQgU3RhcnRlcktpdCBmcm9tICdAdGlwdGFwL3N0YXJ0ZXIta2l0JztcbmltcG9ydCBVbmRlcmxpbmUgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUnO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1yb3cnO1xuaW1wb3J0IHsgVGFibGVIZWFkZXIgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1oZWFkZXInO1xuaW1wb3J0IHsgVGFibGVDZWxsIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtY2VsbCc7XG5pbXBvcnQgSW1hZ2UgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnO1xuaW1wb3J0IExpbmsgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGluayc7XG5pbXBvcnQgVGV4dEFsaWduIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQtYWxpZ24nO1xuaW1wb3J0IHsgVGV4dFN0eWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dC1zdHlsZSc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29sb3InO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ1JpY2hFbWFpbEVkaXRvcicsXG4gICAgY29tcG9uZW50czogeyBFZGl0b3JDb250ZW50IH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgfSxcbiAgICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuICAgIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlZGl0b3I6IG51bGwsXG4gICAgICAgICAgICBjdXJyZW50Q29sb3I6ICcjMDAwMDAwJyxcbiAgICAgICAgICAgIHNob3dMaW5rSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgbGlua1VybDogJycsXG4gICAgICAgICAgICBzaG93SW1hZ2VJbnB1dDogZmFsc2UsXG4gICAgICAgICAgICBpbWFnZVVybDogJycsXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgICAgICAgZXh0ZW5zaW9uczogW1xuICAgICAgICAgICAgICAgIFN0YXJ0ZXJLaXQsXG4gICAgICAgICAgICAgICAgVW5kZXJsaW5lLFxuICAgICAgICAgICAgICAgIFRhYmxlLmNvbmZpZ3VyZSh7IHJlc2l6YWJsZTogdHJ1ZSB9KSxcbiAgICAgICAgICAgICAgICBUYWJsZVJvdyxcbiAgICAgICAgICAgICAgICBUYWJsZUhlYWRlcixcbiAgICAgICAgICAgICAgICBUYWJsZUNlbGwsXG4gICAgICAgICAgICAgICAgSW1hZ2UuY29uZmlndXJlKHsgaW5saW5lOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgICBMaW5rLmNvbmZpZ3VyZSh7IG9wZW5PbkNsaWNrOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgICBUZXh0QWxpZ24uY29uZmlndXJlKHsgdHlwZXM6IFsnaGVhZGluZycsICdwYXJhZ3JhcGgnXSB9KSxcbiAgICAgICAgICAgICAgICBUZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgQ29sb3IsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY29udGVudDogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgICAgICAgb25VcGRhdGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHRoaXMuZWRpdG9yLmdldEhUTUwoKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGJlZm9yZVVubW91bnQoKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5kZXN0cm95KCk7XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICBtb2RlbFZhbHVlKHZhbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yICYmIHZhbCAhPT0gdGhpcy5lZGl0b3IuZ2V0SFRNTCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuc2V0Q29udGVudCh2YWwsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgc2V0Q29sb3IoZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29sb3IgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuc2V0Q29sb3IoZS50YXJnZXQudmFsdWUpLnJ1bigpO1xuICAgICAgICB9LFxuICAgICAgICB0b2dnbGVMaW5rSW5wdXQoKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dJbWFnZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxpbmtVcmwgPSB0aGlzLmVkaXRvcj8uZ2V0QXR0cmlidXRlcygnbGluaycpLmhyZWYgfHwgJyc7XG4gICAgICAgICAgICB0aGlzLnNob3dMaW5rSW5wdXQgPSAhdGhpcy5zaG93TGlua0lucHV0O1xuICAgICAgICB9LFxuICAgICAgICBhcHBseUxpbmsoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGlua1VybC50cmltKCkpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuc2V0TGluayh7IGhyZWY6IHRoaXMubGlua1VybCB9KS5ydW4oKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpbmtJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5saW5rVXJsID0gJyc7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZUltYWdlSW5wdXQoKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dMaW5rSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0ltYWdlSW5wdXQgPSAhdGhpcy5zaG93SW1hZ2VJbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgYXBwbHlJbWFnZSgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pbWFnZVVybC50cmltKCkpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yPy5jaGFpbigpLmZvY3VzKCkuc2V0SW1hZ2UoeyBzcmM6IHRoaXMuaW1hZ2VVcmwgfSkucnVuKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dJbWFnZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmltYWdlVXJsID0gJyc7XG4gICAgICAgIH0sXG4gICAgICAgIGluc2VydFRhYmxlKCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3I/LmNoYWluKCkuZm9jdXMoKS5pbnNlcnRUYWJsZSh7IHJvd3M6IDMsIGNvbHM6IDMsIHdpdGhIZWFkZXJSb3c6IHRydWUgfSkucnVuKCk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5jb2xvci1kb3Qge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMTBweDtcbiAgICBoZWlnaHQ6IDEwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7XG59XG5cbi5lZGl0b3ItY29udGVudCA6ZGVlcCguUHJvc2VNaXJyb3IpIHtcbiAgICBtaW4taGVpZ2h0OiAyNjBweDtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGZvbnQtc2l6ZTogMC45NXJlbTtcbn1cblxuLmVkaXRvci1jb250ZW50IDpkZWVwKC5Qcm9zZU1pcnJvciBwKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMC40cmVtO1xufVxuXG4uZWRpdG9yLWNvbnRlbnQgOmRlZXAoLlByb3NlTWlycm9yIGgxKSxcbi5lZGl0b3ItY29udGVudCA6ZGVlcCguUHJvc2VNaXJyb3IgaDIpLFxuLmVkaXRvci1jb250ZW50IDpkZWVwKC5Qcm9zZU1pcnJvciBoMykge1xuICAgIG1hcmdpbi10b3A6IDAuNnJlbTtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjRyZW07XG59XG5cbi5lZGl0b3ItY29udGVudCA6ZGVlcCguUHJvc2VNaXJyb3IgdWwpLFxuLmVkaXRvci1jb250ZW50IDpkZWVwKC5Qcm9zZU1pcnJvciBvbCkge1xuICAgIHBhZGRpbmctbGVmdDogMS41cmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNHJlbTtcbn1cblxuLmVkaXRvci1jb250ZW50IDpkZWVwKC5Qcm9zZU1pcnJvciBhKSB7XG4gICAgY29sb3I6ICMwZDZlZmQ7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZWRpdG9yLWNvbnRlbnQgOmRlZXAoLlByb3NlTWlycm9yIGltZykge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMC41cmVtIDA7XG59XG5cbi5lZGl0b3ItY29udGVudCA6ZGVlcCguUHJvc2VNaXJyb3IgdGFibGUpIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMC41cmVtIDA7XG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbn1cblxuLmVkaXRvci1jb250ZW50IDpkZWVwKC5Qcm9zZU1pcnJvciB0aCksXG4uZWRpdG9yLWNvbnRlbnQgOmRlZXAoLlByb3NlTWlycm9yIHRkKSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RlZTJlNjtcbiAgICBwYWRkaW5nOiA2cHggMTBweDtcbiAgICBtaW4td2lkdGg6IDYwcHg7XG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5lZGl0b3ItY29udGVudCA6ZGVlcCguUHJvc2VNaXJyb3IgdGgpIHtcbiAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5lZGl0b3ItY29udGVudCA6ZGVlcCguUHJvc2VNaXJyb3IgLnNlbGVjdGVkQ2VsbDo6YWZ0ZXIpIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6IDA7XG4gICAgYmFja2dyb3VuZDogcmdiYSgxMywgMTEwLCAyNTMsIDAuMTIpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0aXRsZSBmdy1ib2xkXCI+8J+TqSBIaWxvIGRlIGNvbnZlcnNhY2nDs248L2gzPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgdi1pZj1cImxvYWRpbmdNZXNzYWdlc1wiIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBweS0zXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zcGlubmVyIGZhLXNwaW5cIj48L2k+IENhcmdhbmRvIG1lbnNhamVzLi4uXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgdi1lbHNlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cImVycm9yc0NvbnZlcnNhdGlvblwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGVycm9yc0NvbnZlcnNhdGlvbiB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHYtZm9yPVwibWVzc2FnZSBpbiBtZXNzYWdlc1wiIDprZXk9XCJtZXNzYWdlLmlkXCIgY2xhc3M9XCJjYXJkIHNoYWRvdy1zbSBtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJnLWxpZ2h0IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgbWVzc2FnZS5mcm9tIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgbXMtMlwiPnt7IG1lc3NhZ2UuZGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctcHJpbWFyeSB0ZXh0LXdoaXRlXCI+e3sgbWVzc2FnZS5zdWJqZWN0IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaHRtbD1cIm1lc3NhZ2UuYm9keVwiIGNsYXNzPVwiZW1haWwtYm9keVwiPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnkgbXQtM1wiIEBjbGljaz1cIm9wZW5SZXBseU1vZGFsKG1lc3NhZ2UpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1yZXBseVwiPjwvaT4gUmVzcG9uZGVyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cIm1lc3NhZ2UuYXR0YWNobWVudHMgJiYgbWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGhcIiBjbGFzcz1cIm10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cImZ3LWJvbGRcIj7wn5OOIEFkanVudG9zPC9oNj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1mb3I9XCJmaWxlIGluIG1lc3NhZ2UuYXR0YWNobWVudHNcIiA6a2V5PVwiZmlsZS5hdHRhY2htZW50SWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6aHJlZj1cImAvYXBpL2ludm9pY2UvYXR0YWNobWVudD9tc2dJZD0ke2VuY29kZVVSSUNvbXBvbmVudChtZXNzYWdlLmlkKX0mYXR0SWQ9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZS5hdHRhY2htZW50SWQpfWBcIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbGUuZmlsZW5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBCb3TDs24gcGFyYSBudWV2byBjb3JyZW8gLS0+XG4gICAgICAgIDxidXR0b24gdi1pZj1cIiF0aHJlYWRJZFwiIHR5cGU9XCJidXR0b25cIiBAY2xpY2s9XCJvcGVuU2VuZE1vZGFsXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBhcGVyLXBsYW5lXCI+PC9pPiBFbnZpYXIgY29ycmVvXG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0gTW9kYWwgRW52aWFyIENvcnJlbyA9PT09PT09PT09PT09PT09PT09PSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlbmRFbWFpbE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGZvcm0gQHN1Ym1pdC5wcmV2ZW50PVwic2VuZEVtYWlsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC14bCBtb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj7inInvuI8gTnVldm8gY29ycmVvPC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cImVycm9yc1wiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCI+e3sgZXJyb3JzIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwic3VjY2Vzc01lc3NhZ2VcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIj57eyBzdWNjZXNzTWVzc2FnZSB9fTwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkRlc3RpbmF0YXJpbzwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHYtbW9kZWw9XCJlbWFpbERhdGEudG9cIiByZXF1aXJlZCAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkFzdW50bzwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdi1tb2RlbD1cImVtYWlsRGF0YS5zdWJqZWN0XCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5NZW5zYWplPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJpY2hFbWFpbEVkaXRvciB2LW1vZGVsPVwiZW1haWxEYXRhLm1lc3NhZ2VCb2R5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRqdW50b3MgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkFkanVudG9zPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc20gbWItMFwiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGFwZXJjbGlwIG1lLTFcIj48L2k+IEFkanVudGFyIGFyY2hpdm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBtdWx0aXBsZSBAY2hhbmdlPVwiaGFuZGxlRmlsZVNlbGVjdCgkZXZlbnQsICdzZW5kJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj5Nw6F4LiA0IE1CIHBvciBhcmNoaXZvPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwic2VuZEF0dGFjaG1lbnRzLmxlbmd0aFwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1mb3I9XCIoYXR0LCBpKSBpbiBzZW5kQXR0YWNobWVudHNcIiA6a2V5PVwiaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSBiZy1saWdodCB0ZXh0LWRhcmsgYm9yZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOjAuODVyZW07IHBhZGRpbmc6IDZweCAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbGUgbWUtMVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdHQubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPih7eyBmb3JtYXRTaXplKGF0dC5zaXplKSB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgYnRuLWNsb3NlIG1zLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTowLjZyZW07XCIgQGNsaWNrPVwicmVtb3ZlQXR0YWNobWVudChpLCAnc2VuZCcpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNhbmNlbGFyPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiA6ZGlzYWJsZWQ9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zcGlubmVyIGZhLXNwaW5cIj48L2k+IEVudmlhbmRvLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1lbHNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGFwZXItcGxhbmVcIj48L2k+IEVudmlhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSBNb2RhbCBSZXNwb25kZXIgPT09PT09PT09PT09PT09PT09PT0gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbCBmYWRlXCIgaWQ9XCJyZXBseU1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGZvcm0gQHN1Ym1pdC5wcmV2ZW50PVwic2VuZFJlcGx5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC14bCBtb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcmVwbHkgbWUtMVwiPjwvaT4gUmVzcG9uZGVyIGE6IHt7IHJlcGx5RGF0YS5zdWJqZWN0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cInJlcGx5RXJyb3JcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiPnt7IHJlcGx5RXJyb3IgfX08L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5NZW5zYWplPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJpY2hFbWFpbEVkaXRvciB2LW1vZGVsPVwicmVwbHlEYXRhLmJvZHlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGp1bnRvcyBlbiByZXNwdWVzdGEgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkFkanVudG9zPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc20gbWItMFwiIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGFwZXJjbGlwIG1lLTFcIj48L2k+IEFkanVudGFyIGFyY2hpdm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBtdWx0aXBsZSBAY2hhbmdlPVwiaGFuZGxlRmlsZVNlbGVjdCgkZXZlbnQsICdyZXBseScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+TcOheC4gNCBNQiBwb3IgYXJjaGl2bzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cInJlcGx5QXR0YWNobWVudHMubGVuZ3RoXCIgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWZvcj1cIihhdHQsIGkpIGluIHJlcGx5QXR0YWNobWVudHNcIiA6a2V5PVwiaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSBiZy1saWdodCB0ZXh0LWRhcmsgYm9yZGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOjAuODVyZW07IHBhZGRpbmc6IDZweCAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbGUgbWUtMVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdHQubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPih7eyBmb3JtYXRTaXplKGF0dC5zaXplKSB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgbXMtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOjAuNnJlbTtcIiBAY2xpY2s9XCJyZW1vdmVBdHRhY2htZW50KGksICdyZXBseScpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNhbmNlbGFyPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIHR5cGU9XCJzdWJtaXRcIiA6ZGlzYWJsZWQ9XCJsb2FkaW5nUmVwbHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImxvYWRpbmdSZXBseVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc3Bpbm5lciBmYS1zcGluXCI+PC9pPiBFbnZpYW5kby4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXJlcGx5IG1lLTFcIj48L2k+IEVudmlhciByZXNwdWVzdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFJpY2hFbWFpbEVkaXRvciBmcm9tICcuL1JpY2hFbWFpbEVkaXRvci52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50czogeyBSaWNoRW1haWxFZGl0b3IgfSxcbiAgICBwcm9wczogWydpbnZvaWNlSWQnLCAndGhyZWFkSWQnXSxcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZXM6IFtdLFxuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBsb2FkaW5nTWVzc2FnZXM6IGZhbHNlLFxuICAgICAgICAgICAgbG9hZGluZ1JlcGx5OiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yczogbnVsbCxcbiAgICAgICAgICAgIHJlcGx5RXJyb3I6IG51bGwsXG4gICAgICAgICAgICBlcnJvcnNDb252ZXJzYXRpb246IG51bGwsXG4gICAgICAgICAgICBzdWNjZXNzTWVzc2FnZTogJycsXG4gICAgICAgICAgICBlbWFpbERhdGE6IHtcbiAgICAgICAgICAgICAgICB0bzogJycsXG4gICAgICAgICAgICAgICAgc3ViamVjdDogJycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZUJvZHk6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbmRBdHRhY2htZW50czogW10sXG4gICAgICAgICAgICByZXBseURhdGE6IHtcbiAgICAgICAgICAgICAgICB0aHJlYWRJZDogJycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiAnJyxcbiAgICAgICAgICAgICAgICB0bzogJycsXG4gICAgICAgICAgICAgICAgc3ViamVjdDogJycsXG4gICAgICAgICAgICAgICAgYm9keTogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVwbHlBdHRhY2htZW50czogW10sXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgICB0aGlzLmZldGNoRW1haWxzKCk7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGFzeW5jIGZldGNoRW1haWxzKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRocmVhZElkKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVycm9yc0NvbnZlcnNhdGlvbiA9ICcnO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuJGF4aW9zLmdldChgL2FwaS9pbnZvaWNlLyR7dGhpcy5pbnZvaWNlSWR9L2VtYWlsc2ApO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXMgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yc0NvbnZlcnNhdGlvbiA9IGVycm9yLnJlc3BvbnNlPy5kYXRhPy5lcnJvciB8fCAnRXJyb3IgYWwgb2J0ZW5lciBjb252ZXJzYWNpw7NuIGRlbCBjb3JyZW8uJztcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBvcGVuU2VuZE1vZGFsKCkge1xuICAgICAgICAgICAgdGhpcy5lbWFpbERhdGEgPSB7IHRvOiAnJywgc3ViamVjdDogJycsIG1lc3NhZ2VCb2R5OiAnJyB9O1xuICAgICAgICAgICAgdGhpcy5zZW5kQXR0YWNobWVudHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIGNvbnN0IG1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VuZEVtYWlsTW9kYWwnKSk7XG4gICAgICAgICAgICBtb2RhbC5zaG93KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgc2VuZEVtYWlsKCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSAnJztcbiAgICAgICAgICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy4kYXhpb3MucG9zdChcbiAgICAgICAgICAgICAgICAgICAgYC9hcGkvaW52b2ljZS8ke3RoaXMuaW52b2ljZUlkfS9zZW5kL2VtYWlsYCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5lbWFpbERhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50czogdGhpcy5zZW5kQXR0YWNobWVudHMubWFwKGEgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGU6IGEuY29udGVudFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudEJ5dGVzOiBhLmNvbnRlbnRCeXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSA9IHJlc3BvbnNlLmRhdGEubWVzc2FnZSB8fCAnQ29ycmVvIGVudmlhZG8gZXhpdG9zYW1lbnRlJztcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKSwgMTIwMCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8ICdFcnJvciBhbCBlbnZpYXIgZWwgY29ycmVvLic7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9wZW5SZXBseU1vZGFsKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbHlEYXRhID0ge1xuICAgICAgICAgICAgICAgIHRocmVhZElkOiB0aGlzLnRocmVhZElkLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogbWVzc2FnZS5pZCxcbiAgICAgICAgICAgICAgICB0bzogbWVzc2FnZS5mcm9tLFxuICAgICAgICAgICAgICAgIHN1YmplY3Q6IG1lc3NhZ2Uuc3ViamVjdCxcbiAgICAgICAgICAgICAgICBib2R5OiAnJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnJlcGx5QXR0YWNobWVudHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucmVwbHlFcnJvciA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBtb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcGx5TW9kYWwnKSk7XG4gICAgICAgICAgICBtb2RhbC5zaG93KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgc2VuZFJlcGx5KCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nUmVwbHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZXBseUVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kYXhpb3MucG9zdChcbiAgICAgICAgICAgICAgICAgICAgYC9hcGkvaW52b2ljZS8ke3RoaXMuaW52b2ljZUlkfS9yZXBseS9lbWFpbGAsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMucmVwbHlEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHM6IHRoaXMucmVwbHlBdHRhY2htZW50cy5tYXAoYSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGEubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogYS5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50Qnl0ZXM6IGEuY29udGVudEJ5dGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKSwgMTIwMCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGx5RXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8ICdFcnJvciBhbCBlbnZpYXIgbGEgcmVzcHVlc3RhLic7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1JlcGx5ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgaGFuZGxlRmlsZVNlbGVjdChldmVudCwgdGFyZ2V0KSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20oZXZlbnQudGFyZ2V0LmZpbGVzKTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSB0YXJnZXQgPT09ICdzZW5kJyA/IHRoaXMuc2VuZEF0dGFjaG1lbnRzIDogdGhpcy5yZXBseUF0dGFjaG1lbnRzO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IDQgKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgICAgICAgICAgICBhbGVydChgRWwgYXJjaGl2byBcIiR7ZmlsZS5uYW1lfVwiIHN1cGVyYSBlbCBsw61taXRlIGRlIDQgTUIgeSBubyBzZSBhZGp1bnRhcsOhLmApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudEJ5dGVzID0gYXdhaXQgdGhpcy5maWxlVG9CYXNlNjQoZmlsZSk7XG4gICAgICAgICAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCeXRlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZUF0dGFjaG1lbnQoaW5kZXgsIHRhcmdldCkge1xuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gJ3NlbmQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQXR0YWNobWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBseUF0dGFjaG1lbnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZmlsZVRvQmFzZTY0KGZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0LnNwbGl0KCcsJylbMV0pO1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZm9ybWF0U2l6ZShieXRlcykge1xuICAgICAgICAgICAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGJ5dGVzICsgJyBCJztcbiAgICAgICAgICAgIGlmIChieXRlcyA8IDEwMjQgKiAxMDI0KSByZXR1cm4gKGJ5dGVzIC8gMTAyNCkudG9GaXhlZCgxKSArICcgS0InO1xuICAgICAgICAgICAgcmV0dXJuIChieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSkgKyAnIE1CJztcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmVtYWlsLWJvZHkge1xuICAgIGZvbnQtc2l6ZTogMC45NXJlbTtcbn1cbjwvc3R5bGU+XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/