@tsi-developpement/tsi-shared-ui 1.8.35 → 1.8.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.mjs +8 -2
- package/esm2022/lib/tsi-components/reporting/reporting.component.mjs +3 -3
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +8 -3
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@ import { TsiButtonComponent } from '../../../tsi-components/button-components/ts
|
|
|
8
8
|
import { TsiGenericGridComponent } from '../../../tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component';
|
|
9
9
|
import { TsiViewGridComponent } from '../../../tsi-components/output-components/tsi-view-grid/tsi-view-grid.component';
|
|
10
10
|
import { TsiGenericCrudComponent } from '../../../tsi-components/tsi-generic-crud/tsi-generic-crud.component';
|
|
11
|
+
import { EditableGridComponent } from '../../../tsi-components/input-components/editable-grid/editable-grid.component';
|
|
11
12
|
import { PresentationDesignerDirective } from '../../../tsi-directives/presentation-designer.directive';
|
|
12
13
|
import { PresentationDesignerBaseService } from '../../../services/presentation-setting/presentation-designer-base.service';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
@@ -63,6 +64,7 @@ export class TsiListBaseComponent extends AppBaseComponent {
|
|
|
63
64
|
this.genericGrids = [];
|
|
64
65
|
this.genericCruds = [];
|
|
65
66
|
this.viewGrids = [];
|
|
67
|
+
this.editableGrids = [];
|
|
66
68
|
this._renderer = inject(Renderer2);
|
|
67
69
|
this._viewContainerRef = inject(ViewContainerRef);
|
|
68
70
|
this._presentationSettingService = inject(PresentationSettingService);
|
|
@@ -373,6 +375,7 @@ export class TsiListBaseComponent extends AppBaseComponent {
|
|
|
373
375
|
...this.genericGrids,
|
|
374
376
|
...this.genericCruds,
|
|
375
377
|
...this.viewGrids,
|
|
378
|
+
...this.editableGrids,
|
|
376
379
|
];
|
|
377
380
|
const matchedSource = sources.find((x) => x.formName === directive.presentationDesigner ||
|
|
378
381
|
x.id === directive.presentationDesigner);
|
|
@@ -447,7 +450,7 @@ export class TsiListBaseComponent extends AppBaseComponent {
|
|
|
447
450
|
this.applyConfigurationToElements();
|
|
448
451
|
}
|
|
449
452
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiListBaseComponent, deps: [{ token: i1.DynamicDialogConfig }, { token: i1.DynamicDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
450
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiListBaseComponent, selector: "app-tsi-list-base", host: { listeners: { "dblclick": "onDoubleClicked($event)" } }, viewQueries: [{ propertyName: "genericCrud", first: true, predicate: TsiGenericCrudComponent, descendants: true }, { propertyName: "genericGrid", first: true, predicate: TsiGenericGridComponent, descendants: true }, { propertyName: "viewGrid", first: true, predicate: TsiViewGridComponent, descendants: true }, { propertyName: "genericGrids", predicate: TsiGenericGridComponent, descendants: true }, { propertyName: "genericCruds", predicate: TsiGenericCrudComponent, descendants: true }, { propertyName: "viewGrids", predicate: TsiViewGridComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<p>tsi-list-base works!</p>", styles: [""] }); }
|
|
453
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiListBaseComponent, selector: "app-tsi-list-base", host: { listeners: { "dblclick": "onDoubleClicked($event)" } }, viewQueries: [{ propertyName: "genericCrud", first: true, predicate: TsiGenericCrudComponent, descendants: true }, { propertyName: "genericGrid", first: true, predicate: TsiGenericGridComponent, descendants: true }, { propertyName: "viewGrid", first: true, predicate: TsiViewGridComponent, descendants: true }, { propertyName: "genericGrids", predicate: TsiGenericGridComponent, descendants: true }, { propertyName: "genericCruds", predicate: TsiGenericCrudComponent, descendants: true }, { propertyName: "viewGrids", predicate: TsiViewGridComponent, descendants: true }, { propertyName: "editableGrids", predicate: EditableGridComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<p>tsi-list-base works!</p>", styles: [""] }); }
|
|
451
454
|
}
|
|
452
455
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiListBaseComponent, decorators: [{
|
|
453
456
|
type: Component,
|
|
@@ -470,8 +473,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
470
473
|
}], viewGrids: [{
|
|
471
474
|
type: ViewChildren,
|
|
472
475
|
args: [TsiViewGridComponent]
|
|
476
|
+
}], editableGrids: [{
|
|
477
|
+
type: ViewChildren,
|
|
478
|
+
args: [EditableGridComponent]
|
|
473
479
|
}], onDoubleClicked: [{
|
|
474
480
|
type: HostListener,
|
|
475
481
|
args: ['dblclick', ['$event']]
|
|
476
482
|
}] } });
|
|
477
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWxpc3QtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktbGlzdC1iYXNlL3RzaS1saXN0LWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWxpc3QtYmFzZS90c2ktbGlzdC1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFHTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBdUMsbUJBQW1CLEVBQTZCLE1BQU0saUJBQWlCLENBQUM7QUFDdEgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUE4QixNQUFNLG1CQUFtQixDQUFDO0FBQ2xNLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVGQUF1RixDQUFDO0FBQ2hJLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlGQUFpRixDQUFDO0FBQ3ZILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlHLE9BQU8s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dUJBQXVCO2dCQUVELFFBQVE7c0JBQXhDLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUcvQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUlyQyxZQUFZO3NCQURYLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUdELFNBQVM7c0JBQTVDLFlBQVk7dUJBQUMsb0JBQW9CO2dCQTZSbEMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgaW5qZWN0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2FwcC1iYXNlL2FwcC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcbmltcG9ydCB7IE1vZGFsU2l6ZUVudW0gfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEdyaWRDb2x1bW4sIElNb2RhbFNpemUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RGVzY3JpbWluYXRvciwgU2VhcmNoRmllbGQsIFByZXNlbnRhdGlvblNldHRpbmcsIFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSwgTGF5b3V0SGVscGVyU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSwgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLCBQcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UsIEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUc2lCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9idXR0b24tY29tcG9uZW50cy90c2ktYnV0dG9uL3RzaS1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpVmlld0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktdmlldy1ncmlkL3RzaS12aWV3LWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0NydWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1jcnVkL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi90c2ktZGlyZWN0aXZlcy9wcmVzZW50YXRpb24tZGVzaWduZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWRpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlc2VudGF0aW9uLXNldHRpbmcvcHJlc2VudGF0aW9uLWRlc2lnbmVyLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdHNpLWxpc3QtYmFzZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1saXN0LWJhc2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1saXN0LWJhc2UuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRzaUxpc3RCYXNlQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgLy8jcmVnaW9uIHByb3BlcnRpZXNcclxuICBwcml2YXRlIF9yb3dzU2VsZWN0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbmZpZ01vZGVCdXR0b25JZDogc3RyaW5nID0gJ2NvbmZnLW1vZGUtYnV0dG9uLWZyb20tbGlzdCc7XHJcbiAgc2F2ZVByb3BlcnRpZXNCdXR0b25DbGFzc05hbWUgPSAnY29uZmctbW9kZS1idXR0b24tZnJvbS1saXN0LXNhdmUtcHJvcGVydGllcyc7XHJcbiAgc2F2ZVByb3BlcnR5QnRuSWQgPSAnc2F2ZS1wcm9wZXJ0eS1idG4nO1xyXG5cclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGZvcm1FbmRwb2ludCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN1cGVyLmZvcm1FbmRwb2ludDtcclxuICB9XHJcbiAgcHVibGljIG92ZXJyaWRlIHNldCBmb3JtRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG4gICAgc3VwZXIuZm9ybUVuZHBvaW50ID0gZW5kcG9pbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGJ1c2luZXNzQ2xhc3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVzaW5lc3NDbGFzcztcclxuICB9XHJcbiAgcHVibGljIG92ZXJyaWRlIHNldCBidXNpbmVzc0NsYXNzKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHN1cGVyLmJ1c2luZXNzQ2xhc3MgPSB2YWx1ZVxyXG4gICAgdGhpcy5mb3JtRW5kcG9pbnQgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICAvLyBAVE9ETyBNZWRBbGkgOiDDoCB0ZXN0ZXJcclxuICAgIC8vdGhpcy5nZXRFbnRpdHlJbmZvcm1hdGlvbih0aGlzLl9idXNpbmVzc0NsYXNzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbXBvbmVudERlc2NyaW1pbmF0b3I/OiBDb21wb25lbnREZXNjcmltaW5hdG9yO1xyXG4gIHNldCBjb21wb25lbnREZXNjcmltaW5hdG9yKHZhbHVlOiBDb21wb25lbnREZXNjcmltaW5hdG9yIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yID0gdmFsdWU7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2NvbXBvbmVudERlc2NyaW1pbmF0b3IgJiZcclxuICAgICAgdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvci5wcm9wZXJ0eVZhbHVlICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmJ1c2luZXNzQ2xhc3MgIT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgaWYgKHZhbHVlPy5wcm9wZXJ0eVZhbHVlICE9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZT8ucHJvcGVydHlWYWx1ZTtcclxuICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZUNoYW5nZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbXBvbmVudERlc2NyaW1pbmF0b3IoKTogQ29tcG9uZW50RGVzY3JpbWluYXRvciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvcjtcclxuICB9XHJcblxyXG4gIGNvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW107XHJcbiAgdGl0bGVDb21wb25lbnQ6IHN0cmluZyA9ICcnO1xyXG4gIG1vZGFsU2l6ZTogSU1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uTWVkaXVtO1xyXG4gIGNvbXA6IGFueTtcclxuICBzZWFyY2hGaWVsZHM6IEFycmF5PFNlYXJjaEZpZWxkPiA9IFtdO1xyXG4gIHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG5cclxuICBwcml2YXRlIGdldCBpc0FkdmFuY2VkU2VhcmNoTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY29uZmlnPy5kYXRhICYmXHJcbiAgICAgIHRoaXMuY29uZmlnLmRhdGEuaGFzT3duUHJvcGVydHkoJ2lzQWR2YW5jZWRTZWFyY2gnKSAmJlxyXG4gICAgICB0aGlzLmNvbmZpZy5kYXRhLmlzQWR2YW5jZWRTZWFyY2ggPT09IHRydWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50KSBnZW5lcmljQ3J1ZD86IFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkKFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50KSBnZW5lcmljR3JpZD86IFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkKFRzaVZpZXdHcmlkQ29tcG9uZW50KSB2aWV3R3JpZD86IFRzaVZpZXdHcmlkQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50KVxyXG4gIGdlbmVyaWNHcmlkczogVHNpR2VuZXJpY0dyaWRDb21wb25lbnRbXSA9IFtdO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50KVxyXG4gIGdlbmVyaWNDcnVkczogVHNpR2VuZXJpY0NydWRDb21wb25lbnRbXSA9IFtdO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFRzaVZpZXdHcmlkQ29tcG9uZW50KSB2aWV3R3JpZHM6IFRzaVZpZXdHcmlkQ29tcG9uZW50W10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlKTtcclxuICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlID0gaW5qZWN0KExheW91dEhlbHBlclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX21lc3NhZ2VJbmZvU2VydmljZSA9IGluamVjdChUc2lOb3RpZmljYXRpb25TZXJ2aWNlKTtcclxuICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlciA9IGluamVjdChFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UgPSBpbmplY3QoUHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSk7XHJcblxyXG4gIHNob3dIaWRlQ29uZmlnQnRuUmVmOiBOb2RlIHwgdW5kZWZpbmVkO1xyXG4gIHNob3dIaWRlQ29uZmlnQnRuUGFyZW50UmVmOiBOb2RlIHwgdW5kZWZpbmVkIHwgbnVsbDtcclxuICBfZGVzaWduTW9kZUxpc3RTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBfYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBfYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgY29uZmlnQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IFtdO1xyXG4gIHByaXZhdGUgZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwdWJsaWMgX2RpYWxvZ1JlZmVyZW5jZT86IER5bmFtaWNEaWFsb2dSZWZcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGxpZmVjeWNsZSBob29rc1xyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuXHJcbiAgICB0aGlzLl91bnN1YnNjcmliZUFjdGl2ZVN1YnNjcmlwdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgIC8vIGxldCBuZXdBZGRlZERpcmVjdGl2ZXMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLmZpbHRlcih4ID0+IHgudHJlYXRlZCA9PSBmYWxzZSlcclxuICAgIC8vIGNvbnNvbGUubG9nKFwibmV3QWRkZWREaXJlY3RpdmVzIDogXCIsIG5ld0FkZGVkRGlyZWN0aXZlcylcclxuICAgIC8vIGlmIChuZXdBZGRlZERpcmVjdGl2ZXMubGVuZ3RoID4gMCAmJiAoIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSB8fCAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lKSkge1xyXG4gICAgLy8gICB0aGlzLmFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMobmV3QWRkZWREaXJlY3RpdmVzKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2UgaWYgKG5ld0FkZGVkRGlyZWN0aXZlcy5sZW5ndGggPiAwICYmIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAvLyAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cyhuZXdBZGRlZERpcmVjdGl2ZXMpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cyhuZXdBZGRlZERpcmVjdGl2ZXMpXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgfHxcclxuICAgICAgIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgICB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoaW5wdXQpID0+IHtcclxuICAgICAgICAgIGlucHV0LmV4ZWN1dGUodHJ1ZSwgdW5kZWZpbmVkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2luaXRHZW5lcmljQ3J1ZElmRXhpc3QoKTtcclxuXHJcbiAgICB0aGlzLl9pbml0R2VuZXJpY0dyaWRJZkV4aXN0KCk7XHJcblxyXG4gICAgdGhpcy5faW5pdFZpZXdHcmlkSWZFeGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdBZnRlckNvbnRlbnRDaGVja2VkKCk7XHJcbiAgICB0aGlzLl9yZWZyZXNoVmlld0dyaWRJbmZvcm1hdGlvbklmRXhpc3QoKTtcclxuICAgIHRoaXMuX3JlZnJlc2hHZW5lcmljQ3J1ZEluZm9ybWF0aW9uSWZFeGlzdCgpO1xyXG4gICAgdGhpcy5fcmVmcmVzaEdlbmVyaWNHcmlkSW5mb3JtYXRpb25JZkV4aXN0KCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmluaXREZXNpZ25Nb2RlU3Vic2NyaXB0aW9uKCk7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGdldENvbXBvbmVudElkZW50aWZpZXIoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgIC8vICAgcmV0dXJuIGAke3RoaXMuX215TmFtZSgpfV8ke3RoaXMuZGVzY3JpbWluYXRvclZhbHVlfWBcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB0aGlzLl9teU5hbWUoKTtcclxuICB9XHJcblxyXG4gIHNldE1vZGFsU2l6ZShtb2RhbFNpemU6IElNb2RhbFNpemUpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kYWxTaXplID0gbW9kYWxTaXplO1xyXG4gIH1cclxuXHJcbiAgZGVzY3JpbWluYXRvclZhbHVlQ2hhbmdlZCgpIHtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKFxyXG4gICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLFxyXG4gICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xyXG4gICAgICBjb25zdCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID1cclxuICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICAgKHgpID0+IHguYmxvY2tOYW1lID09IGlucHV0LnByZXNlbnRhdGlvbkRlc2lnbmVyXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgJiZcclxuICAgICAgICAhcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgICApIHtcclxuICAgICAgICBpbnB1dC5yZW1vdmVFbGVtZW50KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5wdXQuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQpIHtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5kZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZTtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5wcmVzZW50YXRpb25TZXR0aW5ncyA9IHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCAmJlxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoaW5wdXQpID0+IHtcclxuICAgICAgICBpbnB1dC5leGVjdXRlKHRydWUsIHVuZGVmaW5lZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG5cclxuICBwcml2YXRlIF9yZWZyZXNoVmlld0dyaWRJbmZvcm1hdGlvbklmRXhpc3QoKSB7XHJcbiAgICBpZiAodGhpcy52aWV3R3JpZCkge1xyXG4gICAgICBpZiAodGhpcy52aWV3R3JpZC5mb3JtRW5kcG9pbnQgIT0gdGhpcy5mb3JtRW5kcG9pbnQpIHtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy52aWV3R3JpZC5mb3JtTmFtZSAhPSB0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnZpZXdHcmlkLmJ1c2luZXNzQ2xhc3MgIT0gdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5idXNpbmVzc0NsYXNzID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWZyZXNoR2VuZXJpY0dyaWRJbmZvcm1hdGlvbklmRXhpc3QoKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZCkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVmcmVzaEdlbmVyaWNDcnVkSW5mb3JtYXRpb25JZkV4aXN0KCkge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQpIHtcclxuICAgICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQuZm9ybUVuZHBvaW50ICE9IHRoaXMuZm9ybUVuZHBvaW50KSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQuZm9ybU5hbWUgIT0gdGhpcy5mb3JtTmFtZSkge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZC5idXNpbmVzc0NsYXNzICE9IHRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuYnVzaW5lc3NDbGFzcyA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9pbml0Vmlld0dyaWRJZkV4aXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudmlld0dyaWQpIHtcclxuICAgICAgLy9pbml0IHJlcG9ydGluZ1xyXG4gICAgICB0aGlzLnZpZXdHcmlkLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB0aGlzLnZpZXdHcmlkLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZTtcclxuICAgICAgdGhpcy52aWV3R3JpZC5idXNpbmVzc0NsYXNzID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICBpZiAodGhpcy5pc0FkdmFuY2VkU2VhcmNoTW9kZSkge1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuc2hvd0V4cG9ydEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuc2hvd0NvbnN1bHRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLnNob3dDYWxlbmRlclZpZXcgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbiA9XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5zZWxlY3RlZEl0ZW1zQ2hhbmdlLnN1YnNjcmliZSgoaXRlbXM6IGFueVtdKSA9PlxyXG4gICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0ZWRJdGVtc0NoYW5nZUV2ZW50KGl0ZW1zKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0R2VuZXJpY0dyaWRJZkV4aXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNBZHZhbmNlZFNlYXJjaE1vZGUpIHtcclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNob3dBY3Rpb25Db2x1bW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNob3dDYWxlbmRlclZpZXcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNob3dFeHBvcnRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9yb3dzU2VsZWN0aW9uU3Vic2NyaXB0aW9uID1cclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNlbGVjdGVkSXRlbXNDaGFuZ2Uuc3Vic2NyaWJlKChpdGVtczogYW55W10pID0+XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVTZWxlY3RlZEl0ZW1zQ2hhbmdlRXZlbnQoaXRlbXMpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRHZW5lcmljQ3J1ZElmRXhpc3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZCkge1xyXG4gICAgICAvL2luaXQgcmVwb3J0aW5nXHJcbiAgICAgIGlmICh0aGlzLmlzQWR2YW5jZWRTZWFyY2hNb2RlKSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93QWRkQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93RGVsZXRlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93Q29uc3VsdEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd0VkaXRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dFeHBvcnRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dJbmZvQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93RG93bmxvYWRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dSZXBvcnRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5uZ09uSW5pdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB0aGlzLmdlbmVyaWNDcnVkLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcblxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPVxyXG4gICAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKFxyXG4gICAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICAgICkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5wcmVzZW50YXRpb25TZXR0aW5ncyA9IHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdDtcclxuXHJcbiAgICAgIHRoaXMuX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb24gPVxyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2VsZWN0ZWRJdGVtc0NoYW5nZS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT5cclxuICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdGVkSXRlbXNDaGFuZ2VFdmVudChpdGVtcylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBY3RpdmVTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9kZXNpZ25Nb2RlTGlzdFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLl9kZXNpZ25Nb2RlTGlzdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZEJhc2VEaXJlY3RpdmVTdWJzY3JpdHBpb24pIHtcclxuICAgICAgdGhpcy5fYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVTZWxlY3RlZEl0ZW1zQ2hhbmdlRXZlbnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXMgPSBpdGVtcztcclxuICAgIC8vIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBpdGVtcyBhcmUgOiAnLCB0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuICBoYW5kbGVSb3dEYmxDbGljayhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgdWlkID0gdGhpcy5nZW5lcmljQ3J1ZD8uc2VsZWN0ZWRJdGVtc1swXTtcclxuICAgIGlmICh1aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNb2RhbFdpdGhJZCh1aWQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjbG9zZU1vZGFsV2l0aElkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9kaWFsb2dSZWZlcmVuY2UpIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5jbG9zZShpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RibGNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvdWJsZUNsaWNrZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVSb3dEYmxDbGljayhldmVudCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBpbml0RGVzaWduTW9kZVN1YnNjcmlwdGlvbigpIHtcclxuICAgIHRoaXMuX2Rlc2lnbk1vZGVMaXN0U3Vic2NyaXB0aW9uID1cclxuICAgICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5kZXNpZ25Nb2RlTGlzdE9ic2VydmFibGUuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZURlc2lnbk1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmFkZGVkRGlyZWN0aXZlT2JzZXJ2YWJsZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIGlmICghZGF0YS50cmVhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5fYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5hZGRlZERpcmVjdGl2ZU9ic2VydmFibGUuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWRhdGEudHJlYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gUHJlc2VudGF0aW9uIFNldHRpbmdzXHJcblxyXG4gIHByb2Nlc3NTaW5nbGVFbGVtZW50KGRpcmVjdGl2ZTogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKSkge1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXJcclxuICAgICAgKTtcclxuICAgIGlmIChcclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgKSB7XHJcbiAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCkge1xyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XHJcbiAgICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID1cclxuICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICAgKHgpID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lclxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29uZmlnQXBwbGllZCA9IHRydWU7XHJcblxyXG4gICAgLy8gbGV0IGlucHV0c1RvQWRkID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50c1xyXG4gICAgLy8gICAuZmlsdGVyKHggPT4gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uc29tZSh5ID0+IHkuYmxvY2tOYW1lID09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgeS5pc0Jsb2NrVmlzaWJsZSkpXHJcblxyXG4gICAgLy8gaW5wdXRzVG9BZGQuZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAvLyAgIGxldCBjb25maWd1cmF0aW9uID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGlucHV0LnByZXNlbnRhdGlvbkRlc2lnbmVyKT8uY29uZmlndXJhdGlvblxyXG4gICAgLy8gICBpbnB1dC5leGVjdXRlKHRydWUsIGNvbmZpZ3VyYXRpb24pXHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZURlc2lnbk1vZGUoKSB7XHJcbiAgICBsZXQgc2hvd0hpZGVDb25maWdCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNvbmZpZ01vZGVCdXR0b25JZCk7XHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcblxyXG4gICAgaWYgKHNob3dIaWRlQ29uZmlnQnRuKSB7XHJcbiAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5SZWYgPSBzaG93SGlkZUNvbmZpZ0J0bj8uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUGFyZW50UmVmID0gc2hvd0hpZGVDb25maWdCdG4/LnBhcmVudE5vZGU7XHJcblxyXG4gICAgICBjb25zdCBvbGRCdXR0b25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICB0aGlzLnNhdmVQcm9wZXJ0aWVzQnV0dG9uQ2xhc3NOYW1lXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAob2xkQnV0dG9ucykge1xyXG4gICAgICAgIEFycmF5LmZyb20ob2xkQnV0dG9ucykuZm9yRWFjaCgob2xkQnV0dG9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNoaWxkKHNob3dIaWRlQ29uZmlnQnRuPy5wYXJlbnROb2RlLCBvbGRCdXR0b24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gc2hvd0hpZGVDb25maWdCdG4ucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyPy5yZW1vdmVDaGlsZChwYXJlbnRFbGVtZW50LCBzaG93SGlkZUNvbmZpZ0J0bik7XHJcblxyXG4gICAgICBjb25zdCB0c2lCdXR0b25SZWYgPVxyXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWY/LmNyZWF0ZUNvbXBvbmVudChUc2lCdXR0b25Db21wb25lbnQpO1xyXG5cclxuICAgICAgaWYgKHRzaUJ1dHRvblJlZikge1xyXG4gICAgICAgIHRzaUJ1dHRvblJlZi5zZXRJbnB1dChcclxuICAgICAgICAgICd0ZXh0JyxcclxuICAgICAgICAgICdzaGFyZWRfdHNpX2NvbXBvbmVudF9zYXZlX2NvbmZpZ19zaG93X2hpZGUnXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0c2lCdXR0b25SZWYuc2V0SW5wdXQoJ2ljb24nLCAnc2F2ZScpO1xyXG4gICAgICAgIHRzaUJ1dHRvblJlZi5zZXRJbnB1dCgnaWQnLCB0aGlzLnNhdmVQcm9wZXJ0eUJ0bklkKTtcclxuXHJcbiAgICAgICAgdHNpQnV0dG9uUmVmLmluc3RhbmNlLm9uQ2xpY2suc3Vic2NyaWJlKCgpID0+IHRoaXMuc2F2ZVByb3BlcnRpZXMoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShcclxuICAgICAgICAgIHRzaUJ1dHRvblJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgJ2NsYXNzJyxcclxuICAgICAgICAgIHRoaXMuc2F2ZVByb3BlcnRpZXNCdXR0b25DbGFzc05hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyPy5hcHBlbmRDaGlsZChcclxuICAgICAgICAgIHBhcmVudEVsZW1lbnQsXHJcbiAgICAgICAgICB0c2lCdXR0b25SZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyhcclxuICAgICAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgICApID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGlucHV0KSA9PiB7XHJcbiAgICAgICAgICBpbnB1dC5pbnNlcnRFbGVtZW50KCk7XHJcbiAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICBpbnB1dC5zZWxlY3RBcHByb3JpYXRlQ29sdW1ucyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW5wdXQuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByZXNlbnRhdGlvblNldGluZ0RldGFpbFVpZChibG9ja05hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBibG9ja05hbWVcclxuICAgICk/LnVpZDtcclxuICB9XHJcblxyXG4gIHNhdmVQcm9wZXJ0aWVzKCkge1xyXG4gICAgaWYgKCF0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxbXSA9IFtdO1xyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgY29uc3Qgc291cmNlcyA9IFtcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNHcmlkcyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNDcnVkcyxcclxuICAgICAgICAuLi50aGlzLnZpZXdHcmlkcyxcclxuICAgICAgXTtcclxuXHJcbiAgICAgIGNvbnN0IG1hdGNoZWRTb3VyY2UgPSBzb3VyY2VzLmZpbmQoXHJcbiAgICAgICAgKHgpID0+XHJcbiAgICAgICAgICB4LmZvcm1OYW1lID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgfHxcclxuICAgICAgICAgIHguaWQgPT09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lclxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKG1hdGNoZWRTb3VyY2UpIHtcclxuICAgICAgICBjb25zdCBncmlkU3RhdGUgPSBtYXRjaGVkU291cmNlLmdldFN0YXRlKCk7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbiA9IGdyaWRTdGF0ZSA/IEpTT04uc3RyaW5naWZ5KGdyaWRTdGF0ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBvYmplY3Q6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSB7XHJcbiAgICAgICAgYmxvY2tOYW1lOiBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIsXHJcbiAgICAgICAgaXNCbG9ja1Zpc2libGU6XHJcbiAgICAgICAgICAhZGlyZWN0aXZlLnNob3dIaWRlQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZCxcclxuICAgICAgICB1aWQ6IHRoaXMuZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKFxyXG4gICAgICAgICAgZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyID8/ICcnXHJcbiAgICAgICAgKSxcclxuICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5wdXNoKG9iamVjdCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QuY29tcG9uZW50SWRlbnRpZmVyID0gdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCk7XHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMgPVxyXG4gICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscztcclxuXHJcbiAgICAvL3RoaXMubG9hZGluZyA9IHRydWVcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QuZGVzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWU7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkICE9IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLnVwZGF0ZVByZXNlbnRhdGlvblNldHRpbmcoXHJcbiAgICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QsXHJcbiAgICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhpcy5sb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUluZm9TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5sb2FkUHJlc2VudGF0aW9uU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RhdGUoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXIuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2VcclxuICAgICAgICAuY3JlYXRlUHJlc2VudGF0aW9uU2V0dGluZyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmxvYWRQcmVzZW50YXRpb25TZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdGF0ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlci5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzU3RhdGUoKSB7XHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5fZGVzaWduTW9kZUxpc3RTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG5cclxuICAgIGxldCBzYXZlUHJvcGVydGllc0J0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2F2ZVByb3BlcnR5QnRuSWQpO1xyXG5cclxuICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNoaWxkKFxyXG4gICAgICBzYXZlUHJvcGVydGllc0J0bj8ucGFyZW50Tm9kZSxcclxuICAgICAgc2F2ZVByb3BlcnRpZXNCdG5cclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0hpZGVDb25maWdCdG5QYXJlbnRSZWYgJiYgdGhpcy5zaG93SGlkZUNvbmZpZ0J0blJlZikge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChcclxuICAgICAgICB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUGFyZW50UmVmLFxyXG4gICAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5SZWZcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zaG93SGlkZUNvbmZpZ0J0blJlZiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xyXG4gICAgICBpbnB1dC5yZW1vdmVTaG93SGlkZUNoZWNrYm94KCk7XHJcbiAgICAgIGNvbnN0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC5ibG9ja05hbWUgPT0gaW5wdXQucHJlc2VudGF0aW9uRGVzaWduZXJcclxuICAgICAgICApO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCAmJlxyXG4gICAgICAgICFwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLmlzQmxvY2tWaXNpYmxlXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlucHV0LnJlbW92ZUVsZW1lbnQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCk7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kIHJlZ2lvblxyXG59XHJcbiIsIjxwPnRzaS1saXN0LWJhc2Ugd29ya3MhPC9wPiJdfQ==
|
|
483
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWxpc3QtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktbGlzdC1iYXNlL3RzaS1saXN0LWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWxpc3QtYmFzZS90c2ktbGlzdC1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFHTixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sRUFBdUMsbUJBQW1CLEVBQTZCLE1BQU0saUJBQWlCLENBQUM7QUFDdEgsT0FBTyxFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUE4QixNQUFNLG1CQUFtQixDQUFDO0FBQ2xNLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVGQUF1RixDQUFDO0FBQ2hJLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlGQUFpRixDQUFDO0FBQ3ZILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlHLE9BQU8s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ckMsNkJBQTJCOzs0RkRtQ0wsb0JBQW9CO2tCQUx6QyxTQUFTOytCQUNFLG1CQUFtQjt1SEFpRU8sV0FBVztzQkFBOUMsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBRUUsV0FBVztzQkFBOUMsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBRUQsUUFBUTtzQkFBeEMsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBRy9CLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSXJDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBR0QsU0FBUztzQkFBNUMsWUFBWTt1QkFBQyxvQkFBb0I7Z0JBRUcsYUFBYTtzQkFBakQsWUFBWTt1QkFBQyxxQkFBcUI7Z0JBNlJuQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBpbmplY3QsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYXBwLWJhc2UvYXBwLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgTW9kYWxTaXplRW51bSB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgR3JpZENvbHVtbiwgSU1vZGFsU2l6ZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnREZXNjcmltaW5hdG9yLCBTZWFyY2hGaWVsZCwgUHJlc2VudGF0aW9uU2V0dGluZywgUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLCBMYXlvdXRIZWxwZXJTZXJ2aWNlLCBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLCBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsIFByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSwgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRzaUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL2J1dHRvbi1jb21wb25lbnRzL3RzaS1idXR0b24vdHNpLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljR3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL291dHB1dC1jb21wb25lbnRzL3RzaS1nZW5lcmljLWdyaWQvdHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lWaWV3R3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL291dHB1dC1jb21wb25lbnRzL3RzaS12aWV3LWdyaWQvdHNpLXZpZXctZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljQ3J1ZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL3RzaS1nZW5lcmljLWNydWQvdHNpLWdlbmVyaWMtY3J1ZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0YWJsZUdyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9pbnB1dC1jb21wb25lbnRzL2VkaXRhYmxlLWdyaWQvZWRpdGFibGUtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL3RzaS1kaXJlY3RpdmVzL3ByZXNlbnRhdGlvbi1kZXNpZ25lci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UgfSBmcm9tICcuLi8uLi8uLi90c2ktZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVzZW50YXRpb24tc2V0dGluZy9wcmVzZW50YXRpb24tZGVzaWduZXItYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC10c2ktbGlzdC1iYXNlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLWxpc3QtYmFzZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLWxpc3QtYmFzZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHNpTGlzdEJhc2VDb21wb25lbnRcclxuICBleHRlbmRzIEFwcEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG4gIHByaXZhdGUgX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uZmlnTW9kZUJ1dHRvbklkOiBzdHJpbmcgPSAnY29uZmctbW9kZS1idXR0b24tZnJvbS1saXN0JztcclxuICBzYXZlUHJvcGVydGllc0J1dHRvbkNsYXNzTmFtZSA9ICdjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWxpc3Qtc2F2ZS1wcm9wZXJ0aWVzJztcclxuICBzYXZlUHJvcGVydHlCdG5JZCA9ICdzYXZlLXByb3BlcnR5LWJ0bic7XHJcblxyXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgZm9ybUVuZHBvaW50KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3VwZXIuZm9ybUVuZHBvaW50O1xyXG4gIH1cclxuICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGZvcm1FbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcbiAgICBzdXBlci5mb3JtRW5kcG9pbnQgPSBlbmRwb2ludDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgYnVzaW5lc3NDbGFzcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9idXNpbmVzc0NsYXNzO1xyXG4gIH1cclxuICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGJ1c2luZXNzQ2xhc3ModmFsdWU6IHN0cmluZykge1xyXG4gICAgc3VwZXIuYnVzaW5lc3NDbGFzcyA9IHZhbHVlXHJcbiAgICB0aGlzLmZvcm1FbmRwb2ludCA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgIC8vIEBUT0RPIE1lZEFsaSA6IMOgIHRlc3RlclxyXG4gICAgLy90aGlzLmdldEVudGl0eUluZm9ybWF0aW9uKHRoaXMuX2J1c2luZXNzQ2xhc3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9uZW50RGVzY3JpbWluYXRvcj86IENvbXBvbmVudERlc2NyaW1pbmF0b3I7XHJcbiAgc2V0IGNvbXBvbmVudERlc2NyaW1pbmF0b3IodmFsdWU6IENvbXBvbmVudERlc2NyaW1pbmF0b3IgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2NvbXBvbmVudERlc2NyaW1pbmF0b3IgPSB2YWx1ZTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvciAmJlxyXG4gICAgICB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yLnByb3BlcnR5VmFsdWUgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuYnVzaW5lc3NDbGFzcyAhPSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICBpZiAodmFsdWU/LnByb3BlcnR5VmFsdWUgIT0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHZhbHVlPy5wcm9wZXJ0eVZhbHVlO1xyXG4gICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlQ2hhbmdlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY29tcG9uZW50RGVzY3JpbWluYXRvcigpOiBDb21wb25lbnREZXNjcmltaW5hdG9yIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yO1xyXG4gIH1cclxuXHJcbiAgY29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXTtcclxuICB0aXRsZUNvbXBvbmVudDogc3RyaW5nID0gJyc7XHJcbiAgbW9kYWxTaXplOiBJTW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5NZWRpdW07XHJcbiAgY29tcDogYW55O1xyXG4gIHNlYXJjaEZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+ID0gW107XHJcbiAgcHJlc2VudGF0aW9uUmVxdWVzdDogUHJlc2VudGF0aW9uU2V0dGluZyA9IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcblxyXG4gIHByaXZhdGUgZ2V0IGlzQWR2YW5jZWRTZWFyY2hNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5jb25maWc/LmRhdGEgJiZcclxuICAgICAgdGhpcy5jb25maWcuZGF0YS5oYXNPd25Qcm9wZXJ0eSgnaXNBZHZhbmNlZFNlYXJjaCcpICYmXHJcbiAgICAgIHRoaXMuY29uZmlnLmRhdGEuaXNBZHZhbmNlZFNlYXJjaCA9PT0gdHJ1ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpR2VuZXJpY0NydWRDb21wb25lbnQpIGdlbmVyaWNDcnVkPzogVHNpR2VuZXJpY0NydWRDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpIGdlbmVyaWNHcmlkPzogVHNpR2VuZXJpY0dyaWRDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpVmlld0dyaWRDb21wb25lbnQpIHZpZXdHcmlkPzogVHNpVmlld0dyaWRDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpXHJcbiAgZ2VuZXJpY0dyaWRzOiBUc2lHZW5lcmljR3JpZENvbXBvbmVudFtdID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0NydWRDb21wb25lbnQpXHJcbiAgZ2VuZXJpY0NydWRzOiBUc2lHZW5lcmljQ3J1ZENvbXBvbmVudFtdID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpVmlld0dyaWRDb21wb25lbnQpIHZpZXdHcmlkczogVHNpVmlld0dyaWRDb21wb25lbnRbXSA9IFtdO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKEVkaXRhYmxlR3JpZENvbXBvbmVudCkgZWRpdGFibGVHcmlkczogRWRpdGFibGVHcmlkQ29tcG9uZW50W10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlKTtcclxuICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlID0gaW5qZWN0KExheW91dEhlbHBlclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX21lc3NhZ2VJbmZvU2VydmljZSA9IGluamVjdChUc2lOb3RpZmljYXRpb25TZXJ2aWNlKTtcclxuICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlciA9IGluamVjdChFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UgPSBpbmplY3QoUHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSk7XHJcblxyXG4gIHNob3dIaWRlQ29uZmlnQnRuUmVmOiBOb2RlIHwgdW5kZWZpbmVkO1xyXG4gIHNob3dIaWRlQ29uZmlnQnRuUGFyZW50UmVmOiBOb2RlIHwgdW5kZWZpbmVkIHwgbnVsbDtcclxuICBfZGVzaWduTW9kZUxpc3RTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBfYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBfYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgY29uZmlnQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IFtdO1xyXG4gIHByaXZhdGUgZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwdWJsaWMgX2RpYWxvZ1JlZmVyZW5jZT86IER5bmFtaWNEaWFsb2dSZWZcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGxpZmVjeWNsZSBob29rc1xyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuXHJcbiAgICB0aGlzLl91bnN1YnNjcmliZUFjdGl2ZVN1YnNjcmlwdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgIC8vIGxldCBuZXdBZGRlZERpcmVjdGl2ZXMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLmZpbHRlcih4ID0+IHgudHJlYXRlZCA9PSBmYWxzZSlcclxuICAgIC8vIGNvbnNvbGUubG9nKFwibmV3QWRkZWREaXJlY3RpdmVzIDogXCIsIG5ld0FkZGVkRGlyZWN0aXZlcylcclxuICAgIC8vIGlmIChuZXdBZGRlZERpcmVjdGl2ZXMubGVuZ3RoID4gMCAmJiAoIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSB8fCAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lKSkge1xyXG4gICAgLy8gICB0aGlzLmFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMobmV3QWRkZWREaXJlY3RpdmVzKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2UgaWYgKG5ld0FkZGVkRGlyZWN0aXZlcy5sZW5ndGggPiAwICYmIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAvLyAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cyhuZXdBZGRlZERpcmVjdGl2ZXMpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cyhuZXdBZGRlZERpcmVjdGl2ZXMpXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgfHxcclxuICAgICAgIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgICB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoaW5wdXQpID0+IHtcclxuICAgICAgICAgIGlucHV0LmV4ZWN1dGUodHJ1ZSwgdW5kZWZpbmVkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2luaXRHZW5lcmljQ3J1ZElmRXhpc3QoKTtcclxuXHJcbiAgICB0aGlzLl9pbml0R2VuZXJpY0dyaWRJZkV4aXN0KCk7XHJcblxyXG4gICAgdGhpcy5faW5pdFZpZXdHcmlkSWZFeGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdBZnRlckNvbnRlbnRDaGVja2VkKCk7XHJcbiAgICB0aGlzLl9yZWZyZXNoVmlld0dyaWRJbmZvcm1hdGlvbklmRXhpc3QoKTtcclxuICAgIHRoaXMuX3JlZnJlc2hHZW5lcmljQ3J1ZEluZm9ybWF0aW9uSWZFeGlzdCgpO1xyXG4gICAgdGhpcy5fcmVmcmVzaEdlbmVyaWNHcmlkSW5mb3JtYXRpb25JZkV4aXN0KCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmluaXREZXNpZ25Nb2RlU3Vic2NyaXB0aW9uKCk7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGdldENvbXBvbmVudElkZW50aWZpZXIoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgIC8vICAgcmV0dXJuIGAke3RoaXMuX215TmFtZSgpfV8ke3RoaXMuZGVzY3JpbWluYXRvclZhbHVlfWBcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB0aGlzLl9teU5hbWUoKTtcclxuICB9XHJcblxyXG4gIHNldE1vZGFsU2l6ZShtb2RhbFNpemU6IElNb2RhbFNpemUpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kYWxTaXplID0gbW9kYWxTaXplO1xyXG4gIH1cclxuXHJcbiAgZGVzY3JpbWluYXRvclZhbHVlQ2hhbmdlZCgpIHtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKFxyXG4gICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLFxyXG4gICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xyXG4gICAgICBjb25zdCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID1cclxuICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICAgKHgpID0+IHguYmxvY2tOYW1lID09IGlucHV0LnByZXNlbnRhdGlvbkRlc2lnbmVyXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgJiZcclxuICAgICAgICAhcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgICApIHtcclxuICAgICAgICBpbnB1dC5yZW1vdmVFbGVtZW50KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5wdXQuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQpIHtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5kZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZTtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5wcmVzZW50YXRpb25TZXR0aW5ncyA9IHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCAmJlxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uVG9FbGVtZW50cygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoaW5wdXQpID0+IHtcclxuICAgICAgICBpbnB1dC5leGVjdXRlKHRydWUsIHVuZGVmaW5lZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG5cclxuICBwcml2YXRlIF9yZWZyZXNoVmlld0dyaWRJbmZvcm1hdGlvbklmRXhpc3QoKSB7XHJcbiAgICBpZiAodGhpcy52aWV3R3JpZCkge1xyXG4gICAgICBpZiAodGhpcy52aWV3R3JpZC5mb3JtRW5kcG9pbnQgIT0gdGhpcy5mb3JtRW5kcG9pbnQpIHtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy52aWV3R3JpZC5mb3JtTmFtZSAhPSB0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnZpZXdHcmlkLmJ1c2luZXNzQ2xhc3MgIT0gdGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5idXNpbmVzc0NsYXNzID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWZyZXNoR2VuZXJpY0dyaWRJbmZvcm1hdGlvbklmRXhpc3QoKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZCkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVmcmVzaEdlbmVyaWNDcnVkSW5mb3JtYXRpb25JZkV4aXN0KCkge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQpIHtcclxuICAgICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQuZm9ybUVuZHBvaW50ICE9IHRoaXMuZm9ybUVuZHBvaW50KSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZ2VuZXJpY0NydWQuZm9ybU5hbWUgIT0gdGhpcy5mb3JtTmFtZSkge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZC5idXNpbmVzc0NsYXNzICE9IHRoaXMuYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuYnVzaW5lc3NDbGFzcyA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9pbml0Vmlld0dyaWRJZkV4aXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudmlld0dyaWQpIHtcclxuICAgICAgLy9pbml0IHJlcG9ydGluZ1xyXG4gICAgICB0aGlzLnZpZXdHcmlkLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB0aGlzLnZpZXdHcmlkLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZTtcclxuICAgICAgdGhpcy52aWV3R3JpZC5idXNpbmVzc0NsYXNzID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICBpZiAodGhpcy5pc0FkdmFuY2VkU2VhcmNoTW9kZSkge1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuc2hvd0V4cG9ydEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudmlld0dyaWQuc2hvd0NvbnN1bHRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnZpZXdHcmlkLnNob3dDYWxlbmRlclZpZXcgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbiA9XHJcbiAgICAgICAgdGhpcy52aWV3R3JpZC5zZWxlY3RlZEl0ZW1zQ2hhbmdlLnN1YnNjcmliZSgoaXRlbXM6IGFueVtdKSA9PlxyXG4gICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0ZWRJdGVtc0NoYW5nZUV2ZW50KGl0ZW1zKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0R2VuZXJpY0dyaWRJZkV4aXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNBZHZhbmNlZFNlYXJjaE1vZGUpIHtcclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNob3dBY3Rpb25Db2x1bW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNob3dDYWxlbmRlclZpZXcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNob3dFeHBvcnRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9yb3dzU2VsZWN0aW9uU3Vic2NyaXB0aW9uID1cclxuICAgICAgICB0aGlzLmdlbmVyaWNHcmlkLnNlbGVjdGVkSXRlbXNDaGFuZ2Uuc3Vic2NyaWJlKChpdGVtczogYW55W10pID0+XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVTZWxlY3RlZEl0ZW1zQ2hhbmdlRXZlbnQoaXRlbXMpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRHZW5lcmljQ3J1ZElmRXhpc3QoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljQ3J1ZCkge1xyXG4gICAgICAvL2luaXQgcmVwb3J0aW5nXHJcbiAgICAgIGlmICh0aGlzLmlzQWR2YW5jZWRTZWFyY2hNb2RlKSB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93QWRkQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93RGVsZXRlQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93Q29uc3VsdEJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2hvd0VkaXRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dFeHBvcnRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dJbmZvQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5zaG93RG93bmxvYWRCdXR0b24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dSZXBvcnRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdlbmVyaWNDcnVkLnNob3dVcGxvYWRCdXR0b24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5uZ09uSW5pdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0NydWQuZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB0aGlzLmdlbmVyaWNDcnVkLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcblxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPVxyXG4gICAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKFxyXG4gICAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICAgICkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuICAgICAgdGhpcy5nZW5lcmljQ3J1ZC5wcmVzZW50YXRpb25TZXR0aW5ncyA9IHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdDtcclxuXHJcbiAgICAgIHRoaXMuX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb24gPVxyXG4gICAgICAgIHRoaXMuZ2VuZXJpY0NydWQuc2VsZWN0ZWRJdGVtc0NoYW5nZS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT5cclxuICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdGVkSXRlbXNDaGFuZ2VFdmVudChpdGVtcylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBY3RpdmVTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3Jvd3NTZWxlY3Rpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5fcm93c1NlbGVjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9kZXNpZ25Nb2RlTGlzdFN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLl9kZXNpZ25Nb2RlTGlzdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZEJhc2VEaXJlY3RpdmVTdWJzY3JpdHBpb24pIHtcclxuICAgICAgdGhpcy5fYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVTZWxlY3RlZEl0ZW1zQ2hhbmdlRXZlbnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXMgPSBpdGVtcztcclxuICAgIC8vIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBpdGVtcyBhcmUgOiAnLCB0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuICBoYW5kbGVSb3dEYmxDbGljayhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgdWlkID0gdGhpcy5nZW5lcmljQ3J1ZD8uc2VsZWN0ZWRJdGVtc1swXTtcclxuICAgIGlmICh1aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VNb2RhbFdpdGhJZCh1aWQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjbG9zZU1vZGFsV2l0aElkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9kaWFsb2dSZWZlcmVuY2UpIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmZXJlbmNlPy5jbG9zZShpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RibGNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvdWJsZUNsaWNrZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVSb3dEYmxDbGljayhldmVudCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBpbml0RGVzaWduTW9kZVN1YnNjcmlwdGlvbigpIHtcclxuICAgIHRoaXMuX2Rlc2lnbk1vZGVMaXN0U3Vic2NyaXB0aW9uID1cclxuICAgICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5kZXNpZ25Nb2RlTGlzdE9ic2VydmFibGUuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZURlc2lnbk1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmFkZGVkRGlyZWN0aXZlT2JzZXJ2YWJsZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIGlmICghZGF0YS50cmVhdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5fYWRkZWRCYXNlRGlyZWN0aXZlU3Vic2NyaXRwaW9uID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5hZGRlZERpcmVjdGl2ZU9ic2VydmFibGUuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWRhdGEudHJlYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gUHJlc2VudGF0aW9uIFNldHRpbmdzXHJcblxyXG4gIHByb2Nlc3NTaW5nbGVFbGVtZW50KGRpcmVjdGl2ZTogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKSkge1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID1cclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmMoXHJcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPVxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXJcclxuICAgICAgKTtcclxuICAgIGlmIChcclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9PSB1bmRlZmluZWQgfHxcclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgKSB7XHJcbiAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbmZpZ3VyYXRpb25Ub0VsZW1lbnRzKCkge1xyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XHJcbiAgICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID1cclxuICAgICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKFxyXG4gICAgICAgICAgKHgpID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lclxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29uZmlnQXBwbGllZCA9IHRydWU7XHJcblxyXG4gICAgLy8gbGV0IGlucHV0c1RvQWRkID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50c1xyXG4gICAgLy8gICAuZmlsdGVyKHggPT4gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uc29tZSh5ID0+IHkuYmxvY2tOYW1lID09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgeS5pc0Jsb2NrVmlzaWJsZSkpXHJcblxyXG4gICAgLy8gaW5wdXRzVG9BZGQuZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAvLyAgIGxldCBjb25maWd1cmF0aW9uID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGlucHV0LnByZXNlbnRhdGlvbkRlc2lnbmVyKT8uY29uZmlndXJhdGlvblxyXG4gICAgLy8gICBpbnB1dC5leGVjdXRlKHRydWUsIGNvbmZpZ3VyYXRpb24pXHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZURlc2lnbk1vZGUoKSB7XHJcbiAgICBsZXQgc2hvd0hpZGVDb25maWdCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNvbmZpZ01vZGVCdXR0b25JZCk7XHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcblxyXG4gICAgaWYgKHNob3dIaWRlQ29uZmlnQnRuKSB7XHJcbiAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5SZWYgPSBzaG93SGlkZUNvbmZpZ0J0bj8uY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUGFyZW50UmVmID0gc2hvd0hpZGVDb25maWdCdG4/LnBhcmVudE5vZGU7XHJcblxyXG4gICAgICBjb25zdCBvbGRCdXR0b25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICB0aGlzLnNhdmVQcm9wZXJ0aWVzQnV0dG9uQ2xhc3NOYW1lXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAob2xkQnV0dG9ucykge1xyXG4gICAgICAgIEFycmF5LmZyb20ob2xkQnV0dG9ucykuZm9yRWFjaCgob2xkQnV0dG9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNoaWxkKHNob3dIaWRlQ29uZmlnQnRuPy5wYXJlbnROb2RlLCBvbGRCdXR0b24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gc2hvd0hpZGVDb25maWdCdG4ucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyPy5yZW1vdmVDaGlsZChwYXJlbnRFbGVtZW50LCBzaG93SGlkZUNvbmZpZ0J0bik7XHJcblxyXG4gICAgICBjb25zdCB0c2lCdXR0b25SZWYgPVxyXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWY/LmNyZWF0ZUNvbXBvbmVudChUc2lCdXR0b25Db21wb25lbnQpO1xyXG5cclxuICAgICAgaWYgKHRzaUJ1dHRvblJlZikge1xyXG4gICAgICAgIHRzaUJ1dHRvblJlZi5zZXRJbnB1dChcclxuICAgICAgICAgICd0ZXh0JyxcclxuICAgICAgICAgICdzaGFyZWRfdHNpX2NvbXBvbmVudF9zYXZlX2NvbmZpZ19zaG93X2hpZGUnXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0c2lCdXR0b25SZWYuc2V0SW5wdXQoJ2ljb24nLCAnc2F2ZScpO1xyXG4gICAgICAgIHRzaUJ1dHRvblJlZi5zZXRJbnB1dCgnaWQnLCB0aGlzLnNhdmVQcm9wZXJ0eUJ0bklkKTtcclxuXHJcbiAgICAgICAgdHNpQnV0dG9uUmVmLmluc3RhbmNlLm9uQ2xpY2suc3Vic2NyaWJlKCgpID0+IHRoaXMuc2F2ZVByb3BlcnRpZXMoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShcclxuICAgICAgICAgIHRzaUJ1dHRvblJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgJ2NsYXNzJyxcclxuICAgICAgICAgIHRoaXMuc2F2ZVByb3BlcnRpZXNCdXR0b25DbGFzc05hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyPy5hcHBlbmRDaGlsZChcclxuICAgICAgICAgIHBhcmVudEVsZW1lbnQsXHJcbiAgICAgICAgICB0c2lCdXR0b25SZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9XHJcbiAgICAgICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyhcclxuICAgICAgICAgICAgdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICAgICApID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGlucHV0KSA9PiB7XHJcbiAgICAgICAgICBpbnB1dC5pbnNlcnRFbGVtZW50KCk7XHJcbiAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSkge1xyXG4gICAgICAgICAgICBpbnB1dC5zZWxlY3RBcHByb3JpYXRlQ29sdW1ucyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW5wdXQuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByZXNlbnRhdGlvblNldGluZ0RldGFpbFVpZChibG9ja05hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoXHJcbiAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBibG9ja05hbWVcclxuICAgICk/LnVpZDtcclxuICB9XHJcblxyXG4gIHNhdmVQcm9wZXJ0aWVzKCkge1xyXG4gICAgaWYgKCF0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxbXSA9IFtdO1xyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgY29uc3Qgc291cmNlczogQXJyYXk8eyBpZD86IHN0cmluZzsgZm9ybU5hbWU/OiBzdHJpbmc7IGdldFN0YXRlOiAoKSA9PiBhbnkgfT4gPSBbXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljR3JpZHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljQ3J1ZHMsXHJcbiAgICAgICAgLi4udGhpcy52aWV3R3JpZHMsXHJcbiAgICAgICAgLi4udGhpcy5lZGl0YWJsZUdyaWRzLFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgY29uc3QgbWF0Y2hlZFNvdXJjZSA9IHNvdXJjZXMuZmluZChcclxuICAgICAgICAoeCkgPT5cclxuICAgICAgICAgIHguZm9ybU5hbWUgPT09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciB8fFxyXG4gICAgICAgICAgeC5pZCA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAobWF0Y2hlZFNvdXJjZSkge1xyXG4gICAgICAgIGNvbnN0IGdyaWRTdGF0ZSA9IG1hdGNoZWRTb3VyY2UuZ2V0U3RhdGUoKTtcclxuICAgICAgICBjb25maWd1cmF0aW9uID0gZ3JpZFN0YXRlID8gSlNPTi5zdHJpbmdpZnkoZ3JpZFN0YXRlKSA6IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG9iamVjdDogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9IHtcclxuICAgICAgICBibG9ja05hbWU6IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcixcclxuICAgICAgICBpc0Jsb2NrVmlzaWJsZTpcclxuICAgICAgICAgICFkaXJlY3RpdmUuc2hvd0hpZGVDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkLFxyXG4gICAgICAgIHVpZDogdGhpcy5nZXRQcmVzZW50YXRpb25TZXRpbmdEZXRhaWxVaWQoXHJcbiAgICAgICAgICBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgPz8gJydcclxuICAgICAgICApLFxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sXHJcbiAgICAgIH07XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLnB1c2gob2JqZWN0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5jb21wb25lbnRJZGVudGlmZXIgPSB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKTtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscyA9XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzO1xyXG5cclxuICAgIC8vdGhpcy5sb2FkaW5nID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5kZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQgIT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2VcclxuICAgICAgICAudXBkYXRlUHJlc2VudGF0aW9uU2V0dGluZyhcclxuICAgICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCxcclxuICAgICAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWRcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmxvYWRQcmVzZW50YXRpb25TZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdGF0ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlci5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZVxyXG4gICAgICAgIC5jcmVhdGVQcmVzZW50YXRpb25TZXR0aW5nKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UubG9hZFByZXNlbnRhdGlvblNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0YXRlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NTdGF0ZSgpIHtcclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlTGlzdFN1YmplY3QubmV4dChmYWxzZSk7XHJcblxyXG4gICAgbGV0IHNhdmVQcm9wZXJ0aWVzQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zYXZlUHJvcGVydHlCdG5JZCk7XHJcblxyXG4gICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQoXHJcbiAgICAgIHNhdmVQcm9wZXJ0aWVzQnRuPy5wYXJlbnROb2RlLFxyXG4gICAgICBzYXZlUHJvcGVydGllc0J0blxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93SGlkZUNvbmZpZ0J0blBhcmVudFJlZiAmJiB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUmVmKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIHRoaXMuc2hvd0hpZGVDb25maWdCdG5QYXJlbnRSZWYsXHJcbiAgICAgICAgdGhpcy5zaG93SGlkZUNvbmZpZ0J0blJlZlxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNob3dIaWRlQ29uZmlnQnRuUmVmID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGlucHV0KSA9PiB7XHJcbiAgICAgIGlucHV0LnJlbW92ZVNob3dIaWRlQ2hlY2tib3goKTtcclxuICAgICAgY29uc3QgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9XHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZChcclxuICAgICAgICAgICh4KSA9PiB4LmJsb2NrTmFtZSA9PSBpbnB1dC5wcmVzZW50YXRpb25EZXNpZ25lclxyXG4gICAgICAgICk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsICYmXHJcbiAgICAgICAgIXByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgaW5wdXQucmVtb3ZlRWxlbWVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFwcGx5Q29uZmlndXJhdGlvblRvRWxlbWVudHMoKTtcclxuICB9XHJcblxyXG4gIC8vICNlbmQgcmVnaW9uXHJcbn1cclxuIiwiPHA+dHNpLWxpc3QtYmFzZSB3b3JrcyE8L3A+Il19
|