@huntsman-cancer-institute/navigation 17.14.1 → 17.14.2
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/esm2022/components/search-list/search-list-controller.component.mjs +5 -5
- package/esm2022/components/search-list/search-list.component.mjs +3 -3
- package/esm2022/components/ul-nav.component.mjs +3 -3
- package/fesm2022/huntsman-cancer-institute-navigation.mjs +8 -8
- package/fesm2022/huntsman-cancer-institute-navigation.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1260,7 +1260,7 @@ let SearchListComponent = class SearchListComponent extends NavComponent {
|
|
|
1260
1260
|
<div class="font-weight-bold me-auto">{{getGroupDisplay(rowGroup)}}</div>
|
|
1261
1261
|
</div>
|
|
1262
1262
|
</ng-template>
|
|
1263
|
-
`, isInline: true, styles: [".results-count{background-color:var(--bluewarm-
|
|
1263
|
+
`, isInline: true, styles: [".results-count{background-color:var(--bluewarm-dark);color:var(--white-lightest);font-size:17.3px;padding-left:18px;box-shadow:0 1px 10px 3px var(--greycool-meddarker);z-index:1}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(2n){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]:nth-child(odd){background-color:var(--white-lightest)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-medlight)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: i5.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }] }); }
|
|
1264
1264
|
};
|
|
1265
1265
|
SearchListComponent = __decorate([
|
|
1266
1266
|
ComponentType("SearchListComponent"),
|
|
@@ -1444,7 +1444,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1444
1444
|
<div class="font-weight-bold me-auto">{{getGroupDisplay(rowGroup)}}</div>
|
|
1445
1445
|
</div>
|
|
1446
1446
|
</ng-template>
|
|
1447
|
-
`, styles: [".results-count{background-color:var(--bluewarm-
|
|
1447
|
+
`, styles: [".results-count{background-color:var(--bluewarm-dark);color:var(--white-lightest);font-size:17.3px;padding-left:18px;box-shadow:0 1px 10px 3px var(--greycool-meddarker);z-index:1}.format-bottom-padding{padding-bottom:25px}:host::ng-deep div[id^=row-]:nth-child(2n){background-color:var(--white-medium)!important}:host::ng-deep div[id^=row-]:nth-child(odd){background-color:var(--white-lightest)!important}:host::ng-deep div[id^=row-]{border:0!important}:host::ng-deep div.row-parent.active{color:#fff!important;background-color:var(--bluewarmvivid-medlight)!important}:host::ng-deep .ri-sidebar-cell{background-color:transparent!important}\n"] }]
|
|
1448
1448
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }, { type: i1.NavigationGlobalService }, { type: i2.NavigationService, decorators: [{
|
|
1449
1449
|
type: Optional
|
|
1450
1450
|
}] }, { type: i0.ChangeDetectorRef }], propDecorators: { controller: [{
|
|
@@ -1533,4 +1533,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1533
1533
|
static: false
|
|
1534
1534
|
}]
|
|
1535
1535
|
}] } });
|
|
1536
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF3TkksSUFBTSxtQkFBbUIsR0FBekIsTUFB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Q0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDUixDQUFDO3dCQUNILENBQUM7d0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7NEJBQ1gsT0FBTyxDQUFDLENBQUM7d0JBQ1gsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ2xELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7NEJBQ2xCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0NBQ2hFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs0QkFDVCxDQUFDO2lDQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0NBQ3ZFLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ1IsQ0FBQzt3QkFDSCxDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQ0FDaEUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUNULENBQUM7aUNBQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMs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QkFBMUIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBa0JHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFK0Qsb0JBQW9CO3NCQUF6RixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUlqRSw0QkFBNEI7c0JBSDlCLFNBQVM7dUJBQUMsOEJBQThCLEVBQUU7d0JBQ3pDLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkErSmtELFVBQVU7c0JBQTVELFlBQVk7dUJBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQztnQkEwMEJ0QywrQkFBK0I7c0JBSHJDLFNBQVM7dUJBQUMsMkJBQTJCLEVBQUU7d0JBQ3RDLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsS0FBSztxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlblxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3R9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7ZGVsYXksIGZpbmFsaXplfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtOZ2JEcm9wZG93bn0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcblxyXG5pbXBvcnQge0hjaURhdGFEdG8sIEhjaUZpbHRlckR0bywgSGNpR3JpZER0bywgSGNpR3JvdXBpbmdEdG8sIEhjaVBhZ2luZ0R0bywgSGNpU29ydER0b30gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL2hjaS1uZy1ncmlkLWR0b1wiO1xyXG5pbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS91dGlsc1wiO1xyXG5cclxuaW1wb3J0IHtOYXZDb21wb25lbnR9IGZyb20gXCIuLi9uYXYuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSb3dHcm91cH0gZnJvbSBcIi4vcm93LWdyb3VwXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkdsb2JhbFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLWdsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnR9IGZyb20gXCIuL3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50XCI7XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGdyb3VwZWQgb3Igbm90IGdyb3VwZWQuICBUaGUgZGF0YSBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gYW4gYXJyYXksIG9yIGZyb20gYW4gZXh0ZXJuYWxcclxuICogZGF0YSBjYWxsIHVzaW5nIGpwYS1zZXJ2aWNlcy5cclxuICovXHJcbkBDb21wb25lbnRUeXBlKFwiU2VhcmNoTGlzdENvbXBvbmVudFwiKVxyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHNlbGVjdG9yOiBcImhjaS1zZWFyY2gtbGlzdFwiLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgIGBcclxuICAgICAgICAucmVzdWx0cy1jb3VudCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVld2FybS1saWdodGVyKTtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmV5LWRhcmtlc3QpO1xyXG4gICAgICAgICAgZm9udC1zaXplOiAxNy4zcHg7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDE4cHg7XHJcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAxMHB4IDNweCB2YXIoLS1ncmV5Y29vbC1tZWRkYXJrZXIpO1xyXG4gICAgICAgICAgei1pbmRleDogMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5mb3JtYXQtYm90dG9tLXBhZGRpbmcge1xyXG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDI1cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXZbaWRePSdyb3ctJ106bnRoLWNoaWxkKGV2ZW4pIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlLW1lZGl1bSkgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdltpZF49J3Jvdy0nXTpudGgtY2hpbGQob2RkKSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCkgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdltpZF49J3Jvdy0nXSB7XHJcbiAgICAgICAgICBib3JkZXI6IDAgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdi5yb3ctcGFyZW50LmFjdGl2ZSB7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWV3YXJtdml2aWQtbWVkbGlnaHQpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCAucmktc2lkZWJhci1jZWxsIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICBgXHJcbiAgICBdLFxyXG4gICAgdGVtcGxhdGU6XHJcbiAgICAgIGBcclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAqbmdJZj1cInNob3dSZXN1bHRzQ291bnQgJiYgc2VhcmNoUmVzdWx0TWVzc2FnZVwiXHJcbiAgICAgICAgICBjbGFzcz1cInJlc3VsdHMtY291bnRcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnZm9ybWF0LWJvdHRvbS1wYWRkaW5nJzogdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID09PSAnJyB9XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgKm5nSWY9XCIhc2hvd1Jlc3VsdHNDb3VudCB8fCAhc2VhcmNoUmVzdWx0TWVzc2FnZVwiXHJcbiAgICAgICAgICBjbGFzcz1cInJlc3VsdHMtY291bnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBzY3JvbGxhYmxlXCI+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwibm8tcmVzdWx0cy1mb3VuZFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInNlYXJjaC10aXRsZVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggcHMtM1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInJlc3VsdC1saXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIiBbY2xhc3MueS1oaWRkZW5dPVwic2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICAgIDxoY2ktYnVzeSBbYnVzeVN1YmplY3RzXT1cImxvYWRpbmdTdWJqZWN0c1wiIHBhcmVudFNlbGVjdG9yPVwiLnNjcm9sbGFibGVcIiBbaWNvbl09XCJidXN5SWNvblwiPjwvaGNpLWJ1c3k+XHJcbiAgICAgICAgICAgICAgPCEtLSBObyBncm91cGluZyAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwaW5nLmZpZWxkcyB8fCBncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7Y2hhbmdlRGV0ZWN0aW9uOiByb3dSZWZyZXNofVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3dHcm91cC5yZ1Jvd3NbMF19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93R3JvdXAucmdSb3dzWzBdfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEdyb3VwaW5nIHdpdGggaW5saW5lIGV4cGFuc2lvbiAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBpbmcuZmllbGRzICYmIGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwICYmICFzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YTsgbGV0IGkgPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiZ2V0Um93R3JvdXBJZChyb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcGFyZW50IG5hdi1pdGVtIGdyb3VwIHt7Z3JvdXBDbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHJvd0dyb3VwLCBjbXB0OiBjbXB0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0dyb3VwLnJnRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWNvbnRhaW5lclwiIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwicm91dGUocm93R3JvdXAsIHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2NoYW5nZURldGVjdGlvbjogcm93UmVmcmVzaH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBHcm91cGluZyB3aXRoIHNlcGFyYXRlIGluZGl2aWR1YWwgZXhwYW5zaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cGluZy5maWVsZHMgJiYgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRSb3dHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAjZ3JvdXBTZWxlY3RlZFBhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1zZWxlY3RlZC1wYXJlbnQgZmxleC1jb2x1bW4ge3tncm91cENsYXNzfX1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cImdldFJvd0dyb3VwSWQoc2VsZWN0ZWRSb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXBhcmVudCBuYXYtaXRlbSBncm91cCBhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgc2VsZWN0ZWRSb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHNlbGVjdGVkUm93R3JvdXAsIGNtcHQ6IGNtcHR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICNzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGlkPVwic2VsZWN0ZWQtZ3JvdXAtY29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4geS1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2Ygc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIFBhZ2luZyBmb290ZXIgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInBhZ2luZy5wYWdlU2l6ZSA+IDBcIiBjbGFzcz1cImQtZmxleCBmbGV4LXNocmluay0wIHBhZ2luZy1mb290ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcHMtMyBwZS0zXCJcclxuICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMXJlbTsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VGaXJzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mYXN0LWJhY2t3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VQcmV2aW91cygpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1iYWNrd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtO1wiPnt7cGFnaW5nLnBhZ2UgKyAxfX0gb2Yge3twYWdpbmcubnVtUGFnZXN9fTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VOZXh0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IHBhZ2luZy5udW1QYWdlcyAtIDFcIj5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlTGFzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSBwYWdpbmcubnVtUGFnZXMgLSAxXCI+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZhc3QtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERlZmF1bHQgdGVtcGxhdGUgZm9yIGEgZ3JvdXAgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBUZW1wbGF0ZSBsZXQtcm93R3JvdXA9XCJyb3dHcm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSBwcy0yXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBtZS1hdXRvXCI+e3tnZXRHcm91cERpc3BsYXkocm93R3JvdXApfX08L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjbGFzcz1cImQtZmxleCBtZS0xXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlOyBlbHNlIHBsdXNUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbWludXMgZmEtc20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsdXNUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtc20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgKHt7cm93R3JvdXAucmdDb3VudH19KVxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgYW4gaW5kaXZpZHVhbCBzZWxlY3RlZCBncm91cCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGUgbGV0LXJvd0dyb3VwPVwicm93R3JvdXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93LTEgcHMtMlwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTNcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1sZXZlbC11cC1hbHRcIiBkYXRhLWZhLXRyYW5zZm9ybT1cImZsaXAtaFwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIG1lLWF1dG9cIj57e2dldEdyb3VwRGlzcGxheShyb3dHcm91cCl9fTwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgYFxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoTGlzdENvbXBvbmVudCBleHRlbmRzIE5hdkNvbXBvbmVudCB7XHJcblxyXG4gIHNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBcIlwiO1xyXG5cclxuICAvLyBUaGUgZGF0YSB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxyXG4gIHZpZXdEYXRhOiBSb3dHcm91cFtdO1xyXG4gIHByZXBhcmVkRGF0YTogYW55W10gPVtdO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byB0aGUgc2VhcmNoIGxpc3QgY29udHJvbGxlciBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGNvbnRyb2xsZXI6IFNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFcIikgYm91bmREYXRhOiBPYmplY3RbXTtcclxuXHJcbiAgLy8gQSBzdWJqZWN0IHRoYXQgcmVwcmVzZW50cyBhbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFTdWJqZWN0XCIpIGRhdGFTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8T2JqZWN0W10+O1xyXG5cclxuICAvLyBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGluIGEgSGNpR3JpZER0byBhbmQgcmV0dXJucyBhIEhjaURhdGFEdG8gd2hpY2ggd3JhcHMgYW4gYXJyYXkgb2YgZGF0YS5cclxuICBASW5wdXQoXCJkYXRhQ2FsbFwiKSBleHRlcm5hbERhdGFDYWxsOiAoZHRvOiBIY2lHcmlkRHRvKSA9PiBPYnNlcnZhYmxlPEhjaURhdGFEdG8+O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBzdWJqZWN0cyB3aXRoIGJvb2xlYW5zIHRvIGNvbnRyb2wgdGhlIGhjaS1idXN5IG92ZXJsYXlpbmcgdGhlIHNlYXJjaC1saXN0LlxyXG4gIEBJbnB1dCgpIGxvYWRpbmdTdWJqZWN0czogU3ViamVjdDxib29sZWFuPltdO1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBib29sZWFucyB0byBjb250cm9sIHRoZSBoY2ktYnVzeSBvdmVybGF5aW5nIHRoZSBzZWFyY2gtbGlzdC5cclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuW10gPSBbZmFsc2VdO1xyXG5cclxuICAvLyBJZiBjbGlja2luZyBhIHJvdyBjaGFuZ2VzIGEgcm91dGUsIHRoaXMgZnVuY3Rpb24gc3BlY2lmaWVzIHRoZSByb3V0ZSB0byB1c2UuXHJcbiAgQElucHV0KCkgcm91dGU6IChyb3dHcm91cDogYW55LCByb3c6IGFueSkgPT4gYW55W107XHJcblxyXG4gIC8vIEV4cGFuZCB0aGUgc2VsZWN0ZWQgcm93IGdyb3VwIGFzIGl0cyBvd24gc2NyZWVuLCBvciBzaG93IHJvd3MgdW5kZXIgc2VsZWN0ZWQgcm93IGdyb3VwcyBpbiB0aGUgc2FtZSB2aWV3LlxyXG4gIEBJbnB1dCgpIGlubGluZUV4cGFuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBXaXRob3V0IGFueSBvdGhlciBtZXRhZGF0YSBmb3Igd2hhdCBhIHJvdyBpcywgcHJvdmlkZSB0aGUgZmllbGQgdG8gYmUgdXNlZCBmb3IgdGhlIGlkLlxyXG4gIC8vIFRoaXMgaXMgYWN0dWFsbHkgdGhlIGZpZWxkIHRoYXQgaGFzIHRoZSAoZGVmaW5lZCkgcm93SWQgLS0gd2hhdGV2ZXIgaXQgaXMgdW5kZXIgZGlmZmVyZW50XHJcbiAgLy8gc3RydWN0dXJlczogaWRQYXRpZW50LCBpZE1lZGljYWxFdmVudCBldGNcclxuICBASW5wdXQoKSByb3dJZDogYW55O1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IGdyb3VwIHBhcmVudC5cclxuICBASW5wdXQoKSBncm91cENsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IHBhcmVudC5cclxuICBASW5wdXQoKSByb3dDbGFzczogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLy8gQSB0ZW1wbGF0ZSBmb3IgaG93IHRvIGRpc3BsYXkgcm93IGdyb3VwIGluZm8gaWYgdXNpbmcgdGhlIGRlZmF1bHQgdGVtcGxhdGUuICBlLmcuIFwibGFzdE5hbWUsIGZpcnN0TmFtZVwiIGZpZWxkIG5hbWVzIGdldCByZXBsYWNlZCB3aXRoIHZhbHVlcy5cclxuICBASW5wdXQoKSBncm91cERpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnRcclxuICBASW5wdXQoKSBjbG9zZU90aGVyczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIFRoZSBsaXN0IG9mIGZpZWxkcyB0byBncm91cCBieS5cclxuICBASW5wdXQoKSBncm91cGluZ0ZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8gZGVsaW1pdGVyIGZvciBnZXRHcm91cERpc3BsYXlcclxuICBASW5wdXQoKSBkZWxpbWl0ZXI6IHN0cmluZyA9IFwiLCBcIjtcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnQgaWYgd2Ugd2FudCB1c2VycyB0byBiZSBhYmxlIHRvIGNvbnRyb2wgZ3JvdXBpbmcuXHJcbiAgQElucHV0KCkgZ3JvdXBCeUFsbG93ZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93IGdyb3VwcyBvciByb3dzIGlmIG5vIGdyb3VwaW5nLlxyXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXI7XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93cyBpbiBhIHNlbGVjdGVkIGdyb3VwLlxyXG4gIEBJbnB1dCgpIGdyb3VwUGFnZVNpemU6IG51bWJlciA9IDUwO1xyXG5cclxuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIG9mIHJvd3MgdG8gY2FjaGUgaW50ZXJuYWxseSBiZWZvcmUgYW4gZXh0ZXJuYWwgY2FsbCBpcyBtYWRlLlxyXG4gIEBJbnB1dCgpIGdyb3VwQ2FjaGVOdW1QYWdlczogbnVtYmVyO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byBhIHBhcmVudCBkcm9wZG93biBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGRyb3Bkb3duOiBOZ2JEcm9wZG93bjtcclxuXHJcbiAgLy9XaGljaCBpY29uIHRvIHVzZSBmb3IgdGhlIGJ1c3kgc3Bpbm5lclxyXG4gIEBJbnB1dCgpIGJ1c3lJY29uOiBzdHJpbmcgPSBcImhjaSBmYS1jb3JlIGZhLXNwaW5cIjtcclxuXHJcbiAgQElucHV0KCkgc2hvd1Jlc3VsdHNDb3VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBJZiBubyBvbkdyb3VwQ2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdEdyb3VwQ2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSA9PiB2b2lkID0gKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHtcclxuICAgIGNtcHQuc2V0R3JvdXBFeHBhbmRlZChldmVudCwgcm93R3JvdXApO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBDbGljay5lbWl0KHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICByb3dHcm91cDogcm93R3JvdXBcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIG9uR3JvdXBDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHZvaWQ7XHJcblxyXG4gIC8vIElmIG5vIG9uUm93Q2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdFJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93ID0gcm93O1xyXG5cclxuICAgIHRoaXMucm93Q2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50OiBldmVudCxcclxuICAgICAgcm93OiByb3csXHJcbiAgICAgIHJvd0dyb3VwOiByb3dHcm91cFxyXG4gICAgfSk7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfTtcclxuICBASW5wdXQoKSBvblJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gIEBJbnB1dCgpIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQElucHV0KCkgb25Hcm91cENsb3NlOiBGdW5jdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGdyb3VwQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlckZpbHRlckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwVGVtcGxhdGVcIiwge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KSBkZWZhdWx0R3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZVwiLCB7XHJcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcclxuICAgIHN0YXRpYzogdHJ1ZVxyXG4gIH0pIGRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIHNlbGVjdGVkUm93OiBhbnk7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cDogUm93R3JvdXA7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcbiAgaW5uZXJSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIC8vIEdyaWQgRFRPIGluZm8gbmVlZGVkIHRvIGJ1aWxkIGV4dGVybmFsIGRhdGEgcmVxdWVzdHMuXHJcbiAgc29ydHM6IEhjaVNvcnREdG9bXSA9IFtdO1xyXG4gIGZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcbiAgcGFnaW5nOiBIY2lQYWdpbmdEdG8gPSBuZXcgSGNpUGFnaW5nRHRvKDAsIC0xKTtcclxuICBncm91cGluZzogSGNpR3JvdXBpbmdEdG8gPSBuZXcgSGNpR3JvdXBpbmdEdG8oW10pO1xyXG5cclxuICAvL2dsb2JhbFJvd0dyb3VwTWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICBncm91cGVkRGF0YVNldCA9IFtdO1xyXG5cclxuICBwYWdpbmdTdWJqZWN0OiBTdWJqZWN0PEhjaVBhZ2luZ0R0bz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaVBhZ2luZ0R0bz4odGhpcy5wYWdpbmcpO1xyXG5cclxuICAvLyBBIGR1bW15IG51bWJlciB0aGF0IGluY3JlbWVudHMgYmFzZWQgb24gc2VsZWN0aW9uIGNoYW5nZXMuICBGb3JjZXMgcm91dGVyTGlua0FjdGl2ZSB0byByZWNoZWNrLlxyXG4gIHJvd1JlZnJlc2g6IG51bWJlciA9IDA7XHJcblxyXG4gIGJ1c3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbGFzdFNjcm9sbFRvcDogbnVtYmVyID0gLTE7XHJcbiAgbGFzdFNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gIHNldFNjcm9sbFRvcDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgbGFzdEV2ZW50OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICAgICAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICAgICAgICAgIG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlOiBOYXZpZ2F0aW9uR2xvYmFsU2VydmljZSxcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihlbGVtZW50UmVmLCByZW5kZXJlciwgcmVzb2x2ZXIsIG5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgaWYgKCFuYXZpZ2F0aW9uU2VydmljZSkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmV3IE5hdmlnYXRpb25TZXJ2aWNlKG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZCgpID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1Jvb3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldENvbmZpZyh7fSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGlkIGZvciB0aGUgcm93IGdyb3VwIGJhc2VkIHVwb24gdGhlIGdyb3VwIGtleSBvciBpZiB1bmRlZmluZWQsIHRoZSBmaXJzdCByb3cncyBpZC4gIGUuZy4gXCJyb3ctZ3JvdXAtYm9iLXNtaXRoXCJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dHcm91cElkKHJvd0dyb3VwOiBSb3dHcm91cCk6IHN0cmluZyB7XHJcbiAgICBpZiAocm93R3JvdXAucmdLZXkpIHtcclxuICAgICAgcmV0dXJuIFwicm93LWdyb3VwLVwiICsgcm93R3JvdXAucmdLZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcm93SWQ6IHN0cmluZyA9IHRoaXMuZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKTtcclxuICAgICAgcmV0dXJuIHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwicm93LWdyb3VwLVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgcm93IGlkLiAgZS5nLiBcInJvdy0xXCIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcm93XHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dJZChyb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5yb3dJZCkge1xyXG4gICAgICByZXR1cm4gXCJyb3ctXCIgKyA8c3RyaW5nPjxhbnk+cm93W3RoaXMucm93SWRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwicm93LXVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Vmlld0RhdGEoKTogUm93R3JvdXBbXXtcclxuICAgIHJldHVybiB0aGlzLnZpZXdEYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJlcGFyZWREYXRhKCk6IFJvd0dyb3VwW117XHJcbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlZERhdGE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBpbml0LCBsaXN0ZW4gZm9yIGxvYWRpbmcgc3ViamVjdHMgYW5kIGxpc3RlbiBmb3IgcGFnZSBjaGFuZ2VzLlxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0uc3Vic2NyaWJlKChidXN5OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gYnVzeTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYWdpbmdTdWJqZWN0LnN1YnNjcmliZSgocGFnaW5nOiBIY2lQYWdpbmdEdG8pID0+IHtcclxuICAgICAgdGhpcy5wYWdpbmcgPSBwYWdpbmc7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiBpbnB1dHMgY2hhbmdlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtTaW1wbGVDaGFuZ2VzfSBjaGFuZ2VzXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICBpZiAoY2hhbmdlc1tcImdyb3VwaW5nRmllbGRzXCJdKSB7XHJcbiAgICAgIGxldCBjaGFuZ2U6IFNpbXBsZUNoYW5nZSA9IDxTaW1wbGVDaGFuZ2U+Y2hhbmdlc1tcImdyb3VwaW5nRmllbGRzXCJdO1xyXG4gICAgICBpZiAoY2hhbmdlLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmcuc2V0RmllbGRzKGNoYW5nZS5jdXJyZW50VmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmcuc2V0RmllbGRzKFtdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGRhdGEgb25seSB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBpcyByZW5kZXJlZC5cclxuICAgKi9cclxuICBjaGVja0luaXRpYWxpemVkKCkge1xyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgICB0aGlzLnBvc3RJbml0KCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kYXRhU3ViamVjdCkge1xyXG4gICAgICAgIC8vTWF5IGFzIHdlbGwgbWFrZSBpdCBzcGluIHdoaWxlIHByb2Nlc3NpbmcsIGFzIHdlbGwgYXMgbG9hZGluZy4gT3RoZXJ3aXNlIGl0IGxvb2tzIGZyb3plblxyXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YVN1YmplY3RcclxuICAgICAgICAgIC5waXBlKGRlbGF5KDApKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogT2JqZWN0W10pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZERhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuXHJcbiAgICAgICAgICAgIC8vTm93IGRvbmUgbG9hZGluZ1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwb24gbmV3IHJvd1BhcmVudCBiZWluZyBzZXQsIGFkZCBhbnkgY2xhc3NlcyBpZiByb3dDbGFzcyBpcyBkZWZpbmVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeUxpc3Q8RWxlbWVudFJlZj59IHJvd1BhcmVudHNcclxuICAgKi9cclxuICBAVmlld0NoaWxkcmVuKFwicm93UGFyZW50XCIsIHtyZWFkOiBFbGVtZW50UmVmfSkgc2V0IHJvd1BhcmVudHMocm93UGFyZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+KSB7XHJcbiAgICBpZiAocm93UGFyZW50cyAmJiB0aGlzLnJvd0NsYXNzKSB7XHJcbiAgICAgIHJvd1BhcmVudHMuZm9yRWFjaCgoZTogRWxlbWVudFJlZikgPT4ge1xyXG4gICAgICAgIGxldCBjbGFzc2VzOiBzdHJpbmdbXSA9IHRoaXMucm93Q2xhc3Muc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGNsYXNzTmFtZSBvZiBjbGFzc2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJvd1JlZnJlc2ggKz0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBvc3RJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJTZWFyY2hMaXN0Q29tcG9uZW50LnBvc3RJbml0OiBcIiArIHRoaXMuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmdldFBhcmVudCgpKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbGxlciA9IDxTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudD50aGlzLmdldFBhcmVudCgpLmdldENvbXBvbmVudEJ5VHlwZShcIlNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbnRyb2xsZXIpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcIlNlYXJjaExpc3RDb21wb25lbnQ6IHVzaW5nIGNvbnRyb2xsZXJcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5hZGRTZWFyY2hMaXN0KHRoaXMudGl0bGUpO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLmZpbHRlcnNTdWJqZWN0LnN1YnNjcmliZSgoZmlsdGVyczogSGNpRmlsdGVyRHRvW10pID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMucmVzZXRQYWdpbmcoKTtcclxuICAgICAgICB0aGlzLmFmdGVyRmlsdGVyRXZlbnQuZW1pdCh0aGlzLnByZXBhcmVkRGF0YSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNvcnRzU3ViamVjdC5zdWJzY3JpYmUoKHNvcnRzOiBIY2lTb3J0RHRvW10pID0+IHtcclxuICAgICAgICB0aGlzLnNvcnRzID0gc29ydHM7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Quc3Vic2NyaWJlKCh0aXRsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwic2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5zdWJzY3JpYmU6IFwiICsgdGhpcy50aXRsZSArIFwiLCBcIiArIHRpdGxlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2aXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGl0bGUgJiYgdGl0bGUgJiYgdGhpcy50aXRsZSAhPT0gdGl0bGUpIHtcclxuICAgICAgICAgIHZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2aXNpYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIHJlc2V0IHBhZ2luZyBhbmQgZmlyZXNcclxuICAgKi9cclxuICByZXNldFBhZ2luZygpIHtcclxuICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBjb25maWcgd2l0aCBvcHRpb25zIGFuZCByZS1mZXRjaGVzIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29uZmlnXHJcbiAgICovXHJcbiAgdXBkYXRlQ29uZmlnKGNvbmZpZykge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGRhdGVDb25maWdcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLCBjb25maWcpO1xyXG5cclxuICAgICAgaWYgKGNvbmZpZy5yb3V0ZSkge1xyXG4gICAgICAgIHRoaXMucm91dGUgPSBjb25maWcucm91dGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cEJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBCeUFsbG93ZWRGaWVsZHMgPSBjb25maWcuZ3JvdXBCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zb3J0cykge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBjb25maWcuc29ydHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cGluZ0ZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmdGaWVsZHMgPSBjb25maWcuZ3JvdXBpbmdGaWVsZHM7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoY29uZmlnLmdyb3VwaW5nRmllbGRzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnBhZ2VTaXplKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGNvbmZpZy5wYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlU2l6ZShjb25maWcucGFnZVNpemUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBEaXNwbGF5KSB7XHJcbiAgICAgICAgdGhpcy5ncm91cERpc3BsYXkgPSBjb25maWcuZ3JvdXBEaXNwbGF5O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGVsaW1pdGVyKSB7XHJcbiAgICAgICAgdGhpcy5kZWxpbWl0ZXIgPSBjb25maWcuZGVsaW1pdGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuY2xvc2VPdGhlcnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VPdGhlcnMgPSBjb25maWcuY2xvc2VPdGhlcnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFRlbXBsYXRlID0gY29uZmlnLmdyb3VwVGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gY29uZmlnLml0ZW1UZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGEpIHtcclxuICAgICAgICB0aGlzLmJvdW5kRGF0YSA9IGNvbmZpZy5kYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhU3ViamVjdCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVN1YmplY3QgPSBjb25maWcuZGF0YVN1YmplY3Q7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCA9IGNvbmZpZy5kYXRhQ2FsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsaWNrID0gY29uZmlnLm9uR3JvdXBDbGljaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmlubGluZUV4cGFuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pbmxpbmVFeHBhbmQgPSBjb25maWcuaW5saW5lRXhwYW5kO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDbGFzcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBDbGFzcyA9IGNvbmZpZy5ncm91cENsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93Q2xhc3MpIHtcclxuICAgICAgICB0aGlzLnJvd0NsYXNzID0gY29uZmlnLnJvd0NsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93SWQpIHtcclxuICAgICAgICB0aGlzLnJvd0lkID0gY29uZmlnLnJvd0lkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSBjb25maWcub25Hcm91cENsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Sb3dDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Sb3dDbGljayA9IGNvbmZpZy5vblJvd0NsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBjb25maWcubG9hZGluZ1N1YmplY3RzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBQYWdlU2l6ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBQYWdlU2l6ZSA9IGNvbmZpZy5ncm91cFBhZ2VTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXMgPj0gMikge1xyXG4gICAgICAgICAgdGhpcy5ncm91cENhY2hlTnVtUGFnZXMgPSBjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJncm91cENhY2hlTnVtUGFnZXMgbXVzdCBiZSAyIG9yIG1vcmUuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlID0gY29uZmlnLm9uR3JvdXBDbG9zZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmJ1c3lJY29uKSB7XHJcbiAgICAgICAgdGhpcy5idXN5SWNvbiA9IGNvbmZpZy5idXN5SWNvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbmZpZy5zaG93UmVzdWx0c0NvdW50KSB7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzdWx0c0NvdW50ID0gY29uZmlnLnNob3dSZXN1bHRzQ291bnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMub25Hcm91cENsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Hcm91cENsaWNrID0gdGhpcy5kZWZhdWx0R3JvdXBDbGljaztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5vblJvd0NsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljayA9IHRoaXMuZGVmYXVsdFJvd0NsaWNrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pdGVtVGVtcGxhdGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiU2VhcmNoTGlzdENvbXBvbmVudDogQW4gaXRlbVRlbXBsYXRlIG11c3QgYmUgcHJvdmlkZWQhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEdyb3VwVGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gdGhpcy5kZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmV4dGVybmFsRGF0YUNhbGwpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBbbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSldO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNldERhdGEoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBpZiBhbiBhcnJheSwgY2FsbHMgdGhlIGRhdGEgaWYgZXh0ZXJuYWwgY2FsbC5cclxuICAgKi9cclxuICBzZXREYXRhKGRhdGE/OiBPYmplY3RbXSk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJzZXREYXRhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhID0gZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCkge1xyXG4gICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKHRoaXMuZmlsdGVycywgdGhpcy5zb3J0cywgdGhpcy5wYWdpbmcsIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCkpKVxyXG4gICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlRGF0YShleHRlcm5hbERhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgYXJyYXkgdGhhdCB0aGUgaW50ZXJmYWNlIHVzZXMgdG8gcmVuZGVyIChyZWdhcmRsZXNzIG9mIHNvdXJjZSkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hjaURhdGFEdG99IGV4dGVybmFsRGF0YVxyXG4gICAqL1xyXG4gIGdlbmVyYXRlRGF0YShleHRlcm5hbERhdGE/OiBIY2lEYXRhRHRvKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcImdlbmVyYXRlRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhleHRlcm5hbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHRlcm5hbERhdGEpIHtcclxuICAgICAgdGhpcy5ib3VuZERhdGEgPSBleHRlcm5hbERhdGEuZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUoZXh0ZXJuYWxEYXRhLmdyaWREdG8ucGFnaW5nLmRhdGFTaXplKTtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSByb3cgZ3JvdXBzLlxyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIGxldCByb3dHcm91cDogUm93R3JvdXA7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm91bmREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcm93R3JvdXAgPSBuZXcgUm93R3JvdXAodW5kZWZpbmVkLCB0aGlzLmJvdW5kRGF0YVtpXSwgKGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICYmIGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICE9PSBudWxsKSA/IGV4dGVybmFsRGF0YS5kYXRhQ291bnRzW2ldIDogMCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBncm91cGluZ0ZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwW2dyb3VwaW5nRmllbGRdID0gdGhpcy5ib3VuZERhdGFbaV1bZ3JvdXBpbmdGaWVsZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZpZXdEYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDcmVhdGUgYW5kIHBvcHVsYXRlIHJvdyBncm91cHMuXHJcbiAgICAgIHRoaXMucG9wdWxhdGVGcm9tQm91bmREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoT2JqZWN0LmFzc2lnbih7dHlwZTogXCJub25lXCJ9LCB0aGlzLmxhc3RFdmVudCwge1xyXG4gICAgICBwYWdpbmc6IHRoaXMucGFnaW5nLFxyXG4gICAgICBuVmlld0RhdGE6IHRoaXMudmlld0RhdGEubGVuZ3RoXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgaWYgdGhlIGRhdGEgaXMgYW4gYXJyYXkgKG5vdCBleHRlcm5hbCkuXHJcbiAgICovXHJcbiAgcG9wdWxhdGVGcm9tQm91bmREYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJwb3B1bGF0ZUZyb21Cb3VuZERhdGFcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEpIHtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYm91bmREYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQm91bmQgRGF0YSBsZW5ndGggZm91bmQgYXMgMFwiKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0TnVtUGFnZXMoMSk7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vbGV0IHByZXBhcmVkRGF0YSA9IFtdO1xyXG4gICAgdGhpcy5wcmVwYXJlZERhdGEgPSBbXTtcclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSBbXTtcclxuXHJcbiAgICBsZXQgcm93R3JvdXBNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cclxuICAgIGxldCBkb1Jvd0dyb3VwaW5nOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuICAgIGZvciAobGV0IHJvdyBvZiB0aGlzLmJvdW5kRGF0YSkge1xyXG4gICAgICBsZXQgZ3JvdXBLZXk6IHN0cmluZztcclxuICAgICAgaWYgKGRvUm93R3JvdXBpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgZ3JvdXBLZXkgPSAoZ3JvdXBLZXkpID8gZ3JvdXBLZXkgKyBcIjpcIiArIHJvd1tmaWVsZF0gOiByb3dbZmllbGRdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZmlsdGVycyAmJiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCBpbmNsdWRlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuZmlsdGVycykge1xyXG4gICAgICAgICAgaWYgKCFmaWx0ZXIudmFsaWQpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaCAmJiB0aGlzLmNvbnRyb2xsZXIuYWR2YW5jZWRTZWFyY2gubGVuZ3RoID4gMCAmJiAhdGhpcy5jb250cm9sbGVyLmFkdmFuY2VkU2VhcmNoQWxsb3dGaWx0ZXIpIHtcclxuICAgICAgICAgIC8vICBBZHZhbmNlZCBzZWFyY2ggZG9lcyBub3QgYXV0byBmaWx0ZXIgYnkgZGVmYXVsdFxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJWYWx1ZXMgPSBmaWx0ZXIuZ2V0VmFsdWUoKS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJGaWVsZHMgPSBmaWx0ZXIuZ2V0RmllbGQoKS5zcGxpdChcIiBvciBcIik7XHJcblxyXG4gICAgICAgICAgICBsZXQgaW5uZXJJbmNsdWRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIGZpbHRlckZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdICYmIHR5cGVvZiByb3dbZmllbGRdID09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSA9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlubmVySW5jbHVkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgcm93W2ZpZWxkXSBpbnN0YW5jZW9mIERhdGUgfHwgZmlsdGVyLmdldERhdGFUeXBlKCkgPT0gXCJkYXRlXCIpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChuZXcgRGF0ZShyb3dbZmllbGRdKSkuZ2V0VGltZSgpID09IChuZXcgRGF0ZSh2YWx1ZSkpLmdldFRpbWUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaW5uZXJJbmNsdWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiB0eXBlb2Ygcm93W2ZpZWxkXSA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBtdWx0aXBsZSBzZWFyY2ggc3RyaW5nc1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgZmlsdGVyVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih2YWx1ZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlubmVySW5jbHVkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGlubmVySW5jbHVkZSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlubmVySW5jbHVkZSkge1xyXG4gICAgICAgICAgICAgIGluY2x1ZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZighaW5jbHVkZSkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaW5jbHVkZSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZG9Sb3dHcm91cGluZykge1xyXG4gICAgICAgIGlmIChyb3dHcm91cE1hcC5nZXQoZ3JvdXBLZXkpID49IDApIHtcclxuICAgICAgICAgIHRoaXMucHJlcGFyZWREYXRhW3Jvd0dyb3VwTWFwLmdldChncm91cEtleSldLnJnUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd0dyb3VwTWFwLnNldChncm91cEtleSwgdGhpcy5wcmVwYXJlZERhdGEubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICBsZXQgcm93R3JvdXA6IFJvd0dyb3VwID0gbmV3IFJvd0dyb3VwKGdyb3VwS2V5LCByb3cpO1xyXG4gICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgICAgcm93R3JvdXBbZmllbGRdID0gcm93W2ZpZWxkXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnByZXBhcmVkRGF0YS5wdXNoKHJvd0dyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wcmVwYXJlZERhdGEucHVzaChuZXcgUm93R3JvdXAoZ3JvdXBLZXksIHJvdykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL3RoaXMuZ2xvYmFsUm93R3JvdXBNYXAgPSByb3dHcm91cE1hcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucHJlcGFyZWREYXRhLnNvcnQoKGE6IFJvd0dyb3VwLCBiOiBSb3dHcm91cCkgPT4ge1xyXG4gICAgICAgIGxldCB2OiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmlzU29ydEZpZWxkR3JvdXBGaWVsZChzb3J0LmdldEZpZWxkKCkpKSB7XHJcbiAgICAgICAgICAgIGlmIChzb3J0LmdldEFzYygpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwaW5nLmdldEZpZWxkcygpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoc29ydC5nZXRBc2MoKSkge1xyXG4gICAgICAgICAgICAgIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldIDwgYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA+IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA+IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPCBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZ3JvdXBpbmcuZ2V0RmllbGRzKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IHJvd0dyb3VwIG9mIHRoaXMucHJlcGFyZWREYXRhKSB7XHJcbiAgICAgICAgICByb3dHcm91cC5yZ1Jvd3Muc29ydCgoYTogT2JqZWN0LCBiOiBPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHY6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNTb3J0RmllbGRHcm91cEZpZWxkKHNvcnQuZ2V0RmllbGQoKSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzb3J0LmdldEFzYygpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2luZy5zZXREYXRhU2l6ZSh0aGlzLnByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSB0aGlzLnByZXBhcmVkRGF0YTtcclxuXHJcbiAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSA+IDApIHtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IFtdO1xyXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5wYWdpbmcuZ2V0UGFnZSgpICogdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKTsgaSA8IE1hdGgubWluKHRoaXMucHJlcGFyZWREYXRhLmxlbmd0aCwgKHRoaXMucGFnaW5nLmdldFBhZ2UoKSArIDEpICogdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSk7IGkrKykge1xyXG4gICAgICAgIHRoaXMudmlld0RhdGEucHVzaCh0aGlzLnByZXBhcmVkRGF0YVtpXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHRoaXMucHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSB0aGlzLnByZXBhcmVkRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCByb3dHcm91cCBvZiB0aGlzLnZpZXdEYXRhKSB7XHJcbiAgICAgIHJvd0dyb3VwLnJnQ291bnQgPSByb3dHcm91cC5yZ1Jvd3MubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBzb3J0IGZpZWxkIGlzIGEgZ3JvdXBpbmcgZmllbGQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXHJcbiAgICovXHJcbiAgaXNTb3J0RmllbGRHcm91cEZpZWxkKHNvcnRGaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBpbmcgfHwgIXRoaXMuZ3JvdXBpbmcuZmllbGRzIHx8IHRoaXMuZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBpZiAoc29ydEZpZWxkID09PSBncm91cEZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBhIGdyb3VwIG9mIGRhdGEuICBDYWxsIHRoZSBmaXJzdCBwYWdlIG9mIGRhdGEgdXBvbiBleHBhbmRpbmcuICBJZiBhbHJlYWR5IGV4cGFuZGVkLCBjbG9zZSBhbmQgZ28gYmFjayB0byB0aGVcclxuICAgKiBsaXN0IG9mIGdyb3Vwcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICovXHJcbiAgc2V0R3JvdXBFeHBhbmRlZChldmVudDogTW91c2VFdmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInNldEdyb3VwRXhwYW5kZWQ6IFwiICsgcm93R3JvdXAucmdFeHBhbmRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCAmJiAhcm93R3JvdXAucmdFeHBhbmRlZCkge1xyXG4gICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgICAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHJvd0dyb3VwW2dyb3VwRmllbGRdLCB1bmRlZmluZWQsIFwiRVwiLCB0cnVlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByb3dHcm91cC5yZ1BhZ2VNaW4gPSAwO1xyXG4gICAgICAgIHJvd0dyb3VwLnJnUGFnZU1heCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8oMCwgdGhpcy5ncm91cFBhZ2VTaXplKSwgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCBmYWxzZSkpKVxyXG4gICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgICByb3dHcm91cC5yZ1Jvd3MgPSBleHRlcm5hbERhdGEuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSByb3dHcm91cDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICghcm93R3JvdXAucmdFeHBhbmRlZCkge1xyXG4gICAgICByb3dHcm91cC5yZ1BhZ2VNaW4gPSAwO1xyXG4gICAgICByb3dHcm91cC5yZ1BhZ2VNYXggPSAwO1xyXG4gICAgICBpZiAoIXRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwID0gcm93R3JvdXA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocm93R3JvdXAucmdFeHBhbmRlZCkge1xyXG4gICAgICBpZiAodGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICBsZXQgZ3JvdXBTZWxlY3RlZFBhcmVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pig8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudCA9IDxIVE1MRWxlbWVudD48dW5rbm93bj5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmdldFJvd0dyb3VwSWQocm93R3JvdXApKTtcclxuICAgICAgICAgIC8vZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBvZihudWxsKS5waXBlKGRlbGF5KDI1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5vbkdyb3VwQ2xvc2UpIHtcclxuICAgICAgICB0aGlzLm9uR3JvdXBDbG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFyb3dHcm91cC5yZ0V4cGFuZGVkICYmIHRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50OiBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudCA9IDxIVE1MRWxlbWVudD4oPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xvc2VzdChcIi5ncm91cC1wYXJlbnRcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudCA9IDxIVE1MRWxlbWVudD48dW5rbm93bj5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmdldFJvd0dyb3VwSWQocm93R3JvdXApKTtcclxuICAgICAgICAvL2dyb3VwU2VsZWN0ZWRQYXJlbnQuY2xpY2soKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInRoaXMuc2VsZWN0ZWRSb3dHcm91cFwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLnNlbGVjdGVkUm93R3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHJvd0dyb3VwLnJnRXhwYW5kZWQgPSAhcm93R3JvdXAucmdFeHBhbmRlZDtcclxuXHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0aGUgc2Nyb2xsIGxpc3RlbmVyIHRvIHRoZSBncm91cCBjb250YWluZXIuXHJcbiAgICovXHJcbiAgYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgIHRoaXMucmVtb3ZlR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG5cclxuICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IC0xO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXAgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnQ291bnQgIT09IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2VsZWN0ZWQtZ3JvdXAtY29udGFpbmVyXCIpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uR3JvdXBTY3JvbGwuYmluZCh0aGlzKSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgdGhlIHNjcm9sbCBsaXN0ZW5lciBmcm9tIHRoZSBncm91cCBjb250YWluZXIuXHJcbiAgICovXHJcbiAgcmVtb3ZlR3JvdXBTY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5vbkdyb3VwU2Nyb2xsLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGZvciB0aGUgc2Nyb2xsIGV2ZW50LCBkZXRlcm1pbmUgaWYgdGhlIHNjcm9sbCBoaXQgdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XHJcbiAgICovXHJcbiAgb25Hcm91cFNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGxldCBuZXdTY3JvbGxUb3A6IG51bWJlciA9IE1hdGgucm91bmQodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCk7XHJcbiAgICAgIGxldCBzY3JvbGxQb3NpdGlvbjogbnVtYmVyID0gMTtcclxuICAgICAgaWYgKG5ld1Njcm9sbFRvcCA9PT0gMCAmJiBzY3JvbGxQb3NpdGlvbiAhPT0gMCkge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMDtcclxuICAgICAgfSBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbiAhPT0gMiAmJiBNYXRoLmFicyh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gKG5ld1Njcm9sbFRvcCArIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQpKSA8IDMpIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gIT09IHNjcm9sbFBvc2l0aW9uICYmIHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uID09PSAxKSB7XHJcbiAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwUHJldmlvdXNQYWdlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbiA9PT0gMikge1xyXG4gICAgICAgICAgdGhpcy5ncm91cE5leHRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxhc3RTY3JvbGxUb3AgPSBuZXdTY3JvbGxUb3A7XHJcbiAgICAgIHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIHNjcm9sbGluZyBoaXRzIHRoZSB0b3AsIGxvYWQgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgZ3JvdXAgZGF0YS5cclxuICAgKi9cclxuICBncm91cFByZXZpb3VzUGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluID09PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkZpcnN0IHBhZ2UgYWxyZWFkeSBsb2FkZWQuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLnNlbGVjdGVkUm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gLSAxLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUoZGVsYXkoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyA9IGV4dGVybmFsRGF0YS5kYXRhLmNvbmNhdCh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gLT0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPj0gdGhpcy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5zcGxpY2UodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgKiB0aGlzLmdyb3VwUGFnZVNpemUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC09IDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIHNjcm9sbGluZyBoaXRzIHRoZSBib3R0b20sIGxvYWQgdGhlIG5leHQgcGFnZSBvZiBncm91cCBkYXRhLlxyXG4gICAqL1xyXG4gIGdyb3VwTmV4dFBhZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAoKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKyAxKSAqIHRoaXMuZ3JvdXBQYWdlU2l6ZSA+PSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdDb3VudCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJBbGwgcm93cyBhbHJlYWR5IGxvYWRlZFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVtb3ZlR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG5cclxuICAgIGxldCBncm91cEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gdGhpcy5maWx0ZXJzLnNsaWNlKCk7XHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5zZWxlY3RlZFJvd0dyb3VwW2dyb3VwRmllbGRdLCB1bmRlZmluZWQsIFwiRVwiLCB0cnVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0byh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4ICsgMSwgdGhpcy5ncm91cFBhZ2VTaXplKSwgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCBmYWxzZSkpKVxyXG4gICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgb2YodW5kZWZpbmVkKS5waXBlKGRlbGF5KDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxUb3AgPT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciwgXCJzY3JvbGxUb3BcIiwgXCIxXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgICB9KSlcclxuICAgICAgICAuc3Vic2NyaWJlKChleHRlcm5hbERhdGE6IEhjaURhdGFEdG8pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MgPSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLmNvbmNhdChleHRlcm5hbERhdGEuZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4ICs9IDE7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzICYmIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluID49IHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3Muc3BsaWNlKDAsIHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gKz0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBmaXJzdCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VGaXJzdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHbyB0byB0aGUgcHJldmlvdXMgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlUHJldmlvdXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpID4gMCkge1xyXG4gICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0UGFnZSgpIC0gMSk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHbyB0byB0aGUgbmV4dCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VOZXh0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgaWYgKHRoaXMucGFnaW5nLmdldFBhZ2UoKSA8IHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgKyAxKTtcclxuICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBsYXN0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZUxhc3QoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxKTtcclxuICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFmdGVyIHBhZ2UgdHVybnMsIGNoZWNrIGlmIHRoZSBwYWdlIGhhcyB0aGUgcm93IHRoYXQgbmVlZCB0byBiZSBoaWdobGlnaHRlZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2hlY2tBY3RpdmVSb3dJZCgpOiB2b2lkIHtcclxuICAgIC8vaWYgYSByb3cgaXMgc2VsZWN0ZWQsIGFuZCByb3dJZCBmaWVsZCBpcyBzcGVjaWZpZWQgKHVzdWFsbHkgY29uZmlndXJlZCBieSBjb25maWcpXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvdyAmJiB0aGlzLnJvd0lkKSB7XHJcbiAgICAgIGxldCBpZCA9IHRoaXMuc2VsZWN0ZWRSb3dbdGhpcy5yb3dJZF07XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKGlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uY2F0IGdyb3VwIGJ5IGZpZWxkcyB0byBjb21tYSBkZWxpbWl0ZWQgd29yZHNcclxuICAgKiBvciBkZWxpbWl0ZXIgZGVsaW1pdGVkIHdvcmRzIGlmIHRoZSBkZWxpbWluYXRvciBoYXMgaXRzIGRlZmF1bHQgdmFsdWUgc2V0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldEdyb3VwRGlzcGxheShyb3dHcm91cDogUm93R3JvdXApOiBzdHJpbmcge1xyXG4gICAgbGV0IGRpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgICBpZiAodGhpcy5ncm91cERpc3BsYXkpIHtcclxuICAgICAgZGlzcGxheSA9IHRoaXMuZ3JvdXBEaXNwbGF5O1xyXG4gICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5LnJlcGxhY2UoZmllbGQsIHJvd0dyb3VwW2ZpZWxkXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgaWYgKHJvd0dyb3VwW2ZpZWxkXSAhPT0gbnVsbCAmJiByb3dHcm91cFtmaWVsZF0gIT09IFwiXCIpIHtcclxuICAgICAgICAgIGRpc3BsYXkgPSAoZGlzcGxheSkgPyBkaXNwbGF5ICsgdGhpcy5kZWxpbWl0ZXIgKyByb3dHcm91cFtmaWVsZF0gOiByb3dHcm91cFtmaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpc3BsYXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJcclxuICAgKi9cclxuICBAVmlld0NoaWxkKFwic2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclwiLCB7XHJcbiAgICByZWFkOiBFbGVtZW50UmVmLFxyXG4gICAgc3RhdGljOiBmYWxzZVxyXG4gIH0pIHNldCBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyU2V0dGVyKHNlbGVjdGVkUm93R3JvdXBDb250YWluZXI6IEVsZW1lbnRSZWYpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgdGhpcy5zZXRTY3JvbGxUb3ApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjaW5uZXJSb3dHcm91cENvbnRhaW5lclwiKSkub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyICYmIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5jbG9zZXN0KFwiLmdyb3VwLXNlbGVjdGVkLXBhcmVudFwiKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShncm91cFNlbGVjdGVkUGFyZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG5cclxuICAgICAgb2YobnVsbCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhncm91cFNlbGVjdGVkUGFyZW50LCBcImFjdGl2ZVwiKTtcclxuICAgICAgICB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIgPSB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcImhlaWdodFwiLCB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciwgXCJtaW4taGVpZ2h0XCIsICh0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgMzApICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciwgXCJzY3JvbGxUb3BcIiwgXCIxXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gY29udHJvbCBkZXNlbGVjdGlvbi5cclxuICAgKi9cclxuICBkZXNlbGVjdEFsbFJvd3MoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnJvdy1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSBncm91cCBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsR3JvdXBzKCk6IHZvaWQge1xyXG4gICAgbGV0IGVzOiBIVE1MRWxlbWVudFtdID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5ncm91cC1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0lkSW5GaWx0ZXJlZFJlc3VsdHMoaWQ6c3RyaW5nKXtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LVwiICsgaWQpO1xyXG4gICAgcmV0dXJuIGU/dHJ1ZTogZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gc2VsZWN0IGEgcm93LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkXHJcbiAgICovXHJcbiAgYWN0aXZhdGVSb3dCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGl2YXRlR3JvdXBCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LWdyb3VwLVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hldGhlciBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgZXhwYW5kZWQgb3IgY29sbGFwc2VkXHJcbiAgICogQHBhcmFtIHJvd0dyb3VwXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBFeHBhbmRlZEluZGljYXRvcihyb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiBcIm1pbnVzXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJwbHVzXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1RPRG8gOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgdXNlcyBhIGN1c3RvbSBncm91cFRlbXBsYXRlXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlIFNlYXJjaExpc3RDb21wb25lbnQgdG8gbmF2aWdhdGUgdG8gYSBwYWdlIGFuZCBoaWdobGlnaHQgdGhlIGdpdmVuIGdyb3VwIGl0ZW0sIG9yXHJcbiAgICogdGhlIHJvdyAoaW4tY2FzZSBvZiBub24tZ3JvdXBlZCBsaXN0KVxyXG4gICAqIFRoaXNcclxuICAgKiBAcGFyYW0gZ3JvdXBJZCA6IFRoaXMgc2hvdWxkIGNvbnRhaW4gYSBzdHJpbmcgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGdyb3VwLWRpc3BsYXlcclxuICAgKiBAcGFyYW0gcm93SWQgOiBUaGlzIGlzIHRoZSBhY3R1YWwgcm93SWQgZm9yIHRoZSByb3cgdG8gYmUgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgbmF2aWdhdGVUb1BhZ2VDb250YWluaW5nRWxlbWVudChncm91cElkOiBzdHJpbmcsIHJvd0lkOiBzdHJpbmcpIHtcclxuXHJcbiAgICAvL0ludHJvZHVjaW5nIHRoZSBhZGRpdGlvbmFsIGNoZWNrIGJlbG93IHRvIGFkZHJlc3MgQ0NSVUktMTE2My5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEgfHwgdGhpcy5ib3VuZERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGdyb3VwZWRcclxuICAgIGxldCByb3dHcm91cGVkOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAocm93R3JvdXBlZCkge1xyXG4gICAgICB0aGlzLmdyb3VwZWREYXRhU2V0LmZvckVhY2goKHJvd0dyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGxldCBncm91cERpc3BsYXkgPSB0aGlzLmdldEdyb3VwRGlzcGxheShyb3dHcm91cCk7XHJcbiAgICAgICAgaWYgKGdyb3VwRGlzcGxheS5pbmNsdWRlcyhncm91cElkKSkge1xyXG4gICAgICAgICAgLy9TZXQgdGhlIHBhZ2UgdG8gdGhlIGluZGV4XHJcbiAgICAgICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgICAgICBsZXQgcGFnZSA9IE1hdGguZmxvb3IoaW5kZXggLyB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxID49IHBhZ2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHBhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICAgICAgICAvL3RoaXMuZGVmYXVsdEdyb3VwQ2xpY2sobnVsbCwgdGhpcywgcm93R3JvdXApO1xyXG4gICAgICAgICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQuY2xpY2soKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0QWxsUm93cygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YS5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0Um93SWQocm93KSA9PT0gcm93SWQpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJlc3VsdE1lc3NhZ2UoZGF0YTogT2JqZWN0W10pIHtcclxuICAgIGlmICh0aGlzLnNob3dSZXN1bHRzQ291bnQgJiYgZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gZGF0YS5sZW5ndGggKyBcIiByZXN1bHQocylcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1536
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF3TkksSUFBTSxtQkFBbUIsR0FBekIsTUFB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Q0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDUixDQUFDO3dCQUNILENBQUM7d0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7NEJBQ1gsT0FBTyxDQUFDLENBQUM7d0JBQ1gsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ2xELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7NEJBQ2xCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0NBQ2hFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs0QkFDVCxDQUFDO2lDQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0NBQ3ZFLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ1IsQ0FBQzt3QkFDSCxDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQ0FDaEUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUNULENBQUM7aUNBQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMs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QkFBMUIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBa0JHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFK0Qsb0JBQW9CO3NCQUF6RixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUlqRSw0QkFBNEI7c0JBSDlCLFNBQVM7dUJBQUMsOEJBQThCLEVBQUU7d0JBQ3pDLElBQUksRUFBRSxXQUFXO3dCQUNqQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkErSmtELFVBQVU7c0JBQTVELFlBQVk7dUJBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQztnQkEwMEJ0QywrQkFBK0I7c0JBSHJDLFNBQVM7dUJBQUMsMkJBQTJCLEVBQUU7d0JBQ3RDLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsS0FBSztxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlblxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3R9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7ZGVsYXksIGZpbmFsaXplfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtOZ2JEcm9wZG93bn0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcblxyXG5pbXBvcnQge0hjaURhdGFEdG8sIEhjaUZpbHRlckR0bywgSGNpR3JpZER0bywgSGNpR3JvdXBpbmdEdG8sIEhjaVBhZ2luZ0R0bywgSGNpU29ydER0b30gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL2hjaS1uZy1ncmlkLWR0b1wiO1xyXG5pbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS91dGlsc1wiO1xyXG5cclxuaW1wb3J0IHtOYXZDb21wb25lbnR9IGZyb20gXCIuLi9uYXYuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSb3dHcm91cH0gZnJvbSBcIi4vcm93LWdyb3VwXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkdsb2JhbFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLWdsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnR9IGZyb20gXCIuL3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50XCI7XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGdyb3VwZWQgb3Igbm90IGdyb3VwZWQuICBUaGUgZGF0YSBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gYW4gYXJyYXksIG9yIGZyb20gYW4gZXh0ZXJuYWxcclxuICogZGF0YSBjYWxsIHVzaW5nIGpwYS1zZXJ2aWNlcy5cclxuICovXHJcbkBDb21wb25lbnRUeXBlKFwiU2VhcmNoTGlzdENvbXBvbmVudFwiKVxyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHNlbGVjdG9yOiBcImhjaS1zZWFyY2gtbGlzdFwiLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgIGBcclxuICAgICAgICAucmVzdWx0cy1jb3VudCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVld2FybS1kYXJrKTtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgICBmb250LXNpemU6IDE3LjNweDtcclxuICAgICAgICAgIHBhZGRpbmctbGVmdDogMThweDtcclxuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDEwcHggM3B4IHZhcigtLWdyZXljb29sLW1lZGRhcmtlcik7XHJcbiAgICAgICAgICB6LWluZGV4OiAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZvcm1hdC1ib3R0b20tcGFkZGluZyB7XHJcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjVweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdltpZF49J3Jvdy0nXTpudGgtY2hpbGQoZXZlbikge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUtbWVkaXVtKSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2W2lkXj0ncm93LSddOm50aC1jaGlsZChvZGQpIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlLWxpZ2h0ZXN0KSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2W2lkXj0ncm93LSddIHtcclxuICAgICAgICAgIGJvcmRlcjogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2LnJvdy1wYXJlbnQuYWN0aXZlIHtcclxuICAgICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZXdhcm12aXZpZC1tZWRsaWdodCkgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIC5yaS1zaWRlYmFyLWNlbGwge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcbiAgICAgIGBcclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICAgYFxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwic2hvd1Jlc3VsdHNDb3VudCAmJiBzZWFyY2hSZXN1bHRNZXNzYWdlXCJcclxuICAgICAgICAgIGNsYXNzPVwicmVzdWx0cy1jb3VudFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdmb3JtYXQtYm90dG9tLXBhZGRpbmcnOiB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgPT09ICcnIH1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAqbmdJZj1cIiFzaG93UmVzdWx0c0NvdW50IHx8ICFzZWFyY2hSZXN1bHRNZXNzYWdlXCJcclxuICAgICAgICAgIGNsYXNzPVwicmVzdWx0cy1jb3VudFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHNjcm9sbGFibGVcIj5cclxuICAgICAgICAgIDxkaXYgaWQ9XCJuby1yZXN1bHRzLWZvdW5kXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwic2VhcmNoLXRpdGxlXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBwcy0zXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwicmVzdWx0LWxpc3RcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiIFtjbGFzcy55LWhpZGRlbl09XCJzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGhjaS1idXN5IFtidXN5U3ViamVjdHNdPVwibG9hZGluZ1N1YmplY3RzXCIgcGFyZW50U2VsZWN0b3I9XCIuc2Nyb2xsYWJsZVwiIFtpY29uXT1cImJ1c3lJY29uXCI+PC9oY2ktYnVzeT5cclxuICAgICAgICAgICAgICA8IS0tIE5vIGdyb3VwaW5nIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ3JvdXBpbmcuZmllbGRzIHx8IGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0dyb3VwIG9mIHZpZXdEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvd0dyb3VwLnJnUm93c1swXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlKHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntjaGFuZ2VEZXRlY3Rpb246IHJvd1JlZnJlc2h9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvd0dyb3VwLnJnUm93c1swXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd0dyb3VwLnJnUm93c1swXX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3dHcm91cC5yZ1Jvd3NbMF19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gR3JvdXBpbmcgd2l0aCBpbmxpbmUgZXhwYW5zaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cGluZy5maWVsZHMgJiYgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDAgJiYgIXNlbGVjdGVkUm93R3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0dyb3VwIG9mIHZpZXdEYXRhOyBsZXQgaSA9IGluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJnZXRSb3dHcm91cElkKHJvd0dyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1wYXJlbnQgbmF2LWl0ZW0gZ3JvdXAge3tncm91cENsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3dHcm91cDogcm93R3JvdXAsIGNtcHQ6IGNtcHR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93R3JvdXAucmdFeHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtY29udGFpbmVyXCIgKGNsaWNrKT1cIm9uR3JvdXBDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd0dyb3VwLnJnUm93c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7Y2hhbmdlRGV0ZWN0aW9uOiByb3dSZWZyZXNofVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3d9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEdyb3VwaW5nIHdpdGggc2VwYXJhdGUgaW5kaXZpZHVhbCBleHBhbnNpb24gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwaW5nLmZpZWxkcyAmJiBncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZFJvd0dyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICNncm91cFNlbGVjdGVkUGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXNlbGVjdGVkLXBhcmVudCBmbGV4LWNvbHVtbiB7e2dyb3VwQ2xhc3N9fVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiZ2V0Um93R3JvdXBJZChzZWxlY3RlZFJvd0dyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcGFyZW50IG5hdi1pdGVtIGdyb3VwIGFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCBzZWxlY3RlZFJvd0dyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFNlbGVjdGVkVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3dHcm91cDogc2VsZWN0ZWRSb3dHcm91cCwgY21wdDogY21wdH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgI3NlbGVjdGVkUm93R3JvdXBDb250YWluZXIgaWQ9XCJzZWxlY3RlZC1ncm91cC1jb250YWluZXJcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiB5LWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImlubmVyUm93R3JvdXBDb250YWluZXJcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBzZWxlY3RlZFJvd0dyb3VwLnJnUm93c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlKHJvd0dyb3VwLCByb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gUGFnaW5nIGZvb3RlciAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwicGFnaW5nLnBhZ2VTaXplID4gMFwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtc2hyaW5rLTAgcGFnaW5nLWZvb3RlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwcy0zIHBlLTNcIlxyXG4gICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAxcmVtOyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZUZpcnN0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IDBcIj48aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZhc3QtYmFja3dhcmQgZmEteHNcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZVByZXZpb3VzKClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IDBcIj48aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWJhY2t3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAwLjhyZW07XCI+e3twYWdpbmcucGFnZSArIDF9fSBvZiB7e3BhZ2luZy5udW1QYWdlc319PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZU5leHQoKVwiIGNsYXNzPVwiZC1mbGV4IG10LTEgbWItMVwiIFtjbGFzcy5kaXNhYmxlZF09XCJwYWdpbmcucGFnZSA9PT0gcGFnaW5nLm51bVBhZ2VzIC0gMVwiPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mb3J3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VMYXN0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IHBhZ2luZy5udW1QYWdlcyAtIDFcIj5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZmFzdC1mb3J3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgYSBncm91cCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cFRlbXBsYXRlIGxldC1yb3dHcm91cD1cInJvd0dyb3VwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3Jvdy0xIHBzLTJcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIG1lLWF1dG9cIj57e2dldEdyb3VwRGlzcGxheShyb3dHcm91cCl9fTwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIGNsYXNzPVwiZC1mbGV4IG1lLTFcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJvd0dyb3VwLnJnRXhwYW5kZWQgPT09IHRydWU7IGVsc2UgcGx1c1RlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1taW51cyBmYS1zbSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGx1c1RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBmYS1zbSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAoe3tyb3dHcm91cC5yZ0NvdW50fX0pXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPCEtLSBEZWZhdWx0IHRlbXBsYXRlIGZvciBhbiBpbmRpdmlkdWFsIHNlbGVjdGVkIGdyb3VwIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSBsZXQtcm93R3JvdXA9XCJyb3dHcm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSBwcy0yXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtM1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWxldmVsLXVwLWFsdFwiIGRhdGEtZmEtdHJhbnNmb3JtPVwiZmxpcC1oXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgbWUtYXV0b1wiPnt7Z2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKX19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICBgXHJcbiAgfVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hMaXN0Q29tcG9uZW50IGV4dGVuZHMgTmF2Q29tcG9uZW50IHtcclxuXHJcbiAgc2VhcmNoUmVzdWx0TWVzc2FnZSA9IFwiXCI7XHJcblxyXG4gIC8vIFRoZSBkYXRhIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXHJcbiAgdmlld0RhdGE6IFJvd0dyb3VwW107XHJcbiAgcHJlcGFyZWREYXRhOiBhbnlbXSA9W107XHJcblxyXG4gIC8vIEEgcmVmZXJlbmNlIHRvIHRoZSBzZWFyY2ggbGlzdCBjb250cm9sbGVyIGlmIGFwcGxpY2FibGUuXHJcbiAgQElucHV0KCkgY29udHJvbGxlcjogU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQ7XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIGRhdGEuXHJcbiAgQElucHV0KFwiZGF0YVwiKSBib3VuZERhdGE6IE9iamVjdFtdO1xyXG5cclxuICAvLyBBIHN1YmplY3QgdGhhdCByZXByZXNlbnRzIGFuIGFycmF5IG9mIGRhdGEuXHJcbiAgQElucHV0KFwiZGF0YVN1YmplY3RcIikgZGF0YVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxPYmplY3RbXT47XHJcblxyXG4gIC8vIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgaW4gYSBIY2lHcmlkRHRvIGFuZCByZXR1cm5zIGEgSGNpRGF0YUR0byB3aGljaCB3cmFwcyBhbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFDYWxsXCIpIGV4dGVybmFsRGF0YUNhbGw6IChkdG86IEhjaUdyaWREdG8pID0+IE9ic2VydmFibGU8SGNpRGF0YUR0bz47XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIHN1YmplY3RzIHdpdGggYm9vbGVhbnMgdG8gY29udHJvbCB0aGUgaGNpLWJ1c3kgb3ZlcmxheWluZyB0aGUgc2VhcmNoLWxpc3QuXHJcbiAgQElucHV0KCkgbG9hZGluZ1N1YmplY3RzOiBTdWJqZWN0PGJvb2xlYW4+W107XHJcblxyXG4gIC8vIEFuIGFycmF5IG9mIGJvb2xlYW5zIHRvIGNvbnRyb2wgdGhlIGhjaS1idXN5IG92ZXJsYXlpbmcgdGhlIHNlYXJjaC1saXN0LlxyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW5bXSA9IFtmYWxzZV07XHJcblxyXG4gIC8vIElmIGNsaWNraW5nIGEgcm93IGNoYW5nZXMgYSByb3V0ZSwgdGhpcyBmdW5jdGlvbiBzcGVjaWZpZXMgdGhlIHJvdXRlIHRvIHVzZS5cclxuICBASW5wdXQoKSByb3V0ZTogKHJvd0dyb3VwOiBhbnksIHJvdzogYW55KSA9PiBhbnlbXTtcclxuXHJcbiAgLy8gRXhwYW5kIHRoZSBzZWxlY3RlZCByb3cgZ3JvdXAgYXMgaXRzIG93biBzY3JlZW4sIG9yIHNob3cgcm93cyB1bmRlciBzZWxlY3RlZCByb3cgZ3JvdXBzIGluIHRoZSBzYW1lIHZpZXcuXHJcbiAgQElucHV0KCkgaW5saW5lRXhwYW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFdpdGhvdXQgYW55IG90aGVyIG1ldGFkYXRhIGZvciB3aGF0IGEgcm93IGlzLCBwcm92aWRlIHRoZSBmaWVsZCB0byBiZSB1c2VkIGZvciB0aGUgaWQuXHJcbiAgLy8gVGhpcyBpcyBhY3R1YWxseSB0aGUgZmllbGQgdGhhdCBoYXMgdGhlIChkZWZpbmVkKSByb3dJZCAtLSB3aGF0ZXZlciBpdCBpcyB1bmRlciBkaWZmZXJlbnRcclxuICAvLyBzdHJ1Y3R1cmVzOiBpZFBhdGllbnQsIGlkTWVkaWNhbEV2ZW50IGV0Y1xyXG4gIEBJbnB1dCgpIHJvd0lkOiBhbnk7XHJcblxyXG4gIC8vIENzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSByb3cgZ3JvdXAgcGFyZW50LlxyXG4gIEBJbnB1dCgpIGdyb3VwQ2xhc3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vIENzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSByb3cgcGFyZW50LlxyXG4gIEBJbnB1dCgpIHJvd0NsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvLyBBIHRlbXBsYXRlIGZvciBob3cgdG8gZGlzcGxheSByb3cgZ3JvdXAgaW5mbyBpZiB1c2luZyB0aGUgZGVmYXVsdCB0ZW1wbGF0ZS4gIGUuZy4gXCJsYXN0TmFtZSwgZmlyc3ROYW1lXCIgZmllbGQgbmFtZXMgZ2V0IHJlcGxhY2VkIHdpdGggdmFsdWVzLlxyXG4gIEBJbnB1dCgpIGdyb3VwRGlzcGxheTogc3RyaW5nO1xyXG5cclxuICAvLyBUT0RPOiBSZWltcGxlbWVudFxyXG4gIEBJbnB1dCgpIGNsb3NlT3RoZXJzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gVGhlIGxpc3Qgb2YgZmllbGRzIHRvIGdyb3VwIGJ5LlxyXG4gIEBJbnB1dCgpIGdyb3VwaW5nRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAvLyBkZWxpbWl0ZXIgZm9yIGdldEdyb3VwRGlzcGxheVxyXG4gIEBJbnB1dCgpIGRlbGltaXRlcjogc3RyaW5nID0gXCIsIFwiO1xyXG5cclxuICAvLyBUT0RPOiBSZWltcGxlbWVudCBpZiB3ZSB3YW50IHVzZXJzIHRvIGJlIGFibGUgdG8gY29udHJvbCBncm91cGluZy5cclxuICBASW5wdXQoKSBncm91cEJ5QWxsb3dlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8gVGhlIHBhZ2Ugc2l6ZSBvZiByb3cgZ3JvdXBzIG9yIHJvd3MgaWYgbm8gZ3JvdXBpbmcuXHJcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlcjtcclxuXHJcbiAgLy8gVGhlIHBhZ2Ugc2l6ZSBvZiByb3dzIGluIGEgc2VsZWN0ZWQgZ3JvdXAuXHJcbiAgQElucHV0KCkgZ3JvdXBQYWdlU2l6ZTogbnVtYmVyID0gNTA7XHJcblxyXG4gIC8vIFRoZSBudW1iZXIgb2YgcGFnZXMgb2Ygcm93cyB0byBjYWNoZSBpbnRlcm5hbGx5IGJlZm9yZSBhbiBleHRlcm5hbCBjYWxsIGlzIG1hZGUuXHJcbiAgQElucHV0KCkgZ3JvdXBDYWNoZU51bVBhZ2VzOiBudW1iZXI7XHJcblxyXG4gIC8vIEEgcmVmZXJlbmNlIHRvIGEgcGFyZW50IGRyb3Bkb3duIGlmIGFwcGxpY2FibGUuXHJcbiAgQElucHV0KCkgZHJvcGRvd246IE5nYkRyb3Bkb3duO1xyXG5cclxuICAvL1doaWNoIGljb24gdG8gdXNlIGZvciB0aGUgYnVzeSBzcGlubmVyXHJcbiAgQElucHV0KCkgYnVzeUljb246IHN0cmluZyA9IFwiaGNpIGZhLWNvcmUgZmEtc3BpblwiO1xyXG5cclxuICBASW5wdXQoKSBzaG93UmVzdWx0c0NvdW50OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIElmIG5vIG9uR3JvdXBDbGljayBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhpcyBpcyB1c2VkLiAgVGhlIG92ZXJyaWRpbmcgZnVuY3Rpb24gc2hvdWxkIHN0aWxsIGNhbGwgdGhpcy5cclxuICBkZWZhdWx0R3JvdXBDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHZvaWQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkgPT4ge1xyXG4gICAgY21wdC5zZXRHcm91cEV4cGFuZGVkKGV2ZW50LCByb3dHcm91cCk7XHJcblxyXG4gICAgdGhpcy5ncm91cENsaWNrLmVtaXQoe1xyXG4gICAgICBldmVudDogZXZlbnQsXHJcbiAgICAgIHJvd0dyb3VwOiByb3dHcm91cFxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCkgb25Hcm91cENsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkgPT4gdm9pZDtcclxuXHJcbiAgLy8gSWYgbm8gb25Sb3dDbGljayBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdGhpcyBpcyB1c2VkLiAgVGhlIG92ZXJyaWRpbmcgZnVuY3Rpb24gc2hvdWxkIHN0aWxsIGNhbGwgdGhpcy5cclxuICBkZWZhdWx0Um93Q2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4gdm9pZCA9IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSb3cgPSByb3c7XHJcblxyXG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICByb3c6IHJvdyxcclxuICAgICAgcm93R3JvdXA6IHJvd0dyb3VwXHJcbiAgICB9KTtcclxuXHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9O1xyXG4gIEBJbnB1dCgpIG9uUm93Q2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwLCByb3c6IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgQElucHV0KCkgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBncm91cFNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBASW5wdXQoKSBvbkdyb3VwQ2xvc2U6IEZ1bmN0aW9uO1xyXG5cclxuICBAT3V0cHV0KCkgZ3JvdXBDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyRmlsdGVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJkZWZhdWx0R3JvdXBUZW1wbGF0ZVwiLCB7cmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZX0pIGRlZmF1bHRHcm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJkZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlXCIsIHtcclxuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxyXG4gICAgc3RhdGljOiB0cnVlXHJcbiAgfSkgZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgc2VsZWN0ZWRSb3c6IGFueTtcclxuICBzZWxlY3RlZFJvd0dyb3VwOiBSb3dHcm91cDtcclxuICBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcclxuICBpbm5lclJvd0dyb3VwQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgLy8gR3JpZCBEVE8gaW5mbyBuZWVkZWQgdG8gYnVpbGQgZXh0ZXJuYWwgZGF0YSByZXF1ZXN0cy5cclxuICBzb3J0czogSGNpU29ydER0b1tdID0gW107XHJcbiAgZmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICBwYWdpbmc6IEhjaVBhZ2luZ0R0byA9IG5ldyBIY2lQYWdpbmdEdG8oMCwgLTEpO1xyXG4gIGdyb3VwaW5nOiBIY2lHcm91cGluZ0R0byA9IG5ldyBIY2lHcm91cGluZ0R0byhbXSk7XHJcblxyXG4gIC8vZ2xvYmFsUm93R3JvdXBNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gIGdyb3VwZWREYXRhU2V0ID0gW107XHJcblxyXG4gIHBhZ2luZ1N1YmplY3Q6IFN1YmplY3Q8SGNpUGFnaW5nRHRvPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpUGFnaW5nRHRvPih0aGlzLnBhZ2luZyk7XHJcblxyXG4gIC8vIEEgZHVtbXkgbnVtYmVyIHRoYXQgaW5jcmVtZW50cyBiYXNlZCBvbiBzZWxlY3Rpb24gY2hhbmdlcy4gIEZvcmNlcyByb3V0ZXJMaW5rQWN0aXZlIHRvIHJlY2hlY2suXHJcbiAgcm93UmVmcmVzaDogbnVtYmVyID0gMDtcclxuXHJcbiAgYnVzeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBsYXN0U2Nyb2xsVG9wOiBudW1iZXIgPSAtMTtcclxuICBsYXN0U2Nyb2xsUG9zaXRpb246IG51bWJlciA9IDE7XHJcbiAgc2V0U2Nyb2xsVG9wOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQgPSB0aGlzO1xyXG5cclxuICBsYXN0RXZlbnQ6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICAgICAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgICAgICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgICAgICAgbmF2aWdhdGlvbkdsb2JhbFNlcnZpY2U6IE5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHJlbmRlcmVyLCByZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2UsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgICBpZiAoIW5hdmlnYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuZXcgTmF2aWdhdGlvblNlcnZpY2UobmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzUm9vdCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2V0Q29uZmlnKHt9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgaWQgZm9yIHRoZSByb3cgZ3JvdXAgYmFzZWQgdXBvbiB0aGUgZ3JvdXAga2V5IG9yIGlmIHVuZGVmaW5lZCwgdGhlIGZpcnN0IHJvdydzIGlkLiAgZS5nLiBcInJvdy1ncm91cC1ib2Itc21pdGhcIlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldFJvd0dyb3VwSWQocm93R3JvdXA6IFJvd0dyb3VwKTogc3RyaW5nIHtcclxuICAgIGlmIChyb3dHcm91cC5yZ0tleSkge1xyXG4gICAgICByZXR1cm4gXCJyb3ctZ3JvdXAtXCIgKyByb3dHcm91cC5yZ0tleTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCByb3dJZDogc3RyaW5nID0gdGhpcy5nZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pO1xyXG4gICAgICByZXR1cm4gcm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJyb3ctZ3JvdXAtXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSByb3cgaWQuICBlLmcuIFwicm93LTFcIi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldFJvd0lkKHJvdzogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnJvd0lkKSB7XHJcbiAgICAgIHJldHVybiBcInJvdy1cIiArIDxzdHJpbmc+PGFueT5yb3dbdGhpcy5yb3dJZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJyb3ctdW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRWaWV3RGF0YSgpOiBSb3dHcm91cFtde1xyXG4gICAgcmV0dXJuIHRoaXMudmlld0RhdGE7XHJcbiAgfVxyXG5cclxuICBnZXRQcmVwYXJlZERhdGEoKTogUm93R3JvdXBbXXtcclxuICAgIHJldHVybiB0aGlzLnByZXBhcmVkRGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGluaXQsIGxpc3RlbiBmb3IgbG9hZGluZyBzdWJqZWN0cyBhbmQgbGlzdGVuIGZvciBwYWdlIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5zdWJzY3JpYmUoKGJ1c3k6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICB0aGlzLmJ1c3kgPSBidXN5O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2luZ1N1YmplY3Quc3Vic2NyaWJlKChwYWdpbmc6IEhjaVBhZ2luZ0R0bykgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2luZyA9IHBhZ2luZztcclxuICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIGlucHV0cyBjaGFuZ2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1NpbXBsZUNoYW5nZXN9IGNoYW5nZXNcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgIGlmIChjaGFuZ2VzW1wiZ3JvdXBpbmdGaWVsZHNcIl0pIHtcclxuICAgICAgbGV0IGNoYW5nZTogU2ltcGxlQ2hhbmdlID0gPFNpbXBsZUNoYW5nZT5jaGFuZ2VzW1wiZ3JvdXBpbmdGaWVsZHNcIl07XHJcbiAgICAgIGlmIChjaGFuZ2UuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoY2hhbmdlLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoW10pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZGF0YSBvbmx5IHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGlzIHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIGNoZWNrSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hZnRlclZpZXdJbml0KSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLmNvbmZpZyk7XHJcbiAgICAgIHRoaXMucG9zdEluaXQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRhdGFTdWJqZWN0KSB7XHJcbiAgICAgICAgLy9NYXkgYXMgd2VsbCBtYWtlIGl0IHNwaW4gd2hpbGUgcHJvY2Vzc2luZywgYXMgd2VsbCBhcyBsb2FkaW5nLiBPdGhlcndpc2UgaXQgbG9va3MgZnJvemVuXHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhU3ViamVjdFxyXG4gICAgICAgICAgLnBpcGUoZGVsYXkoMCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBPYmplY3RbXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG5cclxuICAgICAgICAgICAgLy9Ob3cgZG9uZSBsb2FkaW5nXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBvbiBuZXcgcm93UGFyZW50IGJlaW5nIHNldCwgYWRkIGFueSBjbGFzc2VzIGlmIHJvd0NsYXNzIGlzIGRlZmluZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5TGlzdDxFbGVtZW50UmVmPn0gcm93UGFyZW50c1xyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGRyZW4oXCJyb3dQYXJlbnRcIiwge3JlYWQ6IEVsZW1lbnRSZWZ9KSBzZXQgcm93UGFyZW50cyhyb3dQYXJlbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4pIHtcclxuICAgIGlmIChyb3dQYXJlbnRzICYmIHRoaXMucm93Q2xhc3MpIHtcclxuICAgICAgcm93UGFyZW50cy5mb3JFYWNoKChlOiBFbGVtZW50UmVmKSA9PiB7XHJcbiAgICAgICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gdGhpcy5yb3dDbGFzcy5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgZm9yIChsZXQgY2xhc3NOYW1lIG9mIGNsYXNzZXMpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZS5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucm93UmVmcmVzaCArPSAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9zdEluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIlNlYXJjaExpc3RDb21wb25lbnQucG9zdEluaXQ6IFwiICsgdGhpcy5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZ2V0UGFyZW50KCkpIHtcclxuICAgICAgdGhpcy5jb250cm9sbGVyID0gPFNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50PnRoaXMuZ2V0UGFyZW50KCkuZ2V0Q29tcG9uZW50QnlUeXBlKFwiU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29udHJvbGxlcikge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbXBvbmVudDogdXNpbmcgY29udHJvbGxlclwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLmFkZFNlYXJjaExpc3QodGhpcy50aXRsZSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuZmlsdGVyc1N1YmplY3Quc3Vic2NyaWJlKChmaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldFBhZ2luZygpO1xyXG4gICAgICAgIHRoaXMuYWZ0ZXJGaWx0ZXJFdmVudC5lbWl0KHRoaXMucHJlcGFyZWREYXRhKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc29ydHNTdWJqZWN0LnN1YnNjcmliZSgoc29ydHM6IEhjaVNvcnREdG9bXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBzb3J0cztcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5zdWJzY3JpYmUoKHRpdGxlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJzZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0LnN1YnNjcmliZTogXCIgKyB0aGlzLnRpdGxlICsgXCIsIFwiICsgdGl0bGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aXRsZSAmJiB0aXRsZSAmJiB0aGlzLnRpdGxlICE9PSB0aXRsZSkge1xyXG4gICAgICAgICAgdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZpc2libGUpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiZGlzcGxheVwiLCBcImZsZXhcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd291bGQgcmVzZXQgcGFnaW5nIGFuZCBmaXJlc1xyXG4gICAqL1xyXG4gIHJlc2V0UGFnaW5nKCkge1xyXG4gICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGNvbmZpZyB3aXRoIG9wdGlvbnMgYW5kIHJlLWZldGNoZXMgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb25maWdcclxuICAgKi9cclxuICB1cGRhdGVDb25maWcoY29uZmlnKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInVwZGF0ZUNvbmZpZ1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWcsIGNvbmZpZyk7XHJcblxyXG4gICAgICBpZiAoY29uZmlnLnJvdXRlKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZSA9IGNvbmZpZy5yb3V0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cEJ5QWxsb3dlZEZpZWxkcyA9IGNvbmZpZy5ncm91cEJ5QWxsb3dlZEZpZWxkcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNvcnRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cyA9IGNvbmZpZy5zb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwaW5nRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZ0ZpZWxkcyA9IGNvbmZpZy5ncm91cGluZ0ZpZWxkcztcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhjb25maWcuZ3JvdXBpbmdGaWVsZHMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucGFnZVNpemUpIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gY29uZmlnLnBhZ2VTaXplO1xyXG4gICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2VTaXplKGNvbmZpZy5wYWdlU2l6ZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cERpc3BsYXkpIHtcclxuICAgICAgICB0aGlzLmdyb3VwRGlzcGxheSA9IGNvbmZpZy5ncm91cERpc3BsYXk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kZWxpbWl0ZXIpIHtcclxuICAgICAgICB0aGlzLmRlbGltaXRlciA9IGNvbmZpZy5kZWxpbWl0ZXI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5jbG9zZU90aGVycyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZU90aGVycyA9IGNvbmZpZy5jbG9zZU90aGVycztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwVGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBUZW1wbGF0ZTtcclxuICAgICAgICB0aGlzLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSA9IGNvbmZpZy5ncm91cFRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuaXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtVGVtcGxhdGUgPSBjb25maWcuaXRlbVRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGF0YSkge1xyXG4gICAgICAgIHRoaXMuYm91bmREYXRhID0gY29uZmlnLmRhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGFTdWJqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU3ViamVjdCA9IGNvbmZpZy5kYXRhU3ViamVjdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGFDYWxsKSB7XHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsID0gY29uZmlnLmRhdGFDYWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSBjb25maWcub25Hcm91cENsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuaW5saW5lRXhwYW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmlubGluZUV4cGFuZCA9IGNvbmZpZy5pbmxpbmVFeHBhbmQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cENsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cENsYXNzID0gY29uZmlnLmdyb3VwQ2xhc3M7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5yb3dDbGFzcykge1xyXG4gICAgICAgIHRoaXMucm93Q2xhc3MgPSBjb25maWcucm93Q2xhc3M7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5yb3dJZCkge1xyXG4gICAgICAgIHRoaXMucm93SWQgPSBjb25maWcucm93SWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vbkdyb3VwQ2xpY2spIHtcclxuICAgICAgICB0aGlzLm9uR3JvdXBDbGljayA9IGNvbmZpZy5vbkdyb3VwQ2xpY2s7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vblJvd0NsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vblJvd0NsaWNrID0gY29uZmlnLm9uUm93Q2xpY2s7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0cyA9IGNvbmZpZy5sb2FkaW5nU3ViamVjdHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFBhZ2VTaXplKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFBhZ2VTaXplID0gY29uZmlnLmdyb3VwUGFnZVNpemU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICBpZiAoY29uZmlnLmdyb3VwQ2FjaGVOdW1QYWdlcyA+PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyA9IGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcImdyb3VwQ2FjaGVOdW1QYWdlcyBtdXN0IGJlIDIgb3IgbW9yZS5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsb3NlKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xvc2UgPSBjb25maWcub25Hcm91cENsb3NlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYnVzeUljb24pIHtcclxuICAgICAgICB0aGlzLmJ1c3lJY29uID0gY29uZmlnLmJ1c3lJY29uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29uZmlnLnNob3dSZXN1bHRzQ291bnQpIHtcclxuICAgICAgICB0aGlzLnNob3dSZXN1bHRzQ291bnQgPSBjb25maWcuc2hvd1Jlc3VsdHNDb3VudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5vbkdyb3VwQ2xpY2spIHtcclxuICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSB0aGlzLmRlZmF1bHRHcm91cENsaWNrO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLm9uUm93Q2xpY2spIHtcclxuICAgICAgdGhpcy5vblJvd0NsaWNrID0gdGhpcy5kZWZhdWx0Um93Q2xpY2s7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJTZWFyY2hMaXN0Q29tcG9uZW50OiBBbiBpdGVtVGVtcGxhdGUgbXVzdCBiZSBwcm92aWRlZCFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmdyb3VwVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5ncm91cFRlbXBsYXRlID0gdGhpcy5kZWZhdWx0R3JvdXBUZW1wbGF0ZTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0cyA9IFtuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKV07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHN1cGVyLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xyXG5cclxuICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIHRoZSBkYXRhIGlmIGFuIGFycmF5LCBjYWxscyB0aGUgZGF0YSBpZiBleHRlcm5hbCBjYWxsLlxyXG4gICAqL1xyXG4gIHNldERhdGEoZGF0YT86IE9iamVjdFtdKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInNldERhdGFcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5ib3VuZERhdGEgPSBkYXRhO1xyXG4gICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsKSB7XHJcbiAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8odGhpcy5maWx0ZXJzLCB0aGlzLnNvcnRzLCB0aGlzLnBhZ2luZywgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwKSkpXHJcbiAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKGV4dGVybmFsRGF0YSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5nZW5lcmF0ZURhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBhcnJheSB0aGF0IHRoZSBpbnRlcmZhY2UgdXNlcyB0byByZW5kZXIgKHJlZ2FyZGxlc3Mgb2Ygc291cmNlKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SGNpRGF0YUR0b30gZXh0ZXJuYWxEYXRhXHJcbiAgICovXHJcbiAgZ2VuZXJhdGVEYXRhKGV4dGVybmFsRGF0YT86IEhjaURhdGFEdG8pOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiZ2VuZXJhdGVEYXRhXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKGV4dGVybmFsRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4dGVybmFsRGF0YSkge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YSA9IGV4dGVybmFsRGF0YS5kYXRhO1xyXG4gICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXREYXRhU2l6ZShleHRlcm5hbERhdGEuZ3JpZER0by5wYWdpbmcuZGF0YVNpemUpO1xyXG5cclxuICAgICAgLy8gQ3JlYXRlIHJvdyBncm91cHMuXHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBbXTtcclxuICAgICAgbGV0IHJvd0dyb3VwOiBSb3dHcm91cDtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib3VuZERhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICByb3dHcm91cCA9IG5ldyBSb3dHcm91cCh1bmRlZmluZWQsIHRoaXMuYm91bmREYXRhW2ldLCAoZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHMgJiYgZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHMgIT09IG51bGwpID8gZXh0ZXJuYWxEYXRhLmRhdGFDb3VudHNbaV0gOiAwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGZvciAobGV0IGdyb3VwaW5nRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgICAgcm93R3JvdXBbZ3JvdXBpbmdGaWVsZF0gPSB0aGlzLmJvdW5kRGF0YVtpXVtncm91cGluZ0ZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmlld0RhdGEucHVzaChyb3dHcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhbmQgcG9wdWxhdGUgcm93IGdyb3Vwcy5cclxuICAgICAgdGhpcy5wb3B1bGF0ZUZyb21Cb3VuZERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdChPYmplY3QuYXNzaWduKHt0eXBlOiBcIm5vbmVcIn0sIHRoaXMubGFzdEV2ZW50LCB7XHJcbiAgICAgIHBhZ2luZzogdGhpcy5wYWdpbmcsXHJcbiAgICAgIG5WaWV3RGF0YTogdGhpcy52aWV3RGF0YS5sZW5ndGhcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBpZiB0aGUgZGF0YSBpcyBhbiBhcnJheSAobm90IGV4dGVybmFsKS5cclxuICAgKi9cclxuICBwb3B1bGF0ZUZyb21Cb3VuZERhdGEoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInBvcHVsYXRlRnJvbUJvdW5kRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJvdW5kRGF0YSkge1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5ib3VuZERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJCb3VuZCBEYXRhIGxlbmd0aCBmb3VuZCBhcyAwXCIpO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXROdW1QYWdlcygxKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9sZXQgcHJlcGFyZWREYXRhID0gW107XHJcbiAgICB0aGlzLnByZXBhcmVkRGF0YSA9IFtdO1xyXG4gICAgdGhpcy5ncm91cGVkRGF0YVNldCA9IFtdO1xyXG5cclxuICAgIGxldCByb3dHcm91cE1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcblxyXG4gICAgbGV0IGRvUm93R3JvdXBpbmc6IGJvb2xlYW4gPSB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwO1xyXG4gICAgZm9yIChsZXQgcm93IG9mIHRoaXMuYm91bmREYXRhKSB7XHJcbiAgICAgIGxldCBncm91cEtleTogc3RyaW5nO1xyXG4gICAgICBpZiAoZG9Sb3dHcm91cGluZykge1xyXG4gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICBncm91cEtleSA9IChncm91cEtleSkgPyBncm91cEtleSArIFwiOlwiICsgcm93W2ZpZWxkXSA6IHJvd1tmaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJzICYmIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbGV0IGluY2x1ZGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5maWx0ZXJzKSB7XHJcbiAgICAgICAgICBpZiAoIWZpbHRlci52YWxpZCkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb250cm9sbGVyLmFkdmFuY2VkU2VhcmNoICYmIHRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaC5sZW5ndGggPiAwICYmICF0aGlzLmNvbnRyb2xsZXIuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlcikge1xyXG4gICAgICAgICAgLy8gIEFkdmFuY2VkIHNlYXJjaCBkb2VzIG5vdCBhdXRvIGZpbHRlciBieSBkZWZhdWx0XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGZpbHRlclZhbHVlcyA9IGZpbHRlci5nZXRWYWx1ZSgpLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgbGV0IGZpbHRlckZpZWxkcyA9IGZpbHRlci5nZXRGaWVsZCgpLnNwbGl0KFwiIG9yIFwiKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBpbm5lckluY2x1ZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgZmlsdGVyRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHJvd1tmaWVsZF0gJiYgdHlwZW9mIHJvd1tmaWVsZF0gPT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgZmlsdGVyVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdID09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJJbmNsdWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiByb3dbZmllbGRdIGluc3RhbmNlb2YgRGF0ZSB8fCBmaWx0ZXIuZ2V0RGF0YVR5cGUoKSA9PSBcImRhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgZmlsdGVyVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKG5ldyBEYXRlKHJvd1tmaWVsZF0pKS5nZXRUaW1lKCkgPT0gKG5ldyBEYXRlKHZhbHVlKSkuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmIHR5cGVvZiByb3dbZmllbGRdID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0IGlzIG11bHRpcGxlIHNlYXJjaCBzdHJpbmdzXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiBmaWx0ZXJWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvd1tmaWVsZF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKHZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaW5uZXJJbmNsdWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoaW5uZXJJbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaW5uZXJJbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgaW5jbHVkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmKCFpbmNsdWRlKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpbmNsdWRlKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkb1Jvd0dyb3VwaW5nKSB7XHJcbiAgICAgICAgaWYgKHJvd0dyb3VwTWFwLmdldChncm91cEtleSkgPj0gMCkge1xyXG4gICAgICAgICAgdGhpcy5wcmVwYXJlZERhdGFbcm93R3JvdXBNYXAuZ2V0KGdyb3VwS2V5KV0ucmdSb3dzLnB1c2gocm93KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcm93R3JvdXBNYXAuc2V0KGdyb3VwS2V5LCB0aGlzLnByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgIGxldCByb3dHcm91cDogUm93R3JvdXAgPSBuZXcgUm93R3JvdXAoZ3JvdXBLZXksIHJvdyk7XHJcbiAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgICByb3dHcm91cFtmaWVsZF0gPSByb3dbZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucHJlcGFyZWREYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnByZXBhcmVkRGF0YS5wdXNoKG5ldyBSb3dHcm91cChncm91cEtleSwgcm93KSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vdGhpcy5nbG9iYWxSb3dHcm91cE1hcCA9IHJvd0dyb3VwTWFwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcmVwYXJlZERhdGEuc29ydCgoYTogUm93R3JvdXAsIGI6IFJvd0dyb3VwKSA9PiB7XHJcbiAgICAgICAgbGV0IHY6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNTb3J0RmllbGRHcm91cEZpZWxkKHNvcnQuZ2V0RmllbGQoKSkpIHtcclxuICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHYgIT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JvdXBpbmcuZ2V0RmllbGRzKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChzb3J0LmdldEFzYygpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPCBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldID4gYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldID4gYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA8IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHYgIT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5ncm91cGluZy5nZXRGaWVsZHMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcm93R3JvdXAgb2YgdGhpcy5wcmVwYXJlZERhdGEpIHtcclxuICAgICAgICAgIHJvd0dyb3VwLnJnUm93cy5zb3J0KChhOiBPYmplY3QsIGI6IE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHRoaXMucHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgdGhpcy5ncm91cGVkRGF0YVNldCA9IHRoaXMucHJlcGFyZWREYXRhO1xyXG5cclxuICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpID4gMCkge1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnBhZ2luZy5nZXRQYWdlKCkgKiB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpOyBpIDwgTWF0aC5taW4odGhpcy5wcmVwYXJlZERhdGEubGVuZ3RoLCAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpICsgMSkgKiB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy52aWV3RGF0YS5wdXNoKHRoaXMucHJlcGFyZWREYXRhW2ldKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUodGhpcy5wcmVwYXJlZERhdGEubGVuZ3RoKTtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IHRoaXMucHJlcGFyZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IHJvd0dyb3VwIG9mIHRoaXMudmlld0RhdGEpIHtcclxuICAgICAgcm93R3JvdXAucmdDb3VudCA9IHJvd0dyb3VwLnJnUm93cy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHNvcnQgZmllbGQgaXMgYSBncm91cGluZyBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKi9cclxuICBpc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydEZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5ncm91cGluZyB8fCAhdGhpcy5ncm91cGluZy5maWVsZHMgfHwgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGlmIChzb3J0RmllbGQgPT09IGdyb3VwRmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0IGEgZ3JvdXAgb2YgZGF0YS4gIENhbGwgdGhlIGZpcnN0IHBhZ2Ugb2YgZGF0YSB1cG9uIGV4cGFuZGluZy4gIElmIGFscmVhZHkgZXhwYW5kZWQsIGNsb3NlIGFuZCBnbyBiYWNrIHRvIHRoZVxyXG4gICAqIGxpc3Qgb2YgZ3JvdXBzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKi9cclxuICBzZXRHcm91cEV4cGFuZGVkKGV2ZW50OiBNb3VzZUV2ZW50LCByb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwic2V0R3JvdXBFeHBhbmRlZDogXCIgKyByb3dHcm91cC5yZ0V4cGFuZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsICYmICFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgcm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgICAgcm93R3JvdXAucmdQYWdlTWF4ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0bygwLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwLnJnUm93cyA9IGV4dGVybmFsRGF0YS5kYXRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHJvd0dyb3VwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1heCA9IDA7XHJcbiAgICAgIGlmICghdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSByb3dHcm91cDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50OiBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+KDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuZ3JvdXAtcGFyZW50XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgLy9ncm91cFNlbGVjdGVkUGFyZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9mKG51bGwpLnBpcGUoZGVsYXkoMjUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXJvd0dyb3VwLnJnRXhwYW5kZWQgJiYgdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pig8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgIC8vZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidGhpcy5zZWxlY3RlZFJvd0dyb3VwXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcm93R3JvdXAucmdFeHBhbmRlZCA9ICFyb3dHcm91cC5yZ0V4cGFuZGVkO1xyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBzY3JvbGwgbGlzdGVuZXIgdG8gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICBhZGRHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gLTE7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdDb3VudCAhPT0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNzZWxlY3RlZC1ncm91cC1jb250YWluZXJcIik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25Hcm91cFNjcm9sbC5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSB0aGUgc2Nyb2xsIGxpc3RlbmVyIGZyb20gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICByZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uR3JvdXBTY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gZm9yIHRoZSBzY3JvbGwgZXZlbnQsIGRldGVybWluZSBpZiB0aGUgc2Nyb2xsIGhpdCB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcclxuICAgKi9cclxuICBvbkdyb3VwU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgbGV0IG5ld1Njcm9sbFRvcDogbnVtYmVyID0gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wKTtcclxuICAgICAgbGV0IHNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gICAgICBpZiAobmV3U2Nyb2xsVG9wID09PSAwICYmIHNjcm9sbFBvc2l0aW9uICE9PSAwKSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAwO1xyXG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uICE9PSAyICYmIE1hdGguYWJzKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSAobmV3U2Nyb2xsVG9wICsgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm9mZnNldEhlaWdodCkpIDwgMykge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiAhPT0gc2Nyb2xsUG9zaXRpb24gJiYgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPT09IDEpIHtcclxuICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBQcmV2aW91c1BhZ2UoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uID09PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwTmV4dFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcDtcclxuICAgICAgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIHRvcCwgbG9hZCB0aGUgcHJldmlvdXMgcGFnZSBvZiBncm91cCBkYXRhLlxyXG4gICAqL1xyXG4gIGdyb3VwUHJldmlvdXNQYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPT09IDApIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiRmlyc3QgcGFnZSBhbHJlYWR5IGxvYWRlZC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuXHJcbiAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuc2VsZWN0ZWRSb3dHcm91cFtncm91cEZpZWxkXSwgdW5kZWZpbmVkLCBcIkVcIiwgdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8odGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtIDEsIHRoaXMuZ3JvdXBQYWdlU2l6ZSksIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgZmFsc2UpKSlcclxuICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9mKHVuZGVmaW5lZCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwic2Nyb2xsVG9wXCIsIFwiMVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5hZGRHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzID0gZXh0ZXJuYWxEYXRhLmRhdGEuY29uY2F0KHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtPSAxO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiA+PSB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLnNwbGljZSh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAqIHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLT0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIGJvdHRvbSwgbG9hZCB0aGUgbmV4dCBwYWdlIG9mIGdyb3VwIGRhdGEuXHJcbiAgICovXHJcbiAgZ3JvdXBOZXh0UGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICgodGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCArIDEpICogdGhpcy5ncm91cFBhZ2VTaXplID49IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ0NvdW50KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkFsbCByb3dzIGFscmVhZHkgbG9hZGVkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLnNlbGVjdGVkUm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKyAxLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUoZGVsYXkoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MuY29uY2F0KGV4dGVybmFsRGF0YS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKz0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPj0gdGhpcy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5zcGxpY2UoMCwgdGhpcy5ncm91cFBhZ2VTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGZpcnN0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZUZpcnN0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VQcmV2aW91cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgLSAxKTtcclxuICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBuZXh0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZU5leHQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpIDwgdGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpIHtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldFBhZ2UoKSArIDEpO1xyXG4gICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGxhc3QgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlTGFzdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpO1xyXG4gICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWZ0ZXIgcGFnZSB0dXJucywgY2hlY2sgaWYgdGhlIHBhZ2UgaGFzIHRoZSByb3cgdGhhdCBuZWVkIHRvIGJlIGhpZ2hsaWdodGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZVJvd0lkKCk6IHZvaWQge1xyXG4gICAgLy9pZiBhIHJvdyBpcyBzZWxlY3RlZCwgYW5kIHJvd0lkIGZpZWxkIGlzIHNwZWNpZmllZCAodXN1YWxseSBjb25maWd1cmVkIGJ5IGNvbmZpZylcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93ICYmIHRoaXMucm93SWQpIHtcclxuICAgICAgbGV0IGlkID0gdGhpcy5zZWxlY3RlZFJvd1t0aGlzLnJvd0lkXTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQoaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25jYXQgZ3JvdXAgYnkgZmllbGRzIHRvIGNvbW1hIGRlbGltaXRlZCB3b3Jkc1xyXG4gICAqIG9yIGRlbGltaXRlciBkZWxpbWl0ZWQgd29yZHMgaWYgdGhlIGRlbGltaW5hdG9yIGhhcyBpdHMgZGVmYXVsdCB2YWx1ZSBzZXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Jvd0dyb3VwfSByb3dHcm91cFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwOiBSb3dHcm91cCk6IHN0cmluZyB7XHJcbiAgICBsZXQgZGlzcGxheTogc3RyaW5nO1xyXG5cclxuICAgIGlmICh0aGlzLmdyb3VwRGlzcGxheSkge1xyXG4gICAgICBkaXNwbGF5ID0gdGhpcy5ncm91cERpc3BsYXk7XHJcbiAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgZGlzcGxheSA9IGRpc3BsYXkucmVwbGFjZShmaWVsZCwgcm93R3JvdXBbZmllbGRdKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICBpZiAocm93R3JvdXBbZmllbGRdICE9PSBudWxsICYmIHJvd0dyb3VwW2ZpZWxkXSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgZGlzcGxheSA9IChkaXNwbGF5KSA/IGRpc3BsYXkgKyB0aGlzLmRlbGltaXRlciArIHJvd0dyb3VwW2ZpZWxkXSA6IHJvd0dyb3VwW2ZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGlzcGxheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudFJlZn0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoXCJzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyXCIsIHtcclxuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXHJcbiAgICBzdGF0aWM6IGZhbHNlXHJcbiAgfSkgc2V0IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJTZXR0ZXIoc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogRWxlbWVudFJlZikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciAmJiB0aGlzLnNldFNjcm9sbFRvcCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID0gKDxIVE1MRWxlbWVudD50aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpKS5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIHRoaXMuc2V0U2Nyb2xsVG9wID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICBsZXQgZ3JvdXBTZWxlY3RlZFBhcmVudDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLmNsb3Nlc3QoXCIuZ3JvdXAtc2VsZWN0ZWQtcGFyZW50XCIpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiZGlzcGxheVwiLCBcImZsZXhcIik7XHJcblxyXG4gICAgICBvZihudWxsKS5waXBlKGRlbGF5KDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI2lubmVyUm93R3JvdXBDb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwiaGVpZ2h0XCIsIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pbm5lclJvd0dyb3VwQ29udGFpbmVyLCBcIm1pbi1oZWlnaHRcIiwgKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyAzMCkgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsUm93cygpOiB2b2lkIHtcclxuICAgIGxldCBlczogSFRNTEVsZW1lbnRbXSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIucm93LXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIGdyb3VwIGNsaWNrIGZ1bmN0aW9uIHRvIGNvbnRyb2wgZGVzZWxlY3Rpb24uXHJcbiAgICovXHJcbiAgZGVzZWxlY3RBbGxHcm91cHMoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSWRJbkZpbHRlcmVkUmVzdWx0cyhpZDpzdHJpbmcpe1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctXCIgKyBpZCk7XHJcbiAgICByZXR1cm4gZT90cnVlOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBzZWxlY3QgYSByb3cuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRcclxuICAgKi9cclxuICBhY3RpdmF0ZVJvd0J5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVHcm91cEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctZ3JvdXAtXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGV0aGVyIGEgcGFydGljdWxhciBncm91cCBpcyBleHBhbmRlZCBvciBjb2xsYXBzZWRcclxuICAgKiBAcGFyYW0gcm93R3JvdXBcclxuICAgKi9cclxuICBnZXRHcm91cEV4cGFuZGVkSW5kaWNhdG9yKHJvd0dyb3VwOiBSb3dHcm91cCkge1xyXG4gICAgaWYgKHJvd0dyb3VwLnJnRXhwYW5kZWQgPT09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIFwibWludXNcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcInBsdXNcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vVE9EbyA6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciB1c2VzIGEgY3VzdG9tIGdyb3VwVGVtcGxhdGVcclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2UgU2VhcmNoTGlzdENvbXBvbmVudCB0byBuYXZpZ2F0ZSB0byBhIHBhZ2UgYW5kIGhpZ2hsaWdodCB0aGUgZ2l2ZW4gZ3JvdXAgaXRlbSwgb3JcclxuICAgKiB0aGUgcm93IChpbi1jYXNlIG9mIG5vbi1ncm91cGVkIGxpc3QpXHJcbiAgICogVGhpc1xyXG4gICAqIEBwYXJhbSBncm91cElkIDogVGhpcyBzaG91bGQgY29udGFpbiBhIHN0cmluZyB0byB1bmlxdWVseSBpZGVudGlmeSBhIHBhcnRpY3VsYXIgZ3JvdXAtZGlzcGxheVxyXG4gICAqIEBwYXJhbSByb3dJZCA6IFRoaXMgaXMgdGhlIGFjdHVhbCByb3dJZCBmb3IgdGhlIHJvdyB0byBiZSBzZWxlY3RlZC5cclxuICAgKi9cclxuICBuYXZpZ2F0ZVRvUGFnZUNvbnRhaW5pbmdFbGVtZW50KGdyb3VwSWQ6IHN0cmluZywgcm93SWQ6IHN0cmluZykge1xyXG5cclxuICAgIC8vSW50cm9kdWNpbmcgdGhlIGFkZGl0aW9uYWwgY2hlY2sgYmVsb3cgdG8gYWRkcmVzcyBDQ1JVSS0xMTYzLlxyXG4gICAgaWYgKCF0aGlzLmJvdW5kRGF0YSB8fCB0aGlzLmJvdW5kRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgZ3JvdXBlZFxyXG4gICAgbGV0IHJvd0dyb3VwZWQ6IGJvb2xlYW4gPSB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwO1xyXG5cclxuICAgIGlmIChyb3dHcm91cGVkKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQuZm9yRWFjaCgocm93R3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGdyb3VwRGlzcGxheSA9IHRoaXMuZ2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKTtcclxuICAgICAgICBpZiAoZ3JvdXBEaXNwbGF5LmluY2x1ZGVzKGdyb3VwSWQpKSB7XHJcbiAgICAgICAgICAvL1NldCB0aGUgcGFnZSB0byB0aGUgaW5kZXhcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIC8vdGhpcy5kZWZhdWx0R3JvdXBDbGljayhudWxsLCB0aGlzLCByb3dHcm91cCk7XHJcbiAgICAgICAgICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+PHVua25vd24+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSb3dHcm91cElkKHJvd0dyb3VwKSk7XHJcbiAgICAgICAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RBbGxSb3dzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5nZXRSb3dJZChyb3cpID09PSByb3dJZCkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgICAgICAgbGV0IHBhZ2UgPSBNYXRoLmZsb29yKGluZGV4IC8gdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXROdW1QYWdlcygpIC0gMSA+PSBwYWdlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZShwYWdlKTtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UmVzdWx0TWVzc2FnZShkYXRhOiBPYmplY3RbXSkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1Jlc3VsdHNDb3VudCAmJiBkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBkYXRhLmxlbmd0aCArIFwiIHJlc3VsdChzKVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gXCJcIjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|