@bizdoc/core 1.14.0-next.10 → 1.14.0-next.11
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/esm2020/lib/core/controls/combination-picker-body.mjs +2 -2
- package/esm2020/lib/core/slots/slots.component.mjs +11 -8
- package/esm2020/lib/home/home.desktop.component.mjs +7 -13
- package/fesm2015/bizdoc-core.mjs +43 -44
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +17 -20
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/core/slots/slots.component.d.ts +1 -1
- package/lib/home/home.desktop.component.d.ts +3 -3
- package/package.json +1 -1
@@ -171,7 +171,7 @@ export class SlotsComponent {
|
|
171
171
|
if (path === pane.path) {
|
172
172
|
if (queryString === pane.queryString) {
|
173
173
|
if ((policy & OpenPolicy.Toggle) == OpenPolicy.Toggle)
|
174
|
-
this.removeAt(i);
|
174
|
+
await this.removeAt(i);
|
175
175
|
else {
|
176
176
|
state && pane._data$.next(state);
|
177
177
|
this._cd.detectChanges();
|
@@ -756,7 +756,7 @@ export class SlotsComponent {
|
|
756
756
|
* @param e
|
757
757
|
* @param pane
|
758
758
|
*/
|
759
|
-
_action(e, pane) {
|
759
|
+
async _action(e, pane) {
|
760
760
|
switch (e) {
|
761
761
|
case 'focus':
|
762
762
|
{
|
@@ -777,7 +777,9 @@ export class SlotsComponent {
|
|
777
777
|
else {
|
778
778
|
const index = this.panes.indexOf(pane);
|
779
779
|
this.collapse();
|
780
|
-
this.removeAt(index);
|
780
|
+
await this.removeAt(index);
|
781
|
+
!this.panes.length &&
|
782
|
+
this._router.navigate(DEFAULT_ROUTE);
|
781
783
|
}
|
782
784
|
break;
|
783
785
|
case 'expand':
|
@@ -808,7 +810,7 @@ export class SlotsComponent {
|
|
808
810
|
if (this.panes.length && !this.panes[this.panes.length - 1].stretch) {
|
809
811
|
const el = this._panesContainerRef.element.nativeElement, child = el.lastElementChild;
|
810
812
|
child.style.minWidth =
|
811
|
-
(el.parentElement.parentElement.clientWidth - child.offsetLeft - 2) + 'px';
|
813
|
+
(el.parentElement.parentElement.clientWidth - el.parentElement.offsetLeft - child.offsetLeft - 2) + 'px';
|
812
814
|
}
|
813
815
|
}
|
814
816
|
_resize() {
|
@@ -900,7 +902,8 @@ export class SlotsComponent {
|
|
900
902
|
_discardPane(pane) {
|
901
903
|
this.panes.concat(this.tabs).
|
902
904
|
filter(s => s.decendentOf(pane)).
|
903
|
-
reverse().
|
905
|
+
reverse().
|
906
|
+
forEach(s => this._discardPane(s));
|
904
907
|
this._destroyPane(pane);
|
905
908
|
const index = this.panes.indexOf(pane);
|
906
909
|
this.panes.splice(index, 1);
|
@@ -1027,7 +1030,7 @@ export class SlotsComponent {
|
|
1027
1030
|
}
|
1028
1031
|
}
|
1029
1032
|
SlotsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SlotsComponent, deps: [{ token: PANES_DATA }, { token: i1.SessionService }, { token: i0.ChangeDetectorRef }, { token: i2.PanesRouter }, { token: i3.WindowTitleService }, { token: i4.GuideService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
1030
|
-
SlotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SlotsComponent, selector: "bizdoc-panes", host: { listeners: { "document:keydown.escape": "collapse()", "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "_panesContainerRef", first: true, predicate: ["panning"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_tabsElement", first: true, predicate: ["tabing"], descendants: true }, { propertyName: "_scrollable", first: true, predicate: CdkScrollable, descendants: true, static: true }], ngImport: i0, template: "<div class=\"panes\">\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #panning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"navigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onPaneResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"backdrop\" *ngIf=\"dialog\" (click)=\"closeTab(selectedTabIndex)\"></div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <!--*ngIf=\"selectedTabIndex <=< -1 && tabs[selectedTabIndex].expandable\"-->\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let t of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"t.badge\" [matBadgeHidden]=\"!t.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{t.icon}}</mat-icon> \r\n {{t.title}}\r\n <mat-icon *ngIf=\"t.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid #00000014;height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes .panes-container .pane-content .pane{flex-grow:1}.panes .panes-container .pane-separator{width:8px}.pane-separator,.tabs-separator{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator{width:12px}::ng-deep [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs .tabs-title{align-items:center}.tabs .tabs-title h2{font-size:x-large;margin:9px;font-weight:100}.tabs .tabs-title:hover{opacity:1}.tabs .mat-tab-link .tool{opacity:0}.tabs .mat-tab-link:hover .tool{opacity:1}.tabs .tab{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}\n"], components: [{ type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.QuickToolsComponent, selector: "bizdoc-quicktools" }, { type: i8.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color"], exportAs: ["matTabNavBar", "matTabNav"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { type: i13.NgxComponentOutlet, selector: "ngx-component-outlet", inputs: ["type", "injector", "ngxComponentOutletContent"], outputs: ["create"] }, { type: i8.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matTabLink"] }, { type: i14.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }], pipes: { "translate": i15.TranslatePipe }, animations: [panesAnimation,
|
1033
|
+
SlotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SlotsComponent, selector: "bizdoc-panes-outlet", host: { listeners: { "document:keydown.escape": "collapse()", "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "_panesContainerRef", first: true, predicate: ["panning"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_tabsElement", first: true, predicate: ["tabing"], descendants: true }, { propertyName: "_scrollable", first: true, predicate: CdkScrollable, descendants: true, static: true }], ngImport: i0, template: "<div class=\"panes\">\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #panning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"navigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onPaneResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"backdrop\" *ngIf=\"dialog\" (click)=\"closeTab(selectedTabIndex)\"></div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <!--*ngIf=\"selectedTabIndex <=< -1 && tabs[selectedTabIndex].expandable\"-->\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let t of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"t.badge\" [matBadgeHidden]=\"!t.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{t.icon}}</mat-icon> \r\n {{t.title}}\r\n <mat-icon *ngIf=\"t.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid #00000014;height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes .panes-container .pane-content .pane{flex-grow:1}.panes .panes-container .pane-separator{width:8px}.pane-separator,.tabs-separator{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator{width:12px}::ng-deep [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs .tabs-title{align-items:center}.tabs .tabs-title h2{font-size:x-large;margin:9px;font-weight:100}.tabs .tabs-title:hover{opacity:1}.tabs .mat-tab-link .tool{opacity:0}.tabs .mat-tab-link:hover .tool{opacity:1}.tabs .tab{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}\n"], components: [{ type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.QuickToolsComponent, selector: "bizdoc-quicktools" }, { type: i8.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color"], exportAs: ["matTabNavBar", "matTabNav"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { type: i13.NgxComponentOutlet, selector: "ngx-component-outlet", inputs: ["type", "injector", "ngxComponentOutletContent"], outputs: ["create"] }, { type: i8.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matTabLink"] }, { type: i14.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }], pipes: { "translate": i15.TranslatePipe }, animations: [panesAnimation,
|
1031
1034
|
panesTitleAnimation,
|
1032
1035
|
paneAnimation,
|
1033
1036
|
paramAnimation,
|
@@ -1037,7 +1040,7 @@ SlotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
|
|
1037
1040
|
] });
|
1038
1041
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SlotsComponent, decorators: [{
|
1039
1042
|
type: Component,
|
1040
|
-
args: [{ selector: 'bizdoc-panes', animations: [panesAnimation,
|
1043
|
+
args: [{ selector: 'bizdoc-panes-outlet', animations: [panesAnimation,
|
1041
1044
|
panesTitleAnimation,
|
1042
1045
|
paneAnimation,
|
1043
1046
|
paramAnimation,
|
@@ -1084,4 +1087,4 @@ function prepareRoutes(routes, treePath) {
|
|
1084
1087
|
}
|
1085
1088
|
return routes;
|
1086
1089
|
}
|
1087
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3Nsb3RzL3Nsb3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9zbG90cy9zbG90cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFxQixTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBR3pKLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQWUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUd6TyxPQUFPLEVBQUUsYUFBYSxFQUFpQixNQUFNLHNCQUFzQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSixPQUFPLEVBQWdELGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7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Y3RvciwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJpcHBsZUNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUvcmlwcGxlJztcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzRGF0ZSwgaXNQcm9taXNlLCBpc1N0cmluZyB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFBBTkVTX0RBVEEsIFBhbmVSZWYsIFBhbmVPcHRpb25zLCBRdWVyeVBhcmFtTmF2aWdhdGlvbiwgUGFyYW1OYXZpZ2F0aW9uLCBOYXZpZ2F0aW9uU3RhcnQsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25TZWxlY3RlZCwgUEFUSF9DSEFSLCBRVUVSWV9DSEFSLCBBUkdfQ0hBUiwgUEFORV9DSEFSLCBDb2xsYXBzZU5hdmlnYXRpb24sIEJhY2tOYXZpZ2F0aW9uIH0gZnJvbSAnLi9wYW5lLXJlZic7XHJcbmltcG9ydCB7IFBhbmVzUm91dGVyIH0gZnJvbSAnLi9yb3V0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSwgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgV2luZG93VGl0bGVTZXJ2aWNlIH0gZnJvbSAnLi4vd2luZG93LXRpdGxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwYW5lc0FuaW1hdGlvbiwgcGFuZUFuaW1hdGlvbiwgcGFuZXNUaXRsZUFuaW1hdGlvbiwgcGFyYW1BbmltYXRpb24sIHF1ZXJ5QW5pbWF0aW9uLCB0YWJBbmltYXRpb24sIHRhYnNBbmltYXRpb24gfSBmcm9tICcuLi9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgUGFuZVJlc29sdmUsIFBhbmVSb3V0ZSwgUGFyYW1NYXAsIENhbkRpc21pc3MsIERFRkFVTFRfUE9MSUNZLCBPcGVuUG9saWN5IH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IEd1aWRlU2VydmljZSB9IGZyb20gJy4uL2d1aWRlL2d1aWRlLnNlcnZpY2UnO1xyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMobmFtZT86IHN0cmluZyk7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBERUZBVUxUX1JPVVRFID0gWydkYXNoYm9hcmQnXTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtcGFuZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbG90cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2xvdHMuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbcGFuZXNBbmltYXRpb24sXHJcbiAgICBwYW5lc1RpdGxlQW5pbWF0aW9uLFxyXG4gICAgcGFuZUFuaW1hdGlvbixcclxuICAgIHBhcmFtQW5pbWF0aW9uLFxyXG4gICAgcXVlcnlBbmltYXRpb24sXHJcbiAgICB0YWJzQW5pbWF0aW9uLFxyXG4gICAgdGFiQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xvdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgncGFubmluZycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIF9wYW5lc0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJpbmcnKSBfdGFic0VsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChDZGtTY3JvbGxhYmxlLCB7IHN0YXRpYzogdHJ1ZSB9KSBfc2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZTtcclxuICB0aXRsZUFuaW1hdGlvbiA9IDA7XHJcbiAgZ3JvdXA6IHN0cmluZztcclxuICBzd2FwPzogbnVtYmVyO1xyXG4gIHN3YXBUYWI/OiBudW1iZXI7XHJcbiAgcHJldkdyb3VwPzogc3RyaW5nO1xyXG5cclxuICByZWFkb25seSBwYW5lczogUGFuZVJlZjxhbnk+W10gPSBbXTtcclxuICByZWFkb25seSB0YWJzOiBQYW5lUmVmPGFueT5bXSA9IFtdO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkVGFiSW5kZXggPSAtMTtcclxuICBkaWFsb2cgPSBmYWxzZTtcclxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkVGFiSW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUYWJJbmRleDtcclxuICB9XHJcbiAgcHVibGljIHNldCBzZWxlY3RlZFRhYkluZGV4KHZhbHVlKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID0gdmFsdWU7XHJcbiAgICB0aGlzLmRpYWxvZyA9IHRoaXMuX3NlbGVjdGVkVGFiSW5kZXggPiAtMSAmJiB0aGlzLnRhYnMuYXQodGhpcy5fc2VsZWN0ZWRUYWJJbmRleCkuZGlhbG9nO1xyXG4gICAgdGhpcy5fc2V0VGFiQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NldFRhYkFuaW1hdGlvbigpIHtcclxuICAgIHRoaXMudGFic0FuaW1hdGlvbiA9IHtcclxuICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCxcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgc3RhcnRXaWR0aDogdGhpcy5fdGFic0VsZW1lbnQgPyB0aGlzLl90YWJzRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIDogMFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuICBzZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgbmV4dDogYm9vbGVhbjtcclxuICBwcmV2OiBib29sZWFuO1xyXG4gIGRyYWdnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGFic0FuaW1hdGlvbjoge1xyXG4gICAgdmFsdWU6IG51bWJlcixcclxuICAgIHBhcmFtczoge1xyXG4gICAgICBzdGFydFdpZHRoOiBudW1iZXJcclxuICAgIH1cclxuICB9O1xyXG4gIHJlYWRvbmx5IHJpcHBsZTogUmlwcGxlQ29uZmlnID0ge1xyXG4gICAgY29sb3I6IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCksXHJcbiAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgIHJhZGl1czogMjVcclxuICB9XHJcbiAgYWNjZW50OiBzdHJpbmcgPSB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpO1xyXG4gIHByaXZhdGUgX25hdmlnYXRpbmc6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfcmVwb3NpdG9yeTogRXh0ZW5kZWRSb3V0ZVtdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlbmRpbmcgPSBbXSBhcyBzdHJpbmdbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9ydGwgPSB0aGlzLl9zZXNzaW9uLmludmVyc2U7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFBBTkVTX0RBVEEpIGRhdGE6IEV4dGVuZGVkUm91dGVbXSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBQYW5lc1JvdXRlcixcclxuICAgIHByaXZhdGUgX3RpdGxlOiBXaW5kb3dUaXRsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9ndWlkZTogR3VpZGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICBfc2Vzc2lvbi50aGVtZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB0aGlzLmFjY2VudCA9IF9zZXNzaW9uLmdldEFjY2VudCgpKTtcclxuICAgIF9yb3V0ZXIuX2NvbW0kLlxyXG4gICAgICBzdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChlKSB7XHJcbiAgICAgICAgICBjYXNlICdjb2xsYXBzZSc6XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB0aGlzLl9yZXBvc2l0b3J5ID0gcHJlcGFyZVJvdXRlcyhkYXRhKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcm91dGVyLl9uYXZpZ2F0ZSQuXHJcbiAgICAgIHN1YnNjcmliZShhc3luYyBuID0+IHtcclxuICAgICAgICBjb25zdCB7IGNvbW1hbmRzLCBjb21wb25lbnQsIHBhdGhNb2RlLCByZWxhdGl2ZVRvIH0gPSBuO1xyXG4gICAgICAgIGxldCB7XHJcbiAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBncm91cCxcclxuICAgICAgICAgIGhlbHAsXHJcbiAgICAgICAgICBwb2xpY3ksXHJcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgIHN0YXRlXHJcbiAgICAgICAgfSA9IG47XHJcbiAgICAgICAgbGV0XHJcbiAgICAgICAgICBxdWVyeVN0cmluZzogc3RyaW5nLFxyXG4gICAgICAgICAgcGFyYW1zOiBQYXJhbU1hcCxcclxuICAgICAgICAgIHBhcmVudDogUGFuZVJlZixcclxuICAgICAgICAgIHBhdGg6IHN0cmluZyxcclxuICAgICAgICAgIHJvdXRlOiBFeHRlbmRlZFJvdXRlO1xyXG5cclxuICAgICAgICBpZiAoY29tbWFuZHMgJiYgY29tbWFuZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBwYXRoID0gbi5jb21tYW5kcy5qb2luKCcvJyk7XHJcbiAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKFFVRVJZX0NIQVIpID4gLTEpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VncyA9IHBhdGguc3BsaXQoUVVFUllfQ0hBUik7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gc2Vnc1sxXTtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nIHx8ICcnKTtcclxuICAgICAgICAgICAgcGF0aCA9IHNlZ3NbMF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBuLnF1ZXJ5UGFyYW1zIHx8IHt9O1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHRoaXMuX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChwYXRoTW9kZSA9PT0gJ3JlbGF0aXZlJyB8fCBwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XHJcbiAgICAgICAgICAgIHBhcmVudCA9IHJlbGF0aXZlVG8gfHwgdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50cGF0aCA9IHBhcmVudC5wYXRoO1xyXG4gICAgICAgICAgICB3aGlsZSAocGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xyXG4gICAgICAgICAgICAgIHBhcmVudHBhdGggPSBwYXJlbnRwYXRoLnN1YnN0cigwLCBwYXJlbnRwYXRoLmxhc3RJbmRleE9mKCcvJykpO1xyXG4gICAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cigzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXRoID0gcGFyZW50cGF0aCArICcvJyArIHBhdGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByb3V0ZSA9IHRoaXMuX21hdGNoKHBhdGgpO1xyXG5cclxuICAgICAgICAgIGlmICghcm91dGUpXHJcbiAgICAgICAgICAgIHRocm93IGBubyBtYXRjaCAke3BhdGh9YDtcclxuICAgICAgICAgIHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgICBpZiAoIXBvbGljeSkgcG9saWN5ID0gcm91dGUucG9saWN5IHx8IERFRkFVTFRfUE9MSUNZO1xyXG4gICAgICAgICAgZWxzZSBpZiAocm91dGUucG9saWN5KSBwb2xpY3kgfD0gcm91dGUucG9saWN5O1xyXG4gICAgICAgICAgaWYgKCFpY29uKSBpY29uID0gcm91dGUuaWNvbjtcclxuICAgICAgICAgIGlmICghaGVscCkgaGVscCA9IHJvdXRlLmhlbHA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFwb2xpY3kpIHBvbGljeSA9IERFRkFVTFRfUE9MSUNZO1xyXG4gICAgICAgICAgaWYgKCFxdWVyeVBhcmFtcykgcXVlcnlQYXJhbXMgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5DbGVhcikgPT0gT3BlblBvbGljeS5DbGVhcikge1xyXG4gICAgICAgICAgdGhpcy5fY2xlYXJQZW5kaW5nKCk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9jbGVhclRhYnMoKTtcclxuICAgICAgICAgIGlmICghKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2xlYXJQYW5lcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29tbWFuZHMpIHtcclxuICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiKVxyXG4gICAgICAgICAgICB3aGlsZSAoaSA8IHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChwYXRoID09PSB0YWIucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSB0YWIucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRvZ2dsZSkgPT0gT3BlblBvbGljeS5Ub2dnbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlICYmIHRhYi5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXModGFiLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N5bmMoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmICh0YWIucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9uYXZQYXJhbXMocGF0aCwgdGFiLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmMoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSBwYW5lLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5Ub2dnbGUpID09IE9wZW5Qb2xpY3kuVG9nZ2xlKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlICYmIHBhbmUuX2RhdGEkLm5leHQoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAocGFuZS5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCBwYW5lLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zeW5jKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHt9O1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zdGF0ZShyb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiKVxyXG4gICAgICAgICAgICAgIHRoaXMuX2luc2VydFRhYihjb21wb25lbnQgfHwgcm91dGUuY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgICAgICAgaGVscCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcG9saWN5XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMuX2luc2VydFBhbmUoY29tcG9uZW50IHx8IHJvdXRlLmNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgaGVscCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcG9saWN5XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBwYW5lLl9mdWxsc2NyZWVuJC5uZXh0KHRoaXMucGFuZXMubGVuZ3RoID09PSAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb3V0ZSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuX3N5bmMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwYW5lID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSA9PSBPcGVuUG9saWN5LlRhYiA/XHJcbiAgICAgICAgICAgICAgdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0gOiB0aGlzLnBhbmVzW3RoaXMuc2VsZWN0ZWRJbmRleF07XHJcbiAgICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHBhbmUsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N5bmMoKTtcclxuICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgIT0gT3BlblBvbGljeS5UYWIpIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWRJbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgIHRoaXMuX2luc2VydFRhYihjb21wb25lbnQsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBpY29uLCB0aXRsZSwgaGVscCxcclxuICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHBvbGljeVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLl9pbnNlcnRQYW5lKGNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGljb24sIHRpdGxlLCBoZWxwLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBwb2xpY3ksIHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHBhbmUuX2Z1bGxzY3JlZW4kLm5leHQodGhpcy5wYW5lcy5sZW5ndGggPT09IDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB3aW5kb3cucmVtb3ZlQWxsTGlzdGVuZXJzKCdwb3BzdGF0ZScpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9uYXZpZ2F0aW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbmF2aWdhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzdGF0ZSA9IGUuc3RhdGUgJiYgZS5zdGF0ZS5iaXpkb2MgPyBlLnN0YXRlIGFzIEhpc3RvcnlTdGF0ZSA6IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLCBzdGF0ZSk7XHJcbiAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc3dhcCA9IHN0YXRlLnN3YXA7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gc3RhdGUuc3dhcFRhYjtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHN0YXRlLnByZXZHcm91cDtcclxuICAgICAgICB0aGlzLmdyb3VwID0gc3RhdGUuZ3JvdXA7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gc3RhdGUuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUubGVuZ3RoID4gMSlcclxuICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLFxyXG4gICAgICAgIGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyBoaXN0b3J5LnN0YXRlIDogdW5kZWZpbmVkKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fcm91dGVyLl9uYXZpZ2F0ZSQubmV4dCh7XHJcbiAgICAgICAgY29tbWFuZHM6IERFRkFVTFRfUk9VVEUsXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9kZXNlcmlhbGl6ZSh1cmw6IHN0cmluZywgc3RhdGU/OiBIaXN0b3J5U3RhdGUpIHtcclxuXHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmwpLnNwbGl0KFBBTkVfQ0hBUiksIHBhbmVzID0gZGVzZXJpYWxpemUoc2VjdGlvbnNbMF0pLCB0YWJzID0gc2VjdGlvbnMubGVuZ3RoID4gMSA/IGRlc2VyaWFsaXplKHNlY3Rpb25zWzFdKSA6IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIGRlc2VyaWFsaXplKHBhdGg6IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gcGF0aC5cclxuICAgICAgICBzcGxpdChQQVRIX0NIQVIpLm1hcChzID0+IHtcclxuICAgICAgICAgIGNvbnN0IFtwYXRoLCBxdWVyeVN0cmluZ10gPSBzLnNwbGl0KFFVRVJZX0NIQVIpO1xyXG4gICAgICAgICAgcmV0dXJuIHsgcGF0aCwgcXVlcnlTdHJpbmcgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwYW5lID0gcGFuZXNbaV07XHJcbiAgICAgIGF3YWl0IHRoaXMuX25hdmlnYXRlUGFuZShpLCBwYW5lLnBhdGgsIHBhbmUucXVlcnlTdHJpbmcsIHN0YXRlID8gc3RhdGUucGFuZXNbaV0gOiBudWxsKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCA+IHBhbmVzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgaSA9IDA7XHJcbiAgICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgICAgaWYgKHBhbmVzLmxlbmd0aCAtIDEgPCBpIHx8IHBhbmUucGF0aCAhPT0gcGFuZXNbaV0ucGF0aCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gaSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaSAtIDE7XHJcbiAgICAgICAgICB0aGlzLnBhbmVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHBhbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPCAwKVxyXG4gICAgICB0aGlzLnNlbGVjdCgwKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdGFiID0gdGFic1tpXTtcclxuICAgICAgYXdhaXQgdGhpcy5fbmF2aWdhdGVUYWIoaSwgdGFiLnBhdGgsIHRhYi5xdWVyeVN0cmluZywgc3RhdGUgPyBzdGF0ZS50YWJzW2ldIDogbnVsbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCA+IHRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHRhYiA9IHRoaXMudGFic1tpXTtcclxuICAgICAgICBpZiAodGFicy5sZW5ndGggLSAxIDwgaSB8fCB0YWIucGF0aCAhPT0gdGFic1tpXS5wYXRoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGkgLSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50YWJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRhYik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGggJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbiA9IHRoaXMucGFuZXMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2ldO1xyXG4gICAgICBwYW5lLmZ1bGxzY3JlZW4gIT09IChuID09PSAxKSAmJlxyXG4gICAgICAgIHBhbmUuX2Z1bGxzY3JlZW4kLm5leHQobiA9PT0gMSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpbmRleFxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHF1ZXJ5U3RyaW5nXHJcbiAgICogQHBhcmFtIHN0YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2aWdhdGVQYW5lKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gcGFuZS5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChwYW5lLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHBhbmUucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHBhbmUsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRBbmNlc3Rvcihyb3V0ZSwgcGF0aCk7XHJcbiAgICBhd2FpdCB0aGlzLl9zdGF0ZShyb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICB0aGlzLl9pbnNlcnRQYW5lKHJvdXRlLmNvbXBvbmVudCwge1xyXG4gICAgICBwYXRoLCBwYXJlbnQsIHJvdXRlLCBkYXRhOiBzdGF0ZSwgcGFyYW1zLCBxdWVyeVBhcmFtcyxcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3ksXHJcbiAgICAgIGZvY3VzOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX25hdmlnYXRlVGFiKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHRhYi5wYXRoKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSB0YWIucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXModGFiLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0YWIucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXModGFiLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUsIHBhdGgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCB0YWIsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuXHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9maW5kQW5jZXN0b3Iocm91dGUsIHBhdGgpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHRoaXMuX2luc2VydFRhYihyb3V0ZS5jb21wb25lbnQsIHtcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3kgfCBPcGVuUG9saWN5LlRhYixcclxuICAgICAgcGF0aCwgcGFyZW50LCByb3V0ZSxcclxuICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgIHBhcmFtcywgcXVlcnlQYXJhbXMsXHJcbiAgICAgIGZvY3VzOiBmYWxzZSxcclxuICAgICAgc3dhcDogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9maW5kQW5jZXN0b3Iocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZykge1xyXG4gICAgaWYgKChyb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQpXHJcbiAgICAgIHJldHVybiB0aGlzLnBhbmVzLmZpbmQocCA9PiAocC5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKSA9PT1cclxuICAgICAgICAocm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSkucGFyZW50ICYmXHJcbiAgICAgICAgcGF0aC5zdGFydHNXaXRoKHAucGF0aCkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX25hdlF1ZXJ5UGFyYW1zKHBhbmU6IFBhbmVSZWY8YW55PiwgcXVlcnlQYXJhbXM6IFBhcmFtTWFwLCBzdGF0ZTogUGFyYW1NYXApIHtcclxuICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgc3RhdGUgJiYgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dChxdWVyeVBhcmFtcyk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgUXVlcnlQYXJhbU5hdmlnYXRpb24ocXVlcnlQYXJhbXMsIHBhbmUpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcclxuICAgKiBAcGFyYW0gc3RhdGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9uYXZQYXJhbXMocGF0aDogc3RyaW5nLCBwYW5lOiBQYW5lUmVmPGFueT4sIHBhcmFtczogUGFyYW1NYXAsIHF1ZXJ5UGFyYW1zOiBQYXJhbU1hcCwgc3RhdGU6IFBhcmFtTWFwKSB7XHJcbiAgICBpZiAocGFuZS5yb3V0ZS5jYW5EaXNtaXNzKVxyXG4gICAgICBhd2FpdCB0aGlzLl9kaXNtaXNzKHBhbmUpO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcbiAgICBhd2FpdCB0aGlzLl9zdGF0ZShwYW5lLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICBwYW5lLl9wYXRoID0gcGF0aDtcclxuICAgIHBhbmUuX3BhcmFtcyQubmV4dChwYXJhbXMpO1xyXG4gICAgaWYgKHF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dChxdWVyeVBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcGFuZS5fcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgcGFuZS5fcXVlcnlQYXJhbXMkLm5leHQoe30pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IFBhcmFtTmF2aWdhdGlvbihwYXJhbXMsIHBhbmUpKTtcclxuXHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICBpZiAoY2hpbGQucm91dGUgJiYgKGNoaWxkLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUpLnBhcmVudCA9PT0gcGFuZS5yb3V0ZSkge1xyXG4gICAgICAgIGNoaWxkLl9kYXRhJC5uZXh0KE9iamVjdC5hc3NpZ24oY2hpbGQuZGF0YSwgc3RhdGUpKTtcclxuICAgICAgICBjaGlsZC5fcGFyYW1zJC5uZXh0KHBhcmFtcyk7XHJcbiAgICAgICAgY2hpbGQuX3BhdGggPSBwYW5lLnBhdGggKyAnLycgKyBjaGlsZC5yb3V0ZS5wYXRoO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPiAtMSAmJiBjaGlsZCA9PT0gdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0pIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgICAgIHRoaXMuZ3JvdXAgPSBjaGlsZC5ncm91cDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHBhbmUubW9kZSA9PT0gJ3BhbmUnKSB0aGlzLnRpdGxlQW5pbWF0aW9uKys7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgX3N5bmMoKSB7XHJcbiAgICB0aGlzLl9uYXZpZ2F0aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuX2hpc3RvcnkoJ3B1c2gnKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fbmF2aWdhdGluZyA9IGZhbHNlLCAyMDApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gbW9kZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2hpc3RvcnkobW9kZTogJ3JlcGxhY2UnIHwgJ3B1c2gnKSB7XHJcbiAgICBsZXQgcGF0aCA9IHRoaXMucGFuZXMuZmlsdGVyKHAgPT4gcC5yb3V0ZSkubWFwKHMgPT4gcy5mdWxsUGF0aCkuam9pbihQQVRIX0NIQVIpO1xyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGgpXHJcbiAgICAgIHBhdGggKz0gUEFORV9DSEFSICsgdGhpcy50YWJzLmZpbHRlcihwID0+IHAucm91dGUpLm1hcChzID0+IHMuZnVsbFBhdGgpLmpvaW4oUEFUSF9DSEFSKTtcclxuICAgIGNvbnN0IHN0YXRlID0ge1xyXG4gICAgICBiaXpkb2M6IHRydWUsXHJcbiAgICAgIHN0ZXA6IGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXAgKyAxIDogMSxcclxuICAgICAgc2VsZWN0ZWRUYWJJbmRleDogdGhpcy5zZWxlY3RlZFRhYkluZGV4LFxyXG4gICAgICBwYW5lczogdGhpcy5wYW5lcy5tYXAocCA9PiBwLmRhdGEpLFxyXG4gICAgICB0YWJzOiB0aGlzLnRhYnMubWFwKHQgPT4gdC5kYXRhKSxcclxuICAgICAgc3dhcDogdGhpcy5zd2FwLFxyXG4gICAgICBncm91cDogdGhpcy5ncm91cCxcclxuICAgICAgc3dhcFRhYjogdGhpcy5zd2FwVGFiLFxyXG4gICAgICBwcmV2R3JvdXA6IHRoaXMucHJldkdyb3VwXHJcbiAgICB9IGFzIEhpc3RvcnlTdGF0ZTtcclxuICAgIGlmIChtb2RlID09PSAncHVzaCcpXHJcbiAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHN0YXRlLCAnJywgJy8nICsgcGF0aCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlLCAnJyk7XHJcbiAgfVxyXG5cclxuICBkcm9wKGV2dDogQ2RrRHJhZ0Ryb3A8c3RyaW5nLCBzdHJpbmc+KSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1tldnQucHJldmlvdXNJbmRleF07XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShldnQucHJldmlvdXNJbmRleCwgMSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShldnQuY3VycmVudEluZGV4LCAwLCBwYW5lKTtcclxuICAgIHRoaXMuX3N5bmMoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVBpbm5lZChwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIHBhbmUucGlubmVkID0gIXBhbmUucGlubmVkO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBpZiAocy5kZWNlbmRlbnRPZihwYW5lKSkgcy5waW5uZWQgPSBwYW5lLnBpbm5lZDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcXVlcnlTdHJpbmcocXVlcnlQYXJhbXM6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKTtcclxuICAgIGxldCBxdWVyeVN0cmluZzogc3RyaW5nO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdmFsID0gcXVlcnlQYXJhbXNbbmFtZXNbaV1dO1xyXG5cclxuICAgICAgaWYgKHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghcXVlcnlTdHJpbmcpIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgZWxzZSBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nICsgQVJHX0NIQVI7XHJcblxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWwpKVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7bmFtZXNbaV19PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbCl9YDtcclxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KHZhbCkpXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSB2YWwubWFwKHYgPT4gYCR7bmFtZXNbaV19PSR7dn1gKS5qb2luKEFSR19DSEFSKTtcclxuICAgICAgICBlbHNlIGlmIChpc0RhdGUodmFsKSlcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbC50b0pTT04oKX1gO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbH1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlTdHJpbmc7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmc6IHN0cmluZyk6IFBhcmFtTWFwIHtcclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICBxdWVyeVN0cmluZyAmJiBxdWVyeVN0cmluZy5cclxuICAgICAgc3BsaXQoQVJHX0NIQVIpLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgY29uc3QgW25hbWUsIHZhbHVlXSA9IHAuc3BsaXQoJz0nKTtcclxuICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zW25hbWVdKVxyXG4gICAgICAgICAgcXVlcnlQYXJhbXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHMgPSBxdWVyeVBhcmFtc1tuYW1lXTtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zW25hbWVdID0gaXNBcnJheSh2YWxzKSA/IFsuLi52YWxzLCB2YWx1ZV0gOiBbdmFscywgdmFsdWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gcXVlcnlQYXJhbXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByb3V0ZVxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcGFyYW1zKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGV4ID0gcm91dGUucmVnRXguZXhlYyhwYXRoKSxcclxuICAgICAgcGFyYW1zID0gZXguZ3JvdXBzO1xyXG5cclxuICAgIHJldHVybiBwYXJhbXMgfHwge307XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB1cmxcclxuICAgKi9cclxuICBwcml2YXRlIF9tYXRjaCh1cmw6IHN0cmluZykge1xyXG4gICAgbGV0IHJvdXRlID0gdGhpcy5fcmVwb3NpdG9yeS5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgaWYgKHJvdXRlKVxyXG4gICAgICB3aGlsZSAocm91dGUuY2hpbGRyZW4pIHtcclxuICAgICAgICBsZXQgY2hpbGQgPSByb3V0ZS5jaGlsZHJlbi5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgICAgIGlmIChjaGlsZClcclxuICAgICAgICAgIHJvdXRlID0gY2hpbGQ7XHJcbiAgICAgICAgZWxzZSBicmVhaztcclxuICAgICAgfVxyXG4gICAgcmV0dXJuIHJvdXRlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcm91dGVcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXRlKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcsIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBpZiAodGhpcy5fcGVuZGluZy5pbmRleE9mKHBhdGgpID4gLTEpIHtcclxuICAgICAgLy90aGlzLl9wcy50b2FzdCgnV29ya2luZycpO1xyXG4gICAgICB0aHJvdyAnYWxyZWFkeSBwcm9jZXNzaW5nJztcclxuICAgIH1cclxuICAgIHRoaXMuX3BlbmRpbmcucHVzaChwYXRoKTtcclxuXHJcbiAgICBjb25zdCB7IHBhcmVudCwgcmVzb2x2ZSB9ID0gcm91dGU7XHJcbiAgICBpZiAocGFyZW50KVxyXG4gICAgICBhd2FpdCB0aGlzLl9wYXJlbnRzdGF0ZShwYXJlbnQsIHBhdGgsIHBhcmFtcywgZGF0YSk7XHJcbiAgICBpZiAocmVzb2x2ZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9yZXNvbHZlKHJlc29sdmUsIHBhcmFtcywgZGF0YSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wZW5kaW5nLnJlbW92ZShwYXRoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJvdXRlXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9wYXJlbnRzdGF0ZShyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3QgeyBwYXJlbnQsIHJlc29sdmUgfSA9IHJvdXRlO1xyXG5cclxuICAgIGlmIChwYXJlbnQpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3BhcmVudHN0YXRlKHBhcmVudCwgcGF0aCwgcGFyYW1zLCBkYXRhKTtcclxuXHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lcy5maW5kKHMgPT4gcy5yb3V0ZSAmJiBzLnJvdXRlID09PSByb3V0ZVxyXG4gICAgICAmJiBwYXRoLnN0YXJ0c1dpdGgocy5wYXRoKSk7XHJcblxyXG4gICAgcGFuZSAmJiBPYmplY3QuYXNzaWduKGRhdGEsIHBhbmUuZGF0YSk7XHJcblxyXG4gICAgaWYgKHJlc29sdmUpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3Jlc29sdmUocmVzb2x2ZSwgcGFyYW1zLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3Jlc29sdmUocmVzb2x2ZTogeyBba2V5OiBzdHJpbmddOiBDb21wb25lbnRUeXBlPFBhbmVSZXNvbHZlPGFueT4+IH0sIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVzb2x2ZSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGtleSA9IGtleXNbaV07XHJcbiAgICAgIGlmICghZGF0YVtrZXldKSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQocmVzb2x2ZVtrZXldKSBhcyBQYW5lUmVzb2x2ZTxhbnk+O1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5zdGFuY2Uub25SZXNvbHZlKHBhcmFtcyk7XHJcbiAgICAgICAgaWYgKGlzUHJvbWlzZSh2YWx1ZSkpXHJcbiAgICAgICAgICBhd2FpdCB2YWx1ZS50aGVuKHIgPT4gZGF0YVtrZXldID0gcik7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSlcclxuICAgICAgICAgIGF3YWl0IHZhbHVlLnBpcGUodGFwKHIgPT4gZGF0YVtrZXldID0gcikpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGQ8VD4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zPzogUGFuZU9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLmluc2VydCh0aGlzLnBhbmVzLmxlbmd0aCwgY29tcG9uZW50LCBvcHRpb25zKTtcclxuICB9XHJcbiAgaW5zZXJ0PFQ+KHBvc2l0aW9uOiBudW1iZXIsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9ucz86IFBhbmVPcHRpb25zKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5faW5zZXJ0UGFuZTxUPihjb21wb25lbnQsIG9wdGlvbnMgfHwge30sIHBvc2l0aW9uKTtcclxuICAgIHBhbmUuX2Z1bGxzY3JlZW4kLm5leHQodGhpcy5wYW5lcy5sZW5ndGggPT09IDEpO1xyXG4gICAgcmV0dXJuIHBhbmU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2luc2VydFBhbmU8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zOiB7XHJcbiAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgcm91dGU/OiBQYW5lUm91dGU7XHJcbiAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICBpbnB1dHM/OiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcclxuICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICBxdWVyeVN0cmluZz86IHN0cmluZztcclxuICAgIHBvbGljeT86IE9wZW5Qb2xpY3k7XHJcbiAgICBmb2N1cz86IGJvb2xlYW5cclxuICB9LCBwb3NpdGlvbj86IG51bWJlcikge1xyXG5cclxuICAgIGNvbnN0IHN0cmV0Y2ggPSAob3B0aW9ucy5wb2xpY3kgJiBPcGVuUG9saWN5LlN0cmV0Y2gpID09IE9wZW5Qb2xpY3kuU3RyZXRjaDtcclxuXHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5fY29uc3RyYWN0PFQ+KGNvbXBvbmVudCwgJ3BhbmUnLCB7XHJcbiAgICAgIHN0cmV0Y2gsXHJcbiAgICAgIC4uLlxyXG4gICAgICBvcHRpb25zXHJcbiAgICB9KTtcclxuICAgIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICBwb3NpdGlvbiA9IHRoaXMucGFuZXMubGVuZ3RoO1xyXG4gICAgdGhpcy5wYW5lcy5wdXNoKHBhbmUpO1xyXG4gICAgdGhpcy50aXRsZUFuaW1hdGlvbisrO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25TdGFydChwYW5lKSk7XHJcbiAgICBpZiAob3B0aW9ucy5mb2N1cyAhPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gcG9zaXRpb247XHJcbiAgICAgIHRoaXMuX3JvdXRlci5fYWN0aXZlID0gcGFuZTtcclxuICAgICAgdGhpcy5fdGl0bGUuc2V0KHBhbmUudGl0bGUpO1xyXG4gICAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGggPiAxKSB0aGlzLnNjcm9sbFRvKHBvc2l0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMubmF2aWdhdGlvbkFycm93cygpO1xyXG4gICAgcmV0dXJuIHBhbmU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRcclxuICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NvbnN0cmFjdDxUID0gYW55Pihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sXHJcbiAgICBtb2RlOiAndGFiJyB8ICdwYW5lJyxcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgZGlhbG9nPzogYm9vbGVhbjtcclxuICAgICAgc3RyZXRjaD86IGJvb2xlYW47XHJcbiAgICAgIHBhdGg/OiBzdHJpbmc7IHJvdXRlPzogUGFuZVJvdXRlOyBpY29uPzogc3RyaW5nOyB0aXRsZT86IHN0cmluZztcclxuICAgICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICAgIGRpc21pc3NhYmxlPzogYm9vbGVhbjtcclxuICAgICAgZXhwYW5kYWJsZT86IGJvb2xlYW5cclxuICAgIH0pIHtcclxuICAgIGNvbnN0IHBhbmUgPSBuZXcgUGFuZVJlZjxUPihjb21wb25lbnQsIG1vZGUsIG9wdGlvbnMpO1xyXG4gICAgcGFuZS5faW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoW1xyXG4gICAgICB7IHByb3ZpZGU6IFBhbmVSZWYsIHVzZVZhbHVlOiBwYW5lIH1cclxuICAgIF0sIHRoaXMuX2luamVjdG9yKTtcclxuICAgIHBhbmUuX2NvbW0kLnN1YnNjcmliZShlID0+IHRoaXMuX2FjdGlvbjxUPihlLCBwYW5lKSk7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaW5zZXJ0VGFiPFQgPSBhbnk+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9uczoge1xyXG4gICAgaWNvbj86IHN0cmluZztcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgICBoZWxwPzogc3RyaW5nO1xyXG4gICAgcGF0aD86IHN0cmluZztcclxuICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgcm91dGU/OiBQYW5lUm91dGU7XHJcbiAgICBkYXRhPzogUGFyYW1NYXA7XHJcbiAgICBwYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICBwb2xpY3k/OiBPcGVuUG9saWN5O1xyXG4gICAgc3dhcD86IGJvb2xlYW47XHJcbiAgICBmb2N1cz86IGJvb2xlYW47XHJcbiAgfSkge1xyXG4gICAgY29uc3QgeyBwb2xpY3kgfSA9IG9wdGlvbnMsXHJcbiAgICAgIGRpYWxvZyA9IChwb2xpY3kgJiBPcGVuUG9saWN5LkRpYWxvZykgPT0gT3BlblBvbGljeS5EaWFsb2csXHJcbiAgICAgIGV4cGFuZGFibGUgPSAocG9saWN5ICYgT3BlblBvbGljeS5FeHBhbmRhYmxlKSA9PSBPcGVuUG9saWN5LkV4cGFuZGFibGUsXHJcbiAgICAgIGRpc21pc3NhYmxlID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuRGlzbWlzc2FibGUpID09IE9wZW5Qb2xpY3kuRGlzbWlzc2FibGU7XHJcblxyXG4gICAgY29uc3QgdGFiID0gdGhpcy5fY29uc3RyYWN0PFQ+KGNvbXBvbmVudCxcclxuICAgICAgJ3RhYicsIHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgZGlhbG9nLFxyXG4gICAgICBkaXNtaXNzYWJsZSxcclxuICAgICAgZXhwYW5kYWJsZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRhYnMucHVzaCh0YWIpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25TdGFydCh0YWIpKTtcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGlmICh0YWIuZ3JvdXAgJiYgdGhpcy5ncm91cCAhPT0gdGFiLmdyb3VwICYmIG9wdGlvbnMuc3dhcCAhPT0gZmFsc2UpIHtcclxuICAgICAgbGV0IGkgPSAwLCBzd2FwID0gZmFsc2U7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBpZiAodGhpcy50YWJzW2ldLmdyb3VwICE9PSB0YWIuZ3JvdXApIHtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRoaXMudGFic1tpXSk7XHJcbiAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgc3dhcCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrK1xyXG4gICAgICB9IHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCk7XHJcbiAgICAgIGlmIChzd2FwKSB7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHRoaXMuZ3JvdXA7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICAgIGlmIChvcHRpb25zLmZvY3VzICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiB0YWI7XHJcbiAgfVxyXG5cclxuICBndWlkZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2d1aWRlLnN0YXJ0KG5hbWUpO1xyXG4gIH1cclxuICBiYWNrKCkge1xyXG4gICAgdGhpcy5fYmFjayh0aGlzLnN3YXApO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfYmFjayhzdGVwczogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgQmFja05hdmlnYXRpb24oKSk7XHJcbiAgICBoaXN0b3J5LmdvKHN0ZXBzIC0gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwKTtcclxuICB9XHJcbiAgdGFiQmFjaygpIHtcclxuICAgIHRoaXMuX2JhY2sodGhpcy5zd2FwVGFiKTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBlXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIF9hY3Rpb248VCA9IGFueT4oZTogc3RyaW5nLCBwYW5lOiBQYW5lUmVmPFQ+KSB7XHJcbiAgICBzd2l0Y2ggKGUpIHtcclxuICAgICAgY2FzZSAnZm9jdXMnOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmIChwYW5lLm1vZGUgPT09ICd0YWInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzKGluZGV4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgY2FzZSAnY2xvc2UnOlxyXG4gICAgICAgIGlmIChwYW5lLm1vZGUgPT09ICd0YWInKSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudGFicy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgdGhpcy5jbG9zZVRhYihpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhbmVzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbGxhcHNlKCk7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2V4cGFuZCc6XHJcbiAgICAgICAgaWYgKHBhbmUubW9kZSA9PT0gJ3RhYicpXHJcbiAgICAgICAgICB0aGlzLmV4cGFuZFRhYigpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuZXhwYW5kUGFuZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZWZyZXNoJzoge1xyXG4gICAgICAgIHRoaXMuX2hpc3RvcnkoJ3JlcGxhY2UnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBlc2NhcGVcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScpXHJcbiAgY29sbGFwc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMudGFicy5sZW5ndGgpIHJldHVybjtcclxuICAgIHRoaXMuX2NsZWFyUGVuZGluZygpO1xyXG4gICAgdGhpcy5fY2xlYXJUYWJzKCk7XHJcbiAgICB0aGlzLl9zeW5jKCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgQ29sbGFwc2VOYXZpZ2F0aW9uKCkpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBvblJlc2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCAmJiAhdGhpcy5wYW5lc1t0aGlzLnBhbmVzLmxlbmd0aCAtIDFdLnN0cmV0Y2gpIHtcclxuICAgICAgY29uc3QgZWwgPSB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgY2hpbGQgPSBlbC5sYXN0RWxlbWVudENoaWxkIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgICBjaGlsZC5zdHlsZS5taW5XaWR0aCA9XHJcbiAgICAgICAgKGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIGNoaWxkLm9mZnNldExlZnQgLSAyKSArICdweCc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Jlc2l6ZSgpIHtcclxuICAgIC8vdGhpcy50YWJzLmNvbmNhdCh0aGlzLnBhbmVzKS5mb3JFYWNoKHQgPT4gdC5fcmVzaXplJC5uZXh0KHtcclxuICAgIC8vfSBhcyBhbnkpKTtcclxuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpO1xyXG4gIH1cclxuICBjbG9zZVRhYihwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbcG9zaXRpb25dO1xyXG4gICAgdGhpcy50YWJzLnNwbGljZShwb3NpdGlvbiwgMSk7XHJcbiAgICB0aGlzLl9kZXN0cm95UGFuZSh0YWIpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmxlbmd0aCA/IHBvc2l0aW9uID4gMCA/IHBvc2l0aW9uIC0gMSA6IDAgOiAtMTtcclxuICAgIHRoaXMuX3N5bmMoKTtcclxuICB9XHJcbiAgZXhwYW5kUGFuZSgpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW3RoaXMuc2VsZWN0ZWRJbmRleF07XHJcbiAgICB0aGlzLnN3YXAgPSB0aGlzLl9nZXRIaXN0b3J5U3RlcCgpO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgZG8ge1xyXG4gICAgICBpZiAodGhpcy5wYW5lc1tpXSAhPT0gcGFuZSkge1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRoaXMucGFuZXNbaV0pO1xyXG4gICAgICAgIHRoaXMucGFuZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpKys7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoaSA8IHRoaXMucGFuZXMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICB0aGlzLl9zeW5jKCk7XHJcbiAgICBwYW5lLl9mdWxsc2NyZWVuJC5uZXh0KHRydWUpO1xyXG4gIH1cclxuICBwcml2YXRlIF9nZXRIaXN0b3J5U3RlcCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXAgOiAwO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kVGFiKCkge1xyXG4gICAgdGhpcy5zd2FwID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgICB0aGlzLnBhbmVzLmZvckVhY2gocCA9PlxyXG4gICAgICB0aGlzLl9kZXN0cm95UGFuZShwKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdO1xyXG4gICAgdGhpcy50YWJzLnNwbGljZSh0aGlzLnNlbGVjdGVkVGFiSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoMCwgdGhpcy5wYW5lcy5sZW5ndGgsIHRhYik7XHJcbiAgICB0YWIuX21vZGUkLm5leHQoJ3BhbmUnKTtcclxuICAgIHRhYi5fZnVsbHNjcmVlbiQubmV4dCh0cnVlKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoID8gMCA6IC0xO1xyXG4gICAgdGhpcy5fc3luYygpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0KHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPT09IHBvc2l0aW9uKSByZXR1cm47XHJcbiAgICBpZiAocG9zaXRpb24gPT09IC0xKSB7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCkgcG9zaXRpb24gPSB0aGlzLnBhbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgIGVsc2UgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gcG9zaXRpb247XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1twb3NpdGlvbl07XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblNlbGVjdGVkKHBhbmUpKTtcclxuICAgIHRoaXMuX3JvdXRlci5fYWN0aXZlID0gcGFuZTtcclxuICAgIHRoaXMuX3RpdGxlLnNldChwYW5lLnRpdGxlKTtcclxuICB9XHJcbiAgYXN5bmMgcmVtb3ZlQXQocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbcG9zaXRpb25dO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX2Rpc21pc3MocGFuZSk7XHJcblxyXG4gICAgdGhpcy5fZGlzY2FyZFBhbmUocGFuZSk7XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uID49IHRoaXMuc2VsZWN0ZWRJbmRleClcclxuICAgICAgdGhpcy5zZWxlY3QoLTEpO1xyXG4gICAgdGhpcy5fc3luYygpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2Rpc21pc3MocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBjb25zdCBwYW5lcyA9IHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuXHJcbiAgICAgIGZpbHRlcihzID0+IHMuZGVjZW5kZW50T2YocGFuZSkgJiYgcy5yb3V0ZSAmJiBzLnJvdXRlLmNhbkRpc21pc3MpLlxyXG4gICAgICByZXZlcnNlKCk7XHJcblxyXG4gICAgcGFuZS5yb3V0ZSAmJiBwYW5lLnJvdXRlLmNhbkRpc21pc3MgJiZcclxuICAgICAgcGFuZXMucHVzaChwYW5lKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBvayA9IGF3YWl0IHRoaXMuX2Rpc21pc3NhYmxlKHBhbmVzW2ldKTtcclxuICAgICAgaWYgKCFvaykgdGhyb3cgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZGlzY2FyZFBhbmUocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLmRlY2VuZGVudE9mKHBhbmUpKS5cclxuICAgICAgcmV2ZXJzZSgpLmZvckVhY2gocyA9PiB0aGlzLl9kaXNjYXJkUGFuZShzKSk7XHJcbiAgICB0aGlzLl9kZXN0cm95UGFuZShwYW5lKTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuICBwcml2YXRlIF9jbGVhclBlbmRpbmcoKSB7XHJcbiAgICB0aGlzLl9wZW5kaW5nLnNwbGljZSgwLCB0aGlzLl9wZW5kaW5nLmxlbmd0aCk7XHJcbiAgfVxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2NsZWFyUGFuZXMoKSB7XHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzQWxsKHRoaXMucGFuZXMpO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHAgPT4gdGhpcy5fZGVzdHJveVBhbmUocCkpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoMCwgdGhpcy5wYW5lcy5sZW5ndGgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnN3YXAgPSBudWxsO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9jbGVhclRhYnMoKSB7XHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzQWxsKHRoaXMudGFicyk7XHJcbiAgICB0aGlzLnRhYnMuZm9yRWFjaCh0ID0+IHRoaXMuX2Rlc3Ryb3lQYW5lKHQpKTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UoMCwgdGhpcy50YWJzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAtMTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2Rpc21pc3NBbGwocGFuZXM6IFBhbmVSZWZbXSkge1xyXG4gICAgZm9yIChsZXQgcGFuZSBvZiBwYW5lcy5cclxuICAgICAgZmlsdGVyKHMgPT4gcy5yb3V0ZSAmJiBzLnJvdXRlLmNhbkRpc21pc3MpKSB7XHJcbiAgICAgIGxldCBvayA9IGF3YWl0IHRoaXMuX2Rpc21pc3NhYmxlKHBhbmUpO1xyXG4gICAgICBpZiAoIW9rKVxyXG4gICAgICAgIHRocm93ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIF9kaXNtaXNzYWJsZShwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIGNvbnN0IHsgaW5zdGFuY2UsIHJvdXRlOiB7IGNhbkRpc21pc3MgfSB9ID0gcGFuZTtcclxuICAgIGNvbnN0IGRpc21pc3NhYmxlID0gdGhpcy5faW5qZWN0b3IuZ2V0KGNhbkRpc21pc3MpIGFzIENhbkRpc21pc3M8YW55PjtcclxuICAgIGNvbnN0IG9rID0gZGlzbWlzc2FibGUub25EaXNtaXNzKGluc3RhbmNlKTtcclxuICAgIGlmIChpc0Jvb2xlYW4ob2spKVxyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9rKTtcclxuICAgIGVsc2UgaWYgKGlzUHJvbWlzZShvaykpXHJcbiAgICAgIHJldHVybiBvaztcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIG9rLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuICBzY3JvbGxUbyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5fY2hpbGRyZW4uaXRlbShpbmRleCkgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBpdGVtICYmIGl0ZW0uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGlubGluZTogJ2VuZCcsIGJsb2NrOiAnZW5kJyB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IF9jaGlsZHJlbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBhbmUtY29udGVudCcpO1xyXG4gIH1cclxuICBkb25lKCkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uQXJyb3dzKCk7XHJcbiAgICB0aGlzLl9yZXNpemUoKTtcclxuICB9XHJcbiAgbmF2aWdhdGlvbkFycm93cyhfPzogRXZlbnQpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcclxuICAgICAgc2Nyb2xsTGVmdCA9IE1hdGgucm91bmQoY29udGFpbmVyLnNjcm9sbExlZnQpO1xyXG4gICAgdGhpcy5uZXh0ID0gdGhpcy5fcnRsID8gY29udGFpbmVyLmNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdCA8IGNvbnRhaW5lci5zY3JvbGxXaWR0aCA6XHJcbiAgICAgIHNjcm9sbExlZnQgKyBjb250YWluZXIuY2xpZW50V2lkdGggPCBjb250YWluZXIuc2Nyb2xsV2lkdGg7XHJcbiAgICB0aGlzLnByZXYgPSB0aGlzLl9ydGwgPyBzY3JvbGxMZWZ0IDwgMCA6IHNjcm9sbExlZnQgPiAwO1xyXG4gIH1cclxuICBzY3JvbGxCeShuOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGxlZnQgPSBuICogKHRoaXMuX3J0bCA/IC0xIDogMSk7XHJcbiAgICB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsQnkoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGxlZnQgfSk7XHJcbiAgfVxyXG4gIGZvY3VzKGluZGV4KSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX2NoaWxkcmVuLml0ZW0oaW5kZXgpIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgZWwuZm9jdXMoKTtcclxuICB9XHJcbiAgb25QYW5lUmVzaXplKHBhbmU6IFBhbmVSZWY8YW55PiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IGVsID0gKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgSFRNTERpdkVsZW1lbnQ7XHJcblxyXG4gICAgY29uc3QgLy8gcmVtZW1iZXIgbW91c2UgZG93biBpbmZvXHJcbiAgICAgIHdpZHRoID0gZWwuY2xpZW50V2lkdGgsXHJcbiAgICAgIGQgPSB0aGlzLl9ydGwgPyAtMSA6IDE7XHJcblxyXG4gICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XHJcblxyXG4gICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XHJcblxyXG4gICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBvbk1vdXNlTW92ZTtcclxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9ICgpID0+IHtcclxuICAgICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XHJcbiAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcclxuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGUpIHtcclxuXHJcbiAgICAgIGNvbnN0IGRlbHRhID0gKGUuY2xpZW50WCAtIGV2ZW50LmNsaWVudFgpICogZDtcclxuICAgICAgZWwuc3R5bGUud2lkdGggPSBlbC5zdHlsZS5taW5XaWR0aFxyXG4gICAgICAgID0gTWF0aC5tYXgod2lkdGggKyBkZWx0YSwgMzUwKSArICdweCc7XHJcbiAgICAgIHBhbmUgJiYgcGFuZS5fcmVzaXplJC5uZXh0KHt9IGFzIGFueSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uVGFiUmVzaXplKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCBlbCA9IChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5uZXh0RWxlbWVudFNpYmxpbmcgYXMgSFRNTERpdkVsZW1lbnQ7XHJcblxyXG4gICAgY29uc3RcclxuICAgICAgbWUgPSB0aGlzLFxyXG4gICAgICAvLyByZW1lbWJlciBtb3VzZSBkb3duIGluZm9cclxuICAgICAgd2lkdGggPSBlbC5jbGllbnRXaWR0aCxcclxuICAgICAgZCA9IHRoaXMuX3J0bCA/IDEgOiAtMTtcclxuXHJcbiAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmcnKTtcclxuXHJcbiAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG9uTW91c2VNb3ZlO1xyXG4gICAgZG9jdW1lbnQub25tb3VzZXVwID0gKCkgPT4ge1xyXG4gICAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LnJlbW92ZSgncmVzaXppbmcnKTtcclxuICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xyXG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIG1lLm5hdmlnYXRpb25BcnJvd3MoKTtcclxuICAgICAgLy90aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZSgpO1xyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGUpIHtcclxuXHJcbiAgICAgIC8vIHByZXZlbnQgbmVnYXRpdmUtc2l6ZWQgZWxlbWVudHNcclxuICAgICAgY29uc3QgZGVsdGEgPSBNYXRoLm1heCgoZS5jbGllbnRYIC0gZXZlbnQuY2xpZW50WCkgKiBkLCAtd2lkdGgpO1xyXG4gICAgICBlbC5zdHlsZS53aWR0aCA9IGVsLnN0eWxlLm1pbldpZHRoID0gKHdpZHRoICsgZGVsdGEpICsgJ3B4JztcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RhYnMnLCBlbC5zdHlsZS53aWR0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Rlc3Ryb3lQYW5lKHBhbmU6IFBhbmVSZWYpIHtcclxuICAgIHBhbmUuX2Rlc3Ryb3koKTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uRW5kKHBhbmUpKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IFBBTkVfUEFSQU1TX1JFR0VYID0gLyg6W1xcd1xcLV0rKS9nO1xyXG5cclxuZnVuY3Rpb24gcHJlcGFyZVJvdXRlcyhyb3V0ZXM6IFBhbmVSb3V0ZVtdLCB0cmVlUGF0aD86IHN0cmluZyk6IEV4dGVuZGVkUm91dGVbXSB7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGxldCByb3V0ZSA9IHJvdXRlc1tpXSwgZnVsbFBhdGggPSAodHJlZVBhdGggPyAodHJlZVBhdGggKyAnLycpIDogJycpICsgcm91dGUucGF0aDtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKHJvdXRlLCB7XHJcbiAgICAgIGZ1bGxQYXRoLFxyXG4gICAgICByZWdFeDogbmV3IFJlZ0V4cCgnXicgKyBmdWxsUGF0aC5cclxuICAgICAgICByZXBsYWNlKCcvJywgJ1xcXFwvJykuXHJcbiAgICAgICAgcmVwbGFjZShQQU5FX1BBUkFNU19SRUdFWCwgZSA9PiBgKD88JHtlLnN1YnN0cigxKX0+W1xcXFx3QFxcXFwtXSopYCkpXHJcbiAgICB9KTtcclxuICAgIGlmIChyb3V0ZS5jaGlsZHJlbikge1xyXG4gICAgICBsZXQgY2hpbGRyZW4gPSBwcmVwYXJlUm91dGVzKHJvdXRlLmNoaWxkcmVuLCBmdWxsUGF0aCk7XHJcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGRyZW4ubGVuZ3RoOyBqKyspXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihjaGlsZHJlbltqXSwge1xyXG4gICAgICAgICAgcGFyZW50OiByb3V0ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcm91dGVzIGFzIEV4dGVuZGVkUm91dGVbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEV4dGVuZGVkUm91dGUgZXh0ZW5kcyBQYW5lUm91dGUge1xyXG4gIGZ1bGxQYXRoOiBzdHJpbmc7XHJcbiAgcmVnRXg6IFJlZ0V4cDtcclxuICBwYXJlbnQ/OiBFeHRlbmRlZFJvdXRlO1xyXG4gIGNoaWxkcmVuPzogRXh0ZW5kZWRSb3V0ZVtdO1xyXG59XHJcbmludGVyZmFjZSBIaXN0b3J5U3RhdGUge1xyXG4gIGJpemRvYzogdHJ1ZTtcclxuICBzdGVwOiBudW1iZXI7XHJcbiAgc3dhcD86IG51bWJlcjtcclxuICBzd2FwVGFiPzogbnVtYmVyO1xyXG4gIGdyb3VwPzogc3RyaW5nO1xyXG4gIHByZXZHcm91cD86IHN0cmluZztcclxuICBwYW5lczogYW55W107XHJcbiAgdGFiczogYW55W107XHJcbiAgc2VsZWN0ZWRUYWJJbmRleD86IG51bWJlcjtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicGFuZXNcIj5cclxuICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWFycm93XCIgKGNsaWNrKT1cInNjcm9sbEJ5KC00MDApXCIgbWF0UmlwcGxlIFttYXRSaXBwbGVVbmJvdW5kZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNvbG9yXT1cImFjY2VudFwiXHJcbiAgICAgICAqbmdJZj1cInByZXZcIj5cclxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tcnRsLW1pcnJvclwiPlxyXG4gICAgICBhcnJvd19iYWNrX2lvc1xyXG4gICAgPC9pPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJwYW5lcy10aXRsZVwiIFtAdGl0bGVdPVwidGl0bGVBbmltYXRpb25cIj5cclxuICAgIDxoMT5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImJhY2soKVwiICpuZ0lmPVwic3dhcFwiIFtiaXpkb2NUb29sdGlwXT1cIidCYWNrJ3x0cmFuc2xhdGVcIj48bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+YXJyb3dfY2lyY2xlX2xlZnQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwIG9mIHBhbmVzOyBsZXQgZmlyc3QgPSBmaXJzdFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWRjcnVtYnNcIiAqbmdJZj1cIiFmaXJzdFwiPlxcPC9zcGFuPlxyXG4gICAgICAgIHt7cC50aXRsZX19XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZ3VpZGUocGFuZXNbMF0uZ3VpZGUpXCIgKm5nSWY9XCJwYW5lc1swXT8uZ3VpZGVcIiBbYml6ZG9jVG9vbHRpcF09XCInSGVscCd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPmhlbHA8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9oMT5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPGJpemRvYy1xdWlja3Rvb2xzPjwvYml6ZG9jLXF1aWNrdG9vbHM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAjcGFubmluZyBjbGFzcz1cInBhbmVzLWNvbnRhaW5lclwiXHJcbiAgICAgICBjZGtTY3JvbGxhYmxlXHJcbiAgICAgICBAcGFuZXNcclxuICAgICAgIChzY3JvbGwpPVwibmF2aWdhdGlvbkFycm93cygkZXZlbnQpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwIG9mIHBhbmVzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxkaXYgKG1vdXNlZW50ZXIpPVwic2VsZWN0ZWRJbmRleCAhPT0gaSAmJiAhZHJhZ2dpbmcgJiYgc2VsZWN0KGkpXCJcclxuICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0KGkpXCJcclxuICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkSW5kZXggPT09IGlcIiBjbGFzcz1cInBhbmUtY29udGVudFwiIEBwYW5lPlxyXG4gICAgICAgIDxuZ3gtY29tcG9uZW50LW91dGxldCBbdHlwZV09XCJwLmNvbXBvbmVudFwiIFtpbmplY3Rvcl09XCJwLmluamVjdG9yXCIgKGNyZWF0ZSk9XCJwLl9pbnN0YW5jZSA9ICRldmVudFwiPjwvbmd4LWNvbXBvbmVudC1vdXRsZXQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZS1zZXBhcmF0b3JcIiAqbmdJZj1cImkgPCBwYW5lcy5sZW5ndGggLSAxXCIgKG1vdXNlZG93bik9XCJvblBhbmVSZXNpemUocCwgJGV2ZW50KVwiPiZuYnNwOzwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImJhY2tkcm9wXCIgKm5nSWY9XCJkaWFsb2dcIiAoY2xpY2spPVwiY2xvc2VUYWIoc2VsZWN0ZWRUYWJJbmRleClcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWFycm93IGZvcndhcmRcIlxyXG4gICAgICAgKm5nSWY9XCJuZXh0XCI+XHJcbiAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIG1hdC1pY29uLXJ0bC1taXJyb3JcIiBtYXRSaXBwbGUgW21hdFJpcHBsZVVuYm91bmRlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIiBbbWF0UmlwcGxlUmFkaXVzXT1cIjMwXCIgW21hdFJpcHBsZUNvbG9yXT1cImFjY2VudFwiXHJcbiAgICAgICAoY2xpY2spPVwic2Nyb2xsQnkoNDAwKVwiPlxyXG4gICAgICBhcnJvd19mb3J3YXJkX2lvc1xyXG4gICAgPC9pPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnMubGVuZ3RoXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRhYnMtc2VwYXJhdG9yXCIgKG1vdXNlZG93bik9XCJvblRhYlJlc2l6ZSgkZXZlbnQpXCI+Jm5ic3A7PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejE4IHRhYnNcIiBbQHRhYnNdPVwidGFic0FuaW1hdGlvblwiIChAdGFicy5kb25lKT1cImRvbmUoKVwiICN0YWJpbmc+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IHRhYnMtdGl0bGVcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRhYkJhY2soKVwiICpuZ0lmPVwic3dhcFRhYlwiIFtiaXpkb2NUb29sdGlwXT1cInByZXZHcm91cCB8fCAoJ0JhY2snfHRyYW5zbGF0ZSlcIj48bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+YXJyb3dfYmFjazwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxoMj57e2dyb3VwfX08L2gyPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZXhwYW5kVGFiKClcIiBbYml6ZG9jVG9vbHRpcF09XCInRXhwYW5kJ3wgdHJhbnNsYXRlXCI+PG1hdC1pY29uIGlubGluZT1cInRydWVcIiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5vcGVuX2luX2Z1bGw8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8IS0tKm5nSWY9XCJzZWxlY3RlZFRhYkluZGV4IDw9PCAtMSAmJiB0YWJzW3NlbGVjdGVkVGFiSW5kZXhdLmV4cGFuZGFibGVcIi0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjb2xsYXBzZSgpXCIgYml6ZG9jVG9vbHRpcD1cIkVzY1wiPjxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuYXYgbWF0LXRhYi1uYXYtYmFyIGNvbG9yPVwiYWNjZW50XCIgW2Rpc2FibGVQYWdpbmF0aW9uXT1cInRydWVcIj5cclxuICAgICAgPGEgbWF0LXRhYi1saW5rICpuZ0Zvcj1cImxldCB0IG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cIm1hdC10YWItbGlua1wiXHJcbiAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFRhYkluZGV4ID0gaVwiXHJcbiAgICAgICAgIFthY3RpdmVdPVwic2VsZWN0ZWRUYWJJbmRleCA9PT0gaVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBbbWF0QmFkZ2VdPVwidC5iYWRnZVwiIFttYXRCYWRnZUhpZGRlbl09XCIhdC5iYWRnZVwiIG1hdEJhZGdlU2l6ZT1cInNtYWxsXCIgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiPnt7dC5pY29ufX08L21hdC1pY29uPiZuYnNwO1xyXG4gICAgICAgIHt7dC50aXRsZX19XHJcbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwidC5kaXNtaXNzYWJsZVwiIChjbGljayk9XCJjbG9zZVRhYihpKVwiIGNsYXNzPVwidG9vbFwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8IS0taW5saW5lPVwidHJ1ZVwiLS0+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvbmF2PlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgdCBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCIgW3N0eWxlLmRpc3BsYXldPVwic2VsZWN0ZWRUYWJJbmRleCA9PT0gaSA/ICcnOiAnbm9uZSdcIiBjbGFzcz1cInRhYlwiIFtAdGFiXT1cInNlbGVjdGVkVGFiSW5kZXhcIj5cclxuICAgICAgPG5neC1jb21wb25lbnQtb3V0bGV0IFt0eXBlXT1cInQuY29tcG9uZW50XCIgW2luamVjdG9yXT1cInQuaW5qZWN0b3JcIiAoY3JlYXRlKT1cInQuX2luc3RhbmNlID0gJGV2ZW50XCI+PC9uZ3gtY29tcG9uZW50LW91dGxldD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
|
1090
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3Nsb3RzL3Nsb3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9zbG90cy9zbG90cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFxQixTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBR3pKLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQWUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUd6TyxPQUFPLEVBQUUsYUFBYSxFQUFpQixNQUFNLHNCQUFzQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSixPQUFPLEVBQWdELGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRNUcsTUFBTSxhQUFhLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQWNwQyxNQUFNLE9BQU8sY0FBYztJQW1EekIsWUFDc0IsSUFBcUIsRUFDakMsUUFBd0IsRUFDeEIsR0FBc0IsRUFDdEIsT0FBb0IsRUFDcEIsTUFBMEIsRUFDMUIsTUFBb0IsRUFDcEIsU0FBbUI7UUFMbkIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNwQixXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUF0RDdCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBTVYsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFDM0IsU0FBSSxHQUFtQixFQUFFLENBQUM7UUFDM0Isc0JBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0IsV0FBTSxHQUFHLEtBQUssQ0FBQztRQWlCZixrQkFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBR25CLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFPakIsV0FBTSxHQUFpQjtZQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDaEMsUUFBUSxFQUFFLElBQUk7WUFDZCxNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUE7UUFDRCxXQUFNLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUcxQixhQUFRLEdBQUcsRUFBYyxDQUFDO1FBQzFCLFNBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUM3QixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVM5QyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxNQUFNO1lBQ1osU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1osUUFBUSxDQUFDLEVBQUU7Z0JBQ1QsS0FBSyxVQUFVO29CQUNiLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEIsTUFBTTtnQkFDUixRQUFRO2FBQ1Q7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUF6REQsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQVcsZ0JBQWdCLENBQUMsS0FBSztRQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN6RixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ08sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDNUIsTUFBTSxFQUFFO2dCQUNOLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEY7U0FDRixDQUFDO0lBQ0osQ0FBQztJQTRDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQ3JCLFNBQVMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLEVBQUU7WUFDbEIsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN4RCxJQUFJLEVBQ0YsSUFBSSxFQUNKLEtBQUssRUFDTCxLQUFLLEVBQ0wsSUFBSSxFQUNKLE1BQU0sRUFDTixXQUFXLEVBQ1gsS0FBSyxFQUNOLEdBQUcsQ0FBQyxDQUFDO1lBQ04sSUFDRSxXQUFtQixFQUNuQixNQUFnQixFQUNoQixNQUFlLEVBQ2YsSUFBWSxFQUNaLEtBQW9CLENBQUM7WUFFdkIsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDL0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3BDLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3RCLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoQjtxQkFDSTtvQkFDSCxXQUFXLEdBQUcsQ0FBQyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7b0JBQ2xDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUM5QztnQkFDRCxJQUFJLFFBQVEsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDckQsTUFBTSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDN0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUM3QixVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUMvRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDdkI7b0JBQ0QsSUFBSSxHQUFHLFVBQVUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO2lCQUNoQztnQkFDRCxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFMUIsSUFBSSxDQUFDLEtBQUs7b0JBQ1IsTUFBTSxZQUFZLElBQUksRUFBRSxDQUFDO2dCQUMzQixNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxNQUFNO29CQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQztxQkFDaEQsSUFBSSxLQUFLLENBQUMsTUFBTTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDOUMsSUFBSSxDQUFDLElBQUk7b0JBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxJQUFJO29CQUFFLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQzlCO2lCQUNJO2dCQUNILElBQUksQ0FBQyxNQUFNO29CQUFFLE1BQU0sR0FBRyxjQUFjLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxXQUFXO29CQUFFLFdBQVcsR0FBRyxFQUFFLENBQUM7YUFDcEM7WUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztvQkFDNUIsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDNUI7WUFDRCxJQUFJLFFBQVEsRUFBRTtnQkFDWixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLEdBQUc7b0JBQzdDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO3dCQUMzQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN2QixJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFFOzRCQUNyQixJQUFJLFdBQVcsS0FBSyxHQUFHLENBQUMsV0FBVyxFQUFFO2dDQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO29DQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0NBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7aUNBQzlDO3FDQUNJO29DQUNILEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQ0FDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO29DQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO29DQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lDQUMxQjtnQ0FDRCxPQUFPOzZCQUNSO2lDQUNJO2dDQUNILElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQ0FDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO2dDQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO2dDQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dDQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0NBQ2IsT0FBTzs2QkFDUjt5QkFDRjs2QkFDSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFOzRCQUM1QixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDOzRCQUM3RCxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7NEJBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7NEJBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDYixPQUFPO3lCQUNSO3dCQUNELENBQUMsRUFBRSxDQUFDO3FCQUNMOztvQkFFRCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTt3QkFDNUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDekIsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTs0QkFDdEIsSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtnQ0FDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU07b0NBQ25ELE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQ0FDcEI7b0NBQ0gsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29DQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO29DQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lDQUNsQjtnQ0FDRCxPQUFPOzZCQUNSO2lDQUNJO2dDQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQ0FDL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dDQUNiLE9BQU87NkJBQ1I7eUJBQ0Y7NkJBQ0ksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTs0QkFDN0IsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQzs0QkFDOUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDOzRCQUNiLE9BQU87eUJBQ1I7d0JBQ0QsQ0FBQyxFQUFFLENBQUM7cUJBQ0w7Z0JBQ0gsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO29CQUNuQixJQUFJLENBQUMsS0FBSzt3QkFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUN2QixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHO3dCQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUMxQzs0QkFDRSxXQUFXOzRCQUNYLElBQUk7NEJBQ0osS0FBSzs0QkFDTCxJQUFJOzRCQUNKLEtBQUs7NEJBQ0wsS0FBSzs0QkFDTCxJQUFJOzRCQUNKLElBQUksRUFBRSxLQUFLOzRCQUNYLE1BQU07NEJBQ04sTUFBTTs0QkFDTixXQUFXOzRCQUNYLE1BQU07eUJBQ1AsQ0FBQyxDQUFDO3lCQUNGO3dCQUNILE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQ3hEOzRCQUNFLFdBQVc7NEJBQ1gsSUFBSTs0QkFDSixLQUFLOzRCQUNMLElBQUk7NEJBQ0osS0FBSzs0QkFDTCxJQUFJOzRCQUNKLElBQUksRUFBRSxLQUFLOzRCQUNYLE1BQU07NEJBQ04sTUFBTTs0QkFDTixXQUFXOzRCQUNYLE1BQU07eUJBQ1AsQ0FBQyxDQUFDO3dCQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO3FCQUNqRDtvQkFDRCxLQUFLO3dCQUNILElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDaEI7cUJBQ0k7b0JBQ0gsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3BFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHO3dCQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUNsRjthQUNGO2lCQUNJO2dCQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHO29CQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFDdkI7d0JBQ0UsSUFBSSxFQUFFLEtBQUs7d0JBQ1gsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJO3dCQUNqQixNQUFNO3dCQUNOLFdBQVc7d0JBQ1gsSUFBSTt3QkFDSixLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsTUFBTTt3QkFDTixXQUFXO3dCQUNYLE1BQU07cUJBQ1AsQ0FBQyxDQUFDO3FCQUNGO29CQUNILE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUNyQzt3QkFDRSxJQUFJLEVBQUUsS0FBSzt3QkFDWCxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUk7d0JBQ2pCLE1BQU07d0JBQ04sV0FBVzt3QkFDWCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsTUFBTTt3QkFDTixNQUFNLEVBQUUsV0FBVztxQkFDcEIsQ0FBQyxDQUFDO29CQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUNqRDthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxNQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixPQUFPO2FBQ1I7WUFDRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBcUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzlFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO2FBQ2hEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFDOUMsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7O1lBRXJFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDM0IsUUFBUSxFQUFFLGFBQWE7YUFDeEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNPLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBVyxFQUFFLEtBQW9CO1FBRTFELE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFeEosU0FBUyxXQUFXLENBQUMsSUFBWTtZQUMvQixPQUFPLElBQUk7Z0JBQ1QsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pGO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNWLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUM1QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZELElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDO3dCQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDekI7O29CQUVDLENBQUMsRUFBRSxDQUFDO2FBQ1A7U0FDRjtRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckY7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDcEQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFO3dCQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDL0I7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN4Qjs7b0JBRUMsQ0FBQyxFQUFFLENBQUM7YUFDUDtTQUNGO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7U0FDM0I7UUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQWEsRUFBRSxJQUFZLEVBQUUsV0FBbUIsRUFBRSxLQUFXO1FBQ3ZGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxNQUFNLFlBQVksSUFBSSxFQUFFLENBQUM7UUFFckMsSUFBSSxDQUFDLEtBQUs7WUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRXZCLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDdEIsSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDcEMsT0FBTztpQkFDUjtxQkFDSTtvQkFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDL0MsT0FBTztpQkFDUjthQUNGO2lCQUNJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7Z0JBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDOUQsT0FBTzthQUNSO1lBQ0QsS0FBSyxFQUFFLENBQUM7U0FDVDtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ2hDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVc7WUFDckQsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ08sS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFFLFdBQW1CLEVBQUUsS0FBVztRQUN0RixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxZQUFZLElBQUksRUFBRSxDQUFDO1FBRXJDLElBQUksQ0FBQyxLQUFLO1lBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUV2QixPQUFPLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JCLElBQUksV0FBVyxLQUFLLEdBQUcsQ0FBQyxXQUFXLEVBQUU7b0JBQ25DLE9BQU87aUJBQ1I7cUJBQ0k7b0JBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzlDLE9BQU87aUJBQ1I7YUFDRjtpQkFDSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO2dCQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzlELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdELE9BQU87YUFDUjtZQUNELEtBQUssRUFBRSxDQUFDO1NBQ1Q7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFL0MsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUMvQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHO1lBQ3JDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSztZQUNuQixJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxXQUFXO1lBQ25CLEtBQUssRUFBRSxLQUFLO1lBQ1osSUFBSSxFQUFFLEtBQUs7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ08sYUFBYSxDQUFDLEtBQW9CLEVBQUUsSUFBWTtRQUN0RCxJQUFLLEtBQXVCLENBQUMsTUFBTTtZQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUUsQ0FBQyxDQUFDLEtBQXVCO2dCQUNuRCxLQUF1QixDQUFDLE1BQU07Z0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNEOzs7O09BSUc7SUFDSyxlQUFlLENBQUMsSUFBa0IsRUFBRSxXQUFxQixFQUFFLEtBQWU7UUFDaEYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0Q7Ozs7Ozs7T0FPRztJQUNLLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBWSxFQUFFLElBQWtCLEVBQUUsTUFBZ0IsRUFBRSxXQUFxQixFQUFFLEtBQWU7UUFDakgsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7WUFDdkIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxLQUFLO1lBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQXNCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN0QzthQUNJO1lBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDN0I7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUssS0FBSyxDQUFDLEtBQXVCLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ3ZFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNwRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDakQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7b0JBQzVFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7b0JBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztpQkFDMUI7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU07WUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsTUFBTTtJQUNFLEtBQUs7UUFDWCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ssUUFBUSxDQUFDLElBQXdCO1FBQ3ZDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEYsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDbEIsSUFBSSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sS0FBSyxHQUFHO1lBQ1osTUFBTSxFQUFFLElBQUk7WUFDWixJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsT0FBTyxDQUFDLEtBQXNCLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNoQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztTQUNWLENBQUM7UUFDbEIsSUFBSSxJQUFJLEtBQUssTUFBTTtZQUNqQixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDOztZQUV6QyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQWdDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFrQjtRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsV0FBcUI7UUFDeEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2QyxJQUFJLFdBQW1CLENBQUM7UUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWhDLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsV0FBVztvQkFBRSxXQUFXLEdBQUcsRUFBRSxDQUFDOztvQkFDOUIsV0FBVyxHQUFHLFdBQVcsR0FBRyxRQUFRLENBQUM7Z0JBRTFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFDZixXQUFXLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztxQkFDckQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDO29CQUNuQixXQUFXLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUM1RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUM7b0JBQ2xCLFdBQVcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQzs7b0JBRTdDLFdBQVcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQzthQUN2QztTQUNGO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUNPLGlCQUFpQixDQUFDLFdBQW1CO1FBQzNDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN2QixXQUFXLElBQUksV0FBVztZQUN4QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDcEIsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDdkI7Z0JBQ0gsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN0RTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUNEOzs7O09BSUc7SUFDSyxPQUFPLENBQUMsS0FBb0IsRUFBRSxJQUFZO1FBQ2hELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUMvQixNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUVyQixPQUFPLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUNEOzs7T0FHRztJQUNLLE1BQU0sQ0FBQyxHQUFXO1FBQ3hCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLEtBQUs7WUFDUCxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ3JCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxLQUFLO29CQUNQLEtBQUssR0FBRyxLQUFLLENBQUM7O29CQUNYLE1BQU07YUFDWjtRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNEOzs7Ozs7T0FNRztJQUNLLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBb0IsRUFBRSxJQUFZLEVBQUUsTUFBZ0IsRUFBRSxJQUFjO1FBQ3ZGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDcEMsNEJBQTRCO1lBQzVCLE1BQU0sb0JBQW9CLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QixNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLE1BQU07WUFDUixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxPQUFPLEVBQUU7WUFDWCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM1QztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQW9CLEVBQUUsSUFBWSxFQUFFLE1BQWdCLEVBQUUsSUFBYztRQUM3RixNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUVsQyxJQUFJLE1BQU07WUFDUixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSztlQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTlCLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkMsSUFBSSxPQUFPO1lBQ1QsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBMkQsRUFBRSxNQUFnQixFQUFFLElBQWM7UUFDbEgsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDZCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQXFCLENBQUM7Z0JBQ3RFLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQztvQkFDbEIsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUNsQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUM7b0JBQzFCLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7b0JBRXRELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDckI7U0FDRjtJQUNILENBQUM7SUFFRCxHQUFHLENBQUksU0FBMkIsRUFBRSxPQUFxQjtRQUN2RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCxNQUFNLENBQUksUUFBZ0IsRUFBRSxTQUEyQixFQUFFLE9BQXFCO1FBQzVFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUksU0FBUyxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ08sV0FBVyxDQUFVLFNBQTJCLEVBQUUsT0FjekQsRUFBRSxRQUFpQjtRQUVsQixNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFFNUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBSSxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQ2pELE9BQU87WUFDUCxHQUNBLE9BQU87U0FDUixDQUFDLENBQUM7UUFDSCxJQUFJLFFBQVEsS0FBSyxTQUFTO1lBQ3hCLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEQ7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRDs7OztPQUlHO0lBQ0ssVUFBVSxDQUFVLFNBQTJCLEVBQ3JELElBQW9CLEVBQ3BCLE9BYUM7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUMvQixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtTQUNyQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNLLFVBQVUsQ0FBVSxTQUEyQixFQUFFLE9BZXhEO1FBQ0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFDeEIsTUFBTSxHQUFHLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUMxRCxVQUFVLEdBQUcsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQ3RFLFdBQVcsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUU1RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFJLFNBQVMsRUFDdEMsS0FBSyxFQUFFO1lBQ1AsR0FBRyxPQUFPO1lBQ1YsTUFBTTtZQUNOLFdBQVc7WUFDWCxVQUFVO1NBQ1gsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQ25FLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLEdBQUc7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsS0FBSyxFQUFFO29CQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDO2lCQUNiOztvQkFFQyxDQUFDLEVBQUUsQ0FBQTthQUNOLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQy9CLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDN0I7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7U0FDeEI7O1lBRUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWTtRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSTtRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQWE7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNqRCxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBSSxPQUFPLENBQUMsS0FBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsT0FBTztRQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFDRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLE9BQU8sQ0FBVSxDQUFTLEVBQUUsSUFBZ0I7UUFDeEQsUUFBUSxDQUFDLEVBQUU7WUFDVCxLQUFLLE9BQU87Z0JBQ1Y7b0JBQ0UsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTt3QkFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNqRDt5QkFDSTt3QkFDSCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDbkI7b0JBQ0QsTUFBTTtpQkFDUDtZQUNILEtBQUssT0FBTztnQkFDVixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO29CQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDdEI7cUJBQ0k7b0JBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTt3QkFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ3hDO2dCQUNELE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUs7b0JBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7b0JBRWpCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsTUFBTTtZQUNSLEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDekIsTUFBTTthQUNQO1NBQ0Y7SUFDSCxDQUFDO0lBQ0Q7OztPQUdHO0lBRUgsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQzlCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ25FLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsYUFBK0IsRUFDeEUsS0FBSyxHQUFHLEVBQUUsQ0FBQyxnQkFBa0MsQ0FBQztZQUNoRCxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVE7Z0JBQ2xCLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzVHO0lBQ0gsQ0FBQztJQUNPLE9BQU87UUFDYiw2REFBNkQ7UUFDN0QsYUFBYTtRQUNiLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsUUFBUSxDQUFDLFFBQWdCO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFDRCxVQUFVO1FBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsR0FBRztZQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDekI7O2dCQUVDLENBQUMsRUFBRSxDQUFDO1NBQ1AsUUFDTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNPLGVBQWU7UUFDckIsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxPQUFPLENBQUMsS0FBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQ3JCLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBZ0I7UUFDckIsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQzVDLElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7O2dCQUNuRCxPQUFPO1NBQ2I7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFnQjtRQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWxDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhCLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhO1lBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFrQjtRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNqRSxPQUFPLEVBQUUsQ0FBQztRQUVaLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxFQUFFO2dCQUFFLE1BQU0sRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUNEOzs7T0FHRztJQUNLLFlBQVksQ0FBQyxJQUFrQjtRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsT0FBTyxFQUFFO1lBQ1QsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNO0lBQ0UsS0FBSyxDQUFDLFdBQVc7UUFDdkIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDTyxLQUFLLENBQUMsVUFBVTtRQUN0QixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFnQjtRQUN4QyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUs7WUFDcEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzVDLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsRUFBRTtnQkFDTCxNQUFNLEVBQUUsQ0FBQztTQUNaO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFlBQVksQ0FBQyxJQUFrQjtRQUNyQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBb0IsQ0FBQztRQUN0RSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNmLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN4QixJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxFQUFFLENBQUM7O1lBRVYsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBbUIsQ0FBQztRQUMxRCxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsSUFBWSxTQUFTO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUNELElBQUk7UUFDRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUNELGdCQUFnQixDQUFDLENBQVM7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQzdELFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsVUFBVSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRixVQUFVLEdBQUcsU0FBUyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQzdELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsUUFBUSxDQUFDLENBQVM7UUFDaEIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQW1CLENBQUM7UUFDeEQsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2IsQ0FBQztJQUNELFlBQVksQ0FBQyxJQUFrQixFQUFFLEtBQWlCO1FBQ2hELE1BQU0sRUFBRSxHQUFJLEtBQUssQ0FBQyxVQUE2QixDQUFDLHNCQUF3QyxDQUFDO1FBRXpGLE1BQU0sMkJBQTJCO1FBQy9CLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxFQUN0QixDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4QixLQUFLLENBQUMsVUFBNkIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBRXJCLFFBQVEsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3ZCLEtBQUssQ0FBQyxVQUE2QixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEUsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDLENBQUM7UUFDRixTQUFTLFdBQVcsQ0FBQyxDQUFDO1lBRXBCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUTtrQkFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN4QyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBUyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFDRCxXQUFXLENBQUMsS0FBaUI7UUFDM0IsTUFBTSxFQUFFLEdBQUksS0FBSyxDQUFDLFVBQTZCLENBQUMsa0JBQW9DLENBQUM7UUFFckYsTUFDRSxFQUFFLEdBQUcsSUFBSTtRQUNULDJCQUEyQjtRQUMzQixLQUFLLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFDdEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEIsS0FBSyxDQUFDLFVBQTZCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUVyQixRQUFRLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUNuQyxRQUFRLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRTtZQUN2QixLQUFLLENBQUMsVUFBNkIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xFLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEIsMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUM7UUFDRixTQUFTLFdBQVcsQ0FBQyxDQUFDO1lBRXBCLGtDQUFrQztZQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzVELFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFDTyxZQUFZLENBQUMsSUFBYTtRQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7MkdBN21DVSxjQUFjLGtCQW9EZixVQUFVOytGQXBEVCxjQUFjLHNQQUNLLGdCQUFnQixrS0FFbkMsYUFBYSw4RENyQzFCLG04SEFvRUEsK2lIRDNDYyxDQUFDLGNBQWM7UUFDekIsbUJBQW1CO1FBQ25CLGFBQWE7UUFDYixjQUFjO1FBQ2QsY0FBYztRQUNkLGFBQWE7UUFDYixZQUFZO0tBQ2I7MkZBRVUsY0FBYztrQkFiMUIsU0FBUzsrQkFDRSxxQkFBcUIsY0FHbkIsQ0FBQyxjQUFjO3dCQUN6QixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsWUFBWTtxQkFDYjs7MEJBc0RFLE1BQU07MkJBQUMsVUFBVTtzTkFuRDRDLGtCQUFrQjtzQkFBakYsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDekMsWUFBWTtzQkFBaEMsU0FBUzt1QkFBQyxRQUFRO2dCQUN5QixXQUFXO3NCQUF0RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBNjJCMUMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QjtnQkFTdkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWU7O0FBeVAvQixNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztBQUV4QyxTQUFTLGFBQWEsQ0FBQyxNQUFtQixFQUFFLFFBQWlCO0lBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBRWxGLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ25CLFFBQVE7WUFDUixLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVE7Z0JBQzlCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO2dCQUNuQixPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3BFLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNsQixJQUFJLFFBQVEsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7Z0JBQ3RDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN6QixNQUFNLEVBQUUsS0FBSztpQkFDZCxDQUFDLENBQUM7U0FDTjtLQUNGO0lBQ0QsT0FBTyxNQUF5QixDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmlwcGxlQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZS9yaXBwbGUnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGlzQXJyYXksIGlzQm9vbGVhbiwgaXNEYXRlLCBpc1Byb21pc2UsIGlzU3RyaW5nIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgUEFORVNfREFUQSwgUGFuZVJlZiwgUGFuZU9wdGlvbnMsIFF1ZXJ5UGFyYW1OYXZpZ2F0aW9uLCBQYXJhbU5hdmlnYXRpb24sIE5hdmlnYXRpb25TdGFydCwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblNlbGVjdGVkLCBQQVRIX0NIQVIsIFFVRVJZX0NIQVIsIEFSR19DSEFSLCBQQU5FX0NIQVIsIENvbGxhcHNlTmF2aWdhdGlvbiwgQmFja05hdmlnYXRpb24gfSBmcm9tICcuL3BhbmUtcmVmJztcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tICcuL3JvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlLCBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBXaW5kb3dUaXRsZVNlcnZpY2UgfSBmcm9tICcuLi93aW5kb3ctdGl0bGUuc2VydmljZSc7XHJcbmltcG9ydCB7IHBhbmVzQW5pbWF0aW9uLCBwYW5lQW5pbWF0aW9uLCBwYW5lc1RpdGxlQW5pbWF0aW9uLCBwYXJhbUFuaW1hdGlvbiwgcXVlcnlBbmltYXRpb24sIHRhYkFuaW1hdGlvbiwgdGFic0FuaW1hdGlvbiB9IGZyb20gJy4uL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBQYW5lUmVzb2x2ZSwgUGFuZVJvdXRlLCBQYXJhbU1hcCwgQ2FuRGlzbWlzcywgREVGQVVMVF9QT0xJQ1ksIE9wZW5Qb2xpY3kgfSBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgR3VpZGVTZXJ2aWNlIH0gZnJvbSAnLi4vZ3VpZGUvZ3VpZGUuc2VydmljZSc7XHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIHJlbW92ZUFsbExpc3RlbmVycyhuYW1lPzogc3RyaW5nKTtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfUk9VVEUgPSBbJ2Rhc2hib2FyZCddO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1wYW5lcy1vdXRsZXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbG90cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2xvdHMuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbcGFuZXNBbmltYXRpb24sXHJcbiAgICBwYW5lc1RpdGxlQW5pbWF0aW9uLFxyXG4gICAgcGFuZUFuaW1hdGlvbixcclxuICAgIHBhcmFtQW5pbWF0aW9uLFxyXG4gICAgcXVlcnlBbmltYXRpb24sXHJcbiAgICB0YWJzQW5pbWF0aW9uLFxyXG4gICAgdGFiQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xvdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgncGFubmluZycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIF9wYW5lc0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJpbmcnKSBfdGFic0VsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChDZGtTY3JvbGxhYmxlLCB7IHN0YXRpYzogdHJ1ZSB9KSBfc2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZTtcclxuICB0aXRsZUFuaW1hdGlvbiA9IDA7XHJcbiAgZ3JvdXA6IHN0cmluZztcclxuICBzd2FwPzogbnVtYmVyO1xyXG4gIHN3YXBUYWI/OiBudW1iZXI7XHJcbiAgcHJldkdyb3VwPzogc3RyaW5nO1xyXG5cclxuICByZWFkb25seSBwYW5lczogUGFuZVJlZjxhbnk+W10gPSBbXTtcclxuICByZWFkb25seSB0YWJzOiBQYW5lUmVmPGFueT5bXSA9IFtdO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkVGFiSW5kZXggPSAtMTtcclxuICBkaWFsb2cgPSBmYWxzZTtcclxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkVGFiSW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUYWJJbmRleDtcclxuICB9XHJcbiAgcHVibGljIHNldCBzZWxlY3RlZFRhYkluZGV4KHZhbHVlKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID0gdmFsdWU7XHJcbiAgICB0aGlzLmRpYWxvZyA9IHRoaXMuX3NlbGVjdGVkVGFiSW5kZXggPiAtMSAmJiB0aGlzLnRhYnMuYXQodGhpcy5fc2VsZWN0ZWRUYWJJbmRleCkuZGlhbG9nO1xyXG4gICAgdGhpcy5fc2V0VGFiQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NldFRhYkFuaW1hdGlvbigpIHtcclxuICAgIHRoaXMudGFic0FuaW1hdGlvbiA9IHtcclxuICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCxcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgc3RhcnRXaWR0aDogdGhpcy5fdGFic0VsZW1lbnQgPyB0aGlzLl90YWJzRWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIDogMFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuICBzZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgbmV4dDogYm9vbGVhbjtcclxuICBwcmV2OiBib29sZWFuO1xyXG4gIGRyYWdnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGFic0FuaW1hdGlvbjoge1xyXG4gICAgdmFsdWU6IG51bWJlcixcclxuICAgIHBhcmFtczoge1xyXG4gICAgICBzdGFydFdpZHRoOiBudW1iZXJcclxuICAgIH1cclxuICB9O1xyXG4gIHJlYWRvbmx5IHJpcHBsZTogUmlwcGxlQ29uZmlnID0ge1xyXG4gICAgY29sb3I6IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCksXHJcbiAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgIHJhZGl1czogMjVcclxuICB9XHJcbiAgYWNjZW50OiBzdHJpbmcgPSB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpO1xyXG4gIHByaXZhdGUgX25hdmlnYXRpbmc6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfcmVwb3NpdG9yeTogRXh0ZW5kZWRSb3V0ZVtdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlbmRpbmcgPSBbXSBhcyBzdHJpbmdbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9ydGwgPSB0aGlzLl9zZXNzaW9uLmludmVyc2U7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFBBTkVTX0RBVEEpIGRhdGE6IEV4dGVuZGVkUm91dGVbXSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBQYW5lc1JvdXRlcixcclxuICAgIHByaXZhdGUgX3RpdGxlOiBXaW5kb3dUaXRsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9ndWlkZTogR3VpZGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICBfc2Vzc2lvbi50aGVtZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB0aGlzLmFjY2VudCA9IF9zZXNzaW9uLmdldEFjY2VudCgpKTtcclxuICAgIF9yb3V0ZXIuX2NvbW0kLlxyXG4gICAgICBzdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChlKSB7XHJcbiAgICAgICAgICBjYXNlICdjb2xsYXBzZSc6XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB0aGlzLl9yZXBvc2l0b3J5ID0gcHJlcGFyZVJvdXRlcyhkYXRhKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcm91dGVyLl9uYXZpZ2F0ZSQuXHJcbiAgICAgIHN1YnNjcmliZShhc3luYyBuID0+IHtcclxuICAgICAgICBjb25zdCB7IGNvbW1hbmRzLCBjb21wb25lbnQsIHBhdGhNb2RlLCByZWxhdGl2ZVRvIH0gPSBuO1xyXG4gICAgICAgIGxldCB7XHJcbiAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBncm91cCxcclxuICAgICAgICAgIGhlbHAsXHJcbiAgICAgICAgICBwb2xpY3ksXHJcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgIHN0YXRlXHJcbiAgICAgICAgfSA9IG47XHJcbiAgICAgICAgbGV0XHJcbiAgICAgICAgICBxdWVyeVN0cmluZzogc3RyaW5nLFxyXG4gICAgICAgICAgcGFyYW1zOiBQYXJhbU1hcCxcclxuICAgICAgICAgIHBhcmVudDogUGFuZVJlZixcclxuICAgICAgICAgIHBhdGg6IHN0cmluZyxcclxuICAgICAgICAgIHJvdXRlOiBFeHRlbmRlZFJvdXRlO1xyXG5cclxuICAgICAgICBpZiAoY29tbWFuZHMgJiYgY29tbWFuZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBwYXRoID0gbi5jb21tYW5kcy5qb2luKCcvJyk7XHJcbiAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKFFVRVJZX0NIQVIpID4gLTEpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VncyA9IHBhdGguc3BsaXQoUVVFUllfQ0hBUik7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gc2Vnc1sxXTtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nIHx8ICcnKTtcclxuICAgICAgICAgICAgcGF0aCA9IHNlZ3NbMF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBuLnF1ZXJ5UGFyYW1zIHx8IHt9O1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHRoaXMuX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChwYXRoTW9kZSA9PT0gJ3JlbGF0aXZlJyB8fCBwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XHJcbiAgICAgICAgICAgIHBhcmVudCA9IHJlbGF0aXZlVG8gfHwgdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50cGF0aCA9IHBhcmVudC5wYXRoO1xyXG4gICAgICAgICAgICB3aGlsZSAocGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xyXG4gICAgICAgICAgICAgIHBhcmVudHBhdGggPSBwYXJlbnRwYXRoLnN1YnN0cigwLCBwYXJlbnRwYXRoLmxhc3RJbmRleE9mKCcvJykpO1xyXG4gICAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cigzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXRoID0gcGFyZW50cGF0aCArICcvJyArIHBhdGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByb3V0ZSA9IHRoaXMuX21hdGNoKHBhdGgpO1xyXG5cclxuICAgICAgICAgIGlmICghcm91dGUpXHJcbiAgICAgICAgICAgIHRocm93IGBubyBtYXRjaCAke3BhdGh9YDtcclxuICAgICAgICAgIHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgICBpZiAoIXBvbGljeSkgcG9saWN5ID0gcm91dGUucG9saWN5IHx8IERFRkFVTFRfUE9MSUNZO1xyXG4gICAgICAgICAgZWxzZSBpZiAocm91dGUucG9saWN5KSBwb2xpY3kgfD0gcm91dGUucG9saWN5O1xyXG4gICAgICAgICAgaWYgKCFpY29uKSBpY29uID0gcm91dGUuaWNvbjtcclxuICAgICAgICAgIGlmICghaGVscCkgaGVscCA9IHJvdXRlLmhlbHA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFwb2xpY3kpIHBvbGljeSA9IERFRkFVTFRfUE9MSUNZO1xyXG4gICAgICAgICAgaWYgKCFxdWVyeVBhcmFtcykgcXVlcnlQYXJhbXMgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5DbGVhcikgPT0gT3BlblBvbGljeS5DbGVhcikge1xyXG4gICAgICAgICAgdGhpcy5fY2xlYXJQZW5kaW5nKCk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9jbGVhclRhYnMoKTtcclxuICAgICAgICAgIGlmICghKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2xlYXJQYW5lcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29tbWFuZHMpIHtcclxuICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiKVxyXG4gICAgICAgICAgICB3aGlsZSAoaSA8IHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChwYXRoID09PSB0YWIucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSB0YWIucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRvZ2dsZSkgPT0gT3BlblBvbGljeS5Ub2dnbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlICYmIHRhYi5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXModGFiLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N5bmMoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmICh0YWIucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9uYXZQYXJhbXMocGF0aCwgdGFiLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmMoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSBwYW5lLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5Ub2dnbGUpID09IE9wZW5Qb2xpY3kuVG9nZ2xlKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlICYmIHBhbmUuX2RhdGEkLm5leHQoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAocGFuZS5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCBwYW5lLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zeW5jKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHt9O1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zdGF0ZShyb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiKVxyXG4gICAgICAgICAgICAgIHRoaXMuX2luc2VydFRhYihjb21wb25lbnQgfHwgcm91dGUuY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgICAgICAgaGVscCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcG9saWN5XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMuX2luc2VydFBhbmUoY29tcG9uZW50IHx8IHJvdXRlLmNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgaGVscCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcG9saWN5XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBwYW5lLl9mdWxsc2NyZWVuJC5uZXh0KHRoaXMucGFuZXMubGVuZ3RoID09PSAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb3V0ZSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuX3N5bmMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwYW5lID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSA9PSBPcGVuUG9saWN5LlRhYiA/XHJcbiAgICAgICAgICAgICAgdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0gOiB0aGlzLnBhbmVzW3RoaXMuc2VsZWN0ZWRJbmRleF07XHJcbiAgICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHBhbmUsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3N5bmMoKTtcclxuICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgIT0gT3BlblBvbGljeS5UYWIpIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWRJbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgIHRoaXMuX2luc2VydFRhYihjb21wb25lbnQsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBpY29uLCB0aXRsZSwgaGVscCxcclxuICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHBvbGljeVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLl9pbnNlcnRQYW5lKGNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGljb24sIHRpdGxlLCBoZWxwLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBwb2xpY3ksIHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHBhbmUuX2Z1bGxzY3JlZW4kLm5leHQodGhpcy5wYW5lcy5sZW5ndGggPT09IDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB3aW5kb3cucmVtb3ZlQWxsTGlzdGVuZXJzKCdwb3BzdGF0ZScpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9uYXZpZ2F0aW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbmF2aWdhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzdGF0ZSA9IGUuc3RhdGUgJiYgZS5zdGF0ZS5iaXpkb2MgPyBlLnN0YXRlIGFzIEhpc3RvcnlTdGF0ZSA6IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLCBzdGF0ZSk7XHJcbiAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc3dhcCA9IHN0YXRlLnN3YXA7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gc3RhdGUuc3dhcFRhYjtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHN0YXRlLnByZXZHcm91cDtcclxuICAgICAgICB0aGlzLmdyb3VwID0gc3RhdGUuZ3JvdXA7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gc3RhdGUuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUubGVuZ3RoID4gMSlcclxuICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLFxyXG4gICAgICAgIGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyBoaXN0b3J5LnN0YXRlIDogdW5kZWZpbmVkKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fcm91dGVyLl9uYXZpZ2F0ZSQubmV4dCh7XHJcbiAgICAgICAgY29tbWFuZHM6IERFRkFVTFRfUk9VVEUsXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9kZXNlcmlhbGl6ZSh1cmw6IHN0cmluZywgc3RhdGU/OiBIaXN0b3J5U3RhdGUpIHtcclxuXHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmwpLnNwbGl0KFBBTkVfQ0hBUiksIHBhbmVzID0gZGVzZXJpYWxpemUoc2VjdGlvbnNbMF0pLCB0YWJzID0gc2VjdGlvbnMubGVuZ3RoID4gMSA/IGRlc2VyaWFsaXplKHNlY3Rpb25zWzFdKSA6IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIGRlc2VyaWFsaXplKHBhdGg6IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gcGF0aC5cclxuICAgICAgICBzcGxpdChQQVRIX0NIQVIpLm1hcChzID0+IHtcclxuICAgICAgICAgIGNvbnN0IFtwYXRoLCBxdWVyeVN0cmluZ10gPSBzLnNwbGl0KFFVRVJZX0NIQVIpO1xyXG4gICAgICAgICAgcmV0dXJuIHsgcGF0aCwgcXVlcnlTdHJpbmcgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwYW5lID0gcGFuZXNbaV07XHJcbiAgICAgIGF3YWl0IHRoaXMuX25hdmlnYXRlUGFuZShpLCBwYW5lLnBhdGgsIHBhbmUucXVlcnlTdHJpbmcsIHN0YXRlID8gc3RhdGUucGFuZXNbaV0gOiBudWxsKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCA+IHBhbmVzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgaSA9IDA7XHJcbiAgICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgICAgaWYgKHBhbmVzLmxlbmd0aCAtIDEgPCBpIHx8IHBhbmUucGF0aCAhPT0gcGFuZXNbaV0ucGF0aCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gaSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaSAtIDE7XHJcbiAgICAgICAgICB0aGlzLnBhbmVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHBhbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPCAwKVxyXG4gICAgICB0aGlzLnNlbGVjdCgwKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdGFiID0gdGFic1tpXTtcclxuICAgICAgYXdhaXQgdGhpcy5fbmF2aWdhdGVUYWIoaSwgdGFiLnBhdGgsIHRhYi5xdWVyeVN0cmluZywgc3RhdGUgPyBzdGF0ZS50YWJzW2ldIDogbnVsbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCA+IHRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHRhYiA9IHRoaXMudGFic1tpXTtcclxuICAgICAgICBpZiAodGFicy5sZW5ndGggLSAxIDwgaSB8fCB0YWIucGF0aCAhPT0gdGFic1tpXS5wYXRoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGkgLSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50YWJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRhYik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGggJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbiA9IHRoaXMucGFuZXMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2ldO1xyXG4gICAgICBwYW5lLmZ1bGxzY3JlZW4gIT09IChuID09PSAxKSAmJlxyXG4gICAgICAgIHBhbmUuX2Z1bGxzY3JlZW4kLm5leHQobiA9PT0gMSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpbmRleFxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHF1ZXJ5U3RyaW5nXHJcbiAgICogQHBhcmFtIHN0YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2aWdhdGVQYW5lKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gcGFuZS5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChwYW5lLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHBhbmUucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHBhbmUsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRBbmNlc3Rvcihyb3V0ZSwgcGF0aCk7XHJcbiAgICBhd2FpdCB0aGlzLl9zdGF0ZShyb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICB0aGlzLl9pbnNlcnRQYW5lKHJvdXRlLmNvbXBvbmVudCwge1xyXG4gICAgICBwYXRoLCBwYXJlbnQsIHJvdXRlLCBkYXRhOiBzdGF0ZSwgcGFyYW1zLCBxdWVyeVBhcmFtcyxcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3ksXHJcbiAgICAgIGZvY3VzOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX25hdmlnYXRlVGFiKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHRhYi5wYXRoKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSB0YWIucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXModGFiLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0YWIucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXModGFiLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUsIHBhdGgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCB0YWIsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuXHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9maW5kQW5jZXN0b3Iocm91dGUsIHBhdGgpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHRoaXMuX2luc2VydFRhYihyb3V0ZS5jb21wb25lbnQsIHtcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3kgfCBPcGVuUG9saWN5LlRhYixcclxuICAgICAgcGF0aCwgcGFyZW50LCByb3V0ZSxcclxuICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgIHBhcmFtcywgcXVlcnlQYXJhbXMsXHJcbiAgICAgIGZvY3VzOiBmYWxzZSxcclxuICAgICAgc3dhcDogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9maW5kQW5jZXN0b3Iocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZykge1xyXG4gICAgaWYgKChyb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQpXHJcbiAgICAgIHJldHVybiB0aGlzLnBhbmVzLmZpbmQocCA9PiAocC5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKSA9PT1cclxuICAgICAgICAocm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSkucGFyZW50ICYmXHJcbiAgICAgICAgcGF0aC5zdGFydHNXaXRoKHAucGF0aCkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX25hdlF1ZXJ5UGFyYW1zKHBhbmU6IFBhbmVSZWY8YW55PiwgcXVlcnlQYXJhbXM6IFBhcmFtTWFwLCBzdGF0ZTogUGFyYW1NYXApIHtcclxuICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgc3RhdGUgJiYgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dChxdWVyeVBhcmFtcyk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgUXVlcnlQYXJhbU5hdmlnYXRpb24ocXVlcnlQYXJhbXMsIHBhbmUpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcclxuICAgKiBAcGFyYW0gc3RhdGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9uYXZQYXJhbXMocGF0aDogc3RyaW5nLCBwYW5lOiBQYW5lUmVmPGFueT4sIHBhcmFtczogUGFyYW1NYXAsIHF1ZXJ5UGFyYW1zOiBQYXJhbU1hcCwgc3RhdGU6IFBhcmFtTWFwKSB7XHJcbiAgICBpZiAocGFuZS5yb3V0ZS5jYW5EaXNtaXNzKVxyXG4gICAgICBhd2FpdCB0aGlzLl9kaXNtaXNzKHBhbmUpO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcbiAgICBhd2FpdCB0aGlzLl9zdGF0ZShwYW5lLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICBwYW5lLl9wYXRoID0gcGF0aDtcclxuICAgIHBhbmUuX3BhcmFtcyQubmV4dChwYXJhbXMpO1xyXG4gICAgaWYgKHF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dChxdWVyeVBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcGFuZS5fcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgcGFuZS5fcXVlcnlQYXJhbXMkLm5leHQoe30pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IFBhcmFtTmF2aWdhdGlvbihwYXJhbXMsIHBhbmUpKTtcclxuXHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICBpZiAoY2hpbGQucm91dGUgJiYgKGNoaWxkLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUpLnBhcmVudCA9PT0gcGFuZS5yb3V0ZSkge1xyXG4gICAgICAgIGNoaWxkLl9kYXRhJC5uZXh0KE9iamVjdC5hc3NpZ24oY2hpbGQuZGF0YSwgc3RhdGUpKTtcclxuICAgICAgICBjaGlsZC5fcGFyYW1zJC5uZXh0KHBhcmFtcyk7XHJcbiAgICAgICAgY2hpbGQuX3BhdGggPSBwYW5lLnBhdGggKyAnLycgKyBjaGlsZC5yb3V0ZS5wYXRoO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPiAtMSAmJiBjaGlsZCA9PT0gdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0pIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgICAgIHRoaXMuZ3JvdXAgPSBjaGlsZC5ncm91cDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHBhbmUubW9kZSA9PT0gJ3BhbmUnKSB0aGlzLnRpdGxlQW5pbWF0aW9uKys7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgX3N5bmMoKSB7XHJcbiAgICB0aGlzLl9uYXZpZ2F0aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuX2hpc3RvcnkoJ3B1c2gnKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fbmF2aWdhdGluZyA9IGZhbHNlLCAyMDApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gbW9kZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2hpc3RvcnkobW9kZTogJ3JlcGxhY2UnIHwgJ3B1c2gnKSB7XHJcbiAgICBsZXQgcGF0aCA9IHRoaXMucGFuZXMuZmlsdGVyKHAgPT4gcC5yb3V0ZSkubWFwKHMgPT4gcy5mdWxsUGF0aCkuam9pbihQQVRIX0NIQVIpO1xyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGgpXHJcbiAgICAgIHBhdGggKz0gUEFORV9DSEFSICsgdGhpcy50YWJzLmZpbHRlcihwID0+IHAucm91dGUpLm1hcChzID0+IHMuZnVsbFBhdGgpLmpvaW4oUEFUSF9DSEFSKTtcclxuICAgIGNvbnN0IHN0YXRlID0ge1xyXG4gICAgICBiaXpkb2M6IHRydWUsXHJcbiAgICAgIHN0ZXA6IGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXAgKyAxIDogMSxcclxuICAgICAgc2VsZWN0ZWRUYWJJbmRleDogdGhpcy5zZWxlY3RlZFRhYkluZGV4LFxyXG4gICAgICBwYW5lczogdGhpcy5wYW5lcy5tYXAocCA9PiBwLmRhdGEpLFxyXG4gICAgICB0YWJzOiB0aGlzLnRhYnMubWFwKHQgPT4gdC5kYXRhKSxcclxuICAgICAgc3dhcDogdGhpcy5zd2FwLFxyXG4gICAgICBncm91cDogdGhpcy5ncm91cCxcclxuICAgICAgc3dhcFRhYjogdGhpcy5zd2FwVGFiLFxyXG4gICAgICBwcmV2R3JvdXA6IHRoaXMucHJldkdyb3VwXHJcbiAgICB9IGFzIEhpc3RvcnlTdGF0ZTtcclxuICAgIGlmIChtb2RlID09PSAncHVzaCcpXHJcbiAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHN0YXRlLCAnJywgJy8nICsgcGF0aCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlLCAnJyk7XHJcbiAgfVxyXG5cclxuICBkcm9wKGV2dDogQ2RrRHJhZ0Ryb3A8c3RyaW5nLCBzdHJpbmc+KSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1tldnQucHJldmlvdXNJbmRleF07XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShldnQucHJldmlvdXNJbmRleCwgMSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShldnQuY3VycmVudEluZGV4LCAwLCBwYW5lKTtcclxuICAgIHRoaXMuX3N5bmMoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVBpbm5lZChwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIHBhbmUucGlubmVkID0gIXBhbmUucGlubmVkO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBpZiAocy5kZWNlbmRlbnRPZihwYW5lKSkgcy5waW5uZWQgPSBwYW5lLnBpbm5lZDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcXVlcnlTdHJpbmcocXVlcnlQYXJhbXM6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKTtcclxuICAgIGxldCBxdWVyeVN0cmluZzogc3RyaW5nO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdmFsID0gcXVlcnlQYXJhbXNbbmFtZXNbaV1dO1xyXG5cclxuICAgICAgaWYgKHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghcXVlcnlTdHJpbmcpIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgZWxzZSBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nICsgQVJHX0NIQVI7XHJcblxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWwpKVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7bmFtZXNbaV19PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbCl9YDtcclxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KHZhbCkpXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSB2YWwubWFwKHYgPT4gYCR7bmFtZXNbaV19PSR7dn1gKS5qb2luKEFSR19DSEFSKTtcclxuICAgICAgICBlbHNlIGlmIChpc0RhdGUodmFsKSlcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbC50b0pTT04oKX1gO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbH1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlTdHJpbmc7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmc6IHN0cmluZyk6IFBhcmFtTWFwIHtcclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICBxdWVyeVN0cmluZyAmJiBxdWVyeVN0cmluZy5cclxuICAgICAgc3BsaXQoQVJHX0NIQVIpLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgY29uc3QgW25hbWUsIHZhbHVlXSA9IHAuc3BsaXQoJz0nKTtcclxuICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zW25hbWVdKVxyXG4gICAgICAgICAgcXVlcnlQYXJhbXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHMgPSBxdWVyeVBhcmFtc1tuYW1lXTtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zW25hbWVdID0gaXNBcnJheSh2YWxzKSA/IFsuLi52YWxzLCB2YWx1ZV0gOiBbdmFscywgdmFsdWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gcXVlcnlQYXJhbXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByb3V0ZVxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcGFyYW1zKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGV4ID0gcm91dGUucmVnRXguZXhlYyhwYXRoKSxcclxuICAgICAgcGFyYW1zID0gZXguZ3JvdXBzO1xyXG5cclxuICAgIHJldHVybiBwYXJhbXMgfHwge307XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB1cmxcclxuICAgKi9cclxuICBwcml2YXRlIF9tYXRjaCh1cmw6IHN0cmluZykge1xyXG4gICAgbGV0IHJvdXRlID0gdGhpcy5fcmVwb3NpdG9yeS5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgaWYgKHJvdXRlKVxyXG4gICAgICB3aGlsZSAocm91dGUuY2hpbGRyZW4pIHtcclxuICAgICAgICBsZXQgY2hpbGQgPSByb3V0ZS5jaGlsZHJlbi5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgICAgIGlmIChjaGlsZClcclxuICAgICAgICAgIHJvdXRlID0gY2hpbGQ7XHJcbiAgICAgICAgZWxzZSBicmVhaztcclxuICAgICAgfVxyXG4gICAgcmV0dXJuIHJvdXRlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcm91dGVcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXRlKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcsIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBpZiAodGhpcy5fcGVuZGluZy5pbmRleE9mKHBhdGgpID4gLTEpIHtcclxuICAgICAgLy90aGlzLl9wcy50b2FzdCgnV29ya2luZycpO1xyXG4gICAgICB0aHJvdyAnYWxyZWFkeSBwcm9jZXNzaW5nJztcclxuICAgIH1cclxuICAgIHRoaXMuX3BlbmRpbmcucHVzaChwYXRoKTtcclxuXHJcbiAgICBjb25zdCB7IHBhcmVudCwgcmVzb2x2ZSB9ID0gcm91dGU7XHJcbiAgICBpZiAocGFyZW50KVxyXG4gICAgICBhd2FpdCB0aGlzLl9wYXJlbnRzdGF0ZShwYXJlbnQsIHBhdGgsIHBhcmFtcywgZGF0YSk7XHJcbiAgICBpZiAocmVzb2x2ZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9yZXNvbHZlKHJlc29sdmUsIHBhcmFtcywgZGF0YSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wZW5kaW5nLnJlbW92ZShwYXRoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJvdXRlXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9wYXJlbnRzdGF0ZShyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3QgeyBwYXJlbnQsIHJlc29sdmUgfSA9IHJvdXRlO1xyXG5cclxuICAgIGlmIChwYXJlbnQpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3BhcmVudHN0YXRlKHBhcmVudCwgcGF0aCwgcGFyYW1zLCBkYXRhKTtcclxuXHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lcy5maW5kKHMgPT4gcy5yb3V0ZSAmJiBzLnJvdXRlID09PSByb3V0ZVxyXG4gICAgICAmJiBwYXRoLnN0YXJ0c1dpdGgocy5wYXRoKSk7XHJcblxyXG4gICAgcGFuZSAmJiBPYmplY3QuYXNzaWduKGRhdGEsIHBhbmUuZGF0YSk7XHJcblxyXG4gICAgaWYgKHJlc29sdmUpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3Jlc29sdmUocmVzb2x2ZSwgcGFyYW1zLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3Jlc29sdmUocmVzb2x2ZTogeyBba2V5OiBzdHJpbmddOiBDb21wb25lbnRUeXBlPFBhbmVSZXNvbHZlPGFueT4+IH0sIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVzb2x2ZSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGtleSA9IGtleXNbaV07XHJcbiAgICAgIGlmICghZGF0YVtrZXldKSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQocmVzb2x2ZVtrZXldKSBhcyBQYW5lUmVzb2x2ZTxhbnk+O1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5zdGFuY2Uub25SZXNvbHZlKHBhcmFtcyk7XHJcbiAgICAgICAgaWYgKGlzUHJvbWlzZSh2YWx1ZSkpXHJcbiAgICAgICAgICBhd2FpdCB2YWx1ZS50aGVuKHIgPT4gZGF0YVtrZXldID0gcik7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSlcclxuICAgICAgICAgIGF3YWl0IHZhbHVlLnBpcGUodGFwKHIgPT4gZGF0YVtrZXldID0gcikpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGQ8VD4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zPzogUGFuZU9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLmluc2VydCh0aGlzLnBhbmVzLmxlbmd0aCwgY29tcG9uZW50LCBvcHRpb25zKTtcclxuICB9XHJcbiAgaW5zZXJ0PFQ+KHBvc2l0aW9uOiBudW1iZXIsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9ucz86IFBhbmVPcHRpb25zKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5faW5zZXJ0UGFuZTxUPihjb21wb25lbnQsIG9wdGlvbnMgfHwge30sIHBvc2l0aW9uKTtcclxuICAgIHBhbmUuX2Z1bGxzY3JlZW4kLm5leHQodGhpcy5wYW5lcy5sZW5ndGggPT09IDEpO1xyXG4gICAgcmV0dXJuIHBhbmU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2luc2VydFBhbmU8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zOiB7XHJcbiAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgcm91dGU/OiBQYW5lUm91dGU7XHJcbiAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICBpbnB1dHM/OiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcclxuICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICBxdWVyeVN0cmluZz86IHN0cmluZztcclxuICAgIHBvbGljeT86IE9wZW5Qb2xpY3k7XHJcbiAgICBmb2N1cz86IGJvb2xlYW5cclxuICB9LCBwb3NpdGlvbj86IG51bWJlcikge1xyXG5cclxuICAgIGNvbnN0IHN0cmV0Y2ggPSAob3B0aW9ucy5wb2xpY3kgJiBPcGVuUG9saWN5LlN0cmV0Y2gpID09IE9wZW5Qb2xpY3kuU3RyZXRjaDtcclxuXHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5fY29uc3RyYWN0PFQ+KGNvbXBvbmVudCwgJ3BhbmUnLCB7XHJcbiAgICAgIHN0cmV0Y2gsXHJcbiAgICAgIC4uLlxyXG4gICAgICBvcHRpb25zXHJcbiAgICB9KTtcclxuICAgIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICBwb3NpdGlvbiA9IHRoaXMucGFuZXMubGVuZ3RoO1xyXG4gICAgdGhpcy5wYW5lcy5wdXNoKHBhbmUpO1xyXG4gICAgdGhpcy50aXRsZUFuaW1hdGlvbisrO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25TdGFydChwYW5lKSk7XHJcbiAgICBpZiAob3B0aW9ucy5mb2N1cyAhPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gcG9zaXRpb247XHJcbiAgICAgIHRoaXMuX3JvdXRlci5fYWN0aXZlID0gcGFuZTtcclxuICAgICAgdGhpcy5fdGl0bGUuc2V0KHBhbmUudGl0bGUpO1xyXG4gICAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGggPiAxKSB0aGlzLnNjcm9sbFRvKHBvc2l0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMubmF2aWdhdGlvbkFycm93cygpO1xyXG4gICAgcmV0dXJuIHBhbmU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb21wb25lbnRcclxuICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NvbnN0cmFjdDxUID0gYW55Pihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sXHJcbiAgICBtb2RlOiAndGFiJyB8ICdwYW5lJyxcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgZGlhbG9nPzogYm9vbGVhbjtcclxuICAgICAgc3RyZXRjaD86IGJvb2xlYW47XHJcbiAgICAgIHBhdGg/OiBzdHJpbmc7IHJvdXRlPzogUGFuZVJvdXRlOyBpY29uPzogc3RyaW5nOyB0aXRsZT86IHN0cmluZztcclxuICAgICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICAgIGRpc21pc3NhYmxlPzogYm9vbGVhbjtcclxuICAgICAgZXhwYW5kYWJsZT86IGJvb2xlYW5cclxuICAgIH0pIHtcclxuICAgIGNvbnN0IHBhbmUgPSBuZXcgUGFuZVJlZjxUPihjb21wb25lbnQsIG1vZGUsIG9wdGlvbnMpO1xyXG4gICAgcGFuZS5faW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoW1xyXG4gICAgICB7IHByb3ZpZGU6IFBhbmVSZWYsIHVzZVZhbHVlOiBwYW5lIH1cclxuICAgIF0sIHRoaXMuX2luamVjdG9yKTtcclxuICAgIHBhbmUuX2NvbW0kLnN1YnNjcmliZShlID0+IHRoaXMuX2FjdGlvbjxUPihlLCBwYW5lKSk7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaW5zZXJ0VGFiPFQgPSBhbnk+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9uczoge1xyXG4gICAgaWNvbj86IHN0cmluZztcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgICBoZWxwPzogc3RyaW5nO1xyXG4gICAgcGF0aD86IHN0cmluZztcclxuICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgcm91dGU/OiBQYW5lUm91dGU7XHJcbiAgICBkYXRhPzogUGFyYW1NYXA7XHJcbiAgICBwYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICBwb2xpY3k/OiBPcGVuUG9saWN5O1xyXG4gICAgc3dhcD86IGJvb2xlYW47XHJcbiAgICBmb2N1cz86IGJvb2xlYW47XHJcbiAgfSkge1xyXG4gICAgY29uc3QgeyBwb2xpY3kgfSA9IG9wdGlvbnMsXHJcbiAgICAgIGRpYWxvZyA9IChwb2xpY3kgJiBPcGVuUG9saWN5LkRpYWxvZykgPT0gT3BlblBvbGljeS5EaWFsb2csXHJcbiAgICAgIGV4cGFuZGFibGUgPSAocG9saWN5ICYgT3BlblBvbGljeS5FeHBhbmRhYmxlKSA9PSBPcGVuUG9saWN5LkV4cGFuZGFibGUsXHJcbiAgICAgIGRpc21pc3NhYmxlID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuRGlzbWlzc2FibGUpID09IE9wZW5Qb2xpY3kuRGlzbWlzc2FibGU7XHJcblxyXG4gICAgY29uc3QgdGFiID0gdGhpcy5fY29uc3RyYWN0PFQ+KGNvbXBvbmVudCxcclxuICAgICAgJ3RhYicsIHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgZGlhbG9nLFxyXG4gICAgICBkaXNtaXNzYWJsZSxcclxuICAgICAgZXhwYW5kYWJsZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRhYnMucHVzaCh0YWIpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25TdGFydCh0YWIpKTtcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGlmICh0YWIuZ3JvdXAgJiYgdGhpcy5ncm91cCAhPT0gdGFiLmdyb3VwICYmIG9wdGlvbnMuc3dhcCAhPT0gZmFsc2UpIHtcclxuICAgICAgbGV0IGkgPSAwLCBzd2FwID0gZmFsc2U7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBpZiAodGhpcy50YWJzW2ldLmdyb3VwICE9PSB0YWIuZ3JvdXApIHtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRoaXMudGFic1tpXSk7XHJcbiAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgc3dhcCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrK1xyXG4gICAgICB9IHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCk7XHJcbiAgICAgIGlmIChzd2FwKSB7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHRoaXMuZ3JvdXA7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICAgIGlmIChvcHRpb25zLmZvY3VzICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiB0YWI7XHJcbiAgfVxyXG5cclxuICBndWlkZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2d1aWRlLnN0YXJ0KG5hbWUpO1xyXG4gIH1cclxuICBiYWNrKCkge1xyXG4gICAgdGhpcy5fYmFjayh0aGlzLnN3YXApO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfYmFjayhzdGVwczogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgQmFja05hdmlnYXRpb24oKSk7XHJcbiAgICBoaXN0b3J5LmdvKHN0ZXBzIC0gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwKTtcclxuICB9XHJcbiAgdGFiQmFjaygpIHtcclxuICAgIHRoaXMuX2JhY2sodGhpcy5zd2FwVGFiKTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBlXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9hY3Rpb248VCA9IGFueT4oZTogc3RyaW5nLCBwYW5lOiBQYW5lUmVmPFQ+KSB7XHJcbiAgICBzd2l0Y2ggKGUpIHtcclxuICAgICAgY2FzZSAnZm9jdXMnOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmIChwYW5lLm1vZGUgPT09ICd0YWInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzKGluZGV4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgY2FzZSAnY2xvc2UnOlxyXG4gICAgICAgIGlmIChwYW5lLm1vZGUgPT09ICd0YWInKSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudGFicy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgdGhpcy5jbG9zZVRhYihpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhbmVzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbGxhcHNlKCk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgICAgICF0aGlzLnBhbmVzLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoREVGQVVMVF9ST1VURSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdleHBhbmQnOlxyXG4gICAgICAgIGlmIChwYW5lLm1vZGUgPT09ICd0YWInKVxyXG4gICAgICAgICAgdGhpcy5leHBhbmRUYWIoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLmV4cGFuZFBhbmUoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVmcmVzaCc6IHtcclxuICAgICAgICB0aGlzLl9oaXN0b3J5KCdyZXBsYWNlJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogZXNjYXBlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxyXG4gIGNvbGxhcHNlKCkge1xyXG4gICAgaWYgKCF0aGlzLnRhYnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgIHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgdGhpcy5fc3luYygpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IENvbGxhcHNlTmF2aWdhdGlvbigpKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGggJiYgIXRoaXMucGFuZXNbdGhpcy5wYW5lcy5sZW5ndGggLSAxXS5zdHJldGNoKSB7XHJcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgIGNoaWxkID0gZWwubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgICAgY2hpbGQuc3R5bGUubWluV2lkdGggPVxyXG4gICAgICAgIChlbC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBlbC5wYXJlbnRFbGVtZW50Lm9mZnNldExlZnQgLSBjaGlsZC5vZmZzZXRMZWZ0IC0gMikgKyAncHgnO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9yZXNpemUoKSB7XHJcbiAgICAvL3RoaXMudGFicy5jb25jYXQodGhpcy5wYW5lcykuZm9yRWFjaCh0ID0+IHQuX3Jlc2l6ZSQubmV4dCh7XHJcbiAgICAvL30gYXMgYW55KSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKTtcclxuICB9XHJcbiAgY2xvc2VUYWIocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgdGFiID0gdGhpcy50YWJzW3Bvc2l0aW9uXTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UocG9zaXRpb24sIDEpO1xyXG4gICAgdGhpcy5fZGVzdHJveVBhbmUodGFiKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggPyBwb3NpdGlvbiA+IDAgPyBwb3NpdGlvbiAtIDEgOiAwIDogLTE7XHJcbiAgICB0aGlzLl9zeW5jKCk7XHJcbiAgfVxyXG4gIGV4cGFuZFBhbmUoKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgdGhpcy5zd2FwID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGRvIHtcclxuICAgICAgaWYgKHRoaXMucGFuZXNbaV0gIT09IHBhbmUpIHtcclxuICAgICAgICB0aGlzLl9kZXN0cm95UGFuZSh0aGlzLnBhbmVzW2ldKTtcclxuICAgICAgICB0aGlzLnBhbmVzLnNwbGljZShpLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaSsrO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGkgPCB0aGlzLnBhbmVzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xyXG4gICAgdGhpcy5fc3luYygpO1xyXG4gICAgcGFuZS5fZnVsbHNjcmVlbiQubmV4dCh0cnVlKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZ2V0SGlzdG9yeVN0ZXAoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuYml6ZG9jID8gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwIDogMDtcclxuICB9XHJcblxyXG4gIGV4cGFuZFRhYigpIHtcclxuICAgIHRoaXMuc3dhcCA9IHRoaXMuX2dldEhpc3RvcnlTdGVwKCk7XHJcbiAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHAgPT5cclxuICAgICAgdGhpcy5fZGVzdHJveVBhbmUocClcclxuICAgICk7XHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UodGhpcy5zZWxlY3RlZFRhYkluZGV4LCAxKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKDAsIHRoaXMucGFuZXMubGVuZ3RoLCB0YWIpO1xyXG4gICAgdGFiLl9tb2RlJC5uZXh0KCdwYW5lJyk7XHJcbiAgICB0YWIuX2Z1bGxzY3JlZW4kLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmxlbmd0aCA/IDAgOiAtMTtcclxuICAgIHRoaXMuX3N5bmMoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdChwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBwb3NpdGlvbikgcmV0dXJuO1xyXG4gICAgaWYgKHBvc2l0aW9uID09PSAtMSkge1xyXG4gICAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGgpIHBvc2l0aW9uID0gdGhpcy5wYW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICBlbHNlIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHBvc2l0aW9uO1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbcG9zaXRpb25dO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25TZWxlY3RlZChwYW5lKSk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2FjdGl2ZSA9IHBhbmU7XHJcbiAgICB0aGlzLl90aXRsZS5zZXQocGFuZS50aXRsZSk7XHJcbiAgfVxyXG4gIGFzeW5jIHJlbW92ZUF0KHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW3Bvc2l0aW9uXTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzKHBhbmUpO1xyXG5cclxuICAgIHRoaXMuX2Rpc2NhcmRQYW5lKHBhbmUpO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbiA+PSB0aGlzLnNlbGVjdGVkSW5kZXgpXHJcbiAgICAgIHRoaXMuc2VsZWN0KC0xKTtcclxuICAgIHRoaXMuX3N5bmMoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9kaXNtaXNzKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgY29uc3QgcGFuZXMgPSB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLmRlY2VuZGVudE9mKHBhbmUpICYmIHMucm91dGUgJiYgcy5yb3V0ZS5jYW5EaXNtaXNzKS5cclxuICAgICAgcmV2ZXJzZSgpO1xyXG5cclxuICAgIHBhbmUucm91dGUgJiYgcGFuZS5yb3V0ZS5jYW5EaXNtaXNzICYmXHJcbiAgICAgIHBhbmVzLnB1c2gocGFuZSk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgb2sgPSBhd2FpdCB0aGlzLl9kaXNtaXNzYWJsZShwYW5lc1tpXSk7XHJcbiAgICAgIGlmICghb2spIHRocm93ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rpc2NhcmRQYW5lKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgdGhpcy5wYW5lcy5jb25jYXQodGhpcy50YWJzKS5cclxuICAgICAgZmlsdGVyKHMgPT4gcy5kZWNlbmRlbnRPZihwYW5lKSkuXHJcbiAgICAgIHJldmVyc2UoKS5cclxuICAgICAgZm9yRWFjaChzID0+IHRoaXMuX2Rpc2NhcmRQYW5lKHMpKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHBhbmUpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnBhbmVzLmluZGV4T2YocGFuZSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NsZWFyUGVuZGluZygpIHtcclxuICAgIHRoaXMuX3BlbmRpbmcuc3BsaWNlKDAsIHRoaXMuX3BlbmRpbmcubGVuZ3RoKTtcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfY2xlYXJQYW5lcygpIHtcclxuICAgIGF3YWl0IHRoaXMuX2Rpc21pc3NBbGwodGhpcy5wYW5lcyk7XHJcbiAgICB0aGlzLnBhbmVzLmZvckVhY2gocCA9PiB0aGlzLl9kZXN0cm95UGFuZShwKSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZSgwLCB0aGlzLnBhbmVzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcclxuICAgIHRoaXMuc3dhcCA9IG51bGw7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX2NsZWFyVGFicygpIHtcclxuICAgIGF3YWl0IHRoaXMuX2Rpc21pc3NBbGwodGhpcy50YWJzKTtcclxuICAgIHRoaXMudGFicy5mb3JFYWNoKHQgPT4gdGhpcy5fZGVzdHJveVBhbmUodCkpO1xyXG4gICAgdGhpcy50YWJzLnNwbGljZSgwLCB0aGlzLnRhYnMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfZGlzbWlzc0FsbChwYW5lczogUGFuZVJlZltdKSB7XHJcbiAgICBmb3IgKGxldCBwYW5lIG9mIHBhbmVzLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLnJvdXRlICYmIHMucm91dGUuY2FuRGlzbWlzcykpIHtcclxuICAgICAgbGV0IG9rID0gYXdhaXQgdGhpcy5fZGlzbWlzc2FibGUocGFuZSk7XHJcbiAgICAgIGlmICghb2spXHJcbiAgICAgICAgdGhyb3cgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rpc21pc3NhYmxlKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgY29uc3QgeyBpbnN0YW5jZSwgcm91dGU6IHsgY2FuRGlzbWlzcyB9IH0gPSBwYW5lO1xyXG4gICAgY29uc3QgZGlzbWlzc2FibGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoY2FuRGlzbWlzcykgYXMgQ2FuRGlzbWlzczxhbnk+O1xyXG4gICAgY29uc3Qgb2sgPSBkaXNtaXNzYWJsZS5vbkRpc21pc3MoaW5zdGFuY2UpO1xyXG4gICAgaWYgKGlzQm9vbGVhbihvaykpXHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUob2spO1xyXG4gICAgZWxzZSBpZiAoaXNQcm9taXNlKG9rKSlcclxuICAgICAgcmV0dXJuIG9rO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gb2sudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG4gIHNjcm9sbFRvKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9jaGlsZHJlbi5pdGVtKGluZGV4KSBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGl0ZW0gJiYgaXRlbS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgaW5saW5lOiAnZW5kJywgYmxvY2s6ICdlbmQnIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgX2NoaWxkcmVuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucGFuZS1jb250ZW50Jyk7XHJcbiAgfVxyXG4gIGRvbmUoKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25BcnJvd3MoKTtcclxuICAgIHRoaXMuX3Jlc2l6ZSgpO1xyXG4gIH1cclxuICBuYXZpZ2F0aW9uQXJyb3dzKF8/OiBFdmVudCkge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICBzY3JvbGxMZWZ0ID0gTWF0aC5yb3VuZChjb250YWluZXIuc2Nyb2xsTGVmdCk7XHJcbiAgICB0aGlzLm5leHQgPSB0aGlzLl9ydGwgPyBjb250YWluZXIuY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0IDwgY29udGFpbmVyLnNjcm9sbFdpZHRoIDpcclxuICAgICAgc2Nyb2xsTGVmdCArIGNvbnRhaW5lci5jbGllbnRXaWR0aCA8IGNvbnRhaW5lci5zY3JvbGxXaWR0aDtcclxuICAgIHRoaXMucHJldiA9IHRoaXMuX3J0bCA/IHNjcm9sbExlZnQgPCAwIDogc2Nyb2xsTGVmdCA+IDA7XHJcbiAgfVxyXG4gIHNjcm9sbEJ5KG46IG51bWJlcikge1xyXG4gICAgY29uc3QgbGVmdCA9IG4gKiAodGhpcy5fcnRsID8gLTEgOiAxKTtcclxuICAgIHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC5zY3JvbGxCeSh7IGJlaGF2aW9yOiAnc21vb3RoJywgbGVmdCB9KTtcclxuICB9XHJcbiAgZm9jdXMoaW5kZXgpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5fY2hpbGRyZW4uaXRlbShpbmRleCkgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBlbC5mb2N1cygpO1xyXG4gIH1cclxuICBvblBhbmVSZXNpemUocGFuZTogUGFuZVJlZjxhbnk+LCBldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgZWwgPSAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkucHJldmlvdXNFbGVtZW50U2libGluZyBhcyBIVE1MRGl2RWxlbWVudDtcclxuXHJcbiAgICBjb25zdCAvLyByZW1lbWJlciBtb3VzZSBkb3duIGluZm9cclxuICAgICAgd2lkdGggPSBlbC5jbGllbnRXaWR0aCxcclxuICAgICAgZCA9IHRoaXMuX3J0bCA/IC0xIDogMTtcclxuXHJcbiAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmcnKTtcclxuXHJcbiAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG9uTW91c2VNb3ZlO1xyXG4gICAgZG9jdW1lbnQub25tb3VzZXVwID0gKCkgPT4ge1xyXG4gICAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LnJlbW92ZSgncmVzaXppbmcnKTtcclxuICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xyXG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZSkge1xyXG5cclxuICAgICAgY29uc3QgZGVsdGEgPSAoZS5jbGllbnRYIC0gZXZlbnQuY2xpZW50WCkgKiBkO1xyXG4gICAgICBlbC5zdHlsZS53aWR0aCA9IGVsLnN0eWxlLm1pbldpZHRoXHJcbiAgICAgICAgPSBNYXRoLm1heCh3aWR0aCArIGRlbHRhLCAzNTApICsgJ3B4JztcclxuICAgICAgcGFuZSAmJiBwYW5lLl9yZXNpemUkLm5leHQoe30gYXMgYW55KTtcclxuICAgIH1cclxuICB9XHJcbiAgb25UYWJSZXNpemUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IGVsID0gKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLm5leHRFbGVtZW50U2libGluZyBhcyBIVE1MRGl2RWxlbWVudDtcclxuXHJcbiAgICBjb25zdFxyXG4gICAgICBtZSA9IHRoaXMsXHJcbiAgICAgIC8vIHJlbWVtYmVyIG1vdXNlIGRvd24gaW5mb1xyXG4gICAgICB3aWR0aCA9IGVsLmNsaWVudFdpZHRoLFxyXG4gICAgICBkID0gdGhpcy5fcnRsID8gMSA6IC0xO1xyXG5cclxuICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdyZXNpemluZycpO1xyXG5cclxuICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xyXG5cclxuICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gb25Nb3VzZU1vdmU7XHJcbiAgICBkb2N1bWVudC5vbm1vdXNldXAgPSAoKSA9PiB7XHJcbiAgICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xyXG4gICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgbWUubmF2aWdhdGlvbkFycm93cygpO1xyXG4gICAgICAvL3RoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5fcmVzaXplKCk7XHJcbiAgICB9O1xyXG4gICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZSkge1xyXG5cclxuICAgICAgLy8gcHJldmVudCBuZWdhdGl2ZS1zaXplZCBlbGVtZW50c1xyXG4gICAgICBjb25zdCBkZWx0YSA9IE1hdGgubWF4KChlLmNsaWVudFggLSBldmVudC5jbGllbnRYKSAqIGQsIC13aWR0aCk7XHJcbiAgICAgIGVsLnN0eWxlLndpZHRoID0gZWwuc3R5bGUubWluV2lkdGggPSAod2lkdGggKyBkZWx0YSkgKyAncHgnO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGFicycsIGVsLnN0eWxlLndpZHRoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfZGVzdHJveVBhbmUocGFuZTogUGFuZVJlZikge1xyXG4gICAgcGFuZS5fZGVzdHJveSgpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25FbmQocGFuZSkpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgUEFORV9QQVJBTVNfUkVHRVggPSAvKDpbXFx3XFwtXSspL2c7XHJcblxyXG5mdW5jdGlvbiBwcmVwYXJlUm91dGVzKHJvdXRlczogUGFuZVJvdXRlW10sIHRyZWVQYXRoPzogc3RyaW5nKTogRXh0ZW5kZWRSb3V0ZVtdIHtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgbGV0IHJvdXRlID0gcm91dGVzW2ldLCBmdWxsUGF0aCA9ICh0cmVlUGF0aCA/ICh0cmVlUGF0aCArICcvJykgOiAnJykgKyByb3V0ZS5wYXRoO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24ocm91dGUsIHtcclxuICAgICAgZnVsbFBhdGgsXHJcbiAgICAgIHJlZ0V4OiBuZXcgUmVnRXhwKCdeJyArIGZ1bGxQYXRoLlxyXG4gICAgICAgIHJlcGxhY2UoJy8nLCAnXFxcXC8nKS5cclxuICAgICAgICByZXBsYWNlKFBBTkVfUEFSQU1TX1JFR0VYLCBlID0+IGAoPzwke2Uuc3Vic3RyKDEpfT5bXFxcXHdAXFxcXC1dKilgKSlcclxuICAgIH0pO1xyXG4gICAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCBjaGlsZHJlbiA9IHByZXBhcmVSb3V0ZXMocm91dGUuY2hpbGRyZW4sIGZ1bGxQYXRoKTtcclxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKylcclxuICAgICAgICBPYmplY3QuYXNzaWduKGNoaWxkcmVuW2pdLCB7XHJcbiAgICAgICAgICBwYXJlbnQ6IHJvdXRlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByb3V0ZXMgYXMgRXh0ZW5kZWRSb3V0ZVtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRXh0ZW5kZWRSb3V0ZSBleHRlbmRzIFBhbmVSb3V0ZSB7XHJcbiAgZnVsbFBhdGg6IHN0cmluZztcclxuICByZWdFeDogUmVnRXhwO1xyXG4gIHBhcmVudD86IEV4dGVuZGVkUm91dGU7XHJcbiAgY2hpbGRyZW4/OiBFeHRlbmRlZFJvdXRlW107XHJcbn1cclxuaW50ZXJmYWNlIEhpc3RvcnlTdGF0ZSB7XHJcbiAgYml6ZG9jOiB0cnVlO1xyXG4gIHN0ZXA6IG51bWJlcjtcclxuICBzd2FwPzogbnVtYmVyO1xyXG4gIHN3YXBUYWI/OiBudW1iZXI7XHJcbiAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgcHJldkdyb3VwPzogc3RyaW5nO1xyXG4gIHBhbmVzOiBhbnlbXTtcclxuICB0YWJzOiBhbnlbXTtcclxuICBzZWxlY3RlZFRhYkluZGV4PzogbnVtYmVyO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJwYW5lc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJyb3dcIiAoY2xpY2spPVwic2Nyb2xsQnkoLTQwMClcIiBtYXRSaXBwbGUgW21hdFJpcHBsZVVuYm91bmRlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ29sb3JdPVwiYWNjZW50XCJcclxuICAgICAgICpuZ0lmPVwicHJldlwiPlxyXG4gICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgIGFycm93X2JhY2tfaW9zXHJcbiAgICA8L2k+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInBhbmVzLXRpdGxlXCIgW0B0aXRsZV09XCJ0aXRsZUFuaW1hdGlvblwiPlxyXG4gICAgPGgxPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYmFjaygpXCIgKm5nSWY9XCJzd2FwXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0JhY2snfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5hcnJvd19jaXJjbGVfbGVmdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgcGFuZXM7IGxldCBmaXJzdCA9IGZpcnN0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJicmVhZGNydW1ic1wiICpuZ0lmPVwiIWZpcnN0XCI+XFw8L3NwYW4+XHJcbiAgICAgICAge3twLnRpdGxlfX1cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJndWlkZShwYW5lc1swXS5ndWlkZSlcIiAqbmdJZj1cInBhbmVzWzBdPy5ndWlkZVwiIFtiaXpkb2NUb29sdGlwXT1cIidIZWxwJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+aGVscDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L2gxPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8Yml6ZG9jLXF1aWNrdG9vbHM+PC9iaXpkb2MtcXVpY2t0b29scz5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICNwYW5uaW5nIGNsYXNzPVwicGFuZXMtY29udGFpbmVyXCJcclxuICAgICAgIGNka1Njcm9sbGFibGVcclxuICAgICAgIEBwYW5lc1xyXG4gICAgICAgKHNjcm9sbCk9XCJuYXZpZ2F0aW9uQXJyb3dzKCRldmVudClcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgcGFuZXM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgPGRpdiAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4ICE9PSBpICYmICFkcmFnZ2luZyAmJiBzZWxlY3QoaSlcIlxyXG4gICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoaSlcIlxyXG4gICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRJbmRleCA9PT0gaVwiIGNsYXNzPVwicGFuZS1jb250ZW50XCIgQHBhbmU+XHJcbiAgICAgICAgPG5neC1jb21wb25lbnQtb3V0bGV0IFt0eXBlXT1cInAuY29tcG9uZW50XCIgW2luamVjdG9yXT1cInAuaW5qZWN0b3JcIiAoY3JlYXRlKT1cInAuX2luc3RhbmNlID0gJGV2ZW50XCI+PC9uZ3gtY29tcG9uZW50LW91dGxldD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lLXNlcGFyYXRvclwiICpuZ0lmPVwiaSA8IHBhbmVzLmxlbmd0aCAtIDFcIiAobW91c2Vkb3duKT1cIm9uUGFuZVJlc2l6ZShwLCAkZXZlbnQpXCI+Jm5ic3A7PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiYmFja2Ryb3BcIiAqbmdJZj1cImRpYWxvZ1wiIChjbGljayk9XCJjbG9zZVRhYihzZWxlY3RlZFRhYkluZGV4KVwiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJyb3cgZm9yd2FyZFwiXHJcbiAgICAgICAqbmdJZj1cIm5leHRcIj5cclxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tcnRsLW1pcnJvclwiIG1hdFJpcHBsZSBbbWF0UmlwcGxlVW5ib3VuZGVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVSYWRpdXNdPVwiMzBcIiBbbWF0UmlwcGxlQ29sb3JdPVwiYWNjZW50XCJcclxuICAgICAgIChjbGljayk9XCJzY3JvbGxCeSg0MDApXCI+XHJcbiAgICAgIGFycm93X2ZvcndhcmRfaW9zXHJcbiAgICA8L2k+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwidGFicy5sZW5ndGhcIj5cclxuICA8ZGl2IGNsYXNzPVwidGFicy1zZXBhcmF0b3JcIiAobW91c2Vkb3duKT1cIm9uVGFiUmVzaXplKCRldmVudClcIj4mbmJzcDs8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MTggdGFic1wiIFtAdGFic109XCJ0YWJzQW5pbWF0aW9uXCIgKEB0YWJzLmRvbmUpPVwiZG9uZSgpXCIgI3RhYmluZz5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGFicy10aXRsZVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidGFiQmFjaygpXCIgKm5nSWY9XCJzd2FwVGFiXCIgW2JpemRvY1Rvb2x0aXBdPVwicHJldkdyb3VwIHx8ICgnQmFjayd8dHJhbnNsYXRlKVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5hcnJvd19iYWNrPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPGgyPnt7Z3JvdXB9fTwvaDI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJleHBhbmRUYWIoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidFeHBhbmQnfCB0cmFuc2xhdGVcIj48bWF0LWljb24gaW5saW5lPVwidHJ1ZVwiIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPm9wZW5faW5fZnVsbDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDwhLS0qbmdJZj1cInNlbGVjdGVkVGFiSW5kZXggPD08IC0xICYmIHRhYnNbc2VsZWN0ZWRUYWJJbmRleF0uZXhwYW5kYWJsZVwiLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNvbGxhcHNlKClcIiBiaXpkb2NUb29sdGlwPVwiRXNjXCI+PG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5hdiBtYXQtdGFiLW5hdi1iYXIgY29sb3I9XCJhY2NlbnRcIiBbZGlzYWJsZVBhZ2luYXRpb25dPVwidHJ1ZVwiPlxyXG4gICAgICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPVwibGV0IHQgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwibWF0LXRhYi1saW5rXCJcclxuICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVGFiSW5kZXggPSBpXCJcclxuICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIFttYXRCYWRnZV09XCJ0LmJhZGdlXCIgW21hdEJhZGdlSGlkZGVuXT1cIiF0LmJhZGdlXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIiBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+e3t0Lmljb259fTwvbWF0LWljb24+Jm5ic3A7XHJcbiAgICAgICAge3t0LnRpdGxlfX1cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJ0LmRpc21pc3NhYmxlXCIgKGNsaWNrKT1cImNsb3NlVGFiKGkpXCIgY2xhc3M9XCJ0b29sXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwhLS1pbmxpbmU9XCJ0cnVlXCItLT5cclxuICAgICAgPC9hPlxyXG4gICAgPC9uYXY+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0IG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIiBbc3R5bGUuZGlzcGxheV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpID8gJyc6ICdub25lJ1wiIGNsYXNzPVwidGFiXCIgW0B0YWJdPVwic2VsZWN0ZWRUYWJJbmRleFwiPlxyXG4gICAgICA8bmd4LWNvbXBvbmVudC1vdXRsZXQgW3R5cGVdPVwidC5jb21wb25lbnRcIiBbaW5qZWN0b3JdPVwidC5pbmplY3RvclwiIChjcmVhdGUpPVwidC5faW5zdGFuY2UgPSAkZXZlbnRcIj48L25neC1jb21wb25lbnQtb3V0bGV0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
|