@wavemaker/app-ng-runtime 11.12.1-rc.221 → 11.13.0-rc.222
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-task/bundles/index.umd.js +26 -24
- package/build-task/esm2022/containers/repeat-template.build.mjs +4 -2
- package/build-task/esm2022/data/form/form.build.mjs +4 -2
- package/build-task/esm2022/data/table/table-row/table-row.build.mjs +5 -3
- package/build-task/esm2022/page/page-content/page-content.build.mjs +6 -7
- package/build-task/esm2022/page/page.build.mjs +6 -7
- package/build-task/esm2022/partial/partial.build.mjs +6 -7
- package/build-task/esm2022/prefab/prefab-container/prefab-container.build.mjs +6 -7
- package/build-task/fesm2022/index.mjs +26 -24
- package/build-task/fesm2022/index.mjs.map +1 -1
- package/components/data/live-table/bundles/index.umd.js +4 -2
- package/components/data/live-table/esm2022/live-table.component.mjs +5 -3
- package/components/data/live-table/fesm2022/index.mjs +4 -2
- package/components/data/live-table/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/bundles/index.umd.js +4 -4
- package/components/data/pagination/esm2022/pagination.component.mjs +5 -5
- package/components/data/pagination/fesm2022/index.mjs +4 -4
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/design-dialog/bundles/index.umd.js +6 -12
- package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +7 -13
- package/components/dialogs/design-dialog/fesm2022/index.mjs +6 -12
- package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/iframe-dialog/bundles/index.umd.js +9 -16
- package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +8 -15
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs +7 -14
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/base-date-time.component.d.ts +6 -0
- package/components/input/epoch/bundles/index.umd.js +54 -31
- package/components/input/epoch/esm2022/base-date-time.component.mjs +16 -5
- package/components/input/epoch/esm2022/date-time/date-time.component.mjs +22 -15
- package/components/input/epoch/esm2022/time/time.component.mjs +19 -14
- package/components/input/epoch/fesm2022/index.mjs +54 -31
- package/components/input/epoch/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/bundles/index.umd.js +9 -9
- package/components/input/slider/esm2022/slider.component.mjs +10 -10
- package/components/input/slider/fesm2022/index.mjs +9 -9
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/core/bundles/index.umd.js +3 -0
- package/core/esm2022/utils/wm-project-properties.mjs +4 -1
- package/core/fesm2022/index.mjs +3 -0
- package/core/fesm2022/index.mjs.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +1 -1
- package/runtime/base/esm2022/services/i18n.service.mjs +2 -2
- package/runtime/base/fesm2022/index.mjs +1 -1
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/security/bundles/index.umd.js +2 -2
- package/security/esm2022/security.service.mjs +3 -3
- package/security/fesm2022/index.mjs +2 -2
- package/security/fesm2022/index.mjs.map +1 -1
- package/transpiler/bundles/index.umd.js +0 -13
- package/transpiler/esm2022/build.mjs +1 -14
- package/transpiler/fesm2022/index.mjs +0 -13
- package/transpiler/fesm2022/index.mjs.map +1 -1
- package/variables/bundles/index.umd.js +1 -1
- package/variables/esm2022/service/metadata-service/metadata.service.mjs +2 -2
- package/variables/fesm2022/index.mjs +1 -1
- package/variables/fesm2022/index.mjs.map +1 -1
- package/scripts/hammerjs/hammer.min.js +0 -7
|
@@ -202,7 +202,7 @@ function PaginationComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
202
202
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
203
203
|
i0.ɵɵclassMapInterpolate1("pagination advanced ", ctx_r1.navigationClass, "");
|
|
204
204
|
i0.ɵɵadvance();
|
|
205
|
-
i0.ɵɵconditional(ctx_r1.allowpagesizechange ? 1 : -1);
|
|
205
|
+
i0.ɵɵconditional(ctx_r1.allowpagesizechange && (ctx_r1.pageSizeOptions == null ? null : ctx_r1.pageSizeOptions[0]) < (ctx_r1.rowSummary == null ? null : ctx_r1.rowSummary.totalRecords) ? 1 : -1);
|
|
206
206
|
i0.ɵɵadvance();
|
|
207
207
|
i0.ɵɵconditional(!(ctx_r1.dataSize <= ctx_r1.maxResults) ? 2 : -1);
|
|
208
208
|
i0.ɵɵadvance();
|
|
@@ -311,7 +311,7 @@ function PaginationComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
311
311
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
312
312
|
i0.ɵɵclassMapInterpolate1("pager ", ctx_r1.navigationClass, "");
|
|
313
313
|
i0.ɵɵadvance();
|
|
314
|
-
i0.ɵɵconditional(ctx_r1.allowpagesizechange ? 1 : -1);
|
|
314
|
+
i0.ɵɵconditional(ctx_r1.allowpagesizechange && (ctx_r1.pageSizeOptions == null ? null : ctx_r1.pageSizeOptions[0]) < (ctx_r1.rowSummary == null ? null : ctx_r1.rowSummary.totalRecords) ? 1 : -1);
|
|
315
315
|
i0.ɵɵadvance();
|
|
316
316
|
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(12, _c2, ctx_r1.isDisablePrevious));
|
|
317
317
|
i0.ɵɵadvance();
|
|
@@ -413,7 +413,7 @@ function PaginationComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
413
413
|
i0.ɵɵtemplate(0, PaginationComponent_Conditional_2_Conditional_0_Template, 9, 4)(1, PaginationComponent_Conditional_2_Conditional_1_Template, 1, 13, "pagination", 36);
|
|
414
414
|
} if (rf & 2) {
|
|
415
415
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
416
|
-
i0.ɵɵconditional(ctx_r1.allowpagesizechange ? 0 : -1);
|
|
416
|
+
i0.ɵɵconditional(ctx_r1.allowpagesizechange && (ctx_r1.pageSizeOptions == null ? null : ctx_r1.pageSizeOptions[0]) < (ctx_r1.rowSummary == null ? null : ctx_r1.rowSummary.totalRecords) ? 0 : -1);
|
|
417
417
|
i0.ɵɵadvance();
|
|
418
418
|
i0.ɵɵconditional(!(ctx_r1.dataSize <= ctx_r1.maxResults) ? 1 : -1);
|
|
419
419
|
} }
|
|
@@ -1188,7 +1188,7 @@ export class PaginationComponent extends StylableComponent {
|
|
|
1188
1188
|
type: Component,
|
|
1189
1189
|
args: [{ standalone: true, imports: [CommonModule, WmComponentsModule, FormsModule, PaginationModule, BsDropdownModule, MenuComponent], selector: '[wmPagination]', providers: [
|
|
1190
1190
|
provideAsWidgetRef(PaginationComponent)
|
|
1191
|
-
], template: "\n@if (navcontrols === 'Classic') {\n<ul class=\"pagination advanced {{navigationClass}}\">\n @if (allowpagesizechange) {\n <li class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE}} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n @if (rowSummary?.totalRecords) {\n <li class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </li>\n }\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableFirst}\">\n <a [title]=\"appLocale.LABEL_FIRST\" name=\"first\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableFirst\"\n (click)=\"navigatePage('first', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-first-page\"></i></span>\n <span class=\"sr-only\">Go to first page {{ isDisableFirst ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a [title]=\"appLocale.LABEL_PREVIOUS\" name=\"prev\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisablePrevious\"\n (click)=\"navigatePage('prev', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n <span class=\"sr-only\">Go to previous page {{ isDisablePrevious ? ', Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li class=\"pagecount disabled\">\n <a href=\"javascript:void(0);\" aria-label=\"Change Page Number\">\n <input [(ngModel)]=\"dn.currentPage\" [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount\" [disabled]=\"isDisableCurrent\"\n [ngModelOptions]=\"{standalone: true}\"\n type=\"number\"\n (keydown)=\"onKeyDown($event)\" (change)=\"onModelChange($event)\" class=\"form-control\"/>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li class=\"disabled\">\n <a [hidden]=\"isDisableCount\"> / {{pageCount}}</a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableNext}\">\n <a [title]=\"appLocale.LABEL_NEXT\" name=\"next\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableNext\"\n (click)=\"navigatePage('next', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n <span class=\"sr-only\">Go to next page {{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableLast}\">\n <a [title]=\"appLocale.LABEL_LAST\" name=\"last\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableLast\"\n (click)=\"navigatePage('last', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-last-page\"></i></span>\n <span class=\"sr-only\">Go to last page {{ isDisableLast ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (showrecordcount) {\n <li class=\"totalcount disabled\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n }\n</ul>\n}\n@if (navcontrols === 'Pager') {\n <ul class=\"pager {{navigationClass}}\">\n @if (allowpagesizechange) {\n <li class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE}} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n @if (rowSummary?.totalRecords) {\n <li class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </li>\n }\n }\n\n <li class=\"previous\" [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('prev', $event)\"\n [attr.aria-disabled]=\"isDisablePrevious\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n {{appLocale.LABEL_PREVIOUS}}\n <span class=\"sr-only\">{{ isDisablePrevious ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"next\" [ngClass]=\"{'disabled':isDisableNext}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('next', $event)\"\n [attr.aria-disabled]=\"isDisableNext\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n {{appLocale.LABEL_NEXT}}\n <span class=\"sr-only\">{{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n </ul>\n}\n\n@if (navcontrols === 'Basic') {\n @if (allowpagesizechange) {\n <div class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE }} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </div>\n @if (rowSummary?.totalRecords) {\n <div class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </div>\n }\n }\n @if (!(dataSize<=maxResults)) {\n <pagination class=\"pagination basic\" [ngClass]=\"navigationClass\" role=\"navigation\"\n [itemsPerPage]=\"maxResults\" [totalItems]=\"dataSize\"\n (pageChanged)=\"pageChanged($event)\" [ngModelOptions]=\"{standalone:true}\" [ngModel]=\"dn.currentPage\"\n [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount + ' pages'\"\n [boundaryLinks]=\"boundarylinks\" [maxSize]=\"maxsize\"\n [directionLinks]=\"directionlinks\"\n firstText=\"Firtst\" lastText=\"Last\"\n [customPreviousTemplate]=\"prevTemplate\"\n [customNextTemplate]=\"nextTemplate\"\n [customPageTemplate]=\"pageTemplate\"></pagination>\n }\n}\n\n@if (navcontrols === 'Basic' && showrecordcount) {\n <ul class=\"pagination\">\n <li class=\"totalcount disabled basiccount\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n </ul>\n}\n\n<ng-template #pageTemplate let-page>\n <span class=\"sr-only\" [attr.data-isacitvepage]=\"page.active\">{{'Page '}}</span>\n {{page.number}}\n @if (page.active) {\n <span class=\"sr-only\"> {{', Showing page ' + page.number + ' of ' + pageCount}}</span>\n }\n</ng-template>\n<ng-template #prevTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Previous page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n<ng-template #nextTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Next page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n" }]
|
|
1191
|
+
], template: "\n@if (navcontrols === 'Classic') {\n<ul class=\"pagination advanced {{navigationClass}}\">\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <li class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE}} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n @if (rowSummary?.totalRecords) {\n <li class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </li>\n }\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableFirst}\">\n <a [title]=\"appLocale.LABEL_FIRST\" name=\"first\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableFirst\"\n (click)=\"navigatePage('first', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-first-page\"></i></span>\n <span class=\"sr-only\">Go to first page {{ isDisableFirst ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a [title]=\"appLocale.LABEL_PREVIOUS\" name=\"prev\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisablePrevious\"\n (click)=\"navigatePage('prev', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n <span class=\"sr-only\">Go to previous page {{ isDisablePrevious ? ', Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li class=\"pagecount disabled\">\n <a href=\"javascript:void(0);\" aria-label=\"Change Page Number\">\n <input [(ngModel)]=\"dn.currentPage\" [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount\" [disabled]=\"isDisableCurrent\"\n [ngModelOptions]=\"{standalone: true}\"\n type=\"number\"\n (keydown)=\"onKeyDown($event)\" (change)=\"onModelChange($event)\" class=\"form-control\"/>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li class=\"disabled\">\n <a [hidden]=\"isDisableCount\"> / {{pageCount}}</a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableNext}\">\n <a [title]=\"appLocale.LABEL_NEXT\" name=\"next\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableNext\"\n (click)=\"navigatePage('next', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n <span class=\"sr-only\">Go to next page {{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableLast}\">\n <a [title]=\"appLocale.LABEL_LAST\" name=\"last\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableLast\"\n (click)=\"navigatePage('last', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-last-page\"></i></span>\n <span class=\"sr-only\">Go to last page {{ isDisableLast ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (showrecordcount) {\n <li class=\"totalcount disabled\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n }\n</ul>\n}\n@if (navcontrols === 'Pager') {\n <ul class=\"pager {{navigationClass}}\">\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <li class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE}} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n @if (rowSummary?.totalRecords) {\n <li class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </li>\n }\n }\n\n <li class=\"previous\" [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('prev', $event)\"\n [attr.aria-disabled]=\"isDisablePrevious\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n {{appLocale.LABEL_PREVIOUS}}\n <span class=\"sr-only\">{{ isDisablePrevious ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"next\" [ngClass]=\"{'disabled':isDisableNext}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('next', $event)\"\n [attr.aria-disabled]=\"isDisableNext\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n {{appLocale.LABEL_NEXT}}\n <span class=\"sr-only\">{{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n </ul>\n}\n\n@if (navcontrols === 'Basic') {\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <div class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE }} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </div>\n @if (rowSummary?.totalRecords) {\n <div class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </div>\n }\n }\n @if (!(dataSize<=maxResults)) {\n <pagination class=\"pagination basic\" [ngClass]=\"navigationClass\" role=\"navigation\"\n [itemsPerPage]=\"maxResults\" [totalItems]=\"dataSize\"\n (pageChanged)=\"pageChanged($event)\" [ngModelOptions]=\"{standalone:true}\" [ngModel]=\"dn.currentPage\"\n [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount + ' pages'\"\n [boundaryLinks]=\"boundarylinks\" [maxSize]=\"maxsize\"\n [directionLinks]=\"directionlinks\"\n firstText=\"Firtst\" lastText=\"Last\"\n [customPreviousTemplate]=\"prevTemplate\"\n [customNextTemplate]=\"nextTemplate\"\n [customPageTemplate]=\"pageTemplate\"></pagination>\n }\n}\n\n@if (navcontrols === 'Basic' && showrecordcount) {\n <ul class=\"pagination\">\n <li class=\"totalcount disabled basiccount\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n </ul>\n}\n\n<ng-template #pageTemplate let-page>\n <span class=\"sr-only\" [attr.data-isacitvepage]=\"page.active\">{{'Page '}}</span>\n {{page.number}}\n @if (page.active) {\n <span class=\"sr-only\"> {{', Showing page ' + page.number + ' of ' + pageCount}}</span>\n }\n</ng-template>\n<ng-template #prevTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Previous page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n<ng-template #nextTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Next page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n" }]
|
|
1192
1192
|
}], () => [{ type: i0.Injector }, { type: undefined, decorators: [{
|
|
1193
1193
|
type: SkipSelf
|
|
1194
1194
|
}, {
|
|
@@ -1208,4 +1208,4 @@ export class PaginationComponent extends StylableComponent {
|
|
|
1208
1208
|
args: [BsDropdownDirective]
|
|
1209
1209
|
}] }); })();
|
|
1210
1210
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PaginationComponent, { className: "PaginationComponent", filePath: "pagination.component.ts", lineNumber: 49 }); })();
|
|
1211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9wYWdpbmF0aW9uL3NyYy9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3BhZ2luYXRpb24vc3JjL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWlCLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFOUgsT0FBTyxFQUNILFVBQVUsRUFDVixNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQ0FBZ0MsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2hLLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxn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QVJuQjtnQkFDUCxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQzthQUMxQztZQ29LTCxBQUhBLEFBUEEsQUFSQSxBQTdDQSxBQXBEQSxBQTlGQSw0RUFBaUMsZ0VBOEZGLHFEQW9EQSw4REE2Q21CLHdHQVFkLHdHQU9lLHdHQUdBOztZQWpObkQsd0RBNkZDO1lBQ0QsY0FrREM7WUFsREQsc0RBa0RDO1lBRUQsY0EyQ0M7WUEzQ0Qsc0RBMkNDO1lBRUQsY0FNQztZQU5ELDZFQU1DOzRCRDdKVyxZQUFZLGNBQUUsa0JBQWtCLEVBQUUsV0FBVyxtRkFBRSxnQkFBZ0IsMEJBQUUsZ0JBQWdCOztpRkFPaEYsbUJBQW1CO2NBVC9CLFNBQVM7NkJBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsWUFDL0YsZ0JBQWdCLGFBRWY7b0JBQ1Asa0JBQWtCLHFCQUFxQjtpQkFDMUM7O3NCQXNGMkIsUUFBUTs7c0JBQUksTUFBTTt1QkFBQyxTQUFTOztzQkFBa0IsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBbEZwRyxhQUFhO2tCQUF0QixNQUFNO1lBQ0csaUJBQWlCO2tCQUExQixNQUFNO1lBQ21DLFVBQVU7a0JBQW5ELFNBQVM7bUJBQUMsbUJBQW1COztrRkFKckIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFdtQ29tcG9uZW50c01vZHVsZSB9IGZyb20gXCJAd20vY29tcG9uZW50cy9iYXNlXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0b3IsIE91dHB1dCwgU2tpcFNlbGYsIEFmdGVyVmlld0luaXQsIE9wdGlvbmFsLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICAgICRhcHBEaWdlc3QsXG4gICAgJHdhdGNoLFxuICAgIEFwcENvbnN0YW50cyxcbiAgICBEYXRhU291cmNlLFxuICAgIGRlYm91bmNlLFxuICAgIGlzRGVmaW5lZCxcbiAgICBzd2l0Y2hDbGFzcyxcbiAgICB0cmlnZ2VyRm5cbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgREVCT1VOQ0VfVElNRVMsIGdldE9yZGVyQnlFeHByLCBwcm92aWRlQXNXaWRnZXRSZWYsIFN0eWxhYmxlQ29tcG9uZW50LCBzdHlsZXIsIFdpZGdldFJlZiwgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXN9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vcGFnaW5hdGlvbi5wcm9wcyc7XG5pbXBvcnQge2ZvckVhY2gsIGdldCwgaXNBcnJheSwgaXNFbXB0eSwgaXNOdWxsLCBpc1N0cmluZywgcmFuZ2V9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IFBhZ2luYXRpb25Nb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgQnNEcm9wZG93bk1vZHVsZSwgQnNEcm9wZG93bkRpcmVjdGl2ZSB9IGZyb20gJ25neC1ib290c3RyYXAvZHJvcGRvd24nO1xuaW1wb3J0IHsgTWVudUNvbXBvbmVudCB9IGZyb20gJ0B3bS9jb21wb25lbnRzL25hdmlnYXRpb24vbWVudSc7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1kYXRhbmF2aWdhdG9yIGNsZWFyZml4JztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLXBhZ2luYXRpb24nLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuY29uc3Qgc2l6ZUNsYXNzZXMgPSB7XG4gICAgJ1BhZ2VyJzoge1xuICAgICAgICAnc21hbGwnOiAncGFnZXItc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnZXItbGcnXG4gICAgfSxcbiAgICAnQmFzaWMnOiB7XG4gICAgICAgICdzbWFsbCc6ICdwYWdpbmF0aW9uLXNtJyxcbiAgICAgICAgJ2xhcmdlJzogJ3BhZ2luYXRpb24tbGcnXG4gICAgfSxcbiAgICAnQ2xhc3NpYyc6IHtcbiAgICAgICAgJ3NtYWxsJzogJ3BhZ2luYXRpb24tc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnaW5hdGlvbi1sZydcbiAgICB9XG59O1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFdtQ29tcG9uZW50c01vZHVsZSwgRm9ybXNNb2R1bGUsIFBhZ2luYXRpb25Nb2R1bGUsIEJzRHJvcGRvd25Nb2R1bGUsIE1lbnVDb21wb25lbnRdLFxuICAgIHNlbGVjdG9yOiAnW3dtUGFnaW5hdGlvbl0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFBhZ2luYXRpb25Db21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIEBPdXRwdXQoKSByZXN1bHRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgbWF4UmVzdWx0c0VtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBWaWV3Q2hpbGQoQnNEcm9wZG93bkRpcmVjdGl2ZSkgcHJvdGVjdGVkIGJzRHJvcGRvd247XG5cbiAgICBkYXRhc291cmNlO1xuICAgIG1heFJlc3VsdHM7XG4gICAgcGFnZVNpemVPcHRpb25zO1xuICAgIHByZXZQYWdlU2l6ZTtcbiAgICBhY3R1YWxQYWdlU2l6ZTtcbiAgICBhbGxvd3BhZ2VzaXplY2hhbmdlO1xuICAgIGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSBbXTtcbiAgICBmb2N1c2VkSW5kZXggPSAwO1xuICAgIHJvd1N1bW1hcnk7XG4gICAgbmF2aWdhdGlvbnNpemU7XG4gICAgc2hvd3JlY29yZGNvdW50O1xuXG4gICAgbmF2Y29udHJvbHM7XG4gICAgbmF2aWdhdGlvbjtcblxuICAgIGJvdW5kYXJ5bGlua3M7XG4gICAgZGlyZWN0aW9ubGlua3M7XG5cbiAgICBuYXZpZ2F0aW9uQ2xhc3M7XG4gICAgZG4gPSB7XG4gICAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcblxuICAgIHBhZ2VDb3VudCA9IDA7XG4gICAgaXNEaXNhYmxlTmV4dCA9IHRydWU7XG4gICAgaXNEaXNhYmxlUHJldmlvdXMgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUZpcnN0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVMYXN0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVDdXJyZW50O1xuICAgIGRhdGFTaXplO1xuICAgIHByZXZzaG93cmVjb3JkY291bnQ7XG4gICAgaXNEaXNhYmxlQ291bnQ7XG4gICAgZmlyc3RSb3c7XG4gICAgcmVzdWx0O1xuICAgIF9fZnVsbERhdGE7XG4gICAgZGF0YXNldDtcbiAgICBvcHRpb25zO1xuICAgIHN0YXRlaGFuZGxlcjtcbiAgICBmaWx0ZXJGaWVsZHM7XG4gICAgc29ydE9wdGlvbnM7XG4gICAgYmluZGRhdGFzZXQ7XG4gICAgcGFnaW5hdGlvbjtcbiAgICBsb2dpY2FsT3A7XG5cbiAgICBwcml2YXRlIF9kZWJvdW5jZWRBcHBseURhdGFzZXQgPSBkZWJvdW5jZSgoKSA9PiB0aGlzLndpZGdldC5kYXRhc2V0ID0gdGhpcy5kYXRhc2V0LCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUpO1xuICAgIHByaXZhdGUgX2RlYm91bmNlZFBhZ2VDaGFuZ2VkID0gZGVib3VuY2UoZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZSA9IGV2ZW50ICYmIGV2ZW50LnBhZ2U7XG4gICAgICAgIGNvbnN0IG1heFJlc3VsdHMgPSBldmVudCAmJiAoZXZlbnQucGFnZXNpemUgfHwgZXZlbnQuaXRlbXNQZXJQYWdlKSB8fCB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIFxuICAgICAgICAvLyBEbyBub3QgY2FsbCBnb1RvUGFnZSBpZiBwYWdlIGhhcyBub3QgY2hhbmdlZFxuICAgICAgICBpZiAoY3VycmVudFBhZ2UgIT09IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgdGhpcy5tYXhSZXN1bHRzICE9PSBtYXhSZXN1bHRzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0ID0gKHRoaXMgYXMgYW55KS5wYXJlbnQgfHwgdGhpcztcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0cyA9IG1heFJlc3VsdHM7XG4gICAgICAgICAgICB0aGlzLm1heFJlc3VsdHNFbWl0dGVyLmVtaXQodGhpcy5tYXhSZXN1bHRzKTtcbiAgICAgICAgICAgIGluc3QuaW52b2tlRXZlbnRDYWxsYmFjaygncGFnaW5hdGlvbmNoYW5nZScsIHskZXZlbnQ6IHVuZGVmaW5lZCwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlfSk7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uID09PSAnQmFzaWMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0QXJpYUZvckJhc2ljTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgREVCT1VOQ0VfVElNRVMuUEFHSU5BVElPTl9ERUJPVU5DRV9USU1FKTtcblxuICAgIHByaXZhdGUgX3NldEFyaWFGb3JCYXNpY05hdmlnYXRpb24oKSB7XG4gICAgICAgIGZvckVhY2godGhpcy5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJyksIChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCk7Jyk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKTtcbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGU/LmRhdGFzZXQuaXNhY2l0dmVwYWdlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoY2hpbGROb2RlPy5kYXRhc2V0LmlzZGlzYWJsZWQgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBAU2tpcFNlbGYoKSBASW5qZWN0KFdpZGdldFJlZikgcHVibGljIHBhcmVudCwgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55KSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCk9PiB7XG4gICAgICAgICAgICB0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UgPSB0aGlzLnBhcmVudC5hbGxvd3BhZ2VzaXplY2hhbmdlO1xuICAgICAgICAgICAgaWYodGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlKVxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucyA9IHRoaXMucGFyZW50Py5wYWdlc2l6ZW9wdGlvbnMgPyB0aGlzLnBhcmVudC5wYWdlc2l6ZW9wdGlvbnM/LnNwbGl0KCcsJykubWFwKE51bWJlcikuc29ydCgoYSwgYikgPT4gYSAtIGIpIDogW107XG4gICAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIHNldFJlc3VsdChyZXN1bHQpIHtcbiAgICAgICAgLy8gVE9ETzogRW1pdCBldmVudCBvbmx5IGlmIHJlc3VsdCBpcyBjaGFuZ2VkXG4gICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICB0aGlzLnJlc3VsdEVtaXR0ZXIuZW1pdCh0aGlzLnJlc3VsdCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIG5hdmlnYXRpb25DbGFzcyBiYXNlZCBvbiBuYXZpZ2F0aW9uIGFuZCBuYXZpZ2F0aW9uU2l6ZSBwcm9wc1xuICAgIHByaXZhdGUgdXBkYXRlTmF2U2l6ZSgpIHtcbiAgICAgICAgY29uc3Qgc2l6ZUNscyA9IHNpemVDbGFzc2VzW3RoaXMubmF2Y29udHJvbHNdO1xuICAgICAgICBpZiAoc2l6ZUNscyAmJiB0aGlzLm5hdmlnYXRpb25zaXplKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25DbGFzcyA9IHNpemVDbHNbdGhpcy5uYXZpZ2F0aW9uc2l6ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25DbGFzcyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gcmVzZXQgdGhlIHBhZ2luZyB2YWx1ZXMgdG8gZGVmYXVsdC5cbiAgICByZXNldFBhZ2VOYXZpZ2F0aW9uKCkge1xuICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmRhdGFTaXplID0gMDtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgcGFnaW5nIHZhbHVlcy4qL1xuICAgIGNhbGN1bGF0ZVBhZ2luZ1ZhbHVlcygpIHtcbiAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAodGhpcy5kYXRhU2l6ZSA+IHRoaXMubWF4UmVzdWx0cykgPyAoTWF0aC5jZWlsKHRoaXMuZGF0YVNpemUgLyB0aGlzLm1heFJlc3VsdHMpKSA6ICh0aGlzLmRhdGFTaXplIDwgMCA/IDAgOiAxKTtcbiAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgMTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIHNldCBkZWZhdWx0IHZhbHVlcyB0byB0aGUgcGFnaW5nIHBhcmFtZXRlcnMqL1xuICAgIHNldERlZmF1bHRQYWdpbmdWYWx1ZXMoZGF0YVNpemUsIG1heFJlc3VsdHMsIGN1cnJlbnRQYWdlKSB7XG4gICAgICAgIC8qSWYgbmVpdGhlciAnZGF0YVNpemUnIG5vciAnbWF4UmVzdWx0cycgaXMgc2V0LCB0aGVuIHNldCBkZWZhdWx0IHZhbHVlcyB0byB0aGUgcGFnaW5nIHBhcmFtZXRlcnMuKi9cbiAgICAgICAgaWYgKCFkYXRhU2l6ZSAmJiAhbWF4UmVzdWx0cykge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAxO1xuICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICB0aGlzLm1heFJlc3VsdHMgPSBkYXRhU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNpemUgPSBkYXRhU2l6ZTtcbiAgICAgICAgfSBlbHNlIHsgLypFbHNlLCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZXMgYW5kIHJlY2FsY3VsYXRlIHBhZ2luZyBwYXJhbWV0ZXJzLiovXG4gICAgICAgICAgICB0aGlzLm1heFJlc3VsdHMgPSBtYXhSZXN1bHRzIHx8IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgIHRoaXMuZGF0YVNpemUgPSBpc0RlZmluZWQoZGF0YVNpemUpID8gZGF0YVNpemUgOiB0aGlzLmRhdGFTaXplO1xuICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlIHx8IHRoaXMuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVBhZ2luZ1ZhbHVlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWF4UmVzdWx0c0VtaXR0ZXIuZW1pdCh0aGlzLm1heFJlc3VsdHMpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgdGhlIGRhdGFTaXplIGFuZCBtYW5pcHVsYXRlIHRoZSBuYXZpZ2F0b3IgYWNjb3JkaW5nbHkuKi9cbiAgICBjaGVja0RhdGFTaXplKGRhdGFTaXplLCBudW1iZXJPZkVsZW1lbnRzPywgc2l6ZT8pIHtcbiAgICAgICAgLypJZiB0aGUgZGF0YVNpemUgaXMgLTEgb3IgSW50ZWdlci5NQVhfVkFMVUUoIHdoaWNoIGlzIDIxNDc0ODM2NDcpLCB0aGVuIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVjb3JkcyBpcyBub3Qga25vd24uXG4gICAgICAgICAqIEhlbmNlLFxuICAgICAgICAgKiAxLiBIaWRlIHRoZSAnVG90YWwgUmVjb3JkIENvdW50Jy5cbiAgICAgICAgICogMi4gRGlzYWJsZSB0aGUgJ0dvVG9MYXN0UGFnZScgbGluayBhcyB0aGUgcGFnZSBudW1iZXIgb2YgdGhlIGxhc3QgcGFnZSBpcyBub3Qga25vd24uKi9cbiAgICAgICAgaWYgKGRhdGFTaXplID09PSAtMSB8fCBkYXRhU2l6ZSA9PT0gQXBwQ29uc3RhbnRzLklOVF9NQVhfVkFMVUUpIHtcbiAgICAgICAgICAgIHRoaXMucHJldnNob3dyZWNvcmRjb3VudCA9IHRoaXMuc2hvd3JlY29yZGNvdW50O1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVMYXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQ291bnQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zaG93cmVjb3JkY291bnQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIG51bWJlciBvZiByZWNvcmRzIGluIGN1cnJlbnQgcGFnZSBpcyBsZXNzIHRoYW4gdGhlIG1heCByZWNvcmRzIHNpemUsIHRoaXMgaXMgdGhlIGxhc3QgcGFnZS4gU28gZGlzYWJsZSBuZXh0IGJ1dHRvbi5cbiAgICAgICAgICAgIGlmIChudW1iZXJPZkVsZW1lbnRzIDwgc2l6ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTmV4dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUNvdW50ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dyZWNvcmRjb3VudCA9IHRoaXMucHJldnNob3dyZWNvcmRjb3VudCB8fCB0aGlzLnNob3dyZWNvcmRjb3VudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gZGlzYWJsZSBuYXZpZ2F0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IGFuZCB0b3RhbCBwYWdlcy4qL1xuICAgIGRpc2FibGVOYXZpZ2F0aW9uKCkge1xuICAgICAgICBjb25zdCBpc0N1cnJlbnRQYWdlRmlyc3QgPSAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gMSksXG4gICAgICAgICAgICBpc0N1cnJlbnRQYWdlTGFzdCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlID09PSB0aGlzLnBhZ2VDb3VudCk7XG4gICAgICAgIGlmICghdGhpcy5wYWdpbmF0aW9uPy5uZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUZpcnN0ID0gdGhpcy5pc0Rpc2FibGVQcmV2aW91cyA9IGlzQ3VycmVudFBhZ2VGaXJzdDtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTmV4dCA9IHRoaXMuaXNEaXNhYmxlTGFzdCA9IGlzQ3VycmVudFBhZ2VMYXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gV01TLTE4ODY3OiBJbiBjYXNlIG9mIHNlcnZlciBzaWRlIHBhZ2luYXRpb24sIGZvciBwYWdlciB0eXBlIHBhZ2luYXRpb24gZGVwZW5kIG9uIHByZXYgYW5kIG5leHQgZmxhZ3Mgd2hpY2ggYXJlIHNldCBieSBkZXZlbG9wZXJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlRmlyc3QgPSB0aGlzLmlzRGlzYWJsZVByZXZpb3VzID0gIXRoaXMucGFnaW5hdGlvbi5wcmV2O1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVOZXh0ID0gdGhpcy5pc0Rpc2FibGVMYXN0ID0gIXRoaXMucGFnaW5hdGlvbi5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlQ3VycmVudCA9IGlzQ3VycmVudFBhZ2VGaXJzdCAmJiBpc0N1cnJlbnRQYWdlTGFzdDtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBjbGllbnQgc2lkZSBwYWdpbmF0aW9uLCB3aGVuIGxvYWQgbW9yZSByZWFjaGVzIGxhc3QgcGFnZSBoaWRlIHRoZSBvbi1kZW1hbmQgZ3JpZCBlbGVcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNldCAmJiB0aGlzLmRhdGFzZXQubGVuZ3RoICYmIHRoaXMuaXNEaXNhYmxlTmV4dCAmJiB0aGlzLnBhcmVudC5vbkRlbWFuZExvYWQgJiYgdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJykge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2FsbERhdGFHcmlkTWV0aG9kKCdoaWRlTG9hZGluZ0luZGljYXRvcicsIHRoaXMuaXNEaXNhYmxlTmV4dCwgdGhpcy5wYXJlbnQuaW5mU2Nyb2xsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHZhcmlhYmxlIGJvdW5kIHRvIHRoZSBkYXRhLW5hdmlnYXRvciBoYXMgcGFnaW5nLiovXG4gICAgaXNEYXRhU291cmNlSGFzUGFnaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdoaWNoIGdpdmVzIHN1bW1hcnkgb2YgdGhlIGN1cnJlbnQgcGFnZSBkYXRhIChleDogSW4gVUkgaXQgaXMgc2hvd24gYXMgIDEgdG8gMTAgb3V0IG9mIDUwIHJlY29yZHMpXG4gICAgZ2V0UGFnZURldGFpbHMoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRvdGFsUmVjb3Jkcykge1xuICAgICAgICB0aGlzLnJvd1N1bW1hcnkgPSAgKGlzRGVmaW5lZChzdGFydEluZGV4KSAmJiBpc0RlZmluZWQoZW5kSW5kZXgpICYmIGlzRGVmaW5lZCh0b3RhbFJlY29yZHMpKSA/IHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBlbmRJbmRleDogZW5kSW5kZXgsXG4gICAgICAgICAgICB0b3RhbFJlY29yZHM6IHRvdGFsUmVjb3Jkc1xuICAgICAgICB9OiB7fTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHJlc3VsdCBmb3IgY2xpZW50IHNpZGUgcGFnaW5hdGlvblxuICAgIHNldE5vblBhZ2VhYmxlRGF0YShuZXdWYWwpIHtcbiAgICAgICAgbGV0IGRhdGFTaXplLFxuICAgICAgICAgICAgbWF4UmVzdWx0cyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgc3RhcnRJbmRleDtcbiAgICAgICAgZGF0YVNpemUgPSBpc0FycmF5KG5ld1ZhbCkgPyBuZXdWYWwubGVuZ3RoIDogKGlzRW1wdHkobmV3VmFsKSA/IDAgOiAxKTtcbiAgICAgICAgbWF4UmVzdWx0cyA9ICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1heFJlc3VsdHMpIHx8IGRhdGFTaXplO1xuXG4gICAgICAgIGlmICh0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpIHsgLy8gd2hlbiBkZWZhdWx0IHBhZ2Ugc2l6ZSBpcyBub3QgZ2l2ZW4gdGhlbiB1c2UgbWF4UmVzdWx0cyBpbnN0ZWFkIG9mIG9wdGlvbnMubWF4UmVzdWx0c1xuICAgICAgICAgICAgbWF4UmVzdWx0cyA9IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3Igc3RhdGljIHZhcmlhYmxlLCBrZWVwIHRoZSBjdXJyZW50IHBhZ2UuIEZvciBvdGhlciB2YXJpYWJsZXMgd2l0aG91dCBwYWdpbmF0aW9uIHJlc2V0IHRoZSBwYWdlIHRvIDFcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTIzMjYzXTogZ3JpZE9wdGlvbnMuaXNOZXh0UGFnZURhdGEgZmxhZyBpcyBmYWxzZSB3aGVuIGRhdGFzZXQgaXMgY2hhbmdlZCBmcm9tIHNjcmlwdCwgc28gc2V0dGluZyBjdXJyZW50IHBhZ2UgdG8gMVxuICAgICAgICBpZiAodGhpcy5kYXRhc291cmNlICYmICh0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpIHx8ICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnICYmICh0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkgJiYgKGdldCh0aGlzLnBhcmVudCwgJ2dyaWRPcHRpb25zLmxhc3RBY3Rpb25QZXJmb3JtZWQnKSA9PT0gdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuQUNUSU9OUy5EQVRBU0VUX1VQREFURSB8fCAhZ2V0KHRoaXMucGFyZW50LCAnZ3JpZE9wdGlvbnMuaXNOZXh0UGFnZURhdGEnKSkpKSkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gdGhpcy5kbi5jdXJyZW50UGFnZSB8fCAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXREZWZhdWx0UGFnaW5nVmFsdWVzKGRhdGFTaXplLCBtYXhSZXN1bHRzLCBjdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuZGlzYWJsZU5hdmlnYXRpb24oKTtcblxuICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSwgTWF0aC5taW4oc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cywgbmV3VmFsPy5sZW5ndGgpLCBuZXdWYWw/Lmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2V0UmVzdWx0KGlzQXJyYXkobmV3VmFsKSA/IG5ld1ZhbC5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgdGhpcy5tYXhSZXN1bHRzKSA6IG5ld1ZhbCk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBzZXQgdGhlIHZhbHVlcyBuZWVkZWQgZm9yIHBhZ2luYXRpb24qL1xuICAgIHByaXZhdGUgc2V0UGFnaW5nVmFsdWVzKG5ld1ZhbCkge1xuICAgICAgICBsZXQgZGF0YVNpemUsXG4gICAgICAgICAgICBtYXhSZXN1bHRzLFxuICAgICAgICAgICAgY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgZGF0YVNvdXJjZTtcbiAgICAgICAgbGV0IHZhcmlhYmxlT3B0aW9uczogYW55ID0ge307XG4gICAgICAgIC8vIFN0b3JlIHRoZSBkYXRhIGluIF9fZnVsbERhdGEuIFRoaXMgaXMgdXNlZCBmb3IgY2xpZW50IHNpZGUgc2VhcmNoaW5nIHdpdHZhaCBvdXQgbW9kaWZ5aW5nIHRoZSBhY3R1YWwgZGF0YXNldC5cbiAgICAgICAgdGhpcy5fX2Z1bGxEYXRhID0gbmV3VmFsO1xuICAgICAgICAvKkNoZWNrIGZvciBzYW5pdHkqL1xuICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YXNvdXJjZSB8fCB7fTtcbiAgICAgICAgICAgIHZhcmlhYmxlT3B0aW9ucyA9IGRhdGFTb3VyY2UuX29wdGlvbnMgfHwge307XG4gICAgICAgICAgICAvKkNoZWNrIGZvciBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGRhdGEgc2V0Ki9cbiAgICAgICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24gPSB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfUEFHSU5HX09QVElPTlMpIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBcImZpbHRlckZpZWxkc1wiIGFuZCBcInNvcnRPcHRpb25zXCIgaGF2ZSBiZWVuIHNldCwgdGhlbiBzZXQgdGhlbSBzbyB0aGF0IHRoZSBmaWx0ZXJzIGNhbiBiZSByZXRhaW5lZCB3aGlsZSBmZXRjaGluZyBkYXRhIHVwb24gcGFnZSBuYXZpZ2F0aW9uLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckZpZWxkcyA9IHZhcmlhYmxlT3B0aW9ucy5maWx0ZXJGaWVsZHMgfHwge307XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9naWNhbE9wID0gdmFyaWFibGVPcHRpb25zLmxvZ2ljYWxPcCB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0T3B0aW9ucyA9IHZhcmlhYmxlT3B0aW9ucy5vcmRlckJ5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNBcnJheSh0aGlzLnBhZ2luYXRpb24uc29ydCkgPyBnZXRPcmRlckJ5RXhwcih0aGlzLnBhZ2luYXRpb24uc29ydCkgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTaXplID0gdGhpcy5wYWdpbmF0aW9uLnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgICAgIG1heFJlc3VsdHMgPSB0aGlzLnBhZ2luYXRpb24uc2l6ZSA9IE51bWJlcih0aGlzLnBhZ2luYXRpb24uc2l6ZSkgPyB0aGlzLnBhZ2luYXRpb24uc2l6ZSA6IGdldCh0aGlzLmRhdGFzb3VyY2UuZGF0YVNldCwgdGhpcy5wYWdpbmF0aW9uLnNpemUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cyA9IE51bWJlcih0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cykgPyB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cyA6IGdldCh0aGlzLmRhdGFzb3VyY2UuZGF0YVNldCwgdGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMpXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5wYWdpbmF0aW9uLm51bWJlcikpIHsgLy8gbnVtYmVyIGlzIHBhZ2UgbnVtYmVyIHJlY2VpdmVkIGZyb20gYmFja2VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2luYXRpb24ubnVtYmVyICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gdGhpcy5kbi5jdXJyZW50UGFnZSB8fCAxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8qIFNlbmRpbmcgcGFnZUNvdW50IHVuZGVmaW5lZCB0byBjYWxjdWxhdGUgaXQgYWdhaW4gZm9yIHF1ZXJ5LiovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFBhZ2luZ1ZhbHVlcyhkYXRhU2l6ZSwgbWF4UmVzdWx0cywgY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tEYXRhU2l6ZShkYXRhU2l6ZSwgdGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMsIHRoaXMucGFnaW5hdGlvbi5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IChjdXJyZW50UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxLCBzdGFydEluZGV4ICsgdGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9uUGFnZWFibGVEYXRhKG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlc3VsdChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRQYWdlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbiA9PT0gJ0Jhc2ljJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEFyaWFGb3JCYXNpY05hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChuZXdWYWwgJiYgIWlzU3RyaW5nKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vblBhZ2VhYmxlRGF0YShuZXdWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBmaXJzdCBwYWdlKi9cbiAgICBpc0ZpcnN0UGFnZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmRuLmN1cnJlbnRQYWdlID09PSAxIHx8ICF0aGlzLmRuLmN1cnJlbnRQYWdlKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGxhc3QgcGFnZSovXG4gICAgaXNMYXN0UGFnZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmRuLmN1cnJlbnRQYWdlID09PSB0aGlzLnBhZ2VDb3VudCk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgbGFzdCBwYWdlKi9cbiAgICBnb1RvTGFzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTGFzdFBhZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IHRoaXMucGFnZUNvdW50O1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUmVmcmVzaCkge1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgZmlyc3QgcGFnZSovXG4gICAgZ29Ub0ZpcnN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIXRoaXMuaXNGaXJzdFBhZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNSZWZyZXNoKSB7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSBjdXJyZW50IHBhZ2UqL1xuICAgIGdvVG9QYWdlKGV2ZW50PywgY2FsbGJhY2s/KSB7XG4gICAgICAgIHRoaXMuZmlyc3RSb3cgPSAodGhpcy5kbi5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5jb21wdXRlTW9kZSh0aGlzLnN0YXRlaGFuZGxlciksXG4gICAgICAgICAgICBhbGxvd3BhZ2VzaXplY2hhbmdlID0gdGhpcy5wYXJlbnQuYWxsb3dwYWdlc2l6ZWNoYW5nZTtcbiAgICAgICAgaWYgKG1vZGUgJiYgbW9kZS50b0xvd2VyQ2FzZSgpICE9PSAnbm9uZScgJiYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgfHwgdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLWxpc3QnKSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuX3NlbGVjdGVkSXRlbXNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZpcnN0UGFnZSgpICYmICFhbGxvd3BhZ2VzaXplY2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwgJ3BhZ2luYXRpb24nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLmluZGV4T2YodGhpcy5wYXJlbnQubmF2aWdhdGlvbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlOiB7IHBhZ2luYXRpb246IG51bWJlcjsgcGFnZXNpemU/OiBudW1iZXIgfSA9IHsgcGFnaW5hdGlvbjogdGhpcy5kbi5jdXJyZW50UGFnZSB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFnZXNpemUgPSB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwgc3RhdGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLWxpc3QnIHx8IHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZXRhaW4gU3RhdGUgaGFuZGxpbmcgb24gV2lkZ2V0ICcgKyB0aGlzLnBhcmVudC5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5jdXJyZW50cGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5uYXRpdmVFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2N1cnJlbnRwYWdlJywgdGhpcy5kbi5jdXJyZW50UGFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2FsbCBnZXRQYWdlRGF0YSBhZnRlciBjaGVja2luZyBzdGF0ZSBjb25maWcgc28gdGhhdCBTdGF0aWMgVmFyaWFibGVzIGNhbiB1c2UgaXRcbiAgICAgICAgdGhpcy5nZXRQYWdlRGF0YShldmVudCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUgZGF0YSBvZiB0aGUgcGFnZSBoYXMgYmVlbiBmZXRjaGVkLiovXG4gICAgb25QYWdlRGF0YVJlYWR5KGV2ZW50LCBkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmRpc2FibGVOYXZpZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuaW52b2tlU2V0UmVjb3JkKGV2ZW50LCBkYXRhKTtcbiAgICAgICAgdHJpZ2dlckZuKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGdldCBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlKi9cbiAgICBnZXRQYWdlRGF0YShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IGRhdGEsXG4gICAgICAgICAgICBzdGFydEluZGV4O1xuXG4gICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEluIHRhYmxlIGNvbXBvbmVudCwgaW4gY2FzZSBvZiBvbiBkZW1hbmQgYW5kIHNjcm9sbCBwYWdpbmF0aW9uXG4gICAgICAgICAgICAgKiBXaGVuIHRoZXJlIGlzIGEgY2hhbmdlIGluIGRhdGEgaXRlbSB3aGljaCBpcyBub3QgaW4gY3VycmVudCBwYWdlXG4gICAgICAgICAgICAgKiBGZXRjaCB0aGUgaXRlbXMgb2YgdGhlIHBhZ2Ugd2hlcmUgdGhlIGNoYW5nZSBpcyBtYWRlXG4gICAgICAgICAgICAgKiAqL1xuICAgICAgICAgICAgbGV0IHBhZ2VJbmRleCA9IHRoaXMuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkgJiYgdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMubGFzdEFjdGlvblBlcmZvcm1lZCAhPT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXggPSB0aGlzLnBhcmVudC5hY3Rpb25Sb3dQYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uTElTVF9SRUNPUkRTLCB7XG4gICAgICAgICAgICAgICAgJ3BhZ2UnOiBwYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgJ3NpemUnOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgJ2ZpbHRlckZpZWxkcyc6IHRoaXMuZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgICAgICdvcmRlckJ5JzogdGhpcy5zb3J0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAnbG9naWNhbE9wJzogdGhpcy5sb2dpY2FsT3AsXG4gICAgICAgICAgICAgICAgJ21hdGNoTW9kZSc6ICdhbnl3aGVyZWlnbm9yZWNhc2UnXG4gICAgICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZURhdGFSZWFkeShldmVudCwgcmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5kbi5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFnZURldGFpbHMoc3RhcnRJbmRleCArIDEgLCBzdGFydEluZGV4ICsgdGhpcy5wYWdpbmF0aW9uPy5udW1iZXJPZkVsZW1lbnRzLCB0aGlzLnBhZ2luYXRpb24/LnRvdGFsRWxlbWVudHMpO1xuICAgICAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiBlcnJvciBpcyB1bmRlZmluZWQsIGRvIG5vdCBzaG93IGFueSBtZXNzYWdlIGFzIHRoaXMgbWF5IGJlIGRpc2NhcmRlZCByZXF1ZXN0XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBFcnJvclxuICAgICAgICAgICAgICAgICAgICAvLyB3bVRvYXN0ZXIuc2hvdygnZXJyb3InLCAnRVJST1InLCAnVW5hYmxlIHRvIGdldCBkYXRhIG9mIHBhZ2UgLScgKyB0aGlzLmRuLmN1cnJlbnRQYWdlICsgJzonICsgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0Tm90SW5DdXJyZW50UGFnZSgpKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLnBhcmVudC5hY3Rpb25Sb3dQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5kbi5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YSA9IGlzQXJyYXkodGhpcy5fX2Z1bGxEYXRhKSA/IHRoaXMuX19mdWxsRGF0YS5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgdGhpcy5tYXhSZXN1bHRzKSA6IHRoaXMuX19mdWxsRGF0YTtcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFnZURldGFpbHMoc3RhcnRJbmRleCArIDEgLCBNYXRoLm1pbihzdGFydEluZGV4ICsgdGhpcy5tYXhSZXN1bHRzLCB0aGlzLl9fZnVsbERhdGE/Lmxlbmd0aCksIHRoaXMuX19mdWxsRGF0YT8ubGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0KGRhdGEpO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VEYXRhUmVhZHkoZXZlbnQsIGRhdGEsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGVkaXQgYWN0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgcHJldmlvdXMgcGFnZSBkYXRhIG9mIHRoZSB0YWJsZVxuICAgICovXG4gICAgaXNFZGl0Tm90SW5DdXJyZW50UGFnZSgpIHtcbiAgICAgICAgY29uc3QgcGFnZUluZGV4ID0gdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgJiYgcGFnZUluZGV4ID09PSB0aGlzLnBhcmVudC5jdXJyZW50UGFnZSAmJlxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZSAmJiB0aGlzLnBhcmVudC5hY3Rpb25Sb3dQYWdlIDwgcGFnZUluZGV4O1xuICAgIH1cblxuICAgIGludm9rZVNldFJlY29yZChldmVudCwgZGF0YSkge1xuICAgICAgICAvLyBUcmlnZ2VyIHRoZSBldmVudCBoYW5kbGVyIGlmIGV4aXN0cy5cbiAgICAgICAgY29uc3QgcGFnZUluZm8gPSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZTogdGhpcy5kbi5jdXJyZW50UGFnZSxcbiAgICAgICAgICAgIHNpemU6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgIHRvdGFsRWxlbWVudHM6IHRoaXMuZGF0YVNpemUsXG4gICAgICAgICAgICB0b3RhbFBhZ2VzOiB0aGlzLnBhZ2VDb3VudFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lmludm9rZUV2ZW50Q2FsbGJhY2soJ3NldHJlY29yZCcsIHskZXZlbnQ6IGV2ZW50LCAkZGF0YTogZGF0YSwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlLCBwYWdlSW5mbywgZGF0YX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZXRyZWNvcmQnLCB7JGV2ZW50OiBldmVudCwgJGRhdGE6IGRhdGEsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZSwgcGFnZUluZm8sIGRhdGF9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHBhZ2UgaW5wdXQuXG4gICAgIEluIGNhc2Ugb2YgaW52YWxpZCBpbnB1dCwgbmF2aWdhdGUgdG8gdGhlIGFwcHJvcHJpYXRlIHBhZ2U7IGFsc28gcmV0dXJuIGZhbHNlLlxuICAgICBJbiBjYXNlIG9mIHZhbGlkIGlucHV0LCByZXR1cm4gdHJ1ZS4qL1xuICAgIHZhbGlkYXRlQ3VycmVudFBhZ2UoZXZlbnQsIGNhbGxiYWNrPykge1xuICAgICAgICAvKklmIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBwYWdlIG51bWJlciBvciBpbnZhbGlkIHZhbHVlLCB0aGVuIGhpZ2hsaWdodGluZyB0aGUgZmllbGQgc2hvd2luZyBlcnJvci4qL1xuICAgICAgICBpZiAoZXZlbnQgJiYgKGlzTmFOKHRoaXMuZG4uY3VycmVudFBhZ2UpIHx8IHRoaXMuZG4uY3VycmVudFBhZ2UgPD0gMCB8fCAodGhpcy5wYWdlQ291bnQgJiYgKHRoaXMuZG4uY3VycmVudFBhZ2UgPiB0aGlzLnBhZ2VDb3VudCB8fCBpc051bGwodGhpcy5kbi5jdXJyZW50UGFnZSkpKSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRuLmN1cnJlbnRQYWdlIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kbi5jdXJyZW50UGFnZSA+IHRoaXMucGFnZUNvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IHRoaXMucGFnZUNvdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG9uTW9kZWxDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlQ3VycmVudFBhZ2UoZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCk7XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZSA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCdhJyk7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnS2V5RScpIHtcbiAgICAgICAgICAgIHRhcmdldEVsZS5hZGRDbGFzcygnbmctaW52YWxpZCcpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldEVsZS5yZW1vdmVDbGFzcygnbmctaW52YWxpZCcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwYWdlQ2hhbmdlZChldmVudDogYW55KSB7XG4gICAgICAgdGhpcy5fZGVib3VuY2VkUGFnZUNoYW5nZWQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIHJlc3BlY3RpdmUgcGFnZXMuKi9cbiAgICBuYXZpZ2F0ZVBhZ2UoaW5kZXgsIGV2ZW50LCBpc1JlZnJlc2g/LCBjYWxsYmFjaz8pIHtcbiAgICAgICAgLy8gd2hlbiBuYXZpZ2F0ZWQgdG8gbmV4dCBwYWdlIHR1cm4gb24gdGhlIGlzRGF0YUxvYWRpbmcgZmxhZyB0byBzaG93IHRoZSBsb2FkaW5nIGluZGljYXRvclxuICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucGFyZW50LmlzRGF0YUxvYWRpbmcpICYmICF0aGlzLmlzRGlzYWJsZU5leHQpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBpbmZpbml0ZSBzY3JvbGwgY2FsbGluZyB0aGUgc2hvd0xvYWRpbmdJbmRpY2F0b3IgbWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9hZGluZyBtZXNzYWdlIGltbWVkaWF0ZWx5IHdoZW4gbmF2aWdhdGVkIHRvIG5leHQgcGFnZVxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50LmluZlNjcm9sbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnZhcmlhYmxlSW5mbGlnaHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmNhbGxEYXRhR3JpZE1ldGhvZCgnc2hvd0xvYWRpbmdJbmRpY2F0b3InLCB0aGlzLnBhcmVudC5sb2FkaW5nZGF0YW1zZywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzZXQgdGhlIGxhc3QgYWN0aW9uIHBlcmZvcm1lZCB0byBcInNjcm9sbFwiIGFuZCBpc0RhdGFzZXRVcGRhdGVkIHRvIGZhbHNlXG4gICAgICAgIGlmICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnICYmIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuc2V0TGFzdEFjdGlvblBlcmZvcm1lZCh0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5BQ1RJT05TLkRFRkFVTFQpO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhc2V0VXBkYXRlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdwYWdpbmF0aW9uY2hhbmdlJywgeyRldmVudDogdW5kZWZpbmVkLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2V9KTtcblxuICAgICAgICAvLyBDb252ZXJ0IHRoZSBjdXJyZW50IHBhZ2UgdG8gYSB2YWxpZCBwYWdlIG51bWJlci5cbiAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9ICt0aGlzLmRuLmN1cnJlbnRQYWdlO1xuXG4gICAgICAgIHN3aXRjaCAoaW5kZXgpIHtcbiAgICAgICAgICAgIGNhc2UgJ2ZpcnN0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9GaXJzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgJ3ByZXYnOlxuICAgICAgICAgICAgICAgIC8qUmV0dXJuIGlmIGFscmVhZHkgb24gdGhlIGZpcnN0IHBhZ2UuKi9cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbj8ubmV4dCAmJiAodGhpcy5pc0ZpcnN0UGFnZSgpIHx8ICF0aGlzLnZhbGlkYXRlQ3VycmVudFBhZ2UoZXZlbnQsIGNhbGxiYWNrKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdpbmF0aW9uPy5uZXh0KSB7IC8vIFdNUy0xODg2NzogRm9yIHNlcnZlciBzaWRlIHBhZ2luYXRpb24sIHNraXBwaW5nIHRoZSByZWd1bGFyIGZsb3cgYW5kIGVuYWJsaW5nIGlzTmV4dCBmbGFnIGluIHBhZ2luYXRpb24gbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNOZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzUHJldiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qRGVjcmVtZW50IHRoZSBjdXJyZW50IHBhZ2UgYnkgMS4qL1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgLT0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICAgICAgICAgIC8qUmV0dXJuIGlmIGFscmVhZHkgb24gdGhlIGxhc3QgcGFnZS4qL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYWdpbmF0aW9uPy5uZXh0ICYmICh0aGlzLmlzTGFzdFBhZ2UoKSB8fCAhdGhpcy52YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50LCBjYWxsYmFjaykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFnaW5hdGlvbj8ubmV4dCkgeyAvLyBXTVMtMTg4Njc6IEZvciBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLCBza2lwcGluZyB0aGUgcmVndWxhciBmbG93IGFuZCBlbmFibGluZyBpc1ByZXYgZmxhZyBpbiBwYWdpbmF0aW9uIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzTmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzUHJldiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKkluY3JlbWVudCB0aGUgY3VycmVudCBwYWdlIGJ5IDEuKi9cbiAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlICs9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsYXN0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qTmF2aWdhdGUgdG8gdGhlIGN1cnJlbnQgcGFnZS4qL1xuICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgc2V0QmluZERhdGFTZXQoYmluZGRhdGFzZXQsIHBhcmVudCwgZGF0YVNvdXJjZSwgZGF0YXNldD8sIGJpbmRkYXRhc291cmNlPywgZGF0YXNldEJvdW5kRXhwcj8sIHN0YXRlaGFuZGxlcj8pIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBiaW5kZGF0YXNldC5zcGxpdCgnLicpO1xuICAgICAgICBsZXQgYmluZFBhZ2luZ09wdGlvbnM7XG4gICAgICAgIHRoaXMuc3RhdGVoYW5kbGVyID0gc3RhdGVoYW5kbGVyO1xuICAgICAgICBpZiAocGFydHNbMF0gPT09ICdWYXJpYWJsZXMnIHx8IHBhcnRzWzBdID09PSAnV2lkZ2V0cycpIHtcbiAgICAgICAgICAgIGJpbmRQYWdpbmdPcHRpb25zID0gYCR7cGFydHNbMF19LiR7cGFydHNbMV19LnBhZ2luYXRpb25gO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYmluZGRhdGFzb3VyY2UgJiYgZGF0YXNldCAmJiAhZGF0YXNldEJvdW5kRXhwcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhc2V0ID0gZGF0YXNldDtcbiAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmluZGRhdGFzZXQgPSBiaW5kZGF0YXNldDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyB3YXRjaGluZyBmb3IgZGF0YXNldCBjaGFuZ2VzIGV2ZW4gd2hlbiBkYXRhc2V0IGlzIGJvdW5kIHRvIFwiaXRlbS5cIiAoaS5lLiBieSBjaGVja2luZyBmb3IgZGF0YXNldEJvdW5kRXhwcilcbiAgICAgICAgICAgIC8vIGl0ZW0gY29udGV4dCBpcyBwYXNzZWQgYXMgZGF0YVNvdXJjZSBoZXJlXG4gICAgICAgICAgICAvLyBbVG9kby1DU1BdOiBjaGVjayBpZiBzYW1lIGV4cHIgZm4gaXMgZ2VuZXJhdGVkIGJ5IHBhcmVudCB3aWRnZXQgKGxpc3QsIHRhYmxlKVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGJpbmRkYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXRCb3VuZEV4cHIgPyBkYXRhU291cmNlIDoge30sXG4gICAgICAgICAgICAgICAgICAgIG52ID0+ICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSBudjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJvdW5jZWRBcHBseURhdGFzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXTVMtMTkyODU6IFNldHRpbmcgZGF0YXNldCBvbiBwcm94eSBvbmx5IHRvIGhhbmRsZSBwcm9wZXJ0eWNoYW5nZSBoYW5kbGVyIGNhbGwgZm9yIHVuZGVmaW5lZCBjYXNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBudjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGEgd2F0Y2ggb24gcGFnaW5nIG9wdGlvbnMuIENhbGwgZGF0YXNldCBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlciBldmVuIGlmIHBhZ2luZyBvcHRpb25zIGNoYW5nZXMgdG8gcmVmbGVjdCBwYWdpbmF0aW9uIHN0YXRlXG4gICAgICAgICAgICBpZiAoIWJpbmRQYWdpbmdPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBlaXRoZXIgZ2VuZXJhdGUgd2F0Y2ggZXhwciBmbiBvciByZWdpc3RlciBhbiBldmVudCBmcm9tIHRoZSBkYXRhc291cmNlIGl0c2VsZlxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGJpbmRQYWdpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLl9kZWJvdW5jZWRBcHBseURhdGFzZXQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhcHBseSBkYXRhc291cmNlIG9ubHkgd2hlbiBkYXRhc2V0IGlzIG5vdCBib3VuZCB0byBcIml0ZW0uRklFTERcIlxuICAgICAgICBpZiAoIWRhdGFzZXRCb3VuZEV4cHIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGRhdGFzb3VyY2Ugb2YgcGFnaW5hdGlvbiBmcm9tIHRoZSBwYXJlbnQgd2lkZ2V0XG4gICAgc2V0RGF0YVNvdXJjZShkYXRhU291cmNlKSB7XG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnYsIG92KSB7XG4gICAgICAgIGxldCBwYWdlU2l6ZSwgcHJldlBhZ2VTaXplO1xuICAgICAgICBpZiAoa2V5ID09PSAnZGF0YXNldCcpIHtcbiAgICAgICAgICAgIGxldCBkYXRhO1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50Lm9uRGF0YU5hdmlnYXRvckRhdGFTZXRDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5wYXJlbnQub25EYXRhTmF2aWdhdG9yRGF0YVNldENoYW5nZShudik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBudjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNldCBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgdG8gXCJkYXRhc2V0X3VwZGF0ZVwiIHdoZW5ldmVyIGRhdGFzZXQgaXMgY2hhbmdlZCBpbiB0YWJsZSBjb21wb25lbnRcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuX3RyaWdnZXJlZEJ5VXNlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGE/Lmxlbmd0aCkgeyAvLyBjYWxjdWxhdGUgUGFnZXNpemUgb3B0aW9ucyBiYXNlZCBvbiBhY3R1YWwgcGFnZSBzaXplXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhU291cmNlSGFzUGFnaW5nKCkpIHsgLy8gZm9yIExpdmUgdmFyaWFibGVzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlU2l6ZSA9IGdldChkYXRhLCAncGFnaW5hdGlvbi5zaXplJykgfHwgZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ3BhZ2luYXRpb24uc2l6ZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxFbGVtZW50cyA9IGdldChkYXRhLCAncGFnaW5hdGlvbi50b3RhbEVsZW1lbnRzJykgfHwgZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ3BhZ2luYXRpb24udG90YWxFbGVtZW50cycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RhdGUgPSB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMucGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3R1YWxQYWdlU2l6ZSA9IHdpZGdldFN0YXRlPy5hY3R1YWxwYWdlc2l6ZSB8fCBjdXJyZW50UGFnZVNpemU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0dWFsUGFnZVNpemUgPSBOdW1iZXIodGhpcy5hY3R1YWxQYWdlU2l6ZSkgPyB0aGlzLmFjdHVhbFBhZ2VTaXplIDogZ2V0KHRoaXMuZGF0YXNvdXJjZS5kYXRhU2V0LCB0aGlzLmFjdHVhbFBhZ2VTaXplKVxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSBbLi4udGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zXTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHJhbmdlKHRoaXMuYWN0dWFsUGFnZVNpemUsICBNYXRoLm1heCh0aGlzLmFjdHVhbFBhZ2VTaXplICsgMSwgdGhpcy5hY3R1YWxQYWdlU2l6ZSArIHRvdGFsRWxlbWVudHMpLCB0aGlzLmFjdHVhbFBhZ2VTaXplKTsgLy8gaGVyZSBkYXRhIGhhcyBvbmx5IHRoYXQgcGFnZSBkYXRhIGFuZCBwYWdlc2l6ZSBoYXMgdG90YWxOb29mIEVsZW1lbnRzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpZGdldFN0YXRlPy5zZWxlY3RlZEl0ZW0gJiYgd2lkZ2V0U3RhdGUuYWN0dWFscGFnZXNpemUgIT09IHdpZGdldFN0YXRlLnBhZ2VzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucHJldlBhZ2VTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2UGFnZVNpemUgPSB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IGRhdGE/Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJdGVtcyA9IHRoaXMuaGFuZGxlU3RhdGVQYXJhbXNmb3JOZXdQYWdlU2l6ZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIHRoaXMucHJldlBhZ2VTaXplLCBkYXRhPy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRJdGVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZXNpemU6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFscGFnZXNpemU6IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW06IHVwZGF0ZWRJdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2UGFnZVNpemUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZSA9IHRoaXMucGFyZW50LmdldEFjdHVhbFBhZ2VTaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IFsuLi50aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnNdO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gcmFuZ2UocGFnZVNpemUsIGRhdGEubGVuZ3RoICsgcGFnZVNpemUsIHBhZ2VTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIGRhdGFzZXQgaXMgbm90IGluIGN1cnJlbnQgcGFnZSwgYnV0IGluIHByZXZpb3VzIG9uZXMgZGlyZWN0bHkgc2V0IHRoZSByZXN1bHQgd2l0aG91dCBzZXR0aW5nIHBhZ2UgdmFsdWVzXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlc3VsdChkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmdWYWx1ZXMoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChudiA9PT0gJ0FkdmFuY2VkJykgeyAvLyBTdXBwb3J0IGZvciBvbGRlciBwcm9qZWN0cyB3aGVyZSBuYXZpZ2F0aW9uIHR5cGUgd2FzIGFkdmFuY2VkIGluc3RlYWQgb2YgY2xhc2ljXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gJ0NsYXNzaWMnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVOYXZTaXplKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmNvbnRyb2xzID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbnNpemUnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5hdlNpemUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYXZpZ2F0aW9uYWxpZ24nKSB7XG4gICAgICAgICAgICBzd2l0Y2hDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGB0ZXh0LSR7bnZ9YCwgYHRleHQtJHtvdn1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdtYXhSZXN1bHRzJykge1xuICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmdWYWx1ZXModGhpcy5kYXRhc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG4gICAgfVxuICAgLy8gY2hhbmdlIHRoZSBzZWxlY3RlZEl0ZW1zIHBhZ2UgbnVtYmVyIGFuZCBpbmRleCBpbiB0aGUgc3RhdGVwYXJhbXMgd2hlbiBwYWdlc2l6ZSBpcyBjaGFuZ2VkXG4gICAgaGFuZGxlU3RhdGVQYXJhbXNmb3JOZXdQYWdlU2l6ZShcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiB7IHBhZ2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W10sXG4gICAgICAgIG9sZFBhZ2VTaXplOiBudW1iZXIsXG4gICAgICAgIG5ld1BhZ2VTaXplOiBudW1iZXJcbiAgICApOiB7IHBhZ2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W10ge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtLm1hcCgoeyBwYWdlLCBpbmRleCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gKHBhZ2UgLSAxKSAqIG9sZFBhZ2VTaXplICsgaW5kZXg7XG4gICAgICAgICAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5mbG9vcihhYnNvbHV0ZUluZGV4IC8gbmV3UGFnZVNpemUpICsgMTsgLy8gYmFjayB0byAxLWJhc2VkXG4gICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IGFic29sdXRlSW5kZXggJSBuZXdQYWdlU2l6ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwYWdlOiBuZXdQYWdlLFxuICAgICAgICAgICAgICAgIGluZGV4OiBuZXdJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Ecm9wZG93bktleWRvd24oZXZlbnQsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0ICRpdGVtcyA9ICQoJ3VsI2Ryb3Bkb3duLWJhc2ljIGEuZHJvcGRvd24taXRlbScpO1xuICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIGxldCBzZWxlY3RlZE9wdGlvbjtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBTaGlmdCtUYWIgYXMgQXJyb3dVcFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IChpbmRleCAtIDEpIDwgMCA/IG1heEluZGV4IDogaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IFRhYiBvciBBcnJvd0Rvd24gYXMgQXJyb3dEb3duXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gKGluZGV4ICsgMSkgPiBtYXhJbmRleCA/IDAgOiBpbmRleCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IChpbmRleCAtIDEpIDwgMCA/IG1heEluZGV4IDogaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbiA9IHRoaXMucGFnZVNpemVPcHRpb25zW3RoaXMuZm9jdXNlZEluZGV4XTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZVNpemVDaGFuZ2UoZXZlbnQsIHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTW92ZSBmb2N1cyBhZnRlciBpbmRleCBpcyB1cGRhdGVkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJGl0ZW1zLmVxKHRoaXMuZm9jdXNlZEluZGV4KT8uZm9jdXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBjbG9zZURyb3Bkb3duKCkge1xuICAgICAgICAvLyBDbG9zZSBkcm9wZG93blxuICAgICAgICB0aGlzLmJzRHJvcGRvd24uaGlkZSgpO1xuICAgICAgICBjb25zdCAkdG9nZ2xlQnV0dG9uID0gJCgnYnV0dG9uW2FyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiXScpO1xuICAgICAgICAkdG9nZ2xlQnV0dG9uLmZvY3VzKCk7IC8vIFJldHVybiBmb2N1cyB0byBidXR0b25cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiBnZXRzIGNhbGxlZCBvbiBkcm9wZG93biBvcGVuICYgY2xvc2VcbiAgICBvbk9wZW5DaGFuZ2UoaXNPcGVuKSB7XG4gICAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gMDtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIG1hbnVhbGx5IGZvY3VzIHRoZSBkcm9wZG93biBhcyBkcm9wZG93biBoYXMgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgY29uc3QgJGl0ZW1zID0gJCgndWwjZHJvcGRvd24tYmFzaWMgYS5kcm9wZG93bi1pdGVtJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgJGZpcnN0SXRlbSA9ICRpdGVtcy5lcSh0aGlzLmZvY3VzZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgJGZpcnN0SXRlbT8uZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBuZXdQYWdlU2l6ZSkge1xuICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQpO1xuICAgICAgICAgICAgbGV0IHVwZGF0ZWRJdGVtcztcbiAgICAgICAgaWYgKHdpZGdldFN0YXRlPy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIHVwZGF0ZWRJdGVtcyA9IHRoaXMuaGFuZGxlU3RhdGVQYXJhbXNmb3JOZXdQYWdlU2l6ZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIHRoaXMubWF4UmVzdWx0cywgK25ld1BhZ2VTaXplKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdHVhbFBhZ2VTaXplID0gdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIHRoaXMubWF4UmVzdWx0cyA9ICtuZXdQYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5tYXhSZXN1bHRzRW1pdHRlci5lbWl0KHRoaXMubWF4UmVzdWx0cyk7XG4gICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpICYmIHRoaXMuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLm1heFJlc3VsdHMgPSB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZWRJdGVtcykge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IDEsXG4gICAgICAgICAgICAgICAgcGFnZXNpemU6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICBhY3R1YWxwYWdlc2l6ZTogdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiB1cGRhdGVkSXRlbXNcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMucGFyZW50LCB7XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogMSxcbiAgICAgICAgICAgICAgICBwYWdlc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgIGFjdHVhbHBhZ2VzaXplOiB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IHRoaXMubWF4UmVzdWx0c1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdmlnYXRlUGFnZSgnZmlyc3QnLCAkZXZlbnQsIHRydWUpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVBhZ2luZ1ZhbHVlcygpO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25FbGVtID0gIHRoaXMubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgcGFnaW5hdGlvbkVsZW0ub25jbGljayA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiXG5AaWYgKG5hdmNvbnRyb2xzID09PSAnQ2xhc3NpYycpIHtcbjx1bCBjbGFzcz1cInBhZ2luYXRpb24gYWR2YW5jZWQge3tuYXZpZ2F0aW9uQ2xhc3N9fVwiPlxuICAgIEBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSkge1xuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtcy1wZXItcGFnZVwiPlxuICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFXCIgY2xhc3M9XCJhcHAtbGFiZWxcIj57e2FwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRX19IDo8L2xhYmVsPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZHJvcGRvd24gIGNvbnRhaW5lcj1cImJvZHlcIiAoaXNPcGVuQ2hhbmdlKT1cIm9uT3BlbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ1dHRvbi1iYXNpY1wiIGRyb3Bkb3duVG9nZ2xlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBhcHAtYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgICAge3ttYXhSZXN1bHRzfX0gPHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8dWwgaWQ9XCJkcm9wZG93bi1iYXNpY1wiICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IHBhZ2VzaXplLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImJ1dHRvbi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgcGFnZVNpemVPcHRpb25zOyB0cmFjayBvcHRpb247IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibWVudWl0ZW1cIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBvcHRpb24gPT0gbWF4UmVzdWx0cyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQsIG9wdGlvbilcIiAoa2V5ZG93bik9XCJvbkRyb3Bkb3duS2V5ZG93bigkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpID09PSBmb2N1c2VkSW5kZXggPyAwIDogLTFcIj57e29wdGlvbn19PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICBAaWYgKHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtLXJhbmdlXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkuc3RhcnRJbmRleH19IC0ge3tyb3dTdW1tYXJ5LmVuZEluZGV4fX08L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj5vZjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS50b3RhbFJlY29yZHN9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlRmlyc3R9XCI+XG4gICAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfRklSU1RcIiBuYW1lPVwiZmlyc3RcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlRmlyc3RcIlxuICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCdmaXJzdCcsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktZmlyc3QtcGFnZVwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBmaXJzdCBwYWdlIHt7IGlzRGlzYWJsZUZpcnN0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZVByZXZpb3VzfVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX1BSRVZJT1VTXCIgbmFtZT1cInByZXZcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZVByZXZpb3VzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ3ByZXYnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tbGVmdFwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBwcmV2aW91cyBwYWdlIHt7IGlzRGlzYWJsZVByZXZpb3VzID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgY2xhc3M9XCJwYWdlY291bnQgZGlzYWJsZWRcIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBhcmlhLWxhYmVsPVwiQ2hhbmdlIFBhZ2UgTnVtYmVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJkbi5jdXJyZW50UGFnZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Nob3dpbmcgUGFnZSAnICsgZG4uY3VycmVudFBhZ2UgKyAnIG9mICcgKyBwYWdlQ291bnRcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlQ3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiIChjaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIi8+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIGNsYXNzPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgPGEgW2hpZGRlbl09XCJpc0Rpc2FibGVDb3VudFwiPiAvIHt7cGFnZUNvdW50fX08L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVOZXh0fVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX05FWFRcIiBuYW1lPVwibmV4dFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVOZXh0XCJcbiAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1yaWdodFwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBuZXh0IHBhZ2Uge3sgaXNEaXNhYmxlTmV4dCA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVMYXN0fVwiPlxuICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9MQVNUXCIgbmFtZT1cImxhc3RcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlTGFzdFwiXG4gICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ2xhc3QnLCAkZXZlbnQpXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktbGFzdC1wYWdlXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gbGFzdCBwYWdlIHt7IGlzRGlzYWJsZUxhc3QgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKHNob3dyZWNvcmRjb3VudCkge1xuICAgICAgPGxpIGNsYXNzPVwidG90YWxjb3VudCBkaXNhYmxlZFwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPnt7YXBwTG9jYWxlLkxBQkVMX1RPVEFMX1JFQ09SRFN9fToge3tkYXRhU2l6ZX19PC9hPlxuICAgICAgPC9saT5cbiAgICB9XG48L3VsPlxufVxuQGlmIChuYXZjb250cm9scyA9PT0gJ1BhZ2VyJykge1xuICA8dWwgY2xhc3M9XCJwYWdlciB7e25hdmlnYXRpb25DbGFzc319XCI+XG4gICAgICAgIEBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSkge1xuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtcy1wZXItcGFnZVwiPlxuICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFXCIgY2xhc3M9XCJhcHAtbGFiZWxcIj57e2FwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRX19IDo8L2xhYmVsPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZHJvcGRvd24gY29udGFpbmVyPVwiYm9keVwiIChpc09wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnV0dG9uLWJhc2ljXCIgZHJvcGRvd25Ub2dnbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFwcC1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICB7e21heFJlc3VsdHN9fSA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDx1bCBpZD1cImRyb3Bkb3duLWJhc2ljXCIgKmRyb3Bkb3duTWVudSBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcGFnZXNpemUtb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiYnV0dG9uLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBwYWdlU2l6ZU9wdGlvbnM7IHRyYWNrIG9wdGlvbjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibWVudWl0ZW1cIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBvcHRpb24gPT0gbWF4UmVzdWx0cyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIEBpZiAocm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW0tcmFuZ2VcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPm9mPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS50b3RhbFJlY29yZHN9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgPGxpIGNsYXNzPVwicHJldmlvdXNcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVQcmV2aW91c31cIj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgncHJldicsICRldmVudClcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZVByZXZpb3VzXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1sZWZ0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAge3thcHBMb2NhbGUuTEFCRUxfUFJFVklPVVN9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyBpc0Rpc2FibGVQcmV2aW91cyA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIGNsYXNzPVwibmV4dFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZU5leHR9XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVOZXh0XCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1yaWdodFwiPjwvaT48L3NwYW4+XG4gICAgICAgIHt7YXBwTG9jYWxlLkxBQkVMX05FWFR9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyBpc0Rpc2FibGVOZXh0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbn1cblxuQGlmIChuYXZjb250cm9scyA9PT0gJ0Jhc2ljJykge1xuICAgIEBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSkge1xuICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLXBlci1wYWdlXCI+XG4gICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFXCIgY2xhc3M9XCJhcHAtbGFiZWxcIj57e2FwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRSB9fSA6PC9sYWJlbD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZHJvcGRvd24gY29udGFpbmVyPVwiYm9keVwiICAoaXNPcGVuQ2hhbmdlKT1cIm9uT3BlbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnV0dG9uLWJhc2ljXCIgZHJvcGRvd25Ub2dnbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFwcC1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAge3ttYXhSZXN1bHRzfX0gPHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPHVsIGlkPVwiZHJvcGRvd24tYmFzaWNcIiAqZHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudSBwYWdlc2l6ZS1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImJ1dHRvbi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBwYWdlU2l6ZU9wdGlvbnM7IHRyYWNrIG9wdGlvbjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJtZW51aXRlbVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IG9wdGlvbiA9PSBtYXhSZXN1bHRzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudCwgb3B0aW9uKVwiIChrZXlkb3duKT1cIm9uRHJvcGRvd25LZXlkb3duKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImkgPT09IGZvY3VzZWRJbmRleCA/IDAgOiAtMVwiPnt7b3B0aW9ufX08L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tcmFuZ2VcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS5zdGFydEluZGV4fX0gLSB7e3Jvd1N1bW1hcnkuZW5kSW5kZXh9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPm9mPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnRvdGFsUmVjb3Jkc319PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgICAgPHBhZ2luYXRpb24gY2xhc3M9XCJwYWdpbmF0aW9uIGJhc2ljXCIgW25nQ2xhc3NdPVwibmF2aWdhdGlvbkNsYXNzXCIgcm9sZT1cIm5hdmlnYXRpb25cIlxuICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIm1heFJlc3VsdHNcIiBbdG90YWxJdGVtc109XCJkYXRhU2l6ZVwiXG4gICAgICAgIChwYWdlQ2hhbmdlZCk9XCJwYWdlQ2hhbmdlZCgkZXZlbnQpXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOnRydWV9XCIgW25nTW9kZWxdPVwiZG4uY3VycmVudFBhZ2VcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTaG93aW5nIFBhZ2UgJyArIGRuLmN1cnJlbnRQYWdlICsgJyBvZiAnICsgcGFnZUNvdW50ICsgJyBwYWdlcydcIlxuICAgICAgICBbYm91bmRhcnlMaW5rc109XCJib3VuZGFyeWxpbmtzXCIgW21heFNpemVdPVwibWF4c2l6ZVwiXG4gICAgICAgIFtkaXJlY3Rpb25MaW5rc109XCJkaXJlY3Rpb25saW5rc1wiXG4gICAgICAgIGZpcnN0VGV4dD1cIkZpcnRzdFwiIGxhc3RUZXh0PVwiTGFzdFwiXG4gICAgICAgIFtjdXN0b21QcmV2aW91c1RlbXBsYXRlXT1cInByZXZUZW1wbGF0ZVwiXG4gICAgICAgIFtjdXN0b21OZXh0VGVtcGxhdGVdPVwibmV4dFRlbXBsYXRlXCJcbiAgICAgICAgW2N1c3RvbVBhZ2VUZW1wbGF0ZV09XCJwYWdlVGVtcGxhdGVcIj48L3BhZ2luYXRpb24+XG4gICAgfVxufVxuXG5AaWYgKG5hdmNvbnRyb2xzID09PSAnQmFzaWMnICYmIHNob3dyZWNvcmRjb3VudCkge1xuICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XG4gICAgPGxpIGNsYXNzPVwidG90YWxjb3VudCBkaXNhYmxlZCBiYXNpY2NvdW50XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPnt7YXBwTG9jYWxlLkxBQkVMX1RPVEFMX1JFQ09SRFN9fToge3tkYXRhU2l6ZX19PC9hPlxuICAgIDwvbGk+XG4gIDwvdWw+XG59XG5cbjxuZy10ZW1wbGF0ZSAjcGFnZVRlbXBsYXRlIGxldC1wYWdlPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzYWNpdHZlcGFnZV09XCJwYWdlLmFjdGl2ZVwiPnt7J1BhZ2UgJ319PC9zcGFuPlxuICB7e3BhZ2UubnVtYmVyfX1cbiAgQGlmIChwYWdlLmFjdGl2ZSkge1xuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPiB7eycsIFNob3dpbmcgcGFnZSAnICsgcGFnZS5udW1iZXIgKyAnIG9mICcgKyBwYWdlQ291bnR9fTwvc3Bhbj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcHJldlRlbXBsYXRlIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIFthdHRyLmRhdGEtaXNkaXNhYmxlZF09XCJkaXNhYmxlZFwiPkdvIHRvIFByZXZpb3VzIHBhZ2Uge3tkaXNhYmxlZCA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNuZXh0VGVtcGxhdGUgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgW2F0dHIuZGF0YS1pc2Rpc2FibGVkXT1cImRpc2FibGVkXCI+R28gdG8gTmV4dCBwYWdlIHt7ZGlzYWJsZWQgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
1211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9wYWdpbmF0aW9uL3NyYy9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3BhZ2luYXRpb24vc3JjL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWlCLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFOUgsT0FBTyxFQUNILFVBQVUsRUFDVixNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQ0FBZ0MsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2hLLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7Ozs7O0lDSnZDLEFBREosOEJBQW1FLFlBRWhCO0lBRHFCLEFBQTNDLDhPQUFTLDBDQUFnQyxLQUFDLHNPQUFZLCtDQUE0QixLQUFDO0lBQzdELFlBQVU7SUFDN0QsQUFENkQsaUJBQUksRUFDNUQ7Ozs7O0lBSGUsb0ZBQThDO0lBRTdELGNBQTZDOztJQUFDLGNBQVU7SUFBViwrQkFBVTs7O0lBTGpFLDhCQUMrQztJQUMzQyx5SUFLQztJQUNMLGlCQUFLOzs7SUFORCxjQUtDO0lBTEQscUNBS0M7OztJQU9ULEFBREosQUFEQSw4QkFBdUIsVUFDbEIsV0FDSztJQUFBLFlBQW1EO0lBQUEsaUJBQU87SUFDaEUsNEJBQU07SUFBQSxrQkFBRTtJQUFBLGlCQUFPO0lBQ2YsNEJBQU07SUFBQSxZQUEyQjtJQUVyQyxBQURJLEFBRGlDLGlCQUFPLEVBQ2xDLEVBQ0w7OztJQUpLLGVBQW1EO0lBQW5ELDhGQUFtRDtJQUVuRCxlQUEyQjtJQUEzQixvREFBMkI7Ozs7SUF2Qm5DLEFBREYsNkJBQTJCLGdCQUN5QztJQUFBLFlBQW9DO0lBQUEsaUJBQVE7SUFFNUcsK0JBQXdGO0lBQXRDLHVOQUFnQiwyQkFBb0IsS0FBQztJQUNuRixrQ0FDdUM7SUFDbkMsWUFBZTtJQUFBLDJCQUEyQjtJQUM5QyxpQkFBUztJQUNULCtGQUMrQztJQVN2RCxBQURJLGlCQUFNLEVBQ0w7SUFDTCx3R0FBZ0M7OztJQWxCdkIsY0FBd0M7SUFBeEMsNkRBQXdDO0lBQW1CLGNBQW9DO0lBQXBDLHNFQUFvQztJQUs1RixlQUFlO0lBQWYsa0RBQWU7SUFhM0IsZUFRQztJQVJELDhGQVFDOzs7O0lBSUQsQUFESiw2QkFBNEMsWUFHRztJQUF4Qyx1TUFBUyxvQkFBYSxPQUFPLFNBQVMsS0FBQztJQUN0QyxnQ0FBeUI7SUFBQSx3QkFBZ0M7SUFBQSxpQkFBTztJQUNoRSxnQ0FBc0I7SUFBQSxZQUF5RDtJQUV2RixBQURJLEFBRG1GLGlCQUFPLEVBQ3RGLEVBQ0g7OztJQVBELDJFQUF1QztJQUNwQyxjQUErQjtJQUEvQixvREFBK0I7O0lBSVIsZUFBeUQ7SUFBekQsMEZBQXlEOzs7O0lBTW5GLEFBREosNkJBQStDLFlBR0E7SUFBdkMsdU1BQVMsb0JBQWEsTUFBTSxTQUFTLEtBQUM7SUFDdEMsZ0NBQXlCO0lBQUEsd0JBQWtDO0lBQUEsaUJBQU87SUFDbEUsZ0NBQXNCO0lBQUEsWUFBOEQ7SUFFNUYsQUFESSxBQUR3RixpQkFBTyxFQUMzRixFQUNIOzs7SUFQRCw4RUFBMEM7SUFDdkMsY0FBa0M7SUFBbEMsdURBQWtDOztJQUlYLGVBQThEO0lBQTlELCtGQUE4RDs7OztJQU9wRixBQURKLEFBREosNkJBQStCLFlBQ21DLGdCQUlpQztJQUhwRixzVUFBNEI7SUFHQyxBQUE5QiwrTUFBVyx3QkFBaUIsS0FBQyxnTUFBVyw0QkFBcUIsS0FBQztJQUU1RSxBQURJLEFBSkksaUJBRzJGLEVBQzNGLEVBQ0g7OztJQUxVLGVBQTRCO0lBQTVCLHFEQUE0QjtJQUM1QixBQUR1RyxrREFBNkIsOENBQy9GOzs7O0lBUWhELEFBREosNkJBQXFCLFlBQ1k7SUFBQyxZQUFlO0lBQ2pELEFBRGlELGlCQUFJLEVBQ2hEOzs7SUFERSxjQUF5QjtJQUF6Qiw4Q0FBeUI7SUFBRSxjQUFlO0lBQWYsa0RBQWU7Ozs7SUFLN0MsQUFESiw2QkFBMkMsWUFHRztJQUF2Qyx1TUFBUyxvQkFBYSxNQUFNLFNBQVMsS0FBQztJQUNyQyxnQ0FBeUI7SUFBQSx3QkFBbUM7SUFBQSxpQkFBTztJQUNuRSxnQ0FBc0I7SUFBQSxZQUF1RDtJQUVyRixBQURJLEFBRGlGLGlCQUFPLEVBQ3BGLEVBQ0g7OztJQVBELDBFQUFzQztJQUNuQyxjQUE4QjtJQUE5QixtREFBOEI7O0lBSVAsZUFBdUQ7SUFBdkQsd0ZBQXVEOzs7O0lBTW5GLEFBREYsNkJBQTJDLFlBR0E7SUFBdkMsd01BQVMsb0JBQWEsTUFBTSxTQUFTLEtBQUM7SUFDdEMsZ0NBQXlCO0lBQUEsd0JBQStCO0lBQUEsaUJBQU87SUFDL0QsZ0NBQXNCO0lBQUEsWUFBdUQ7SUFFakYsQUFERSxBQUQrRSxpQkFBTyxFQUNsRixFQUNEOzs7SUFQRCwwRUFBc0M7SUFDckMsY0FBOEI7SUFBOUIsbURBQThCOztJQUlULGVBQXVEO0lBQXZELHdGQUF1RDs7O0lBTTdFLEFBREYsNkJBQWdDLFlBQ21DO0lBQUEsWUFBK0M7SUFDbEgsQUFEa0gsaUJBQUksRUFDakg7OztJQUQ4RCxlQUErQztJQUEvQywwRkFBK0M7OztJQXhGeEgsMEJBQW9EO0lBc0ZoRCxBQVZBLEFBVkEsQUFMQSxBQVZBLEFBVkEsQUFWQSxBQTlCQSxnRkFBNkUsNEVBOEI5Qyw0RUFVQSw0RUFVQSw0RUFVQSw0RUFLQSw0RUFVQSw0RUFVUjtJQUszQixpQkFBSzs7O0lBM0ZELDZFQUErQztJQUMvQyxjQTZCQztJQTdCRCxrTUE2QkM7SUFDRCxjQVNDO0lBVEQsa0VBU0M7SUFDRCxjQVNDO0lBVEQsa0VBU0M7SUFDRCxjQVNDO0lBVEQsa0VBU0M7SUFDRCxjQUlDO0lBSkQsa0VBSUM7SUFDRCxjQVNDO0lBVEQsa0VBU0M7SUFDRCxjQVNDO0lBVEQsa0VBU0M7SUFDRCxjQUlDO0lBSkQsaURBSUM7Ozs7SUFrQnVCLEFBREosOEJBQW1FLFlBRXBCO0lBRHlCLEFBQTNDLGdQQUFTLDJDQUFnQyxLQUFDLHlPQUFZLGlEQUE0QixLQUFDO0lBQ2pFLFlBQVU7SUFDekQsQUFEeUQsaUJBQUksRUFDeEQ7Ozs7O0lBSGUscUZBQThDO0lBRWpFLGNBQTZDOztJQUFDLGNBQVU7SUFBVixnQ0FBVTs7O0lBTGpFLDhCQUMrQztJQUMzQyx5SUFLQztJQUNMLGlCQUFLOzs7SUFORCxjQUtDO0lBTEQscUNBS0M7OztJQU9MLEFBREosQUFESiw4QkFBdUIsVUFDZCxXQUNLO0lBQUEsWUFBbUQ7SUFBQSxpQkFBTztJQUNoRSw0QkFBTTtJQUFBLGtCQUFFO0lBQUEsaUJBQU87SUFDZiw0QkFBTTtJQUFBLFlBQTJCO0lBRXpDLEFBREksQUFEcUMsaUJBQU8sRUFDdEMsRUFDTDs7O0lBSlMsZUFBbUQ7SUFBbkQsOEZBQW1EO0lBRW5ELGVBQTJCO0lBQTNCLG9EQUEyQjs7OztJQXZCdkMsQUFERiw2QkFBMkIsZ0JBQ3lDO0lBQUEsWUFBb0M7SUFBQSxpQkFBUTtJQUU1RywrQkFBdUY7SUFBdEMsd05BQWdCLDJCQUFvQixLQUFDO0lBQ2xGLGtDQUN1QztJQUNuQyxZQUFlO0lBQUEsMkJBQTJCO0lBQzlDLGlCQUFTO0lBQ1QsK0ZBQytDO0lBU3ZELEFBREksaUJBQU0sRUFDTDtJQUNMLHdHQUFnQzs7O0lBbEJ2QixjQUF3QztJQUF4Qyw2REFBd0M7SUFBbUIsY0FBb0M7SUFBcEMsc0VBQW9DO0lBSzVGLGVBQWU7SUFBZixrREFBZTtJQWEzQixlQVFDO0lBUkQsOEZBUUM7Ozs7SUE3QlAsMEJBQXNDO0lBQ2hDLGdGQUE2RTtJQWdDL0UsQUFERiw4QkFBZ0UsWUFFbkI7SUFEYix5TEFBUyxvQkFBYSxNQUFNLFNBQVMsS0FBQztJQUVsRSxnQ0FBeUI7SUFBQSx3QkFBa0M7SUFBQSxpQkFBTztJQUNsRSxZQUNBO0lBQUEsZ0NBQXNCO0lBQUEsWUFBMkM7SUFFckUsQUFERSxBQURtRSxpQkFBTyxFQUN0RSxFQUNEO0lBRUgsQUFERiw4QkFBd0QsYUFFZjtJQURULDBMQUFTLG9CQUFhLE1BQU0sU0FBUyxLQUFDO0lBRWxFLGlDQUF5QjtJQUFBLHlCQUFtQztJQUFBLGlCQUFPO0lBQ25FLGFBQ0E7SUFBQSxpQ0FBc0I7SUFBQSxhQUF1QztJQUduRSxBQURFLEFBREUsQUFEK0QsaUJBQU8sRUFDbEUsRUFDRCxFQUNGOzs7SUFoREQsK0RBQWlDO0lBQy9CLGNBNkJIO0lBN0JHLGtNQTZCSDtJQUVvQixjQUEwQztJQUExQywrRUFBMEM7SUFFM0QsY0FBd0M7O0lBRXhDLGVBQ0E7SUFEQSxnRUFDQTtJQUFzQixlQUEyQztJQUEzQyxtRUFBMkM7SUFHcEQsY0FBc0M7SUFBdEMsMkVBQXNDO0lBRW5ELGNBQW9DOztJQUVwQyxlQUNBO0lBREEsNERBQ0E7SUFBc0IsZUFBdUM7SUFBdkMsK0RBQXVDOzs7O0lBb0I3QyxBQURKLDhCQUFtRSxZQUVoQjtJQURxQixBQUEzQyxnUEFBUywyQ0FBZ0MsS0FBQyx5T0FBWSxpREFBNEIsS0FBQztJQUM3RCxZQUFVO0lBQzdELEFBRDZELGlCQUFJLEVBQzVEOzs7OztJQUhlLHFGQUE4QztJQUU3RCxjQUE2Qzs7SUFBQyxjQUFVO0lBQVYsZ0NBQVU7OztJQUxyRSw4QkFDK0M7SUFDM0MseUlBS0M7SUFDTCxpQkFBSzs7O0lBTkQsY0FLQztJQUxELHFDQUtDOzs7SUFPTCxBQURKLEFBREEsK0JBQXdCLFVBQ25CLFdBQ0s7SUFBQSxZQUFtRDtJQUFBLGlCQUFPO0lBQ2hFLDRCQUFNO0lBQUEsa0JBQUU7SUFBQSxpQkFBTztJQUNmLDRCQUFNO0lBQUEsWUFBMkI7SUFFckMsQUFEQSxBQURxQyxpQkFBTyxFQUN0QyxFQUNBOzs7SUFKSSxlQUFtRDtJQUFuRCw4RkFBbUQ7SUFFbkQsZUFBMkI7SUFBM0Isb0RBQTJCOzs7O0lBdkJyQyxBQURGLDhCQUE0QixnQkFDd0M7SUFBQSxZQUFxQztJQUFBLGlCQUFRO0lBRS9HLCtCQUF3RjtJQUF0Qyx3TkFBZ0IsMkJBQW9CLEtBQUM7SUFDbkYsa0NBQ3VDO0lBQ25DLFlBQWU7SUFBQSwyQkFBMkI7SUFDOUMsaUJBQVM7SUFDVCwrRkFDK0M7SUFTckQsQUFERSxpQkFBTSxFQUNGO0lBQ0oseUdBQWdDOzs7SUFsQnpCLGNBQXdDO0lBQXhDLDZEQUF3QztJQUFtQixjQUFxQztJQUFyQyxzRUFBcUM7SUFLL0YsZUFBZTtJQUFmLGtEQUFlO0lBYXZCLGVBUUM7SUFSRCw4RkFRQzs7OztJQUdILHNDQVNzQztJQVBwQyw2TkFBZSwwQkFBbUIsS0FBQztJQU9DLGlCQUFhOzs7Ozs7SUFBakQsQUFEQSxBQURBLEFBRkEsQUFEZ0MsQUFBaEMsQUFGeUUsQUFBckMsQUFEUixBQUE1QixBQURtQyxnREFBMkIsbUNBQ25DLCtCQUF3QiwrQ0FDcUIsa0NBQTJCLHVDQUVwRSwyQkFBb0IseUNBQ2xCLDRDQUVNLHdDQUNKLHdDQUNBOzs7O0lBVnZDLEFBOUJBLGdGQUE2RSxzRkE4QjlDOzs7SUE5Qi9CLGtNQTZCQztJQUNELGNBV0M7SUFYRCxrRUFXQzs7O0lBTUMsQUFERixBQURGLDZCQUF1QixhQUNzQixZQUN3QjtJQUFBLFlBQStDO0lBRXBILEFBREUsQUFEa0gsaUJBQUksRUFDakgsRUFDRjs7O0lBRmdFLGVBQStDO0lBQS9DLDBGQUErQzs7O0lBU2xILGdDQUFzQjtJQUFDLFlBQXdEO0lBQUEsaUJBQU87Ozs7SUFBL0QsY0FBd0Q7SUFBeEQsK0ZBQXdEOzs7SUFIakYsZ0NBQTZEO0lBQUEsWUFBVztJQUFBLGlCQUFPO0lBQy9FLFlBQ0E7SUFBQSw0RkFBbUI7Ozs7SUFGMEMsY0FBVztJQUFYLDZCQUFXO0lBQ3hFLGNBQ0E7SUFEQSxnREFDQTtJQUFBLGNBRUM7SUFGRCwwQ0FFQzs7O0lBR0QsZ0NBQXdEO0lBQUEsWUFBb0Q7SUFBQSxpQkFBTzs7OztJQUEzRCxjQUFvRDtJQUFwRCxtRkFBb0Q7OztJQUc1RyxnQ0FBd0Q7SUFBQSxZQUFnRDtJQUFBLGlCQUFPOzs7O0lBQXZELGNBQWdEO0lBQWhELCtFQUFnRDs7QUQ3TDFHLE1BQU0sV0FBVyxHQUFHLDRCQUE0QixDQUFDO0FBQ2pELE1BQU0sYUFBYSxHQUFHLEVBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFDLENBQUM7QUFFNUUsTUFBTSxXQUFXLEdBQUc7SUFDaEIsT0FBTyxFQUFFO1FBQ0wsT0FBTyxFQUFFLFVBQVU7UUFDbkIsT0FBTyxFQUFFLFVBQVU7S0FDdEI7SUFDRCxPQUFPLEVBQUU7UUFDTCxPQUFPLEVBQUUsZUFBZTtRQUN4QixPQUFPLEVBQUUsZUFBZTtLQUMzQjtJQUNELFNBQVMsRUFBRTtRQUNQLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLE9BQU8sRUFBRSxlQUFlO0tBQzNCO0NBQ0osQ0FBQztBQVVGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBaUI7YUFDL0Msb0JBQWUsR0FBRyxhQUFhLEVBQUUsQUFBbEIsQ0FBbUI7SUFvRWpDLDBCQUEwQjtRQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxJQUFJLFNBQVMsRUFBRSxPQUFPLENBQUMsWUFBWSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBQ0QsSUFBRyxTQUFTLEVBQUUsT0FBTyxDQUFDLFVBQVUsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVksR0FBYSxFQUF3QyxNQUFNLEVBQTBDLGVBQW9CO1FBQ2pJLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRGtCLFdBQU0sR0FBTixNQUFNLENBQUE7UUFsRjdELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsc0JBQWlCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFTcEUsMkJBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBWWpCLE9BQUUsR0FBRztZQUNELFdBQVcsRUFBRSxDQUFDO1NBQ2pCLENBQUM7UUFFRixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2Qsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBaUJiLDJCQUFzQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3JILDBCQUFxQixHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QyxNQUFNLFdBQVcsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztZQUN4QyxNQUFNLFVBQVUsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBRXRGLCtDQUErQztZQUMvQyxJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN4RSxNQUFNLElBQUksR0FBSSxJQUFZLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztnQkFDMUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQztnQkFDL0YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2dCQUN0QyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsRUFBRSxjQUFjLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQW1CeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsVUFBVSxDQUFDLEdBQUUsRUFBRTtZQUNYLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO1lBQzNELElBQUcsSUFBSSxDQUFDLG1CQUFtQjtnQkFDdkIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BKLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBTTtRQUNaLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELHNFQUFzRTtJQUM5RCxhQUFhO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDTCxDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLHFCQUFxQjtRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hJLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsMkRBQTJEO0lBQzNELHNCQUFzQixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVztRQUNwRCxvR0FBb0c7UUFDcEcsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUM3QixDQUFDO2FBQU0sQ0FBQyxDQUFDLHFFQUFxRTtZQUMxRSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDL0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQ3pELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsZ0JBQWlCLEVBQUUsSUFBSztRQUM1Qzs7O2lHQUd5RjtRQUN6RixJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsSUFBSSxRQUFRLEtBQUssWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ2hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzdCLHlIQUF5SDtZQUN6SCxJQUFJLGdCQUFnQixHQUFHLElBQUksRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUM5QixDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzVFLENBQUM7SUFDTCxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLGlCQUFpQjtRQUNiLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFDbEQsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsa0JBQWtCLENBQUM7WUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLGlCQUFpQixDQUFDO1FBQ2hFLENBQUM7YUFBTSxDQUFDO1lBQ0osbUlBQW1JO1lBQ25JLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDckUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDcEUsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxrQkFBa0IsSUFBSSxpQkFBaUIsQ0FBQztRQUNoRSxrR0FBa0c7UUFDbEcsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEcsQ0FBQztJQUNMLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UscUJBQXFCO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxxSUFBcUk7SUFDckksY0FBYyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsWUFBWTtRQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0YsVUFBVSxFQUFFLFVBQVU7WUFDdEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsWUFBWSxFQUFFLFlBQVk7U0FDN0IsQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxrQkFBa0IsQ0FBQyxNQUFNO1FBQ3JCLElBQUksUUFBUSxFQUNSLFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxDQUFDO1FBQ2YsUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFFBQVEsQ0FBQztRQUVuRSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsd0ZBQXdGO1lBQ3BILFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLENBQUM7UUFDRCx5R0FBeUc7UUFDekcsa0lBQWtJO1FBQ2xJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsaUNBQWlDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDclYsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNwQixDQUFDO2FBQU0sQ0FBQztZQUNKLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUVELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1RyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELG9EQUFvRDtJQUM1QyxlQUFlLENBQUMsTUFBTTtRQUMxQixJQUFJLFFBQVEsRUFDUixVQUFVLEVBQ1YsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLENBQUM7UUFDZixJQUFJLGVBQWUsR0FBUSxFQUFFLENBQUM7UUFDOUIsZ0hBQWdIO1FBQ2hILElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLG9CQUFvQjtRQUNwQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDbkMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQzVDLGdEQUFnRDtZQUNoRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO29CQUN6RixpSkFBaUo7b0JBQ2pKLElBQUksQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7b0JBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDLE9BQU87d0JBQ3RDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDaEYsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO29CQUN6QyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0ksSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO29CQUMvSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ3ZDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLDhDQUE4Qzs0QkFDbkYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3dCQUNyRCxDQUFDO3dCQUNELFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7b0JBQzNDLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixXQUFXLEdBQUcsQ0FBQyxDQUFDO29CQUNwQixDQUFDO29CQUNELGlFQUFpRTtvQkFDakUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQy9ELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3JGLFVBQVUsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO29CQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzdGLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNCLENBQUM7cUJBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDL0IsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDdEMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxXQUFXO1FBQ1AsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELDBEQUEwRDtJQUMxRCxVQUFVO1FBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLFlBQVksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVE7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQzthQUFNLElBQUksU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNMLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUTtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7YUFBTSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDTCxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLFFBQVEsQ0FBQyxLQUFNLEVBQUUsUUFBUztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQ3BFLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUM7UUFDMUQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzNILElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ3ZDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzlFLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN2RSxNQUFNLEtBQUssR0FBOEMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDN0YsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO3dCQUN0QixLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQ3JDLENBQUM7b0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDcEUsQ0FBQztxQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDdkYsT0FBTyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxnREFBZ0QsQ0FBQyxDQUFDO2dCQUMzSCxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBQ0QsbUZBQW1GO1FBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUTtRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxXQUFXLENBQUMsS0FBSyxFQUFFLFFBQVE7UUFDdkIsSUFBSSxJQUFJLEVBQ0osVUFBVSxDQUFDO1FBRWYsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDO1lBQy9COzs7O2lCQUlLO1lBQ0wsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDcEMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUYsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQzFDLENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRTtnQkFDdkQsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDdkIsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUNqQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzNCLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDM0IsV0FBVyxFQUFFLG9CQUFvQjthQUNwQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUN6RCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDckgsVUFBVSxFQUFFLENBQUM7WUFDakIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNQLGtGQUFrRjtnQkFDbEYsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDUixxQkFBcUI7b0JBQ3JCLHdHQUF3RztnQkFDNUcsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUM7Z0JBQ2hDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDN0QsQ0FBQztZQUNELElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNwSCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNMLENBQUM7SUFFRDs7TUFFRTtJQUNGLHNCQUFzQjtRQUNsQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO1lBQ2pGLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJO1FBQ3ZCLHVDQUF1QztRQUN2QyxNQUFNLFFBQVEsR0FBRztZQUNiLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVc7WUFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3JCLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDN0IsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQzVILENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDckgsQ0FBQztJQUNMLENBQUM7SUFFRDs7MkNBRXVDO0lBQ3ZDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxRQUFTO1FBQ2hDLDBIQUEwSDtRQUMxSCxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakssSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDekMsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQUs7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSztRQUNYLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN4QixTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGlEQUFpRDtJQUNqRCxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFVLEVBQUUsUUFBUztRQUM1QywyRkFBMkY7UUFDM0YsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDakMsMklBQTJJO1lBQzNJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0YsQ0FBQztRQUNMLENBQUM7UUFDRCw0RUFBNEU7UUFDNUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUUsRUFBRSxDQUFDO1lBQy9GLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4RixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDO1FBRS9GLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO1FBRTNDLFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDWixLQUFLLE9BQU87Z0JBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPO1lBQ1gsS0FBSyxNQUFNO2dCQUNQLHdDQUF3QztnQkFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQy9GLE9BQU87Z0JBQ1gsQ0FBQztxQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxtSEFBbUg7b0JBQ25KLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQzdDLENBQUM7Z0JBQ0Qsb0NBQW9DO2dCQUNwQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07WUFDVixLQUFLLE1BQU07Z0JBQ1AsdUNBQXVDO2dCQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDOUYsT0FBTztnQkFDWCxDQUFDO3FCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLG1IQUFtSDtvQkFDbkosSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDOUMsQ0FBQztnQkFDRCxvQ0FBb0M7Z0JBQ3BDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztnQkFDekIsTUFBTTtZQUNWLEtBQUssTUFBTTtnQkFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLE9BQU87WUFDWDtnQkFDSSxNQUFNO1FBQ2QsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQVEsRUFBRSxjQUFlLEVBQUUsZ0JBQWlCLEVBQUUsWUFBYTtRQUN2RyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksaUJBQWlCLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyRCxpQkFBaUIsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsSUFBSSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLDZHQUE2RztZQUM3Ryw0Q0FBNEM7WUFDNUMsZ0ZBQWdGO1lBQ2hGLElBQUksQ0FBQyx1QkFBdUIsQ0FDeEIsTUFBTSxDQUNGLFdBQVcsRUFDWCxNQUFNLEVBQ04sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUNsQyxFQUFFLENBQUMsRUFBRTtnQkFDRCxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDbEMsQ0FBQztxQkFBTSxDQUFDO29CQUNMLHFHQUFxRztvQkFDcEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixDQUFDO1lBQ0wsQ0FBQyxDQUNKLENBQ0osQ0FBQztZQUVGLHNJQUFzSTtZQUN0SSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDckIsT0FBTztZQUNYLENBQUM7WUFDRCwyRkFBMkY7WUFDM0YsSUFBSSxDQUFDLHVCQUF1QixDQUN4QixNQUFNLENBQ0YsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixFQUFFLEVBQ0YsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQ3RDLENBQ0osQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0gsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQ2pDLENBQUM7SUFDTCxDQUFDO0lBRUQsMERBQTBEO0lBQzFELGFBQWEsQ0FBQyxVQUFVO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDaEMsSUFBSSxRQUFRLEVBQUUsWUFBWSxDQUFDO1FBQzNCLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQUksSUFBSSxDQUFDO1lBQ1QsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztnQkFDMUQsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksR0FBRyxFQUFFLENBQUM7WUFDZCxDQUFDO1lBQ0QsK0ZBQStGO1lBQy9GLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxJQUFJLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLHVEQUF1RDtnQkFDdkUsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUMscUJBQXFCO29CQUNyRCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsRUFDM0YsYUFBYSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSwwQkFBMEIsQ0FBQyxFQUN6RyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUMzRSxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsRUFBRSxjQUFjLElBQUksZUFBZSxDQUFDO29CQUNyRSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7b0JBQzNILElBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUMsQ0FBQzt3QkFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7b0JBQzdELENBQUM7eUJBQUksQ0FBQzt3QkFDRixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyx3RUFBd0U7b0JBQzdOLENBQUM7b0JBQ0QsSUFBSSxXQUFXLEVBQUUsWUFBWSxJQUFJLFdBQVcsQ0FBQyxjQUFjLEtBQUssV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNuRixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQzt3QkFDNUQsQ0FBQzt3QkFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFDckgsSUFBSSxZQUFZLEVBQUUsQ0FBQzs0QkFDZixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dDQUNyRCxVQUFVLEVBQUUsQ0FBQztnQ0FDYixRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0NBQ3pCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVO2dDQUN0RCxZQUFZLEVBQUUsWUFBWTs2QkFDN0IsQ0FBQyxDQUFBOzRCQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO3dCQUNsQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxDQUFDO29CQUNKLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQzNDLElBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUMsQ0FBQzt3QkFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7b0JBQzdELENBQUM7eUJBQUksQ0FBQzt3QkFDRixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQzdFLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7WUFDRCxvSEFBb0g7WUFDcEgsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDOUIsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUMsQ0FBQyxrRkFBa0Y7Z0JBQ3ZHLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDMUIsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLGdCQUFnQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1lBQ25DLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNKLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0lBQ0YsNkZBQTZGO0lBQzVGLCtCQUErQixDQUMzQixZQUErQyxFQUMvQyxXQUFtQixFQUNuQixXQUFtQjtRQUVuQixPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO1lBQy9FLE1BQU0sUUFBUSxHQUFHLGFBQWEsR0FBRyxXQUFXLENBQUM7WUFFN0MsT0FBTztnQkFDSCxJQUFJLEVBQUUsT0FBTztnQkFDYixLQUFLLEVBQUUsUUFBUTthQUNsQixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEtBQUs7UUFDMUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQUksY0FBYyxDQUFDO1FBRW5CLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLEtBQUssV0FBVyxDQUFDO1lBQ2pCLEtBQUssS0FBSztnQkFDTixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN4Qyw2QkFBNkI7b0JBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQy9ELENBQUM7cUJBQU0sQ0FBQztvQkFDSixzQ0FBc0M7b0JBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQy9ELENBQUM7Z0JBQ0QsTUFBTTtZQUNWLEtBQUssU0FBUztnQkFDVixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzNELE1BQU07WUFFVixLQUFLLE9BQU87Z0JBQ1IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsT0FBTztZQUVYLEtBQUssUUFBUTtnQkFDVCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsT0FBTztZQUVYO2dCQUNJLE9BQU87UUFDZixDQUFDO1FBRUQsb0NBQW9DO1FBQ3BDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUVQLENBQUM7SUFFRCxhQUFhO1FBQ1QsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDbEUsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMseUJBQXlCO0lBQ3BELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsWUFBWSxDQUFDLE1BQU07UUFDZixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWiwrREFBK0Q7Z0JBQy9ELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDaEQsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3hCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNWLENBQUM7SUFDTCxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFdBQVc7UUFDaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLElBQUksWUFBWSxDQUFDO1FBQ3JCLElBQUksV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQzVCLFlBQVksR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakgsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzdELElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JELFVBQVUsRUFBRSxDQUFDO2dCQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDekIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFVBQVU7Z0JBQ3RELFlBQVksRUFBRSxZQUFZO2FBQzdCLENBQUMsQ0FBQTtRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDckQsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsVUFBVTthQUN6RCxDQUFDLENBQUE7UUFDTixDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFDRCxlQUFlO1FBQ1gsTUFBTSxjQUFjLEdBQUksSUFBSSxDQUFDLGFBQTRCLENBQUM7UUFDMUQsY0FBYyxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQy9CLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUM7SUFDTixDQUFDO29IQXB2QlEsbUJBQW1CLDBEQW9GbUIsU0FBUywyQkFBeUIsa0JBQWtCO29FQXBGMUYsbUJBQW1COzJCQUlqQixtQkFBbUI7Ozs7cUpBUm5CO2dCQUNQLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDO2FBQzFDO1lDb0tMLEFBSEEsQUFQQSxBQVJBLEFBN0NBLEFBcERBLEFBOUZBLDRFQUFpQyxnRUE4RkYscURBb0RBLDhEQTZDbUIsd0dBUWQsd0dBT2Usd0dBR0E7O1lBak5uRCx3REE2RkM7WUFDRCxjQWtEQztZQWxERCxzREFrREM7WUFFRCxjQTJDQztZQTNDRCxzREEyQ0M7WUFFRCxjQU1DO1lBTkQsNkVBTUM7NEJEN0pXLFlBQVksY0FBRSxrQkFBa0IsRUFBRSxXQUFXLG1GQUFFLGdCQUFnQiwwQkFBRSxnQkFBZ0I7O2lGQU9oRixtQkFBbUI7Y0FUL0IsU0FBUzs2QkFDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxZQUMvRixnQkFBZ0IsYUFFZjtvQkFDUCxrQkFBa0IscUJBQXFCO2lCQUMxQzs7c0JBc0YyQixRQUFROztzQkFBSSxNQUFNO3VCQUFDLFNBQVM7O3NCQUFrQixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUTtxQkFsRnBHLGFBQWE7a0JBQXRCLE1BQU07WUFDRyxpQkFBaUI7a0JBQTFCLE1BQU07WUFDbUMsVUFBVTtrQkFBbkQsU0FBUzttQkFBQyxtQkFBbUI7O2tGQUpyQixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgV21Db21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgT3V0cHV0LCBTa2lwU2VsZiwgQWZ0ZXJWaWV3SW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgJGFwcERpZ2VzdCxcbiAgICAkd2F0Y2gsXG4gICAgQXBwQ29uc3RhbnRzLFxuICAgIERhdGFTb3VyY2UsXG4gICAgZGVib3VuY2UsXG4gICAgaXNEZWZpbmVkLFxuICAgIHN3aXRjaENsYXNzLFxuICAgIHRyaWdnZXJGblxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBERUJPVU5DRV9USU1FUywgZ2V0T3JkZXJCeUV4cHIsIHByb3ZpZGVBc1dpZGdldFJlZiwgU3R5bGFibGVDb21wb25lbnQsIHN0eWxlciwgV2lkZ2V0UmVmLCB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlc30gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9wYWdpbmF0aW9uLnByb3BzJztcbmltcG9ydCB7Zm9yRWFjaCwgZ2V0LCBpc0FycmF5LCBpc0VtcHR5LCBpc051bGwsIGlzU3RyaW5nLCByYW5nZX0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgUGFnaW5hdGlvbk1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duTW9kdWxlLCBCc0Ryb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBNZW51Q29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9tZW51JztcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWRhdGFuYXZpZ2F0b3IgY2xlYXJmaXgnO1xuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tcGFnaW5hdGlvbicsIGhvc3RDbGFzczogREVGQVVMVF9DTFN9O1xuXG5jb25zdCBzaXplQ2xhc3NlcyA9IHtcbiAgICAnUGFnZXInOiB7XG4gICAgICAgICdzbWFsbCc6ICdwYWdlci1zbScsXG4gICAgICAgICdsYXJnZSc6ICdwYWdlci1sZydcbiAgICB9LFxuICAgICdCYXNpYyc6IHtcbiAgICAgICAgJ3NtYWxsJzogJ3BhZ2luYXRpb24tc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnaW5hdGlvbi1sZydcbiAgICB9LFxuICAgICdDbGFzc2ljJzoge1xuICAgICAgICAnc21hbGwnOiAncGFnaW5hdGlvbi1zbScsXG4gICAgICAgICdsYXJnZSc6ICdwYWdpbmF0aW9uLWxnJ1xuICAgIH1cbn07XG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgV21Db21wb25lbnRzTW9kdWxlLCBGb3Jtc01vZHVsZSwgUGFnaW5hdGlvbk1vZHVsZSwgQnNEcm9wZG93bk1vZHVsZSwgTWVudUNvbXBvbmVudF0sXG4gICAgc2VsZWN0b3I6ICdbd21QYWdpbmF0aW9uXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoUGFnaW5hdGlvbkNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG4gICAgQE91dHB1dCgpIHJlc3VsdEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBtYXhSZXN1bHRzRW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQFZpZXdDaGlsZChCc0Ryb3Bkb3duRGlyZWN0aXZlKSBwcm90ZWN0ZWQgYnNEcm9wZG93bjtcblxuICAgIGRhdGFzb3VyY2U7XG4gICAgbWF4UmVzdWx0cztcbiAgICBwYWdlU2l6ZU9wdGlvbnM7XG4gICAgcHJldlBhZ2VTaXplO1xuICAgIGFjdHVhbFBhZ2VTaXplO1xuICAgIGFsbG93cGFnZXNpemVjaGFuZ2U7XG4gICAgZGVmYXVsdFBhZ2VTaXplT3B0aW9ucyA9IFtdO1xuICAgIGZvY3VzZWRJbmRleCA9IDA7XG4gICAgcm93U3VtbWFyeTtcbiAgICBuYXZpZ2F0aW9uc2l6ZTtcbiAgICBzaG93cmVjb3JkY291bnQ7XG5cbiAgICBuYXZjb250cm9scztcbiAgICBuYXZpZ2F0aW9uO1xuXG4gICAgYm91bmRhcnlsaW5rcztcbiAgICBkaXJlY3Rpb25saW5rcztcblxuICAgIG5hdmlnYXRpb25DbGFzcztcbiAgICBkbiA9IHtcbiAgICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuXG4gICAgcGFnZUNvdW50ID0gMDtcbiAgICBpc0Rpc2FibGVOZXh0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVQcmV2aW91cyA9IHRydWU7XG4gICAgaXNEaXNhYmxlRmlyc3QgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUxhc3QgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUN1cnJlbnQ7XG4gICAgZGF0YVNpemU7XG4gICAgcHJldnNob3dyZWNvcmRjb3VudDtcbiAgICBpc0Rpc2FibGVDb3VudDtcbiAgICBmaXJzdFJvdztcbiAgICByZXN1bHQ7XG4gICAgX19mdWxsRGF0YTtcbiAgICBkYXRhc2V0O1xuICAgIG9wdGlvbnM7XG4gICAgc3RhdGVoYW5kbGVyO1xuICAgIGZpbHRlckZpZWxkcztcbiAgICBzb3J0T3B0aW9ucztcbiAgICBiaW5kZGF0YXNldDtcbiAgICBwYWdpbmF0aW9uO1xuICAgIGxvZ2ljYWxPcDtcblxuICAgIHByaXZhdGUgX2RlYm91bmNlZEFwcGx5RGF0YXNldCA9IGRlYm91bmNlKCgpID0+IHRoaXMud2lkZ2V0LmRhdGFzZXQgPSB0aGlzLmRhdGFzZXQsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkUGFnZUNoYW5nZWQgPSBkZWJvdW5jZShldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gZXZlbnQgJiYgZXZlbnQucGFnZTtcbiAgICAgICAgY29uc3QgbWF4UmVzdWx0cyA9IGV2ZW50ICYmIChldmVudC5wYWdlc2l6ZSB8fCBldmVudC5pdGVtc1BlclBhZ2UpIHx8IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgXG4gICAgICAgIC8vIERvIG5vdCBjYWxsIGdvVG9QYWdlIGlmIHBhZ2UgaGFzIG5vdCBjaGFuZ2VkXG4gICAgICAgIGlmIChjdXJyZW50UGFnZSAhPT0gdGhpcy5kbi5jdXJyZW50UGFnZSB8fCB0aGlzLm1heFJlc3VsdHMgIT09IG1heFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3QgPSAodGhpcyBhcyBhbnkpLnBhcmVudCB8fCB0aGlzO1xuICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gbWF4UmVzdWx0cztcbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0c0VtaXR0ZXIuZW1pdCh0aGlzLm1heFJlc3VsdHMpO1xuICAgICAgICAgICAgaW5zdC5pbnZva2VFdmVudENhbGxiYWNrKCdwYWdpbmF0aW9uY2hhbmdlJywgeyRldmVudDogdW5kZWZpbmVkLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2V9KTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb24gPT09ICdCYXNpYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRBcmlhRm9yQmFzaWNOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUpO1xuXG4gICAgcHJpdmF0ZSBfc2V0QXJpYUZvckJhc2ljTmF2aWdhdGlvbigpIHtcbiAgICAgICAgZm9yRWFjaCh0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKSwgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdocmVmJywgJ2phdmFzY3JpcHQ6dm9pZCgwKTsnKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGl0ZW0ucXVlcnlTZWxlY3Rvcignc3BhbicpO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZT8uZGF0YXNldC5pc2FjaXR2ZXBhZ2UgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICd0cnVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihjaGlsZE5vZGU/LmRhdGFzZXQuaXNkaXNhYmxlZCA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIEBTa2lwU2VsZigpIEBJbmplY3QoV2lkZ2V0UmVmKSBwdWJsaWMgcGFyZW50LCBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcbiAgICAgICAgc2V0VGltZW91dCgoKT0+IHtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSA9IHRoaXMucGFyZW50LmFsbG93cGFnZXNpemVjaGFuZ2U7XG4gICAgICAgICAgICBpZih0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zID0gdGhpcy5wYXJlbnQ/LnBhZ2VzaXplb3B0aW9ucyA/IHRoaXMucGFyZW50LnBhZ2VzaXplb3B0aW9ucz8uc3BsaXQoJywnKS5tYXAoTnVtYmVyKS5zb3J0KChhLCBiKSA9PiBhIC0gYikgOiBbXTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgc2V0UmVzdWx0KHJlc3VsdCkge1xuICAgICAgICAvLyBUT0RPOiBFbWl0IGV2ZW50IG9ubHkgaWYgcmVzdWx0IGlzIGNoYW5nZWRcbiAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMucmVzdWx0RW1pdHRlci5lbWl0KHRoaXMucmVzdWx0KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbmF2aWdhdGlvbkNsYXNzIGJhc2VkIG9uIG5hdmlnYXRpb24gYW5kIG5hdmlnYXRpb25TaXplIHByb3BzXG4gICAgcHJpdmF0ZSB1cGRhdGVOYXZTaXplKCkge1xuICAgICAgICBjb25zdCBzaXplQ2xzID0gc2l6ZUNsYXNzZXNbdGhpcy5uYXZjb250cm9sc107XG4gICAgICAgIGlmIChzaXplQ2xzICYmIHRoaXMubmF2aWdhdGlvbnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNsYXNzID0gc2l6ZUNsc1t0aGlzLm5hdmlnYXRpb25zaXplXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNsYXNzID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byByZXNldCB0aGUgcGFnaW5nIHZhbHVlcyB0byBkZWZhdWx0LlxuICAgIHJlc2V0UGFnZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIHRoaXMuZGF0YVNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSBwYWdpbmcgdmFsdWVzLiovXG4gICAgY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCkge1xuICAgICAgICB0aGlzLnBhZ2VDb3VudCA9ICh0aGlzLmRhdGFTaXplID4gdGhpcy5tYXhSZXN1bHRzKSA/IChNYXRoLmNlaWwodGhpcy5kYXRhU2l6ZSAvIHRoaXMubWF4UmVzdWx0cykpIDogKHRoaXMuZGF0YVNpemUgPCAwID8gMCA6IDEpO1xuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5kbi5jdXJyZW50UGFnZSB8fCAxO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gc2V0IGRlZmF1bHQgdmFsdWVzIHRvIHRoZSBwYWdpbmcgcGFyYW1ldGVycyovXG4gICAgc2V0RGVmYXVsdFBhZ2luZ1ZhbHVlcyhkYXRhU2l6ZSwgbWF4UmVzdWx0cywgY3VycmVudFBhZ2UpIHtcbiAgICAgICAgLypJZiBuZWl0aGVyICdkYXRhU2l6ZScgbm9yICdtYXhSZXN1bHRzJyBpcyBzZXQsIHRoZW4gc2V0IGRlZmF1bHQgdmFsdWVzIHRvIHRoZSBwYWdpbmcgcGFyYW1ldGVycy4qL1xuICAgICAgICBpZiAoIWRhdGFTaXplICYmICFtYXhSZXN1bHRzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IDE7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0cyA9IGRhdGFTaXplO1xuICAgICAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IGRhdGFTaXplO1xuICAgICAgICB9IGVsc2UgeyAvKkVsc2UsIHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlcyBhbmQgcmVjYWxjdWxhdGUgcGFnaW5nIHBhcmFtZXRlcnMuKi9cbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0cyA9IG1heFJlc3VsdHMgfHwgdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IGlzRGVmaW5lZChkYXRhU2l6ZSkgPyBkYXRhU2l6ZSA6IHRoaXMuZGF0YVNpemU7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2UgfHwgdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXhSZXN1bHRzRW1pdHRlci5lbWl0KHRoaXMubWF4UmVzdWx0cyk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayB0aGUgZGF0YVNpemUgYW5kIG1hbmlwdWxhdGUgdGhlIG5hdmlnYXRvciBhY2NvcmRpbmdseS4qL1xuICAgIGNoZWNrRGF0YVNpemUoZGF0YVNpemUsIG51bWJlck9mRWxlbWVudHM/LCBzaXplPykge1xuICAgICAgICAvKklmIHRoZSBkYXRhU2l6ZSBpcyAtMSBvciBJbnRlZ2VyLk1BWF9WQUxVRSggd2hpY2ggaXMgMjE0NzQ4MzY0NyksIHRoZW4gdGhlIHRvdGFsIG51bWJlciBvZiByZWNvcmRzIGlzIG5vdCBrbm93bi5cbiAgICAgICAgICogSGVuY2UsXG4gICAgICAgICAqIDEuIEhpZGUgdGhlICdUb3RhbCBSZWNvcmQgQ291bnQnLlxuICAgICAgICAgKiAyLiBEaXNhYmxlIHRoZSAnR29Ub0xhc3RQYWdlJyBsaW5rIGFzIHRoZSBwYWdlIG51bWJlciBvZiB0aGUgbGFzdCBwYWdlIGlzIG5vdCBrbm93bi4qL1xuICAgICAgICBpZiAoZGF0YVNpemUgPT09IC0xIHx8IGRhdGFTaXplID09PSBBcHBDb25zdGFudHMuSU5UX01BWF9WQUxVRSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2c2hvd3JlY29yZGNvdW50ID0gdGhpcy5zaG93cmVjb3JkY291bnQ7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUxhc3QgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVDb3VudCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNob3dyZWNvcmRjb3VudCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgbnVtYmVyIG9mIHJlY29yZHMgaW4gY3VycmVudCBwYWdlIGlzIGxlc3MgdGhhbiB0aGUgbWF4IHJlY29yZHMgc2l6ZSwgdGhpcyBpcyB0aGUgbGFzdCBwYWdlLiBTbyBkaXNhYmxlIG5leHQgYnV0dG9uLlxuICAgICAgICAgICAgaWYgKG51bWJlck9mRWxlbWVudHMgPCBzaXplKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVOZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQ291bnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd3JlY29yZGNvdW50ID0gdGhpcy5wcmV2c2hvd3JlY29yZGNvdW50IHx8IHRoaXMuc2hvd3JlY29yZGNvdW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBkaXNhYmxlIG5hdmlnYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgYW5kIHRvdGFsIHBhZ2VzLiovXG4gICAgZGlzYWJsZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudFBhZ2VGaXJzdCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlID09PSAxKSxcbiAgICAgICAgICAgIGlzQ3VycmVudFBhZ2VMYXN0ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IHRoaXMucGFnZUNvdW50KTtcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24/Lm5leHQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlRmlyc3QgPSB0aGlzLmlzRGlzYWJsZVByZXZpb3VzID0gaXNDdXJyZW50UGFnZUZpcnN0O1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVOZXh0ID0gdGhpcy5pc0Rpc2FibGVMYXN0ID0gaXNDdXJyZW50UGFnZUxhc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBXTVMtMTg4Njc6IEluIGNhc2Ugb2Ygc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgZm9yIHBhZ2VyIHR5cGUgcGFnaW5hdGlvbiBkZXBlbmQgb24gcHJldiBhbmQgbmV4dCBmbGFncyB3aGljaCBhcmUgc2V0IGJ5IGRldmVsb3BlclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVGaXJzdCA9IHRoaXMuaXNEaXNhYmxlUHJldmlvdXMgPSAhdGhpcy5wYWdpbmF0aW9uLnByZXY7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0aGlzLmlzRGlzYWJsZUxhc3QgPSAhdGhpcy5wYWdpbmF0aW9uLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0Rpc2FibGVDdXJyZW50ID0gaXNDdXJyZW50UGFnZUZpcnN0ICYmIGlzQ3VycmVudFBhZ2VMYXN0O1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGNsaWVudCBzaWRlIHBhZ2luYXRpb24sIHdoZW4gbG9hZCBtb3JlIHJlYWNoZXMgbGFzdCBwYWdlIGhpZGUgdGhlIG9uLWRlbWFuZCBncmlkIGVsZVxuICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmIHRoaXMuZGF0YXNldC5sZW5ndGggJiYgdGhpcy5pc0Rpc2FibGVOZXh0ICYmIHRoaXMucGFyZW50Lm9uRGVtYW5kTG9hZCAmJiB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5jYWxsRGF0YUdyaWRNZXRob2QoJ2hpZGVMb2FkaW5nSW5kaWNhdG9yJywgdGhpcy5pc0Rpc2FibGVOZXh0LCB0aGlzLnBhcmVudC5pbmZTY3JvbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgdmFyaWFibGUgYm91bmQgdG8gdGhlIGRhdGEtbmF2aWdhdG9yIGhhcyBwYWdpbmcuKi9cbiAgICBpc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2hpY2ggZ2l2ZXMgc3VtbWFyeSBvZiB0aGUgY3VycmVudCBwYWdlIGRhdGEgKGV4OiBJbiBVSSBpdCBpcyBzaG93biBhcyAgMSB0byAxMCBvdXQgb2YgNTAgcmVjb3JkcylcbiAgICBnZXRQYWdlRGV0YWlscyhzdGFydEluZGV4LCBlbmRJbmRleCwgdG90YWxSZWNvcmRzKSB7XG4gICAgICAgIHRoaXMucm93U3VtbWFyeSA9ICAoaXNEZWZpbmVkKHN0YXJ0SW5kZXgpICYmIGlzRGVmaW5lZChlbmRJbmRleCkgJiYgaXNEZWZpbmVkKHRvdGFsUmVjb3JkcykpID8ge1xuICAgICAgICAgICAgc3RhcnRJbmRleDogc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGVuZEluZGV4OiBlbmRJbmRleCxcbiAgICAgICAgICAgIHRvdGFsUmVjb3JkczogdG90YWxSZWNvcmRzXG4gICAgICAgIH06IHt9O1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgcmVzdWx0IGZvciBjbGllbnQgc2lkZSBwYWdpbmF0aW9uXG4gICAgc2V0Tm9uUGFnZWFibGVEYXRhKG5ld1ZhbCkge1xuICAgICAgICBsZXQgZGF0YVNpemUsXG4gICAgICAgICAgICBtYXhSZXN1bHRzLFxuICAgICAgICAgICAgY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzdGFydEluZGV4O1xuICAgICAgICBkYXRhU2l6ZSA9IGlzQXJyYXkobmV3VmFsKSA/IG5ld1ZhbC5sZW5ndGggOiAoaXNFbXB0eShuZXdWYWwpID8gMCA6IDEpO1xuICAgICAgICBtYXhSZXN1bHRzID0gKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubWF4UmVzdWx0cykgfHwgZGF0YVNpemU7XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSkgeyAvLyB3aGVuIGRlZmF1bHQgcGFnZSBzaXplIGlzIG5vdCBnaXZlbiB0aGVuIHVzZSBtYXhSZXN1bHRzIGluc3RlYWQgb2Ygb3B0aW9ucy5tYXhSZXN1bHRzXG4gICAgICAgICAgICBtYXhSZXN1bHRzID0gdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvciBzdGF0aWMgdmFyaWFibGUsIGtlZXAgdGhlIGN1cnJlbnQgcGFnZS4gRm9yIG90aGVyIHZhcmlhYmxlcyB3aXRob3V0IHBhZ2luYXRpb24gcmVzZXQgdGhlIHBhZ2UgdG8gMVxuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjMyNjNdOiBncmlkT3B0aW9ucy5pc05leHRQYWdlRGF0YSBmbGFnIGlzIGZhbHNlIHdoZW4gZGF0YXNldCBpcyBjaGFuZ2VkIGZyb20gc2NyaXB0LCBzbyBzZXR0aW5nIGN1cnJlbnQgcGFnZSB0byAxXG4gICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgKHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSkgfHwgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgJiYgKHRoaXMucGFyZW50LmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSAmJiAoZ2V0KHRoaXMucGFyZW50LCAnZ3JpZE9wdGlvbnMubGFzdEFjdGlvblBlcmZvcm1lZCcpID09PSB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5BQ1RJT05TLkRBVEFTRVRfVVBEQVRFIHx8ICFnZXQodGhpcy5wYXJlbnQsICdncmlkT3B0aW9ucy5pc05leHRQYWdlRGF0YScpKSkpKSkge1xuICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudFBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdpbmdWYWx1ZXMoZGF0YVNpemUsIG1heFJlc3VsdHMsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuXG4gICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5kbi5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxLCBNYXRoLm1pbihzdGFydEluZGV4ICsgdGhpcy5tYXhSZXN1bHRzLCBuZXdWYWw/Lmxlbmd0aCksIG5ld1ZhbD8ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zZXRSZXN1bHQoaXNBcnJheShuZXdWYWwpID8gbmV3VmFsLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMpIDogbmV3VmFsKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWVzIG5lZWRlZCBmb3IgcGFnaW5hdGlvbiovXG4gICAgcHJpdmF0ZSBzZXRQYWdpbmdWYWx1ZXMobmV3VmFsKSB7XG4gICAgICAgIGxldCBkYXRhU2l6ZSxcbiAgICAgICAgICAgIG1heFJlc3VsdHMsXG4gICAgICAgICAgICBjdXJyZW50UGFnZSxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBkYXRhU291cmNlO1xuICAgICAgICBsZXQgdmFyaWFibGVPcHRpb25zOiBhbnkgPSB7fTtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGRhdGEgaW4gX19mdWxsRGF0YS4gVGhpcyBpcyB1c2VkIGZvciBjbGllbnQgc2lkZSBzZWFyY2hpbmcgd2l0dmFoIG91dCBtb2RpZnlpbmcgdGhlIGFjdHVhbCBkYXRhc2V0LlxuICAgICAgICB0aGlzLl9fZnVsbERhdGEgPSBuZXdWYWw7XG4gICAgICAgIC8qQ2hlY2sgZm9yIHNhbml0eSovXG4gICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc2V0KSB7XG4gICAgICAgICAgICBkYXRhU291cmNlID0gdGhpcy5kYXRhc291cmNlIHx8IHt9O1xuICAgICAgICAgICAgdmFyaWFibGVPcHRpb25zID0gZGF0YVNvdXJjZS5fb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIC8qQ2hlY2sgZm9yIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGF0YSBzZXQqL1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QQUdJTkdfT1BUSU9OUykgfHwge307XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIFwiZmlsdGVyRmllbGRzXCIgYW5kIFwic29ydE9wdGlvbnNcIiBoYXZlIGJlZW4gc2V0LCB0aGVuIHNldCB0aGVtIHNvIHRoYXQgdGhlIGZpbHRlcnMgY2FuIGJlIHJldGFpbmVkIHdoaWxlIGZldGNoaW5nIGRhdGEgdXBvbiBwYWdlIG5hdmlnYXRpb24uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gdmFyaWFibGVPcHRpb25zLmZpbHRlckZpZWxkcyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dpY2FsT3AgPSB2YXJpYWJsZU9wdGlvbnMubG9naWNhbE9wIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRPcHRpb25zID0gdmFyaWFibGVPcHRpb25zLm9yZGVyQnkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0FycmF5KHRoaXMucGFnaW5hdGlvbi5zb3J0KSA/IGdldE9yZGVyQnlFeHByKHRoaXMucGFnaW5hdGlvbi5zb3J0KSA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNpemUgPSB0aGlzLnBhZ2luYXRpb24udG90YWxFbGVtZW50cztcbiAgICAgICAgICAgICAgICAgICAgbWF4UmVzdWx0cyA9IHRoaXMucGFnaW5hdGlvbi5zaXplID0gTnVtYmVyKHRoaXMucGFnaW5hdGlvbi5zaXplKSA/IHRoaXMucGFnaW5hdGlvbi5zaXplIDogZ2V0KHRoaXMuZGF0YXNvdXJjZS5kYXRhU2V0LCB0aGlzLnBhZ2luYXRpb24uc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzID0gTnVtYmVyKHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzKSA/IHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzIDogZ2V0KHRoaXMuZGF0YXNvdXJjZS5kYXRhU2V0LCB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cylcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnBhZ2luYXRpb24ubnVtYmVyKSkgeyAvLyBudW1iZXIgaXMgcGFnZSBudW1iZXIgcmVjZWl2ZWQgZnJvbSBiYWNrZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IHRoaXMucGFnaW5hdGlvbi5udW1iZXIgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyogU2VuZGluZyBwYWdlQ291bnQgdW5kZWZpbmVkIHRvIGNhbGN1bGF0ZSBpdCBhZ2FpbiBmb3IgcXVlcnkuKi9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0UGFnaW5nVmFsdWVzKGRhdGFTaXplLCBtYXhSZXN1bHRzLCBjdXJyZW50UGFnZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0RhdGFTaXplKGRhdGFTaXplLCB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cywgdGhpcy5wYWdpbmF0aW9uLnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKGN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFnZURldGFpbHMoc3RhcnRJbmRleCArIDEsIHN0YXJ0SW5kZXggKyB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cywgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJlc3VsdChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb25QYWdlYWJsZURhdGEobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uID09PSAnQmFzaWMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0QXJpYUZvckJhc2ljTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCAmJiAhaXNTdHJpbmcobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9uUGFnZWFibGVEYXRhKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGZpcnN0IHBhZ2UqL1xuICAgIGlzRmlyc3RQYWdlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IDEgfHwgIXRoaXMuZG4uY3VycmVudFBhZ2UpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBwYWdlKi9cbiAgICBpc0xhc3RQYWdlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IHRoaXMucGFnZUNvdW50KTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSBsYXN0IHBhZ2UqL1xuICAgIGdvVG9MYXN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlQ291bnQ7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNSZWZyZXNoKSB7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlKi9cbiAgICBnb1RvRmlyc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0UGFnZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGN1cnJlbnQgcGFnZSovXG4gICAgZ29Ub1BhZ2UoZXZlbnQ/LCBjYWxsYmFjaz8pIHtcbiAgICAgICAgdGhpcy5maXJzdFJvdyA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLmNvbXB1dGVNb2RlKHRoaXMuc3RhdGVoYW5kbGVyKSxcbiAgICAgICAgICAgIGFsbG93cGFnZXNpemVjaGFuZ2UgPSB0aGlzLnBhcmVudC5hbGxvd3BhZ2VzaXplY2hhbmdlO1xuICAgICAgICBpZiAobW9kZSAmJiBtb2RlLnRvTG93ZXJDYXNlKCkgIT09ICdub25lJyAmJiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyB8fCB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tbGlzdCcpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRmlyc3RQYWdlKCkgJiYgIWFsbG93cGFnZXNpemVjaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMucGFyZW50LCAncGFnaW5hdGlvbicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLnBhcmVudC5uYXZpZ2F0aW9uKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhdGU6IHsgcGFnaW5hdGlvbjogbnVtYmVyOyBwYWdlc2l6ZT86IG51bWJlciB9ID0geyBwYWdpbmF0aW9uOiB0aGlzLmRuLmN1cnJlbnRQYWdlIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd3BhZ2VzaXplY2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYWdlc2l6ZSA9IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMucGFyZW50LCBzdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tbGlzdCcgfHwgdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMucGFyZW50Lm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyZW50LmN1cnJlbnRwYWdlID0gdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm5hdGl2ZUVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY3VycmVudHBhZ2UnLCB0aGlzLmRuLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYWxsIGdldFBhZ2VEYXRhIGFmdGVyIGNoZWNraW5nIHN0YXRlIGNvbmZpZyBzbyB0aGF0IFN0YXRpYyBWYXJpYWJsZXMgY2FuIHVzZSBpdFxuICAgICAgICB0aGlzLmdldFBhZ2VEYXRhKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBkYXRhIG9mIHRoZSBwYWdlIGhhcyBiZWVuIGZldGNoZWQuKi9cbiAgICBvblBhZ2VEYXRhUmVhZHkoZXZlbnQsIGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU5hdmlnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pbnZva2VTZXRSZWNvcmQoZXZlbnQsIGRhdGEpO1xuICAgICAgICB0cmlnZ2VyRm4oY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gZ2V0IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UqL1xuICAgIGdldFBhZ2VEYXRhKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgZGF0YSxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEYXRhU291cmNlSGFzUGFnaW5nKCkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW4gdGFibGUgY29tcG9uZW50LCBpbiBjYXNlIG9mIG9uIGRlbWFuZCBhbmQgc2Nyb2xsIHBhZ2luYXRpb25cbiAgICAgICAgICAgICAqIFdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gZGF0YSBpdGVtIHdoaWNoIGlzIG5vdCBpbiBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgICAqIEZldGNoIHRoZSBpdGVtcyBvZiB0aGUgcGFnZSB3aGVyZSB0aGUgY2hhbmdlIGlzIG1hZGVcbiAgICAgICAgICAgICAqICovXG4gICAgICAgICAgICBsZXQgcGFnZUluZGV4ID0gdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSAmJiB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkICE9PSAnZGVsZXRlJykge1xuICAgICAgICAgICAgICAgIHBhZ2VJbmRleCA9IHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMsIHtcbiAgICAgICAgICAgICAgICAncGFnZSc6IHBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgICAnc2l6ZSc6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICAnZmlsdGVyRmllbGRzJzogdGhpcy5maWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICAgICAgJ29yZGVyQnknOiB0aGlzLnNvcnRPcHRpb25zLFxuICAgICAgICAgICAgICAgICdsb2dpY2FsT3AnOiB0aGlzLmxvZ2ljYWxPcCxcbiAgICAgICAgICAgICAgICAnbWF0Y2hNb2RlJzogJ2FueXdoZXJlaWdub3JlY2FzZSdcbiAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlRGF0YVJlYWR5KGV2ZW50LCByZXNwb25zZSAmJiByZXNwb25zZS5kYXRhLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSAsIHN0YXJ0SW5kZXggKyB0aGlzLnBhZ2luYXRpb24/Lm51bWJlck9mRWxlbWVudHMsIHRoaXMucGFnaW5hdGlvbj8udG90YWxFbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIGVycm9yIGlzIHVuZGVmaW5lZCwgZG8gbm90IHNob3cgYW55IG1lc3NhZ2UgYXMgdGhpcyBtYXkgYmUgZGlzY2FyZGVkIHJlcXVlc3RcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIEVycm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIHdtVG9hc3Rlci5zaG93KCdlcnJvcicsICdFUlJPUicsICdVbmFibGUgdG8gZ2V0IGRhdGEgb2YgcGFnZSAtJyArIHRoaXMuZG4uY3VycmVudFBhZ2UgKyAnOicgKyBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gaXNBcnJheSh0aGlzLl9fZnVsbERhdGEpID8gdGhpcy5fX2Z1bGxEYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMpIDogdGhpcy5fX2Z1bGxEYXRhO1xuICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSAsIE1hdGgubWluKHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMsIHRoaXMuX19mdWxsRGF0YT8ubGVuZ3RoKSwgdGhpcy5fX2Z1bGxEYXRhPy5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZURhdGFSZWFkeShldmVudCwgZGF0YSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICBGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgZWRpdCBhY3Rpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBwcmV2aW91cyBwYWdlIGRhdGEgb2YgdGhlIHRhYmxlXG4gICAgKi9cbiAgICBpc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkge1xuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiBwYWdlSW5kZXggPT09IHRoaXMucGFyZW50LmN1cnJlbnRQYWdlICYmXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5hY3Rpb25Sb3dQYWdlICYmIHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgPCBwYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgaW52b2tlU2V0UmVjb3JkKGV2ZW50LCBkYXRhKSB7XG4gICAgICAgIC8vIFRyaWdnZXIgdGhlIGV2ZW50IGhhbmRsZXIgaWYgZXhpc3RzLlxuICAgICAgICBjb25zdCBwYWdlSW5mbyA9IHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmRuLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgdG90YWxFbGVtZW50czogdGhpcy5kYXRhU2l6ZSxcbiAgICAgICAgICAgIHRvdGFsUGFnZXM6IHRoaXMucGFnZUNvdW50XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuaW52b2tlRXZlbnRDYWxsYmFjaygnc2V0cmVjb3JkJywgeyRldmVudDogZXZlbnQsICRkYXRhOiBkYXRhLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2UsIHBhZ2VJbmZvLCBkYXRhfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NldHJlY29yZCcsIHskZXZlbnQ6IGV2ZW50LCAkZGF0YTogZGF0YSwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlLCBwYWdlSW5mbywgZGF0YX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgcGFnZSBpbnB1dC5cbiAgICAgSW4gY2FzZSBvZiBpbnZhbGlkIGlucHV0LCBuYXZpZ2F0ZSB0byB0aGUgYXBwcm9wcmlhdGUgcGFnZTsgYWxzbyByZXR1cm4gZmFsc2UuXG4gICAgIEluIGNhc2Ugb2YgdmFsaWQgaW5wdXQsIHJldHVybiB0cnVlLiovXG4gICAgdmFsaWRhdGVDdXJyZW50UGFnZShldmVudCwgY2FsbGJhY2s/KSB7XG4gICAgICAgIC8qSWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IHBhZ2UgbnVtYmVyIG9yIGludmFsaWQgdmFsdWUsIHRoZW4gaGlnaGxpZ2h0aW5nIHRoZSBmaWVsZCBzaG93aW5nIGVycm9yLiovXG4gICAgICAgIGlmIChldmVudCAmJiAoaXNOYU4odGhpcy5kbi5jdXJyZW50UGFnZSkgfHwgdGhpcy5kbi5jdXJyZW50UGFnZSA8PSAwIHx8ICh0aGlzLnBhZ2VDb3VudCAmJiAodGhpcy5kbi5jdXJyZW50UGFnZSA+IHRoaXMucGFnZUNvdW50IHx8IGlzTnVsbCh0aGlzLmRuLmN1cnJlbnRQYWdlKSkpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZG4uY3VycmVudFBhZ2UgPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRuLmN1cnJlbnRQYWdlID4gdGhpcy5wYWdlQ291bnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlQ291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgb25Nb2RlbENoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlID0gJChldmVudC50YXJnZXQpLmNsb3Nlc3QoJ2EnKTtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdLZXlFJykge1xuICAgICAgICAgICAgdGFyZ2V0RWxlLmFkZENsYXNzKCduZy1pbnZhbGlkJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0RWxlLnJlbW92ZUNsYXNzKCduZy1pbnZhbGlkJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHBhZ2VDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICAgICB0aGlzLl9kZWJvdW5jZWRQYWdlQ2hhbmdlZChldmVudCk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgcmVzcGVjdGl2ZSBwYWdlcy4qL1xuICAgIG5hdmlnYXRlUGFnZShpbmRleCwgZXZlbnQsIGlzUmVmcmVzaD8sIGNhbGxiYWNrPykge1xuICAgICAgICAvLyB3aGVuIG5hdmlnYXRlZCB0byBuZXh0IHBhZ2UgdHVybiBvbiB0aGUgaXNEYXRhTG9hZGluZyBmbGFnIHRvIHNob3cgdGhlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5wYXJlbnQuaXNEYXRhTG9hZGluZykgJiYgIXRoaXMuaXNEaXNhYmxlTmV4dCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuaXNEYXRhTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGluZmluaXRlIHNjcm9sbCBjYWxsaW5nIHRoZSBzaG93TG9hZGluZ0luZGljYXRvciBtZXRob2QgdG8gdXBkYXRlIHRoZSBsb2FkaW5nIG1lc3NhZ2UgaW1tZWRpYXRlbHkgd2hlbiBuYXZpZ2F0ZWQgdG8gbmV4dCBwYWdlXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQudmFyaWFibGVJbmZsaWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2FsbERhdGFHcmlkTWV0aG9kKCdzaG93TG9hZGluZ0luZGljYXRvcicsIHRoaXMucGFyZW50LmxvYWRpbmdkYXRhbXNnLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXNldCB0aGUgbGFzdCBhY3Rpb24gcGVyZm9ybWVkIHRvIFwic2Nyb2xsXCIgYW5kIGlzRGF0YXNldFVwZGF0ZWQgdG8gZmFsc2VcbiAgICAgICAgaWYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgJiYgdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5zZXRMYXN0QWN0aW9uUGVyZm9ybWVkKHRoaXMucGFyZW50LmdyaWRPcHRpb25zLkFDVElPTlMuREVGQVVMVCk7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5zZXRJc0RhdGFzZXRVcGRhdGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3BhZ2luYXRpb25jaGFuZ2UnLCB7JGV2ZW50OiB1bmRlZmluZWQsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZX0pO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIGN1cnJlbnQgcGFnZSB0byBhIHZhbGlkIHBhZ2UgbnVtYmVyLlxuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gK3RoaXMuZG4uY3VycmVudFBhZ2U7XG5cbiAgICAgICAgc3dpdGNoIChpbmRleCkge1xuICAgICAgICAgICAgY2FzZSAnZmlyc3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0ZpcnN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAncHJldic6XG4gICAgICAgICAgICAgICAgLypSZXR1cm4gaWYgYWxyZWFkeSBvbiB0aGUgZmlyc3QgcGFnZS4qL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYWdpbmF0aW9uPy5uZXh0ICYmICh0aGlzLmlzRmlyc3RQYWdlKCkgfHwgIXRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShldmVudCwgY2FsbGJhY2spKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2luYXRpb24/Lm5leHQpIHsgLy8gV01TLTE4ODY3OiBGb3Igc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgc2tpcHBpbmcgdGhlIHJlZ3VsYXIgZmxvdyBhbmQgZW5hYmxpbmcgaXNOZXh0IGZsYWcgaW4gcGFnaW5hdGlvbiBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc05leHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNQcmV2ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLypEZWNyZW1lbnQgdGhlIGN1cnJlbnQgcGFnZSBieSAxLiovXG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSAtPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgICAgICAgLypSZXR1cm4gaWYgYWxyZWFkeSBvbiB0aGUgbGFzdCBwYWdlLiovXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24/Lm5leHQgJiYgKHRoaXMuaXNMYXN0UGFnZSgpIHx8ICF0aGlzLnZhbGlkYXRlQ3VycmVudFBhZ2UoZXZlbnQsIGNhbGxiYWNrKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdpbmF0aW9uPy5uZXh0KSB7IC8vIFdNUy0xODg2NzogRm9yIHNlcnZlciBzaWRlIHBhZ2luYXRpb24sIHNraXBwaW5nIHRoZSByZWd1bGFyIGZsb3cgYW5kIGVuYWJsaW5nIGlzUHJldiBmbGFnIGluIHBhZ2luYXRpb24gbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNQcmV2ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qSW5jcmVtZW50IHRoZSBjdXJyZW50IHBhZ2UgYnkgMS4qL1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgKz0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xhc3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0xhc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLypOYXZpZ2F0ZSB0byB0aGUgY3VycmVudCBwYWdlLiovXG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBzZXRCaW5kRGF0YVNldChiaW5kZGF0YXNldCwgcGFyZW50LCBkYXRhU291cmNlLCBkYXRhc2V0PywgYmluZGRhdGFzb3VyY2U/LCBkYXRhc2V0Qm91bmRFeHByPywgc3RhdGVoYW5kbGVyPykge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGJpbmRkYXRhc2V0LnNwbGl0KCcuJyk7XG4gICAgICAgIGxldCBiaW5kUGFnaW5nT3B0aW9ucztcbiAgICAgICAgdGhpcy5zdGF0ZWhhbmRsZXIgPSBzdGF0ZWhhbmRsZXI7XG4gICAgICAgIGlmIChwYXJ0c1swXSA9PT0gJ1ZhcmlhYmxlcycgfHwgcGFydHNbMF0gPT09ICdXaWRnZXRzJykge1xuICAgICAgICAgICAgYmluZFBhZ2luZ09wdGlvbnMgPSBgJHtwYXJ0c1swXX0uJHtwYXJ0c1sxXX0ucGFnaW5hdGlvbmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFiaW5kZGF0YXNvdXJjZSAmJiBkYXRhc2V0ICYmICFkYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSBkYXRhc2V0O1xuICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iaW5kZGF0YXNldCA9IGJpbmRkYXRhc2V0O1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHdhdGNoaW5nIGZvciBkYXRhc2V0IGNoYW5nZXMgZXZlbiB3aGVuIGRhdGFzZXQgaXMgYm91bmQgdG8gXCJpdGVtLlwiIChpLmUuIGJ5IGNoZWNraW5nIGZvciBkYXRhc2V0Qm91bmRFeHByKVxuICAgICAgICAgICAgLy8gaXRlbSBjb250ZXh0IGlzIHBhc3NlZCBhcyBkYXRhU291cmNlIGhlcmVcbiAgICAgICAgICAgIC8vIFtUb2RvLUNTUF06IGNoZWNrIGlmIHNhbWUgZXhwciBmbiBpcyBnZW5lcmF0ZWQgYnkgcGFyZW50IHdpZGdldCAobGlzdCwgdGFibGUpXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgICR3YXRjaChcbiAgICAgICAgICAgICAgICAgICAgYmluZGRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldEJvdW5kRXhwciA/IGRhdGFTb3VyY2UgOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgbnYgPT4gIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNldCA9IG52O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdNUy0xOTI4NTogU2V0dGluZyBkYXRhc2V0IG9uIHByb3h5IG9ubHkgdG8gaGFuZGxlIHByb3BlcnR5Y2hhbmdlIGhhbmRsZXIgY2FsbCBmb3IgdW5kZWZpbmVkIGNhc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YXNldCA9IG52O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gUmVnaXN0ZXIgYSB3YXRjaCBvbiBwYWdpbmcgb3B0aW9ucy4gQ2FsbCBkYXRhc2V0IHByb3BlcnR5IGNoYW5nZSBoYW5kbGVyIGV2ZW4gaWYgcGFnaW5nIG9wdGlvbnMgY2hhbmdlcyB0byByZWZsZWN0IHBhZ2luYXRpb24gc3RhdGVcbiAgICAgICAgICAgIGlmICghYmluZFBhZ2luZ09wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL1tUb2RvLUNTUF06IGVpdGhlciBnZW5lcmF0ZSB3YXRjaCBleHByIGZuIG9yIHJlZ2lzdGVyIGFuIGV2ZW50IGZyb20gdGhlIGRhdGFzb3VyY2UgaXRzZWxmXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgICR3YXRjaChcbiAgICAgICAgICAgICAgICAgICAgYmluZFBhZ2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFwcGx5IGRhdGFzb3VyY2Ugb25seSB3aGVuIGRhdGFzZXQgaXMgbm90IGJvdW5kIHRvIFwiaXRlbS5GSUVMRFwiXG4gICAgICAgIGlmICghZGF0YXNldEJvdW5kRXhwcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgZGF0YXNvdXJjZSBvZiBwYWdpbmF0aW9uIGZyb20gdGhlIHBhcmVudCB3aWRnZXRcbiAgICBzZXREYXRhU291cmNlKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudiwgb3YpIHtcbiAgICAgICAgbGV0IHBhZ2VTaXplLCBwcmV2UGFnZVNpemU7XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRhc2V0Jykge1xuICAgICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQub25EYXRhTmF2aWdhdG9yRGF0YVNldENoYW5nZSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLnBhcmVudC5vbkRhdGFOYXZpZ2F0b3JEYXRhU2V0Q2hhbmdlKG52KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IG52O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2V0IGxhc3QgYWN0aW9uIHBlcmZvcm1lZCB0byBcImRhdGFzZXRfdXBkYXRlXCIgd2hlbmV2ZXIgZGF0YXNldCBpcyBjaGFuZ2VkIGluIHRhYmxlIGNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5fdHJpZ2dlcmVkQnlVc2VyID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YT8ubGVuZ3RoKSB7IC8vIGNhbGN1bGF0ZSBQYWdlc2l6ZSBvcHRpb25zIGJhc2VkIG9uIGFjdHVhbCBwYWdlIHNpemVcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSkgeyAvLyBmb3IgTGl2ZSB2YXJpYWJsZXNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VTaXplID0gZ2V0KGRhdGEsICdwYWdpbmF0aW9uLnNpemUnKSB8fCBnZXQodGhpcy5kYXRhc291cmNlLCAncGFnaW5hdGlvbi5zaXplJyksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEVsZW1lbnRzID0gZ2V0KGRhdGEsICdwYWdpbmF0aW9uLnRvdGFsRWxlbWVudHMnKSB8fCBnZXQodGhpcy5kYXRhc291cmNlLCAncGFnaW5hdGlvbi50b3RhbEVsZW1lbnRzJyksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZSA9IHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbFBhZ2VTaXplID0gd2lkZ2V0U3RhdGU/LmFjdHVhbHBhZ2VzaXplIHx8IGN1cnJlbnRQYWdlU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3R1YWxQYWdlU2l6ZSA9IE51bWJlcih0aGlzLmFjdHVhbFBhZ2VTaXplKSA/IHRoaXMuYWN0dWFsUGFnZVNpemUgOiBnZXQodGhpcy5kYXRhc291cmNlLmRhdGFTZXQsIHRoaXMuYWN0dWFsUGFnZVNpemUpXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IFsuLi50aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnNdO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gcmFuZ2UodGhpcy5hY3R1YWxQYWdlU2l6ZSwgIE1hdGgubWF4KHRoaXMuYWN0dWFsUGFnZVNpemUgKyAxLCB0aGlzLmFjdHVhbFBhZ2VTaXplICsgdG90YWxFbGVtZW50cyksIHRoaXMuYWN0dWFsUGFnZVNpemUpOyAvLyBoZXJlIGRhdGEgaGFzIG9ubHkgdGhhdCBwYWdlIGRhdGEgYW5kIHBhZ2VzaXplIGhhcyB0b3RhbE5vb2YgRWxlbWVudHNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAod2lkZ2V0U3RhdGU/LnNlbGVjdGVkSXRlbSAmJiB3aWRnZXRTdGF0ZS5hY3R1YWxwYWdlc2l6ZSAhPT0gd2lkZ2V0U3RhdGUucGFnZXNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5wcmV2UGFnZVNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZQYWdlU2l6ZSA9IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgZGF0YT8ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEl0ZW1zID0gdGhpcy5oYW5kbGVTdGF0ZVBhcmFtc2Zvck5ld1BhZ2VTaXplKHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbSwgdGhpcy5wcmV2UGFnZVNpemUsIGRhdGE/Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxwYWdlc2l6ZTogdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogdXBkYXRlZEl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZQYWdlU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplID0gdGhpcy5wYXJlbnQuZ2V0QWN0dWFsUGFnZVNpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gWy4uLnRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9uc107XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSByYW5nZShwYWdlU2l6ZSwgZGF0YS5sZW5ndGggKyBwYWdlU2l6ZSwgcGFnZVNpemUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2hlbiB0aGUgZGF0YXNldCBpcyBub3QgaW4gY3VycmVudCBwYWdlLCBidXQgaW4gcHJldmlvdXMgb25lcyBkaXJlY3RseSBzZXQgdGhlIHJlc3VsdCB3aXRob3V0IHNldHRpbmcgcGFnZSB2YWx1ZXNcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0KGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhZ2luZ1ZhbHVlcyhkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYXZpZ2F0aW9uJykge1xuICAgICAgICAgICAgaWYgKG52ID09PSAnQWR2YW5jZWQnKSB7IC8vIFN1cHBvcnQgZm9yIG9sZGVyIHByb2plY3RzIHdoZXJlIG5hdmlnYXRpb24gdHlwZSB3YXMgYWR2YW5jZWQgaW5zdGVhZCBvZiBjbGFzaWNcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSAnQ2xhc3NpYyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5hdlNpemUoKTtcbiAgICAgICAgICAgIHRoaXMubmF2Y29udHJvbHMgPSBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYXZpZ2F0aW9uc2l6ZScpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTmF2U2l6ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hdmlnYXRpb25hbGlnbicpIHtcbiAgICAgICAgICAgIHN3aXRjaENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgYHRleHQtJHtudn1gLCBgdGV4dC0ke292fWApO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ21heFJlc3VsdHMnKSB7XG4gICAgICAgICAgICB0aGlzLnNldFBhZ2luZ1ZhbHVlcyh0aGlzLmRhdGFzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG4gICAvLyBjaGFuZ2UgdGhlIHNlbGVjdGVkSXRlbXMgcGFnZSBudW1iZXIgYW5kIGluZGV4IGluIHRoZSBzdGF0ZXBhcmFtcyB3aGVuIHBhZ2VzaXplIGlzIGNoYW5nZWRcbiAgICBoYW5kbGVTdGF0ZVBhcmFtc2Zvck5ld1BhZ2VTaXplKFxuICAgICAgICBzZWxlY3RlZEl0ZW06IHsgcGFnZTogbnVtYmVyOyBpbmRleDogbnVtYmVyIH1bXSxcbiAgICAgICAgb2xkUGFnZVNpemU6IG51bWJlcixcbiAgICAgICAgbmV3UGFnZVNpemU6IG51bWJlclxuICAgICk6IHsgcGFnZTogbnVtYmVyOyBpbmRleDogbnVtYmVyIH1bXSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW0ubWFwKCh7IHBhZ2UsIGluZGV4IH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFic29sdXRlSW5kZXggPSAocGFnZSAtIDEpICogb2xkUGFnZVNpemUgKyBpbmRleDtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhZ2UgPSBNYXRoLmZsb29yKGFic29sdXRlSW5kZXggLyBuZXdQYWdlU2l6ZSkgKyAxOyAvLyBiYWNrIHRvIDEtYmFzZWRcbiAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4ID0gYWJzb2x1dGVJbmRleCAlIG5ld1BhZ2VTaXplO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBhZ2U6IG5ld1BhZ2UsXG4gICAgICAgICAgICAgICAgaW5kZXg6IG5ld0luZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRyb3Bkb3duS2V5ZG93bihldmVudCwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgJGl0ZW1zID0gJCgndWwjZHJvcGRvd24tYmFzaWMgYS5kcm9wZG93bi1pdGVtJyk7XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgbGV0IHNlbGVjdGVkT3B0aW9uO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IFNoaWZ0K1RhYiBhcyBBcnJvd1VwXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gKGluZGV4IC0gMSkgPCAwID8gbWF4SW5kZXggOiBpbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgVGFiIG9yIEFycm93RG93biBhcyBBcnJvd0Rvd25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSAoaW5kZXggKyAxKSA+IG1heEluZGV4ID8gMCA6IGluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gKGluZGV4IC0gMSkgPCAwID8gbWF4SW5kZXggOiBpbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYWdlU2l6ZU9wdGlvbnNbdGhpcy5mb2N1c2VkSW5kZXhdO1xuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlU2l6ZUNoYW5nZShldmVudCwgc2VsZWN0ZWRPcHRpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNb3ZlIGZvY3VzIGFmdGVyIGluZGV4IGlzIHVwZGF0ZWRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAkaXRlbXMuZXEodGhpcy5mb2N1c2VkSW5kZXgpPy5mb2N1cygpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgICAgIC8vIENsb3NlIGRyb3Bkb3duXG4gICAgICAgIHRoaXMuYnNEcm9wZG93bi5oaWRlKCk7XG4gICAgICAgIGNvbnN0ICR0b2dnbGVCdXR0b24gPSAkKCdidXR0b25bYXJpYS1jb250cm9scz1cImRyb3Bkb3duLWJhc2ljXCJdJyk7XG4gICAgICAgICR0b2dnbGVCdXR0b24uZm9jdXMoKTsgLy8gUmV0dXJuIGZvY3VzIHRvIGJ1dHRvblxuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIGdldHMgY2FsbGVkIG9uIGRyb3Bkb3duIG9wZW4gJiBjbG9zZVxuICAgIG9uT3BlbkNoYW5nZShpc09wZW4pIHtcbiAgICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSAwO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gbWFudWFsbHkgZm9jdXMgdGhlIGRyb3Bkb3duIGFzIGRyb3Bkb3duIGhhcyBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICBjb25zdCAkaXRlbXMgPSAkKCd1bCNkcm9wZG93bi1iYXNpYyBhLmRyb3Bkb3duLWl0ZW0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkZmlyc3RJdGVtID0gJGl0ZW1zLmVxKHRoaXMuZm9jdXNlZEluZGV4KTtcbiAgICAgICAgICAgICAgICAkZmlyc3RJdGVtPy5mb2N1cygpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQsIG5ld1BhZ2VTaXplKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCk7XG4gICAgICAgICAgICBsZXQgdXBkYXRlZEl0ZW1zO1xuICAgICAgICBpZiAod2lkZ2V0U3RhdGU/LnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdXBkYXRlZEl0ZW1zID0gdGhpcy5oYW5kbGVTdGF0ZVBhcmFtc2Zvck5ld1BhZ2VTaXplKHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbSwgdGhpcy5tYXhSZXN1bHRzLCArbmV3UGFnZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0dWFsUGFnZVNpemUgPSB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gK25ld1BhZ2VTaXplO1xuICAgICAgICB0aGlzLm1heFJlc3VsdHNFbWl0dGVyLmVtaXQodGhpcy5tYXhSZXN1bHRzKTtcbiAgICAgICAgaWYgKHRoaXMuaXNEYXRhU291cmNlSGFzUGFnaW5nKCkgJiYgdGhpcy5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UubWF4UmVzdWx0cyA9IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlZEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMucGFyZW50LCB7XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogMSxcbiAgICAgICAgICAgICAgICBwYWdlc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgIGFjdHVhbHBhZ2VzaXplOiB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW06IHVwZGF0ZWRJdGVtc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2VzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgYWN0dWFscGFnZXNpemU6IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5tYXhSZXN1bHRzXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubmF2aWdhdGVQYWdlKCdmaXJzdCcsICRldmVudCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkVsZW0gPSAgdGhpcy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBwYWdpbmF0aW9uRWxlbS5vbmNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJcbkBpZiAobmF2Y29udHJvbHMgPT09ICdDbGFzc2ljJykge1xuPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBhZHZhbmNlZCB7e25hdmlnYXRpb25DbGFzc319XCI+XG4gICAgQGlmIChhbGxvd3BhZ2VzaXplY2hhbmdlICYmICBwYWdlU2l6ZU9wdGlvbnM/LlswXTxyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGxpIGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2VcIj5cbiAgICAgICAgICA8bGFiZWwgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRVwiIGNsYXNzPVwiYXBwLWxhYmVsXCI+e3thcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0V9fSA6PC9sYWJlbD5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIGRyb3Bkb3duICBjb250YWluZXI9XCJib2R5XCIgKGlzT3BlbkNoYW5nZSk9XCJvbk9wZW5DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidXR0b24tYmFzaWNcIiBkcm9wZG93blRvZ2dsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYXBwLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bWF4UmVzdWx0c319IDxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPHVsIGlkPVwiZHJvcGRvd24tYmFzaWNcIiAqZHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudSBwYWdlc2l6ZS1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJidXR0b24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHBhZ2VTaXplT3B0aW9uczsgdHJhY2sgb3B0aW9uOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogb3B0aW9uID09IG1heFJlc3VsdHMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgQGlmIChyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGxpIGNsYXNzPVwiaXRlbS1yYW5nZVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+b2Y8L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkudG90YWxSZWNvcmRzfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgfVxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZUZpcnN0fVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0ZJUlNUXCIgbmFtZT1cImZpcnN0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZUZpcnN0XCJcbiAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnZmlyc3QnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWZpcnN0LXBhZ2VcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gZmlyc3QgcGFnZSB7eyBpc0Rpc2FibGVGaXJzdCA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVQcmV2aW91c31cIj5cbiAgICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9QUkVWSU9VU1wiIG5hbWU9XCJwcmV2XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVQcmV2aW91c1wiXG4gICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCdwcmV2JywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLWxlZnRcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gcHJldmlvdXMgcGFnZSB7eyBpc0Rpc2FibGVQcmV2aW91cyA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIGNsYXNzPVwicGFnZWNvdW50IGRpc2FibGVkXCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgYXJpYS1sYWJlbD1cIkNoYW5nZSBQYWdlIE51bWJlclwiPlxuICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiZG4uY3VycmVudFBhZ2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidTaG93aW5nIFBhZ2UgJyArIGRuLmN1cnJlbnRQYWdlICsgJyBvZiAnICsgcGFnZUNvdW50XCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIiAoY2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIvPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBjbGFzcz1cImRpc2FibGVkXCI+XG4gICAgICAgIDxhIFtoaWRkZW5dPVwiaXNEaXNhYmxlQ291bnRcIj4gLyB7e3BhZ2VDb3VudH19PC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlTmV4dH1cIj5cbiAgICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9ORVhUXCIgbmFtZT1cIm5leHRcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlTmV4dFwiXG4gICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tcmlnaHRcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gbmV4dCBwYWdlIHt7IGlzRGlzYWJsZU5leHQgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlTGFzdH1cIj5cbiAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfTEFTVFwiIG5hbWU9XCJsYXN0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZUxhc3RcIlxuICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCdsYXN0JywgJGV2ZW50KVwiPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWxhc3QtcGFnZVwiPjwvaT48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIGxhc3QgcGFnZSB7eyBpc0Rpc2FibGVMYXN0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmIChzaG93cmVjb3JkY291bnQpIHtcbiAgICAgIDxsaSBjbGFzcz1cInRvdGFsY291bnQgZGlzYWJsZWRcIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIj57e2FwcExvY2FsZS5MQUJFTF9UT1RBTF9SRUNPUkRTfX06IHt7ZGF0YVNpemV9fTwvYT5cbiAgICAgIDwvbGk+XG4gICAgfVxuPC91bD5cbn1cbkBpZiAobmF2Y29udHJvbHMgPT09ICdQYWdlcicpIHtcbiAgPHVsIGNsYXNzPVwicGFnZXIge3tuYXZpZ2F0aW9uQ2xhc3N9fVwiPlxuICAgICAgICBAaWYgKGFsbG93cGFnZXNpemVjaGFuZ2UgJiYgIHBhZ2VTaXplT3B0aW9ucz8uWzBdPHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtcy1wZXItcGFnZVwiPlxuICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFXCIgY2xhc3M9XCJhcHAtbGFiZWxcIj57e2FwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRX19IDo8L2xhYmVsPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZHJvcGRvd24gY29udGFpbmVyPVwiYm9keVwiIChpc09wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnV0dG9uLWJhc2ljXCIgZHJvcGRvd25Ub2dnbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFwcC1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICB7e21heFJlc3VsdHN9fSA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDx1bCBpZD1cImRyb3Bkb3duLWJhc2ljXCIgKmRyb3Bkb3duTWVudSBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcGFnZXNpemUtb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiYnV0dG9uLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBwYWdlU2l6ZU9wdGlvbnM7IHRyYWNrIG9wdGlvbjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibWVudWl0ZW1cIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBvcHRpb24gPT0gbWF4UmVzdWx0cyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIEBpZiAocm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW0tcmFuZ2VcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPm9mPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS50b3RhbFJlY29yZHN9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgPGxpIGNsYXNzPVwicHJldmlvdXNcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVQcmV2aW91c31cIj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgncHJldicsICRldmVudClcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZVByZXZpb3VzXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1sZWZ0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAge3thcHBMb2NhbGUuTEFCRUxfUFJFVklPVVN9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyBpc0Rpc2FibGVQcmV2aW91cyA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIGNsYXNzPVwibmV4dFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZU5leHR9XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVOZXh0XCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1yaWdodFwiPjwvaT48L3NwYW4+XG4gICAgICAgIHt7YXBwTG9jYWxlLkxBQkVMX05FWFR9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyBpc0Rpc2FibGVOZXh0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbn1cblxuQGlmIChuYXZjb250cm9scyA9PT0gJ0Jhc2ljJykge1xuICAgIEBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiAgcGFnZVNpemVPcHRpb25zPy5bMF08cm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2VcIj5cbiAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0VcIiBjbGFzcz1cImFwcC1sYWJlbFwiPnt7YXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFIH19IDo8L2xhYmVsPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiBkcm9wZG93biBjb250YWluZXI9XCJib2R5XCIgIChpc09wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidXR0b24tYmFzaWNcIiBkcm9wZG93blRvZ2dsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYXBwLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICB7e21heFJlc3VsdHN9fSA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8dWwgaWQ9XCJkcm9wZG93bi1iYXNpY1wiICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IHBhZ2VzaXplLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiYnV0dG9uLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHBhZ2VTaXplT3B0aW9uczsgdHJhY2sgb3B0aW9uOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogb3B0aW9uID09IG1heFJlc3VsdHMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yYW5nZVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+b2Y8L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkudG90YWxSZWNvcmRzfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgICA8cGFnaW5hdGlvbiBjbGFzcz1cInBhZ2luYXRpb24gYmFzaWNcIiBbbmdDbGFzc109XCJuYXZpZ2F0aW9uQ2xhc3NcIiByb2xlPVwibmF2aWdhdGlvblwiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwibWF4UmVzdWx0c1wiIFt0b3RhbEl0ZW1zXT1cImRhdGFTaXplXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInBhZ2VDaGFuZ2VkKCRldmVudClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6dHJ1ZX1cIiBbbmdNb2RlbF09XCJkbi5jdXJyZW50UGFnZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Nob3dpbmcgUGFnZSAnICsgZG4uY3VycmVudFBhZ2UgKyAnIG9mICcgKyBwYWdlQ291bnQgKyAnIHBhZ2VzJ1wiXG4gICAgICAgIFtib3VuZGFyeUxpbmtzXT1cImJvdW5kYXJ5bGlua3NcIiBbbWF4U2l6ZV09XCJtYXhzaXplXCJcbiAgICAgICAgW2RpcmVjdGlvbkxpbmtzXT1cImRpcmVjdGlvbmxpbmtzXCJcbiAgICAgICAgZmlyc3RUZXh0PVwiRmlydHN0XCIgbGFzdFRleHQ9XCJMYXN0XCJcbiAgICAgICAgW2N1c3RvbVByZXZpb3VzVGVtcGxhdGVdPVwicHJldlRlbXBsYXRlXCJcbiAgICAgICAgW2N1c3RvbU5leHRUZW1wbGF0ZV09XCJuZXh0VGVtcGxhdGVcIlxuICAgICAgICBbY3VzdG9tUGFnZVRlbXBsYXRlXT1cInBhZ2VUZW1wbGF0ZVwiPjwvcGFnaW5hdGlvbj5cbiAgICB9XG59XG5cbkBpZiAobmF2Y29udHJvbHMgPT09ICdCYXNpYycgJiYgc2hvd3JlY29yZGNvdW50KSB7XG4gIDx1bCBjbGFzcz1cInBhZ2luYXRpb25cIj5cbiAgICA8bGkgY2xhc3M9XCJ0b3RhbGNvdW50IGRpc2FibGVkIGJhc2ljY291bnRcIj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+e3thcHBMb2NhbGUuTEFCRUxfVE9UQUxfUkVDT1JEU319OiB7e2RhdGFTaXplfX08L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbn1cblxuPG5nLXRlbXBsYXRlICNwYWdlVGVtcGxhdGUgbGV0LXBhZ2U+XG4gIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIFthdHRyLmRhdGEtaXNhY2l0dmVwYWdlXT1cInBhZ2UuYWN0aXZlXCI+e3snUGFnZSAnfX08L3NwYW4+XG4gIHt7cGFnZS5udW1iZXJ9fVxuICBAaWYgKHBhZ2UuYWN0aXZlKSB7XG4gICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+IHt7JywgU2hvd2luZyBwYWdlICcgKyBwYWdlLm51bWJlciArICcgb2YgJyArIHBhZ2VDb3VudH19PC9zcGFuPlxuICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcmV2VGVtcGxhdGUgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgW2F0dHIuZGF0YS1pc2Rpc2FibGVkXT1cImRpc2FibGVkXCI+R28gdG8gUHJldmlvdXMgcGFnZSB7e2Rpc2FibGVkID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI25leHRUZW1wbGF0ZSBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5HbyB0byBOZXh0IHBhZ2Uge3tkaXNhYmxlZCA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
|