igniteui-angular 18.2.6 → 18.2.8
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/carousel/carousel.component.mjs +10 -6
- package/esm2022/lib/checkbox/checkbox.component.mjs +30 -20
- package/esm2022/lib/core/utils.mjs +8 -2
- package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +28 -26
- package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +4 -4
- package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +3 -3
- package/esm2022/lib/grids/grid-base.directive.mjs +2 -2
- package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +3 -3
- package/esm2022/lib/grids/moving/moving.drag.directive.mjs +3 -3
- package/esm2022/lib/grids/selection/selection.service.mjs +4 -4
- package/esm2022/lib/icon/icon.component.mjs +4 -7
- package/esm2022/lib/icon/icon.service.mjs +39 -11
- package/esm2022/lib/icon/types.mjs +1 -1
- package/esm2022/lib/input-group/input-group.component.mjs +29 -21
- package/esm2022/lib/services/excel/worksheet-data-dictionary.mjs +2 -2
- package/esm2022/lib/services/exporter-common/export-utilities.mjs +5 -4
- package/esm2022/lib/services/public_api.mjs +2 -1
- package/esm2022/lib/services/theme/theme.token.mjs +39 -0
- package/fesm2022/igniteui-angular.mjs +181 -137
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/carousel/carousel.component.d.ts +2 -1
- package/lib/checkbox/checkbox.component.d.ts +4 -5
- package/lib/core/styles/components/avatar/_avatar-theme.scss +1 -31
- package/lib/core/styles/components/card/_card-theme.scss +1 -1
- package/lib/core/styles/components/combo/_combo-theme.scss +22 -8
- package/lib/core/styles/components/input/_input-group-theme.scss +5 -2
- package/lib/core/styles/themes/presets/igniteui-angular-dark.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-angular.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-bootstrap-dark.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-bootstrap-light.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-dark-green.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-fluent-dark-excel.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-fluent-dark-word.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-fluent-dark.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-fluent-light-excel.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-fluent-light-word.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-fluent-light.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-indigo-dark.scss +8 -2
- package/lib/core/styles/themes/presets/igniteui-indigo-light.scss +8 -2
- package/lib/core/utils.d.ts +2 -0
- package/lib/directives/drag-drop/drag-drop.directive.d.ts +1 -0
- package/lib/icon/icon.component.d.ts +1 -3
- package/lib/icon/icon.service.d.ts +7 -4
- package/lib/icon/types.d.ts +3 -1
- package/lib/input-group/input-group.component.d.ts +8 -10
- package/lib/services/public_api.d.ts +1 -0
- package/lib/services/theme/theme.token.d.ts +24 -0
- package/package.json +1 -1
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
- package/esm2022/lib/services/theme/theme.service.mjs +0 -48
- package/lib/services/theme/theme.service.d.ts +0 -27
|
@@ -142,7 +142,7 @@ export class IgxGridFilteringCellComponent {
|
|
|
142
142
|
const chipsAreaElements = this.chipsArea.element.nativeElement.children;
|
|
143
143
|
let visibleChipsCount = 0;
|
|
144
144
|
const moreIconWidth = this.moreIcon.nativeElement.offsetWidth -
|
|
145
|
-
parseInt(document.defaultView.getComputedStyle(this.moreIcon.nativeElement)['margin-left'], 10);
|
|
145
|
+
parseInt(this.column?.grid.document.defaultView.getComputedStyle(this.moreIcon.nativeElement)['margin-left'], 10);
|
|
146
146
|
for (let index = 0; index < chipsAreaElements.length - 1; index++) {
|
|
147
147
|
if (viewWidth + chipsAreaElements[index].offsetWidth < areaWidth) {
|
|
148
148
|
viewWidth += chipsAreaElements[index].offsetWidth;
|
|
@@ -150,8 +150,8 @@ export class IgxGridFilteringCellComponent {
|
|
|
150
150
|
visibleChipsCount++;
|
|
151
151
|
}
|
|
152
152
|
else {
|
|
153
|
-
viewWidth += parseInt(document.defaultView.getComputedStyle(chipsAreaElements[index])['margin-left'], 10);
|
|
154
|
-
viewWidth += parseInt(document.defaultView.getComputedStyle(chipsAreaElements[index])['margin-right'], 10);
|
|
153
|
+
viewWidth += parseInt(this.column?.grid.document.defaultView.getComputedStyle(chipsAreaElements[index])['margin-left'], 10);
|
|
154
|
+
viewWidth += parseInt(this.column?.grid.document.defaultView.getComputedStyle(chipsAreaElements[index])['margin-right'], 10);
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
else {
|
|
@@ -215,4 +215,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
|
|
|
215
215
|
type: HostBinding,
|
|
216
216
|
args: ['class']
|
|
217
217
|
}] } });
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXJpbmctY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZmlsdGVyaW5nL2Jhc2UvZ3JpZC1maWx0ZXJpbmctY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZmlsdGVyaW5nL2Jhc2UvZ3JpZC1maWx0ZXJpbmctY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFFTCxXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUUxQzs7R0FFRztBQWtCSCxNQUFNLE9BQU8sNkJBQTZCO0lBMEJ0QyxJQUNXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFD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RUFBRSxnQkFBZ0IsRUFBRTtnQkFJeEMsV0FBVztzQkFEcEIsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS3pDLFlBQVk7c0JBRHRCLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4RmlsdGVyaW5nU2VydmljZSB9IGZyb20gJy4uL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwcmVzc2lvblVJIH0gZnJvbSAnLi4vZXhjZWwtc3R5bGUvY29tbW9uJztcbmltcG9ydCB7IElneENoaXBzQXJlYUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NoaXBzL2NoaXBzLWFyZWEuY29tcG9uZW50JztcbmltcG9ydCB7IElCYXNlQ2hpcEV2ZW50QXJncywgSWd4Q2hpcENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NoaXBzL2NoaXAuY29tcG9uZW50JztcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tICcuLi8uLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4QmFkZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9iYWRnZS9iYWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdGb3IsIE5nSWYsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW1zJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtZmlsdGVyaW5nLWNlbGwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWZpbHRlcmluZy1jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgSWd4Q2hpcHNBcmVhQ29tcG9uZW50LFxuICAgICAgICBJZ3hDaGlwQ29tcG9uZW50LFxuICAgICAgICBJZ3hJY29uQ29tcG9uZW50LFxuICAgICAgICBJZ3hQcmVmaXhEaXJlY3RpdmUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBJZ3hCYWRnZUNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZEZpbHRlcmluZ0NlbGxDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIERvQ2hlY2sge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogQ29sdW1uVHlwZTtcblxuICAgIEBWaWV3Q2hpbGQoJ2VtcHR5RmlsdGVyJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGVtcHR5RmlsdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEZpbHRlcicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0RmlsdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY29tcGxleEZpbHRlcicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBjb21wbGV4RmlsdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY2hpcHNBcmVhJywgeyByZWFkOiBJZ3hDaGlwc0FyZWFDb21wb25lbnQgfSlcbiAgICBwcm90ZWN0ZWQgY2hpcHNBcmVhOiBJZ3hDaGlwc0FyZWFDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdtb3JlSWNvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByb3RlY3RlZCBtb3JlSWNvbjogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ2dob3N0Q2hpcCcsIHsgcmVhZDogSWd4Q2hpcENvbXBvbmVudCB9KVxuICAgIHByb3RlY3RlZCBnaG9zdENoaXA6IElneENoaXBDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdjb21wbGV4Q2hpcCcsIHsgcmVhZDogSWd4Q2hpcENvbXBvbmVudCB9KVxuICAgIHByb3RlY3RlZCBjb21wbGV4Q2hpcDogSWd4Q2hpcENvbXBvbmVudDtcblxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCBzdHlsZUNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uICYmIHRoaXMuY29sdW1uLnNlbGVjdGVkID9cbiAgICAgICAgICAgICdpZ3gtZ3JpZF9fZmlsdGVyaW5nLWNlbGwtLXNlbGVjdGVkJyA6XG4gICAgICAgICAgICAnaWd4LWdyaWRfX2ZpbHRlcmluZy1jZWxsJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwcmVzc2lvbnNMaXN0OiBFeHByZXNzaW9uVUlbXTtcbiAgICBwdWJsaWMgbW9yZUZpbHRlcnNDb3VudCA9IDA7XG5cbiAgICBwcml2YXRlIGJhc2VDbGFzcyA9ICdpZ3gtZ3JpZF9fZmlsdGVyaW5nLWNlbGwtaW5kaWNhdG9yJztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHVibGljIGZpbHRlcmluZ1NlcnZpY2U6IElneEZpbHRlcmluZ1NlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5zdWJzY3JpYmVUb0V2ZW50cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmNvbHVtblRvTW9yZUljb25IaWRkZW4uc2V0KHRoaXMuY29sdW1uLmZpZWxkLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlckNlbGxBcmVhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJDZWxsQXJlYSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciBhIGNoaXAgd2l0aCBhIGdpdmVuIGluZGV4IGlzIHZpc2libGUgb3Igbm90LlxuICAgICAqL1xuICAgIHB1YmxpYyBpc0NoaXBWaXNpYmxlKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0W2luZGV4XTtcbiAgICAgICAgcmV0dXJuICEhKGV4cHJlc3Npb24gJiYgZXhwcmVzc2lvbi5pc1Zpc2libGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGZpbHRlcmluZyBjZWxsIGFyZWEuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZUZpbHRlckNlbGxBcmVhKCkge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdCA9IHRoaXMuZmlsdGVyaW5nU2VydmljZS5nZXRFeHByZXNzaW9ucyh0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uLmZpbHRlcmFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5maWx0ZXJDZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJDZWxsVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwcmVzc2lvblRyZWUgPSB0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgIGlmICghZXhwcmVzc2lvblRyZWUgfHwgZXhwcmVzc2lvblRyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbXB0eUZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyQ29tcGxleCh0aGlzLmNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXhGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb250ZXh0IHBhc3NlZCB0byB0aGUgZmlsdGVyIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBjb250ZXh0KCkge1xuICAgICAgICByZXR1cm4geyAkaW1wbGljaXQ6IHRoaXMuY29sdW1uLCBjb2x1bW46IHRoaXMuY29sdW1ufTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGlwIGNsaWNrZWQgZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwQ2xpY2tlZChleHByZXNzaW9uPzogSUZpbHRlcmluZ0V4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSAoaXRlbS5leHByZXNzaW9uID09PSBleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdyaWQubmF2aWdhdGlvbi5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbCh0aGlzLmNvbHVtbi52aXNpYmxlSW5kZXgpO1xuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVyZWRDb2x1bW4gPSB0aGlzLmNvbHVtbjtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyUm93VmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5zZWxlY3RlZEV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoaXAgcmVtb3ZlZCBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBSZW1vdmVkKGV2ZW50QXJnczogSUJhc2VDaGlwRXZlbnRBcmdzLCBpdGVtOiBFeHByZXNzaW9uVUkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhUb1JlbW92ZSA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0LmluZGV4T2YoaXRlbSk7XG4gICAgICAgIHRoaXMucmVtb3ZlRXhwcmVzc2lvbihpbmRleFRvUmVtb3ZlKTtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdyaWQudGhlYWRSb3cubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgZmlsdGVyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckZpbHRlcmluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmNsZWFyRmlsdGVyKHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGZpbHRlcmluZyBpbmRpY2F0b3IgY2xhc3MuXG4gICAgICovXG4gICAgcHVibGljIGZpbHRlcmluZ0luZGljYXRvckNsYXNzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW3RoaXMuYmFzZUNsYXNzXTogIXRoaXMuaXNNb3JlSWNvbkhpZGRlbigpLFxuICAgICAgICAgICAgW2Ake3RoaXMuYmFzZUNsYXNzfS0taGlkZGVuYF06IHRoaXMuaXNNb3JlSWNvbkhpZGRlbigpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBmaWx0ZXJpbmdFbGVtZW50c1NpemUoKTogU2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5ncmlkLmdyaWRTaXplID09PSBTaXplLkxhcmdlID8gU2l6ZS5NZWRpdW0gOiB0aGlzLmNvbHVtbi5ncmlkLmdyaWRTaXplO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRXhwcmVzc2lvbihpbmRleFRvUmVtb3ZlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGluZGV4VG9SZW1vdmUgPT09IDAgJiYgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyRmlsdGVyaW5nKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UucmVtb3ZlRXhwcmVzc2lvbih0aGlzLmNvbHVtbi5maWVsZCwgaW5kZXhUb1JlbW92ZSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlRmlsdGVycygpO1xuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVySW50ZXJuYWwodGhpcy5jb2x1bW4uZmllbGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNNb3JlSWNvbkhpZGRlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nU2VydmljZS5jb2x1bW5Ub01vcmVJY29uSGlkZGVuLmdldCh0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3QuZm9yRWFjaCgoZXgpID0+IGV4LmlzVmlzaWJsZSA9IHRydWUpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vcmVJY29uKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuY29sdW1uVG9Nb3JlSWNvbkhpZGRlbi5zZXQodGhpcy5jb2x1bW4uZmllbGQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICBpZiAodGhpcy5jaGlwc0FyZWEgJiYgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgYXJlYVdpZHRoID0gdGhpcy5jaGlwc0FyZWEuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgbGV0IHZpZXdXaWR0aCA9IDA7XG4gICAgICAgICAgICBjb25zdCBjaGlwc0FyZWFFbGVtZW50cyA9IHRoaXMuY2hpcHNBcmVhLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGxldCB2aXNpYmxlQ2hpcHNDb3VudCA9IDA7XG4gICAgICAgICAgICBjb25zdCBtb3JlSWNvbldpZHRoID0gdGhpcy5tb3JlSWNvbi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC1cbiAgICAgICAgICAgICAgICBwYXJzZUludChkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMubW9yZUljb24ubmF0aXZlRWxlbWVudClbJ21hcmdpbi1sZWZ0J10sIDEwKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoaXBzQXJlYUVsZW1lbnRzLmxlbmd0aCAtIDE7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAodmlld1dpZHRoICsgY2hpcHNBcmVhRWxlbWVudHNbaW5kZXhdLm9mZnNldFdpZHRoIDwgYXJlYVdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdXaWR0aCArPSBjaGlwc0FyZWFFbGVtZW50c1tpbmRleF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVDaGlwc0NvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3V2lkdGggKz0gcGFyc2VJbnQoZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjaGlwc0FyZWFFbGVtZW50c1tpbmRleF0pWydtYXJnaW4tbGVmdCddLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3V2lkdGggKz0gcGFyc2VJbnQoZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjaGlwc0FyZWFFbGVtZW50c1tpbmRleF0pWydtYXJnaW4tcmlnaHQnXSwgMTApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICUgMiAhPT0gMCAmJiB2aWV3V2lkdGggKyBtb3JlSWNvbldpZHRoID4gYXJlYVdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlQ2hpcHNDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZpc2libGVDaGlwc0NvdW50ID4gMCAmJiB2aWV3V2lkdGggLSBjaGlwc0FyZWFFbGVtZW50c1tpbmRleCAtIDFdLm9mZnNldFdpZHRoICsgbW9yZUljb25XaWR0aCA+IGFyZWFXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZUNoaXBzQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcmVGaWx0ZXJzQ291bnQgPSB0aGlzLmV4cHJlc3Npb25zTGlzdC5sZW5ndGggLSB2aXNpYmxlQ2hpcHNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmNvbHVtblRvTW9yZUljb25IaWRkZW4uc2V0KHRoaXMuY29sdW1uLmZpZWxkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHZpc2libGVDaGlwc0NvdW50OyBpIDwgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFtpXS5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZW1wdHlGaWx0ZXI+XG4gICAgPGlneC1jaGlwcy1hcmVhIFthdHRyLmRyYWdnYWJsZV09XCJmYWxzZVwiIGNsYXNzPVwiaWd4LWZpbHRlcmluZy1jaGlwc1wiPlxuICAgICAgICA8aWd4LWNoaXAgI2dob3N0Q2hpcCBbYXR0ci5kcmFnZ2FibGVdPVwiZmFsc2VcIiAoY2xpY2spPVwib25DaGlwQ2xpY2tlZCgpXCIgW3RhYkluZGV4XT1cIi0xXCIgW3N0eWxlLi0taWctc2l6ZV09XCJmaWx0ZXJpbmdFbGVtZW50c1NpemVcIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgIFthdHRyLmRyYWdnYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgaWd4UHJlZml4XG4gICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImZpbHRlcl9saXN0XCJcbiAgICAgICAgICAgID48L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4gW2F0dHIuZHJhZ2dhYmxlXT1cImZhbHNlXCI+e3tmaWx0ZXJpbmdTZXJ2aWNlLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2ZpbHRlcn19PC9zcGFuPlxuICAgICAgICA8L2lneC1jaGlwPlxuICAgIDwvaWd4LWNoaXBzLWFyZWE+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRGaWx0ZXI+XG4gICAgPGlneC1jaGlwcy1hcmVhICNjaGlwc0FyZWEgY2xhc3M9XCJpZ3gtZmlsdGVyaW5nLWNoaXBzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZXhwcmVzc2lvbnNMaXN0OyBsZXQgbGFzdCA9IGxhc3Q7IGxldCBpbmRleCA9IGluZGV4O1wiID5cbiAgICAgICAgICAgIDxpZ3gtY2hpcCAqbmdJZj1cImlzQ2hpcFZpc2libGUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLi0taWctc2l6ZV09XCJmaWx0ZXJpbmdFbGVtZW50c1NpemVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoaXBDbGlja2VkKGl0ZW0uZXhwcmVzc2lvbilcIlxuICAgICAgICAgICAgICAgIChyZW1vdmUpPVwib25DaGlwUmVtb3ZlZCgkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgPGlneC1pY29uIGlneFByZWZpeFxuICAgICAgICAgICAgICAgICAgICBmYW1pbHk9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5leHByZXNzaW9uLmNvbmRpdGlvbi5pY29uTmFtZVwiPlxuICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4gI2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICB7e2ZpbHRlcmluZ1NlcnZpY2UuZ2V0Q2hpcExhYmVsKGl0ZW0uZXhwcmVzc2lvbil9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1maWx0ZXJpbmctY2hpcHNfX2Nvbm5lY3RvclwiICpuZ0lmPVwiIWxhc3QgJiYgaXNDaGlwVmlzaWJsZShpbmRleCArIDEpXCI+e3tmaWx0ZXJpbmdTZXJ2aWNlLmdldE9wZXJhdG9yQXNTdHJpbmcoaXRlbS5hZnRlck9wZXJhdG9yKX19PC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiAjbW9yZUljb24gW25nQ2xhc3NdPVwiZmlsdGVyaW5nSW5kaWNhdG9yQ2xhc3MoKVwiIChjbGljayk9XCJvbkNoaXBDbGlja2VkKClcIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgbmFtZT1cImZpbHRlcl9saXN0XCI+PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxpZ3gtYmFkZ2UgW3ZhbHVlXT1cIm1vcmVGaWx0ZXJzQ291bnRcIj48L2lneC1iYWRnZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9pZ3gtY2hpcHMtYXJlYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29tcGxleEZpbHRlcj5cbiAgICA8aWd4LWNoaXAgI2NvbXBsZXhDaGlwIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChyZW1vdmUpPVwiY2xlYXJGaWx0ZXJpbmcoKVwiIFt0YWJJbmRleF09XCItMVwiIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgIDxpZ3gtaWNvbiBpZ3hQcmVmaXggZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJmaWx0ZXJfbGlzdFwiPjwvaWd4LWljb24+XG4gICAgICAgIDxzcGFuPnt7ZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9jb21wbGV4X2ZpbHRlcn19PC9zcGFuPlxuICAgIDwvaWd4LWNoaXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
218
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXJpbmctY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZmlsdGVyaW5nL2Jhc2UvZ3JpZC1maWx0ZXJpbmctY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZmlsdGVyaW5nL2Jhc2UvZ3JpZC1maWx0ZXJpbmctY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFFTCxXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUUxQzs7R0FFRztBQWtCSCxNQUFNLE9BQU8sNkJBQTZCO0lBMEJ0QyxJQUNXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFD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QkFBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUlqQyxTQUFTO3NCQURsQixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFJeEMsV0FBVztzQkFEcEIsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS3pDLFlBQVk7c0JBRHRCLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4RmlsdGVyaW5nU2VydmljZSB9IGZyb20gJy4uL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwcmVzc2lvblVJIH0gZnJvbSAnLi4vZXhjZWwtc3R5bGUvY29tbW9uJztcbmltcG9ydCB7IElneENoaXBzQXJlYUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NoaXBzL2NoaXBzLWFyZWEuY29tcG9uZW50JztcbmltcG9ydCB7IElCYXNlQ2hpcEV2ZW50QXJncywgSWd4Q2hpcENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NoaXBzL2NoaXAuY29tcG9uZW50JztcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tICcuLi8uLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4QmFkZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9iYWRnZS9iYWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdGb3IsIE5nSWYsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSAnLi4vLi4vY29tbW9uL2VudW1zJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtZmlsdGVyaW5nLWNlbGwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWZpbHRlcmluZy1jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgSWd4Q2hpcHNBcmVhQ29tcG9uZW50LFxuICAgICAgICBJZ3hDaGlwQ29tcG9uZW50LFxuICAgICAgICBJZ3hJY29uQ29tcG9uZW50LFxuICAgICAgICBJZ3hQcmVmaXhEaXJlY3RpdmUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBJZ3hCYWRnZUNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZEZpbHRlcmluZ0NlbGxDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIERvQ2hlY2sge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogQ29sdW1uVHlwZTtcblxuICAgIEBWaWV3Q2hpbGQoJ2VtcHR5RmlsdGVyJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGVtcHR5RmlsdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEZpbHRlcicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0RmlsdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY29tcGxleEZpbHRlcicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBjb21wbGV4RmlsdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY2hpcHNBcmVhJywgeyByZWFkOiBJZ3hDaGlwc0FyZWFDb21wb25lbnQgfSlcbiAgICBwcm90ZWN0ZWQgY2hpcHNBcmVhOiBJZ3hDaGlwc0FyZWFDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdtb3JlSWNvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByb3RlY3RlZCBtb3JlSWNvbjogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ2dob3N0Q2hpcCcsIHsgcmVhZDogSWd4Q2hpcENvbXBvbmVudCB9KVxuICAgIHByb3RlY3RlZCBnaG9zdENoaXA6IElneENoaXBDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdjb21wbGV4Q2hpcCcsIHsgcmVhZDogSWd4Q2hpcENvbXBvbmVudCB9KVxuICAgIHByb3RlY3RlZCBjb21wbGV4Q2hpcDogSWd4Q2hpcENvbXBvbmVudDtcblxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCBzdHlsZUNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uICYmIHRoaXMuY29sdW1uLnNlbGVjdGVkID9cbiAgICAgICAgICAgICdpZ3gtZ3JpZF9fZmlsdGVyaW5nLWNlbGwtLXNlbGVjdGVkJyA6XG4gICAgICAgICAgICAnaWd4LWdyaWRfX2ZpbHRlcmluZy1jZWxsJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwcmVzc2lvbnNMaXN0OiBFeHByZXNzaW9uVUlbXTtcbiAgICBwdWJsaWMgbW9yZUZpbHRlcnNDb3VudCA9IDA7XG5cbiAgICBwcml2YXRlIGJhc2VDbGFzcyA9ICdpZ3gtZ3JpZF9fZmlsdGVyaW5nLWNlbGwtaW5kaWNhdG9yJztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHVibGljIGZpbHRlcmluZ1NlcnZpY2U6IElneEZpbHRlcmluZ1NlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5zdWJzY3JpYmVUb0V2ZW50cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmNvbHVtblRvTW9yZUljb25IaWRkZW4uc2V0KHRoaXMuY29sdW1uLmZpZWxkLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlckNlbGxBcmVhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJDZWxsQXJlYSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciBhIGNoaXAgd2l0aCBhIGdpdmVuIGluZGV4IGlzIHZpc2libGUgb3Igbm90LlxuICAgICAqL1xuICAgIHB1YmxpYyBpc0NoaXBWaXNpYmxlKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0W2luZGV4XTtcbiAgICAgICAgcmV0dXJuICEhKGV4cHJlc3Npb24gJiYgZXhwcmVzc2lvbi5pc1Zpc2libGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGZpbHRlcmluZyBjZWxsIGFyZWEuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZUZpbHRlckNlbGxBcmVhKCkge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdCA9IHRoaXMuZmlsdGVyaW5nU2VydmljZS5nZXRFeHByZXNzaW9ucyh0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uLmZpbHRlcmFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5maWx0ZXJDZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJDZWxsVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwcmVzc2lvblRyZWUgPSB0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgIGlmICghZXhwcmVzc2lvblRyZWUgfHwgZXhwcmVzc2lvblRyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbXB0eUZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyQ29tcGxleCh0aGlzLmNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXhGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb250ZXh0IHBhc3NlZCB0byB0aGUgZmlsdGVyIHRlbXBsYXRlLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCBjb250ZXh0KCkge1xuICAgICAgICByZXR1cm4geyAkaW1wbGljaXQ6IHRoaXMuY29sdW1uLCBjb2x1bW46IHRoaXMuY29sdW1ufTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGlwIGNsaWNrZWQgZXZlbnQgaGFuZGxlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwQ2xpY2tlZChleHByZXNzaW9uPzogSUZpbHRlcmluZ0V4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSAoaXRlbS5leHByZXNzaW9uID09PSBleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3RbMF0uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdyaWQubmF2aWdhdGlvbi5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbCh0aGlzLmNvbHVtbi52aXNpYmxlSW5kZXgpO1xuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVyZWRDb2x1bW4gPSB0aGlzLmNvbHVtbjtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyUm93VmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5zZWxlY3RlZEV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoaXAgcmVtb3ZlZCBldmVudCBoYW5kbGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBSZW1vdmVkKGV2ZW50QXJnczogSUJhc2VDaGlwRXZlbnRBcmdzLCBpdGVtOiBFeHByZXNzaW9uVUkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXhUb1JlbW92ZSA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0LmluZGV4T2YoaXRlbSk7XG4gICAgICAgIHRoaXMucmVtb3ZlRXhwcmVzc2lvbihpbmRleFRvUmVtb3ZlKTtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdyaWQudGhlYWRSb3cubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgZmlsdGVyaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckZpbHRlcmluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmNsZWFyRmlsdGVyKHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGZpbHRlcmluZyBpbmRpY2F0b3IgY2xhc3MuXG4gICAgICovXG4gICAgcHVibGljIGZpbHRlcmluZ0luZGljYXRvckNsYXNzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW3RoaXMuYmFzZUNsYXNzXTogIXRoaXMuaXNNb3JlSWNvbkhpZGRlbigpLFxuICAgICAgICAgICAgW2Ake3RoaXMuYmFzZUNsYXNzfS0taGlkZGVuYF06IHRoaXMuaXNNb3JlSWNvbkhpZGRlbigpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBmaWx0ZXJpbmdFbGVtZW50c1NpemUoKTogU2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5ncmlkLmdyaWRTaXplID09PSBTaXplLkxhcmdlID8gU2l6ZS5NZWRpdW0gOiB0aGlzLmNvbHVtbi5ncmlkLmdyaWRTaXplO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRXhwcmVzc2lvbihpbmRleFRvUmVtb3ZlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGluZGV4VG9SZW1vdmUgPT09IDAgJiYgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyRmlsdGVyaW5nKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UucmVtb3ZlRXhwcmVzc2lvbih0aGlzLmNvbHVtbi5maWVsZCwgaW5kZXhUb1JlbW92ZSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlRmlsdGVycygpO1xuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVySW50ZXJuYWwodGhpcy5jb2x1bW4uZmllbGQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNNb3JlSWNvbkhpZGRlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nU2VydmljZS5jb2x1bW5Ub01vcmVJY29uSGlkZGVuLmdldCh0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3QuZm9yRWFjaCgoZXgpID0+IGV4LmlzVmlzaWJsZSA9IHRydWUpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vcmVJY29uKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuY29sdW1uVG9Nb3JlSWNvbkhpZGRlbi5zZXQodGhpcy5jb2x1bW4uZmllbGQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICBpZiAodGhpcy5jaGlwc0FyZWEgJiYgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgYXJlYVdpZHRoID0gdGhpcy5jaGlwc0FyZWEuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgbGV0IHZpZXdXaWR0aCA9IDA7XG4gICAgICAgICAgICBjb25zdCBjaGlwc0FyZWFFbGVtZW50cyA9IHRoaXMuY2hpcHNBcmVhLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGxldCB2aXNpYmxlQ2hpcHNDb3VudCA9IDA7XG4gICAgICAgICAgICBjb25zdCBtb3JlSWNvbldpZHRoID0gdGhpcy5tb3JlSWNvbi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC1cbiAgICAgICAgICAgICAgICBwYXJzZUludCh0aGlzLmNvbHVtbj8uZ3JpZC5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMubW9yZUljb24ubmF0aXZlRWxlbWVudClbJ21hcmdpbi1sZWZ0J10sIDEwKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoaXBzQXJlYUVsZW1lbnRzLmxlbmd0aCAtIDE7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAodmlld1dpZHRoICsgY2hpcHNBcmVhRWxlbWVudHNbaW5kZXhdLm9mZnNldFdpZHRoIDwgYXJlYVdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdXaWR0aCArPSBjaGlwc0FyZWFFbGVtZW50c1tpbmRleF0ub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVDaGlwc0NvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3V2lkdGggKz0gcGFyc2VJbnQodGhpcy5jb2x1bW4/LmdyaWQuZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjaGlwc0FyZWFFbGVtZW50c1tpbmRleF0pWydtYXJnaW4tbGVmdCddLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3V2lkdGggKz0gcGFyc2VJbnQodGhpcy5jb2x1bW4/LmdyaWQuZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjaGlwc0FyZWFFbGVtZW50c1tpbmRleF0pWydtYXJnaW4tcmlnaHQnXSwgMTApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICUgMiAhPT0gMCAmJiB2aWV3V2lkdGggKyBtb3JlSWNvbldpZHRoID4gYXJlYVdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlQ2hpcHNDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZpc2libGVDaGlwc0NvdW50ID4gMCAmJiB2aWV3V2lkdGggLSBjaGlwc0FyZWFFbGVtZW50c1tpbmRleCAtIDFdLm9mZnNldFdpZHRoICsgbW9yZUljb25XaWR0aCA+IGFyZWFXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZUNoaXBzQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcmVGaWx0ZXJzQ291bnQgPSB0aGlzLmV4cHJlc3Npb25zTGlzdC5sZW5ndGggLSB2aXNpYmxlQ2hpcHNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmNvbHVtblRvTW9yZUljb25IaWRkZW4uc2V0KHRoaXMuY29sdW1uLmZpZWxkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHZpc2libGVDaGlwc0NvdW50OyBpIDwgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFtpXS5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZW1wdHlGaWx0ZXI+XG4gICAgPGlneC1jaGlwcy1hcmVhIFthdHRyLmRyYWdnYWJsZV09XCJmYWxzZVwiIGNsYXNzPVwiaWd4LWZpbHRlcmluZy1jaGlwc1wiPlxuICAgICAgICA8aWd4LWNoaXAgI2dob3N0Q2hpcCBbYXR0ci5kcmFnZ2FibGVdPVwiZmFsc2VcIiAoY2xpY2spPVwib25DaGlwQ2xpY2tlZCgpXCIgW3RhYkluZGV4XT1cIi0xXCIgW3N0eWxlLi0taWctc2l6ZV09XCJmaWx0ZXJpbmdFbGVtZW50c1NpemVcIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgIFthdHRyLmRyYWdnYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgaWd4UHJlZml4XG4gICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImZpbHRlcl9saXN0XCJcbiAgICAgICAgICAgID48L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4gW2F0dHIuZHJhZ2dhYmxlXT1cImZhbHNlXCI+e3tmaWx0ZXJpbmdTZXJ2aWNlLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2ZpbHRlcn19PC9zcGFuPlxuICAgICAgICA8L2lneC1jaGlwPlxuICAgIDwvaWd4LWNoaXBzLWFyZWE+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRGaWx0ZXI+XG4gICAgPGlneC1jaGlwcy1hcmVhICNjaGlwc0FyZWEgY2xhc3M9XCJpZ3gtZmlsdGVyaW5nLWNoaXBzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZXhwcmVzc2lvbnNMaXN0OyBsZXQgbGFzdCA9IGxhc3Q7IGxldCBpbmRleCA9IGluZGV4O1wiID5cbiAgICAgICAgICAgIDxpZ3gtY2hpcCAqbmdJZj1cImlzQ2hpcFZpc2libGUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLi0taWctc2l6ZV09XCJmaWx0ZXJpbmdFbGVtZW50c1NpemVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoaXBDbGlja2VkKGl0ZW0uZXhwcmVzc2lvbilcIlxuICAgICAgICAgICAgICAgIChyZW1vdmUpPVwib25DaGlwUmVtb3ZlZCgkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgPGlneC1pY29uIGlneFByZWZpeFxuICAgICAgICAgICAgICAgICAgICBmYW1pbHk9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5leHByZXNzaW9uLmNvbmRpdGlvbi5pY29uTmFtZVwiPlxuICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4gI2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICB7e2ZpbHRlcmluZ1NlcnZpY2UuZ2V0Q2hpcExhYmVsKGl0ZW0uZXhwcmVzc2lvbil9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvaWd4LWNoaXA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1maWx0ZXJpbmctY2hpcHNfX2Nvbm5lY3RvclwiICpuZ0lmPVwiIWxhc3QgJiYgaXNDaGlwVmlzaWJsZShpbmRleCArIDEpXCI+e3tmaWx0ZXJpbmdTZXJ2aWNlLmdldE9wZXJhdG9yQXNTdHJpbmcoaXRlbS5hZnRlck9wZXJhdG9yKX19PC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiAjbW9yZUljb24gW25nQ2xhc3NdPVwiZmlsdGVyaW5nSW5kaWNhdG9yQ2xhc3MoKVwiIChjbGljayk9XCJvbkNoaXBDbGlja2VkKClcIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgbmFtZT1cImZpbHRlcl9saXN0XCI+PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxpZ3gtYmFkZ2UgW3ZhbHVlXT1cIm1vcmVGaWx0ZXJzQ291bnRcIj48L2lneC1iYWRnZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9pZ3gtY2hpcHMtYXJlYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29tcGxleEZpbHRlcj5cbiAgICA8aWd4LWNoaXAgI2NvbXBsZXhDaGlwIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChyZW1vdmUpPVwiY2xlYXJGaWx0ZXJpbmcoKVwiIFt0YWJJbmRleF09XCItMVwiIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgIDxpZ3gtaWNvbiBpZ3hQcmVmaXggZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJmaWx0ZXJfbGlzdFwiPjwvaWd4LWljb24+XG4gICAgICAgIDxzcGFuPnt7ZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9jb21wbGV4X2ZpbHRlcn19PC9zcGFuPlxuICAgIDwvaWd4LWNoaXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -396,7 +396,7 @@ export class IgxGridFilteringRowComponent {
|
|
|
396
396
|
return;
|
|
397
397
|
}
|
|
398
398
|
requestAnimationFrame(() => {
|
|
399
|
-
const focusedElement = document.activeElement;
|
|
399
|
+
const focusedElement = this.column?.grid.document.activeElement;
|
|
400
400
|
if (focusedElement.classList.contains('igx-chip__remove')) {
|
|
401
401
|
return;
|
|
402
402
|
}
|
|
@@ -478,7 +478,7 @@ export class IgxGridFilteringRowComponent {
|
|
|
478
478
|
requestAnimationFrame(() => this.focusEditElement());
|
|
479
479
|
}
|
|
480
480
|
onChipPointerdown(args, chip) {
|
|
481
|
-
const activeElement = document.activeElement;
|
|
481
|
+
const activeElement = this.column?.grid.document.activeElement;
|
|
482
482
|
this._cancelChipClick = chip.selected
|
|
483
483
|
&& activeElement && this.editorFocused(activeElement);
|
|
484
484
|
}
|
|
@@ -768,4 +768,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
|
|
|
768
768
|
type: HostListener,
|
|
769
769
|
args: ['keydown', ['$event']]
|
|
770
770
|
}] } });
|
|
771
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXJpbmctcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvYmFzZS9ncmlkLWZpbHRlcmluZy1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2ZpbHRlcmluZy9iYXNlL2dyaWQtZmlsdGVyaW5nLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFFWixVQUFVLEVBQ1YsV0FBVyxFQUNYLHVCQUF1QixFQUV2QixZQUFZLEVBRWYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxjQUFjLEVBQXdCLE1BQU0seURBQXlELENBQUM7QUFDL0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFtQixNQUFNLHFDQUFxQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBR3ZGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxPQUFPLEVB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dCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBWaWV3UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUsIERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IElGaWx0ZXJpbmdPcGVyYXRpb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBGaWx0ZXJpbmdMb2dpYywgSUZpbHRlcmluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEhvcml6b250YWxBbGlnbm1lbnQsIFZlcnRpY2FsQWxpZ25tZW50LCBPdmVybGF5U2V0dGluZ3MgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vdmVybGF5L3V0aWxpdGllcyc7XG5pbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3ZlcmxheS9wb3NpdGlvbi9jb25uZWN0ZWQtcG9zaXRpb25pbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJU2VsZWN0aW9uRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21tb24nO1xuaW1wb3J0IHsgSWd4RmlsdGVyaW5nU2VydmljZSB9IGZyb20gJy4uL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL292ZXJsYXkvc2Nyb2xsJztcbmltcG9ydCB7IElneERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4VGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc0VxdWFsLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEV4cHJlc3Npb25VSSB9IGZyb20gJy4uL2V4Y2VsLXN0eWxlL2NvbW1vbic7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneFJpcHBsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4Q2hpcENvbXBvbmVudCwgSUJhc2VDaGlwRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vLi4vY2hpcHMvY2hpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q2hpcHNBcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY2hpcHMvY2hpcHMtYXJlYS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hEYXRlVGltZUVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvZGF0ZS10aW1lLWVkaXRvci9kYXRlLXRpbWUtZWRpdG9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hQaWNrZXJUb2dnbGVDb21wb25lbnQsIElneFBpY2tlckNsZWFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZGF0ZS1jb21tb24vcGlja2VyLWljb25zLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hTdWZmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL3N1ZmZpeC9zdWZmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24tbmF2aWdhdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaW5wdXQtZ3JvdXAvaW5wdXQtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElneEljb25CdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2J1dHRvbi9pY29uLWJ1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcyc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2lneC1ncmlkLWZpbHRlcmluZy1yb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWZpbHRlcmluZy1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nRm9yLCBJZ3hEcm9wRG93bkNvbXBvbmVudCwgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50LCBJZ3hDaGlwc0FyZWFDb21wb25lbnQsIElneENoaXBDb21wb25lbnQsIElneEljb25Db21wb25lbnQsIElneElucHV0R3JvdXBDb21wb25lbnQsIElneFByZWZpeERpcmVjdGl2ZSwgSWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbkRpcmVjdGl2ZSwgSWd4SW5wdXREaXJlY3RpdmUsIE5nSWYsIElneFN1ZmZpeERpcmVjdGl2ZSwgSWd4RGF0ZVBpY2tlckNvbXBvbmVudCwgSWd4UGlja2VyVG9nZ2xlQ29tcG9uZW50LCBJZ3hQaWNrZXJDbGVhckNvbXBvbmVudCwgSWd4VGltZVBpY2tlckNvbXBvbmVudCwgSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXQsIElneEJ1dHRvbkRpcmVjdGl2ZSwgTmdDbGFzcywgSWd4UmlwcGxlRGlyZWN0aXZlLCBJZ3hJY29uQnV0dG9uRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRmlsdGVyaW5nUm93Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgY29sdW1uKCk6IENvbHVtblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgY29sdW1uKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fY29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdC5mb3JFYWNoKGV4cCA9PiBleHAuaXNTZWxlY3RlZCA9IGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW4gPSB2YWw7XG5cbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0ID0gdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdldEV4cHJlc3Npb25zKHRoaXMuX2NvbHVtbi5maWVsZCk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0RXhwcmVzc2lvbigpO1xuXG4gICAgICAgICAgICB0aGlzLmNoaXBBcmVhU2Nyb2xsT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbCkge1xuICAgICAgICBpZiAoIXZhbCAmJiB2YWwgIT09IDAgJiYgKHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWwgfHwgdGhpcy5leHByZXNzaW9uLnNlYXJjaFZhbCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmV4cHJlc3Npb25zTGlzdC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmV4cHJlc3Npb24gPT09IHRoaXMuZXhwcmVzc2lvbik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmNsZWFyRmlsdGVyKHRoaXMuY29sdW1uLmZpZWxkKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uLmlzVW5hcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEV4cHJlc3Npb24odGhpcy5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmFsID09PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5leHByZXNzaW9uLnNlYXJjaFZhbDtcbiAgICAgICAgICAgIGlmIChpc0VxdWFsKG9sZFZhbHVlLCB2YWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPSBEYXRhVXRpbC5wYXJzZVZhbHVlKHRoaXMuY29sdW1uLmRhdGFUeXBlLCB2YWwpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbmQoaXRlbSA9PiBpdGVtLmV4cHJlc3Npb24gPT09IHRoaXMuZXhwcmVzc2lvbikgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRXhwcmVzc2lvbih0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGZpbHRlcmluZ0VsZW1lbnRzU2l6ZSgpOiBTaXplIHtcbiAgICAgICAgLy8gbmVlZGVkIGJlY2F1c2Ugd2Ugd2FudCB0aGUgc2l6ZSBvZiB0aGUgY2hpcHMgdG8gYmUgZWl0aGVyIE1lZGl1bSBvciBTbWFsbFxuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZ3JpZC5ncmlkU2l6ZSA9PT0gU2l6ZS5MYXJnZSA/IFNpemUuTWVkaXVtIDogdGhpcy5jb2x1bW4uZ3JpZC5ncmlkU2l6ZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX19maWx0ZXJpbmctcm93JylcbiAgICBwdWJsaWMgZGVmYXVsdENTU0NsYXNzID0gdHJ1ZTtcblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRGaWx0ZXJVSScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0RmlsdGVyVUk6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RGF0ZVVJJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHREYXRlVUk6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0VGltZVVJJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRUaW1lVUk6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RGF0ZVRpbWVVSScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0RGF0ZVRpbWVVSTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJvdGVjdGVkIGlucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cENvbmRpdGlvbnMnLCB7IHJlYWQ6IElneERyb3BEb3duQ29tcG9uZW50LCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZHJvcERvd25Db25kaXRpb25zOiBJZ3hEcm9wRG93bkNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ2NoaXBzQXJlYScsIHsgcmVhZDogSWd4Q2hpcHNBcmVhQ29tcG9uZW50LCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgY2hpcHNBcmVhOiBJZ3hDaGlwc0FyZWFDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkcmVuKCdvcGVyYXRvcnMnLCB7IHJlYWQ6IElneERyb3BEb3duQ29tcG9uZW50IH0pXG4gICAgcHJvdGVjdGVkIGRyb3BEb3duT3BlcmF0b3JzOiBRdWVyeUxpc3Q8SWd4RHJvcERvd25Db21wb25lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByb3RlY3RlZCBpbnB1dEdyb3VwOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ3BpY2tlcicpXG4gICAgcHJvdGVjdGVkIHBpY2tlcjogSWd4RGF0ZVBpY2tlckNvbXBvbmVudCB8IElneFRpbWVQaWNrZXJDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dEdyb3VwUHJlZml4JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJvdGVjdGVkIGlucHV0R3JvdXBQcmVmaXg6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ29wZXJhbmQnKVxuICAgIHByb3RlY3RlZCBvcGVyYW5kOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2Nsb3NlQnV0dG9uJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgY2xvc2VCdXR0b246IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0Fycm93czogYm9vbGVhbjtcbiAgICBwdWJsaWMgZXhwcmVzc2lvbjogSUZpbHRlcmluZ0V4cHJlc3Npb247XG4gICAgcHVibGljIGV4cHJlc3Npb25zTGlzdDogQXJyYXk8RXhwcmVzc2lvblVJPjtcblxuICAgIHByaXZhdGUgX3Bvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQsXG4gICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tXG4gICAgfTtcblxuICAgIHByaXZhdGUgX2NvbmRpdGlvbnNPdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogbmV3IENvbm5lY3RlZFBvc2l0aW9uaW5nU3RyYXRlZ3kodGhpcy5fcG9zaXRpb25TZXR0aW5ncylcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfb3BlcmF0b3JzT3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uU2V0dGluZ3MpXG4gICAgfTtcblxuICAgIHByaXZhdGUgY2hpcHNBcmVhV2lkdGg6IG51bWJlcjtcbiAgICBwcml2YXRlIGNoaXBBcmVhU2Nyb2xsT2Zmc2V0ID0gMDtcbiAgICBwcml2YXRlIF9jb2x1bW4gPSBudWxsO1xuICAgIHByaXZhdGUgaXNLZXlQcmVzc2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NhbmNlbENoaXBDbGljayA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3ZhbHVlID0gbnVsbDtcblxuICAgIC8qKiBzd2l0Y2ggdG8gaWNvbiBidXR0b25zIHdoZW4gd2lkdGggaXMgYmVsb3cgNDMycHggKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IE5BUlJPV19XSURUSF9USFJFU0hPTEQgPSA0MzI7XG5cbiAgICBwcml2YXRlICRkZXN0cm95ZXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBmaWx0ZXJpbmdTZXJ2aWNlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLFxuICAgICkgeyB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duSGFuZGxlcihldnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNGaWx0ZXJpbmdLZXlDb21ibyhldnQpKSB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuX2NvbmRpdGlvbnNPdmVybGF5U2V0dGluZ3Mub3V0bGV0ID0gdGhpcy5jb2x1bW4uZ3JpZC5vdXRsZXQ7XG4gICAgICAgIHRoaXMuX29wZXJhdG9yc092ZXJsYXlTZXR0aW5ncy5vdXRsZXQgPSB0aGlzLmNvbHVtbi5ncmlkLm91dGxldDtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLmV4cHJlc3Npb25zTGlzdC5maW5kKGV4cHIgPT4gZXhwci5pc1NlbGVjdGVkID09PSB0cnVlKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gc2VsZWN0ZWRJdGVtLmV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZ3JpZC5sb2NhbGVDaGFuZ2VcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3llcikpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmZvY3VzRWRpdEVsZW1lbnQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmIHRoaXMuY29sdW1uLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0RGF0ZVVJO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRUaW1lVUk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHREYXRlVGltZVVJO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRGaWx0ZXJVSTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jb2x1bW4uZGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlN0cmluZzpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcjpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkN1cnJlbmN5OlxuICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29uZGl0aW9ucygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZmlsdGVycy5jb25kaXRpb25MaXN0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1VuYXJ5Q29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5jb25kaXRpb24uaXNVbmFyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uLmNvbmRpdGlvbiAmJiB0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uLmlzVW5hcnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZ2V0Q2hpcExhYmVsKHRoaXMuZXhwcmVzc2lvbik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2ZpbHRlcl9yb3dfZGF0ZV9wbGFjZWhvbGRlcjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZmlsdGVyX3Jvd19ib29sZWFuX3BsYWNlaG9sZGVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfcm93X3BsYWNlaG9sZGVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3Iga2V5ZG93biBvbiB0aGUgaW5wdXQgZ3JvdXAncyBwcmVmaXguXG4gICAgICovXG4gICAgcHVibGljIG9uUHJlZml4S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpICYmIHRoaXMuZHJvcERvd25Db25kaXRpb25zLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVDb25kaXRpb25zRHJvcERvd24odGhpcy5pbnB1dEdyb3VwUHJlZml4Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5UQUIgJiYgIXRoaXMuZHJvcERvd25Db25kaXRpb25zLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVDb25kaXRpb25zRHJvcERvd24odGhpcy5pbnB1dEdyb3VwUHJlZml4Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3Iga2V5ZG93biBvbiB0aGUgaW5wdXQuXG4gICAgICovXG4gICAgcHVibGljIG9uSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNLZXlQcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0R3JvdXBQcmVmaXgubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ29uZGl0aW9uc0Ryb3BEb3duKHRoaXMuaW5wdXRHcm91cFByZWZpeC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gdGhpcy5wbGF0Zm9ybS5LRVlNQVAuRU5URVIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21taXRJbnB1dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmFsdEtleSAmJiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19ET1dOKSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwUHJlZml4Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ29uZGl0aW9uc0Ryb3BEb3duKHRoaXMuaW5wdXRHcm91cFByZWZpeC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBsYXRmb3JtLmlzRmlsdGVyaW5nS2V5Q29tYm8oZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3Iga2V5dXAgb24gdGhlIGlucHV0LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0S2V5VXAoKSB7XG4gICAgICAgIHRoaXMuaXNLZXlQcmVzc2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3IgaW5wdXQgb24gdGhlIGlucHV0LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0KGV2ZW50QXJncykge1xuICAgICAgICBpZiAoIWV2ZW50QXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlICdpc2tleVByZXNzZWQnIGZsYWcgaXMgbmVlZGVkIGZvciBhIGNhc2UgaW4gSUUsIGJlY2F1c2UgdGhlIGlucHV0IGV2ZW50IGlzIGZpcmVkIG9uIGZvY3VzIGFuZCBmb3Igc29tZSByZWFzb24sXG4gICAgICAgIC8vIHdoZW4geW91IGhhdmUgYSBqYXBhbmVzZSBjaGFyYWN0ZXIgYXMgYSBwbGFjZWhvbGRlciwgb24gaW5pdCB0aGUgdmFsdWUgaGVyZSBpcyBlbXB0eSBzdHJpbmcgLlxuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudEFyZ3MudGFyZ2V0O1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGV2ZW50QXJncztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0VkZ2UgJiYgdGFyZ2V0LnR5cGUgIT09ICdudW1iZXInXG4gICAgICAgICAgICB8fCB0aGlzLmlzS2V5UHJlc3NlZCB8fCB0YXJnZXQudmFsdWUgfHwgdGFyZ2V0LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRhcmdldC52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGNvbXBvc2l0aW9uc3RhcnQgb24gdGhlIGlucHV0LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNvbXBvc2l0aW9uU3RhcnQoKSB7XG4gICAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGNvbXBvc2l0aW9uZW5kIG9uIHRoZSBpbnB1dC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db21wb3NpdGlvbkVuZCgpIHtcbiAgICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGlucHV0IGNsaWNrIGV2ZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0Q2xpY2soKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW4gJiYgdGhpcy5kcm9wRG93bkNvbmRpdGlvbnMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0R3JvdXBQcmVmaXgubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy50b2dnbGVDb25kaXRpb25zRHJvcERvd24odGhpcy5pbnB1dEdyb3VwUHJlZml4Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlsdGVyaW5nIG9wZXJhdGlvbiBjb25kaXRpb24gZm9yIGEgZ2l2ZW4gdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbmRpdGlvbih2YWx1ZTogc3RyaW5nKTogSUZpbHRlcmluZ09wZXJhdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJzLmNvbmRpdGlvbih2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdHJhbnNsYXRlZCBjb25kaXRpb24gbmFtZSBmb3IgYSBnaXZlbiB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJhbnNsYXRlQ29uZGl0aW9uKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdyaWQucmVzb3VyY2VTdHJpbmdzW2BpZ3hfZ3JpZF9maWx0ZXJfJHt0aGlzLmdldENvbmRpdGlvbih2YWx1ZSkubmFtZX1gXSB8fCB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpY29uIG5hbWUgb2YgdGhlIGN1cnJlbnQgY29uZGl0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJY29uTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuICYmIHRoaXMuZXhwcmVzc2lvbi5jb25kaXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbmRpdGlvbih0aGlzLmNvbmRpdGlvbnNbMF0pLmljb25OYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5jb25kaXRpb24uaWNvbk5hbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYSBnaXZlbiBjb25kaXRpb24gaXMgc2VsZWN0ZWQgaW4gZHJvcGRvd24uXG4gICAgICovXG4gICAgcHVibGljIGlzQ29uZGl0aW9uU2VsZWN0ZWQoY29uZGl0aW9uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSBjb25kaXRpb25OYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBjdXJyZW50IGZpbHRlcmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXJpbmcoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5jbGVhckZpbHRlcih0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIHRoaXMucmVzZXRFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtKHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbW1pdHMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29tbWl0SW5wdXQoKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbHRlcihleCA9PiBleC5pc1NlbGVjdGVkID09PSB0cnVlKTtcbiAgICAgICAgc2VsZWN0ZWRJdGVtLmZvckVhY2goZSA9PiBlLmlzU2VsZWN0ZWQgPSBmYWxzZSk7XG5cbiAgICAgICAgbGV0IGluZGV4VG9EZXNlbGVjdCA9IC0xO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uc0xpc3RbaW5kZXhdLmV4cHJlc3Npb247XG4gICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5zZWFyY2hWYWwgPT09IG51bGwgJiYgIWV4cHJlc3Npb24uY29uZGl0aW9uLmlzVW5hcnkpIHtcbiAgICAgICAgICAgICAgICBpbmRleFRvRGVzZWxlY3QgPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXhUb0Rlc2VsZWN0ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFeHByZXNzaW9uKGluZGV4VG9EZXNlbGVjdCwgdGhpcy5leHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0RXhwcmVzc2lvbigpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWw7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ2hpcHNXaGVuQWRkaW5nRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0LlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhcklucHV0KGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGtleWRvd24gb24gY2xlYXIgYnV0dG9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNsZWFyS2V5RG93bihldmVudEFyZ3M6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50QXJncykpIHtcbiAgICAgICAgICAgIGV2ZW50QXJncy5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzRWRpdEVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGNsaWNrIG9uIGNsZWFyIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25DbGVhckNsaWNrKCkge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgICAgdGhpcy5mb2N1c0VkaXRFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3Iga2V5ZG93biBvbiBjb21taXQgYnV0dG9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNvbW1pdEtleURvd24oZXZlbnRBcmdzOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudEFyZ3MpKSB7XG4gICAgICAgICAgICBldmVudEFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuY29tbWl0SW5wdXQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNFZGl0RWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3IgY2xpY2sgb24gY29tbWl0IGJ1dHRvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db21taXRDbGljayhldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmNvbW1pdElucHV0KCk7XG4gICAgICAgIHRoaXMuZm9jdXNFZGl0RWxlbWVudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGZvY3Vzb3V0IG9uIHRoZSBpbnB1dCBncm91cC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25JbnB1dEdyb3VwRm9jdXNvdXQoKSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlICE9PSAwICYmXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uICYmICF0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uLmlzVW5hcnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAoZm9jdXNlZEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpZ3gtY2hpcF9fcmVtb3ZlJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKGZvY3VzZWRFbGVtZW50ICYmIHRoaXMuZWRpdG9yRm9jdXNlZChmb2N1c2VkRWxlbWVudCkpXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5kcm9wRG93bkNvbmRpdGlvbnMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21taXRJbnB1dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGZpbHRlcmluZyBlZGl0IHJvdy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cHJlc3Npb25zTGlzdC5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uc2VhcmNoVmFsID09PSBudWxsICYmXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFswXS5leHByZXNzaW9uLmNvbmRpdGlvbi5pc1VuYXJ5ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdldEV4cHJlc3Npb25zKHRoaXMuY29sdW1uLmZpZWxkKS5wb3AoKTtcblxuICAgICAgICAgICAgdGhpcy5maWx0ZXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRUb1JlbW92ZSA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbHRlcihleCA9PiBleC5leHByZXNzaW9uLnNlYXJjaFZhbCA9PT0gbnVsbCAmJiAhZXguZXhwcmVzc2lvbi5jb25kaXRpb24uaXNVbmFyeSk7XG4gICAgICAgICAgICBpZiAoY29uZFRvUmVtb3ZlICYmIGNvbmRUb1JlbW92ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uZFRvUmVtb3ZlLmZvckVhY2goYyA9PiB0aGlzLmZpbHRlcmluZ1NlcnZpY2UucmVtb3ZlRXhwcmVzc2lvbih0aGlzLmNvbHVtbi5maWVsZCwgdGhpcy5leHByZXNzaW9uc0xpc3QuaW5kZXhPZihjKSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuaXNGaWx0ZXJSb3dWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS51cGRhdGVGaWx0ZXJpbmdDZWxsKHRoaXMuY29sdW1uKTtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmZpbHRlcmVkQ29sdW1uID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLnNlbGVjdGVkRXhwcmVzc2lvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5ncmlkLnRoZWFkUm93Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICB0aGlzLmNoaXBBcmVhU2Nyb2xsT2Zmc2V0ID0gMDtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0odGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIEV2ZW50IGhhbmRsZXIgZm9yIGRhdGUgcGlja2VyJ3Mgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRhdGVTZWxlY3RlZCh2YWx1ZTogRGF0ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGlucHV0R3JvdXBQcmVmaXhDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgICAgIHRoaXMudG9nZ2xlQ29uZGl0aW9uc0Ryb3BEb3duKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBjb25kaXRpb25zIGRyb3Bkb3duLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVDb25kaXRpb25zRHJvcERvd24odGFyZ2V0OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fY29uZGl0aW9uc092ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIHRoaXMuX2NvbmRpdGlvbnNPdmVybGF5U2V0dGluZ3MuZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2sgPSBbdGFyZ2V0IGFzIEhUTUxFbGVtZW50XTtcbiAgICAgICAgdGhpcy5kcm9wRG93bkNvbmRpdGlvbnMudG9nZ2xlKHRoaXMuX2NvbmRpdGlvbnNPdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBsb2dpYyBvcGVyYXRvcnMgZHJvcGRvd24uXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZU9wZXJhdG9yc0Ryb3BEb3duKGV2ZW50QXJncywgaW5kZXgpIHtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3JzT3ZlcmxheVNldHRpbmdzLnRhcmdldCA9IGV2ZW50QXJncy50YXJnZXQucGFyZW50RWxlbWVudDtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3JzT3ZlcmxheVNldHRpbmdzLmV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrID0gW2V2ZW50QXJncy50YXJnZXQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudF07XG4gICAgICAgIHRoaXMuZHJvcERvd25PcGVyYXRvcnMudG9BcnJheSgpW2luZGV4XS50b2dnbGUodGhpcy5fb3BlcmF0b3JzT3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBoYW5kbGVyIGZvciBjaGFuZ2UgZXZlbnQgaW4gY29uZGl0aW9ucyBkcm9wZG93bi5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db25kaXRpb25zQ2hhbmdlZChldmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZXZlbnRBcmdzLm5ld1NlbGVjdGlvbiBhcyBJZ3hEcm9wRG93bkl0ZW1Db21wb25lbnQpLnZhbHVlO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uID0gdGhpcy5nZXRDb25kaXRpb24odmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uLmNvbmRpdGlvbi5pc1VuYXJ5KSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZ3JpZCdzIGZpbHRlcmluZyBvbiB0aGUgbmV4dCBjeWNsZSB0byBlbnN1cmUgdGhlIGRyb3AtZG93biBpcyBjbG9zZWRcbiAgICAgICAgICAgIC8vIGlmIHRoZSBkcm9wLWRvd24gaXMgbm90IGNsb3NlZCB0aGlzIGV2ZW50IGhhbmRsZXIgd2lsbCBiZSBpbnZva2VkIG11bHRpcGxlIHRpbWVzXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy51bmFyeUNvbmRpdGlvbkNoYW5nZWRDYWxsYmFjaygpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmNvbmRpdGlvbkNoYW5nZWRDYWxsYmFjaygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYmVjYXVzZSBvZiBhbiBpc3N1ZSBpbiBJRSwgd2hlcmUgeW91IGFyZSBzdGlsbCBhYmxlIHRvIHdyaXRlIGluIHRoZSBpbnB1dCxcbiAgICAgICAgLy8gaWYgaXQgaGFzIGJlZW4gZm9jdXNlZCBhbmQgdGhlbiBzZXQgdG8gcmVhZG9ubHkuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmZvY3VzRWRpdEVsZW1lbnQoKSk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgb25DaGlwUG9pbnRlcmRvd24oYXJncywgY2hpcDogSWd4Q2hpcENvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5fY2FuY2VsQ2hpcENsaWNrID0gY2hpcC5zZWxlY3RlZFxuICAgICAgICAgICAgJiYgYWN0aXZlRWxlbWVudCAmJiB0aGlzLmVkaXRvckZvY3VzZWQoYWN0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hpcENsaWNrKGFyZ3MsIGl0ZW06IEV4cHJlc3Npb25VSSkge1xuICAgICAgICBpZiAodGhpcy5fY2FuY2VsQ2hpcENsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxDaGlwQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZvckVhY2goZXggPT4gZXguaXNTZWxlY3RlZCA9IGZhbHNlKTtcblxuICAgICAgICB0aGlzLnRvZ2dsZUNoaXAoaXRlbSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUNoaXAoaXRlbTogRXhwcmVzc2lvblVJKSB7XG4gICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9ICFpdGVtLmlzU2VsZWN0ZWQ7XG4gICAgICAgIGlmIChpdGVtLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGl0ZW0uZXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5leHByZXNzaW9uLnNlYXJjaFZhbDtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNFZGl0RWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3IgY2hpcCBrZXlkb3duIGV2ZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBLZXlEb3duKGV2ZW50QXJnczogS2V5Ym9hcmRFdmVudCwgaXRlbTogRXhwcmVzc2lvblVJKSB7XG4gICAgICAgIGlmIChldmVudEFyZ3Mua2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5FTlRFUikge1xuICAgICAgICAgICAgZXZlbnRBcmdzLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2hpcChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNjcm9sbHMgdGhlIGZpcnN0IGNoaXAgaW50byB2aWV3IGlmIHRoZSB0YWIga2V5IGlzIHByZXNzZWQgb24gdGhlIGxlZnQgYXJyb3cuXG4gICAgICovXG4gICAgcHVibGljIG9uTGVmdEFycm93S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5UQUIpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQgPSAwO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0odGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBoYW5kbGVyIGZvciBjaGlwIHJlbW92ZWQgZXZlbnQuXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcFJlbW92ZWQoZXZlbnRBcmdzOiBJQmFzZUNoaXBFdmVudEFyZ3MsIGl0ZW06IEV4cHJlc3Npb25VSSkge1xuICAgICAgICBjb25zdCBpbmRleFRvUmVtb3ZlID0gdGhpcy5leHByZXNzaW9uc0xpc3QuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgdGhpcy5yZW1vdmVFeHByZXNzaW9uKGluZGV4VG9SZW1vdmUsIGl0ZW0uZXhwcmVzc2lvbik7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxDaGlwc09uUmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3IgbG9naWMgb3BlcmF0b3IgY2hhbmdlZCBldmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Mb2dpY09wZXJhdG9yQ2hhbmdlZChldmVudEFyZ3M6IElTZWxlY3Rpb25FdmVudEFyZ3MsIGV4cHJlc3Npb246IEV4cHJlc3Npb25VSSkge1xuICAgICAgICBpZiAoZXZlbnRBcmdzLm9sZFNlbGVjdGlvbikge1xuICAgICAgICAgICAgZXhwcmVzc2lvbi5hZnRlck9wZXJhdG9yID0gKGV2ZW50QXJncy5uZXdTZWxlY3Rpb24gYXMgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50KS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0W3RoaXMuZXhwcmVzc2lvbnNMaXN0LmluZGV4T2YoZXhwcmVzc2lvbikgKyAxXS5iZWZvcmVPcGVyYXRvciA9IGV4cHJlc3Npb24uYWZ0ZXJPcGVyYXRvcjtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIGdyaWQncyBmaWx0ZXJpbmcgb24gdGhlIG5leHQgY3ljbGUgdG8gZW5zdXJlIHRoZSBkcm9wLWRvd24gaXMgY2xvc2VkXG4gICAgICAgICAgICAvLyBpZiB0aGUgZHJvcC1kb3duIGlzIG5vdCBjbG9zZWQgdGhpcyBldmVudCBoYW5kbGVyIHdpbGwgYmUgaW52b2tlZCBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuZmlsdGVyKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2Nyb2xscyB0aGUgY2hpcHMgaW50byB0aGUgY2hpcCBhcmVhIHdoZW4gbGVmdCBvciByaWdodCBhcnJvd3MgYXJlIHByZXNzZWQuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbENoaXBzT25BcnJvd1ByZXNzKGFycm93UG9zaXRpb246IHN0cmluZykge1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBjb25zdCBjaGlwQXJhZUNoaWxkcmVuID0gdGhpcy5jaGlwc0FyZWEuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAoYXJyb3dQb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlwIG9mIGNoaXBBcmFlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5jZWlsKGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpIDwgTWF0aC5jZWlsKGNvbnRhaW5lclJlY3QucmlnaHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY291bnQgPCBjaGlwQXJhZUNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQgLT0gTWF0aC5jZWlsKGNoaXBBcmFlQ2hpbGRyZW5bY291bnRdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSAtXG4gICAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChjb250YWluZXJSZWN0LnJpZ2h0KSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0odGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJyb3dQb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaXAgb2YgY2hpcEFyYWVDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmNlaWwoY2hpcC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSA8IE1hdGguY2VpbChjb250YWluZXJSZWN0LmxlZnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCArPSBNYXRoLmNlaWwoY29udGFpbmVyUmVjdC5sZWZ0KSAtXG4gICAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChjaGlwQXJhZUNoaWxkcmVuW2NvdW50IC0gMV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkgKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlc2V0cyB0aGUgY2hpcHMgYXJlYVxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkRmlsdGVyaW5nUm93Q29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHJlc2V0Q2hpcHNBcmVhKCkge1xuICAgICAgICB0aGlzLmNoaXBBcmVhU2Nyb2xsT2Zmc2V0ID0gMDtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0odGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCk7XG4gICAgICAgIHRoaXMuc2hvd0hpZGVBcnJvd0J1dHRvbnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZm9jdXNFZGl0RWxlbWVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGlja2VyKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlci5nZXRFZGl0RWxlbWVudCgpLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuJGRlc3Ryb3llci5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93SGlkZUFycm93QnV0dG9ucygpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmluZ1NlcnZpY2UuaXNGaWx0ZXJSb3dWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpcHNBcmVhV2lkdGggPSB0aGlzLmNoaXBzQXJlYS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNob3dBcnJvd3MgPSB0aGlzLmNoaXBzQXJlYVdpZHRoID49IGNvbnRhaW5lcldpZHRoICYmIHRoaXMuaXNDb2x1bW5GaWx0ZXJlZDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE86IHJldmlzZSB0aGUgY2RyLmRldGVjdENoYW5nZXMoKSB1c2FnZSBoZXJlXG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcy5jZHIgYXMgVmlld1JlZikuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRXhwcmVzc2lvbihpc1NlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGV4cHJVSSA9IG5ldyBFeHByZXNzaW9uVUkoKTtcbiAgICAgICAgZXhwclVJLmV4cHJlc3Npb24gPSB0aGlzLmV4cHJlc3Npb247XG4gICAgICAgIGV4cHJVSS5iZWZvcmVPcGVyYXRvciA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aCA+IDAgPyBGaWx0ZXJpbmdMb2dpYy5BbmQgOiBudWxsO1xuICAgICAgICBleHByVUkuaXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQ7XG5cbiAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3QucHVzaChleHByVUkpO1xuXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0W2xlbmd0aCAtIDJdKSB7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFtsZW5ndGggLSAyXS5hZnRlck9wZXJhdG9yID0gdGhpcy5leHByZXNzaW9uc0xpc3RbbGVuZ3RoIC0gMV0uYmVmb3JlT3BlcmF0b3I7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dIaWRlQXJyb3dCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVFeHByZXNzaW9uKGluZGV4VG9SZW1vdmU6IG51bWJlciwgZXhwcmVzc2lvbjogSUZpbHRlcmluZ0V4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGluZGV4VG9SZW1vdmUgPT09IDAgJiYgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyRmlsdGVyaW5nKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UucmVtb3ZlRXhwcmVzc2lvbih0aGlzLmNvbHVtbi5maWVsZCwgaW5kZXhUb1JlbW92ZSk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uID09PSBleHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93SGlkZUFycm93QnV0dG9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRFeHByZXNzaW9uKGNvbmRpdGlvbj86IHN0cmluZykge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSB7XG4gICAgICAgICAgICBmaWVsZE5hbWU6IHRoaXMuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgY29uZGl0aW9uOiBudWxsLFxuICAgICAgICAgICAgc2VhcmNoVmFsOiBudWxsLFxuICAgICAgICAgICAgaWdub3JlQ2FzZTogdGhpcy5jb2x1bW4uZmlsdGVyaW5nSWdub3JlQ2FzZVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSAhPT0gR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbi5jb25kaXRpb24gPSB0aGlzLmdldENvbmRpdGlvbihjb25kaXRpb24gPz8gdGhpcy5jb25kaXRpb25zWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUgJiYgdGhpcy5pbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2hvd0hpZGVBcnJvd0J1dHRvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjcm9sbENoaXBzV2hlbkFkZGluZ0V4cHJlc3Npb24oKSB7XG4gICAgICAgIGNvbnN0IGNoaXBBcmFlQ2hpbGRyZW4gPSB0aGlzLmNoaXBzQXJlYS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgIGlmICghY2hpcEFyYWVDaGlsZHJlbiB8fCBjaGlwQXJhZUNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpcHNDb250YWluZXJXaWR0aCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IGNoaXBzQXJlYVdpZHRoID0gdGhpcy5jaGlwc0FyZWEuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgIGlmIChjaGlwc0FyZWFXaWR0aCA+IGNoaXBzQ29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQgPSBjaGlwc0NvbnRhaW5lcldpZHRoIC0gY2hpcHNBcmVhV2lkdGg7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSh0aGlzLmNoaXBBcmVhU2Nyb2xsT2Zmc2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtKG9mZnNldDogbnVtYmVyKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoaXBzQXJlYS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke29mZnNldH1weClgO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjcm9sbENoaXBzT25SZW1vdmUoKSB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGNvbnN0IGNoaXBBcmFlQ2hpbGRyZW4gPSB0aGlzLmNoaXBzQXJlYS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hpcCBvZiBjaGlwQXJhZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAoTWF0aC5jZWlsKGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpIDwgTWF0aC5jZWlsKGNvbnRhaW5lclJlY3QubGVmdCkpIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvdW50IDw9IDIpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGlmID0gY2hpcEFyYWVDaGlsZHJlbltjb3VudF0uaWQgPT09ICdjaGlwJyA/IGNvdW50IC0gMiA6IGNvdW50IC0gMTtcbiAgICAgICAgICAgIHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQgKz0gTWF0aC5jZWlsKGNvbnRhaW5lclJlY3QubGVmdCkgLSBNYXRoLmNlaWwoY2hpcEFyYWVDaGlsZHJlbltkaWZdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJhbnNmb3JtKHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZGl0aW9uQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgICAgICBpZiAoISF0aGlzLmV4cHJlc3Npb24uc2VhcmNoVmFsIHx8IHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVuYXJ5Q29uZGl0aW9uQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbmQoaXRlbSA9PiBpdGVtLmV4cHJlc3Npb24gPT09IHRoaXMuZXhwcmVzc2lvbikgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5hZGRFeHByZXNzaW9uKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5maWx0ZXJJbnRlcm5hbCh0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlZGl0b3JGb2N1c2VkKGFjdGl2ZUVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGNoZWNrIGlzIGZhbHNlIGFuZCB0aGUgc2Vjb25kIGlzIHVuZGVmaW5lZCB0aGlzIHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAvLyBtYWtlIHN1cmUgaXQgYWx3YXlzIHJldHVybnMgYm9vbGVhblxuICAgICAgICByZXR1cm4gISEodGhpcy5pbnB1dEdyb3VwICYmIHRoaXMuaW5wdXRHcm91cC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICB8fCB0aGlzLnBpY2tlciAmJiB0aGlzLnBpY2tlci5pc0ZvY3VzZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzQ29sdW1uRmlsdGVyZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiYgdGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc05hcnJvd1dpZHRoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgdGhpcy5OQVJST1dfV0lEVEhfVEhSRVNIT0xEO1xuICAgIH1cbn1cbiIsIjwhLS0gSGF2ZSB0byBhcHBseSBzdHlsZXMgaW5saW5lIGJlY2F1c2Ugb2YgdGhlIG92ZXJsYXkgb3V0bGV0IC4uLiAtLT5cbjxpZ3gtZHJvcC1kb3duICNpbnB1dEdyb3VwQ29uZGl0aW9ucyBbc3R5bGUuLS1pZy1zaXplXT1cImZpbHRlcmluZ0VsZW1lbnRzU2l6ZVwiIFtoZWlnaHRdPVwiJzIwMHB4J1wiIChzZWxlY3Rpb25DaGFuZ2luZyk9XCJvbkNvbmRpdGlvbnNDaGFuZ2VkKCRldmVudClcIj5cbiAgICA8aWd4LWRyb3AtZG93bi1pdGVtICpuZ0Zvcj1cImxldCBjb25kaXRpb24gb2YgY29uZGl0aW9uc1wiXG4gICAgICAgIFt2YWx1ZV09XCJjb25kaXRpb25cIlxuICAgICAgICBbc2VsZWN0ZWRdPVwiaXNDb25kaXRpb25TZWxlY3RlZChjb25kaXRpb24pXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fZmlsdGVyaW5nLWRyb3Bkb3duLWl0ZW1zXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIFtuYW1lXT1cImdldENvbmRpdGlvbihjb25kaXRpb24pLmljb25OYW1lXCI+PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX2ZpbHRlcmluZy1kcm9wZG93bi10ZXh0XCI+e3sgdHJhbnNsYXRlQ29uZGl0aW9uKGNvbmRpdGlvbikgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvaWd4LWRyb3AtZG93bi1pdGVtPlxuPC9pZ3gtZHJvcC1kb3duPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRGaWx0ZXJVST5cbiAgICA8aWd4LWlucHV0LWdyb3VwICNpbnB1dEdyb3VwIHR5cGU9XCJib3hcIiAoZm9jdXNvdXQpPVwib25JbnB1dEdyb3VwRm9jdXNvdXQoKVwiIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgIDxpZ3gtcHJlZml4ICNpbnB1dEdyb3VwUHJlZml4XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpbnB1dEdyb3VwUHJlZml4Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uUHJlZml4S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW2lneERyb3BEb3duSXRlbU5hdmlnYXRpb25dPVwiaW5wdXRHcm91cENvbmRpdGlvbnNcIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgW25hbWVdPVwiZ2V0SWNvbk5hbWUoKVwiPjwvaWd4LWljb24+XG4gICAgICAgIDwvaWd4LXByZWZpeD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJpc1VuYXJ5Q29uZGl0aW9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbklucHV0Q2xpY2soKVwiXG4gICAgICAgICAgICAoY29tcG9zaXRpb25zdGFydCk9XCJvbkNvbXBvc2l0aW9uU3RhcnQoKVwiXG4gICAgICAgICAgICAoY29tcG9zaXRpb25lbmQpPVwib25Db21wb3NpdGlvbkVuZCgpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgKGtleXVwKT1cIm9uSW5wdXRLZXlVcCgpXCIvPlxuICAgICAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cInZhbHVlIHx8IHZhbHVlID09PSAwXCIgPlxuICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Db21taXRLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNvbW1pdENsaWNrKClcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNsZWFyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGVhckNsaWNrKClcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImlucHV0X2NsZWFyXCI+XG4gICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICA8L2lneC1zdWZmaXg+XG4gICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHREYXRlVUk+XG4gICAgPGlneC1kYXRlLXBpY2tlciAjcGlja2VyXG4gICAgICAgIFsodmFsdWUpXT1cInZhbHVlXCJcbiAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxuICAgICAgICBbb3V0bGV0XT1cImZpbHRlcmluZ1NlcnZpY2UuZ3JpZC5vdXRsZXRcIlxuICAgICAgICBbbG9jYWxlXT1cImZpbHRlcmluZ1NlcnZpY2UuZ3JpZC5sb2NhbGVcIlxuICAgICAgICAoY2xpY2spPVwiZXhwcmVzc2lvbi5jb25kaXRpb24uaXNVbmFyeSA/IG51bGwgOiBwaWNrZXIub3BlbigpXCJcbiAgICAgICAgdHlwZT1cImJveFwiXG4gICAgICAgIFtkaXNwbGF5Rm9ybWF0XT1cImNvbHVtbi5waXBlQXJncy5mb3JtYXRcIlxuICAgICAgICBbZm9ybWF0dGVyXT1cImNvbHVtbi5mb3JtYXR0ZXJcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbd2Vla1N0YXJ0XT1cImNvbHVtbi5waXBlQXJncy53ZWVrU3RhcnRcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3Vzb3V0KT1cIm9uSW5wdXRHcm91cEZvY3Vzb3V0KClcIlxuICAgICAgICAoY2xvc2VkKT1cImZvY3VzRWRpdEVsZW1lbnQoKVwiPlxuICAgICAgICA8aWd4LXByZWZpeCAjaW5wdXRHcm91cFByZWZpeFxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJpbnB1dEdyb3VwUHJlZml4Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblByZWZpeEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICBbaWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbl09XCJpbnB1dEdyb3VwQ29uZGl0aW9uc1wiPlxuICAgICAgICAgICAgPGlneC1pY29uIGZhbWlseT1cImRlZmF1bHRcIiBbbmFtZV09XCJleHByZXNzaW9uLmNvbmRpdGlvbi5pY29uTmFtZVwiPjwvaWd4LWljb24+XG4gICAgICAgIDwvaWd4LXByZWZpeD5cbiAgICAgICAgPGlneC1zdWZmaXggKm5nSWY9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNvbW1pdEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ29tbWl0Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQ2xlYXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhcklucHV0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIGZhbWlseT1cImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJpbnB1dF9jbGVhclwiPlxuICAgICAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICAgICAgPC9pZ3gtc3VmZml4PlxuICAgICAgICA8IS0tIGRpc2FibGUgZGVmYXVsdCBpY29ucyAtLT5cbiAgICAgICAgPGlneC1waWNrZXItdG9nZ2xlPjwvaWd4LXBpY2tlci10b2dnbGU+XG4gICAgICAgIDxpZ3gtcGlja2VyLWNsZWFyPjwvaWd4LXBpY2tlci1jbGVhcj5cbiAgICA8L2lneC1kYXRlLXBpY2tlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRpbWVVST5cbiAgICA8aWd4LXRpbWUtcGlja2VyICNwaWNrZXJcbiAgICAgICAgWyh2YWx1ZSldPVwidmFsdWVcIlxuICAgICAgICBbaW5wdXRGb3JtYXRdPVwiY29sdW1uLmVkaXRvck9wdGlvbnM/LmRhdGVUaW1lRm9ybWF0XCJcbiAgICAgICAgW2Rpc3BsYXlGb3JtYXRdPVwiY29sdW1uLnBpcGVBcmdzLmZvcm1hdFwiXG4gICAgICAgIFtsb2NhbGVdPVwiZmlsdGVyaW5nU2VydmljZS5ncmlkLmxvY2FsZVwiXG4gICAgICAgIFtmb3JtYXR0ZXJdPVwiY29sdW1uLmZvcm1hdHRlclwiXG4gICAgICAgIFtvdXRsZXRdPVwiZmlsdGVyaW5nU2VydmljZS5ncmlkLm91dGxldFwiXG4gICAgICAgIHR5cGU9XCJib3hcIlxuICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiXG4gICAgICAgIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgKGNsb3NlZCk9XCJmb2N1c0VkaXRFbGVtZW50KClcIlxuICAgICAgICAoZm9jdXNvdXQpPVwib25JbnB1dEdyb3VwRm9jdXNvdXQoKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwiZXhwcmVzc2lvbi5jb25kaXRpb24uaXNVbmFyeSA/IG51bGwgOiBwaWNrZXIub3BlbigpXCI+XG4gICAgICAgIDxpZ3gtcHJlZml4ICNpbnB1dEdyb3VwUHJlZml4XG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImlucHV0R3JvdXBQcmVmaXhDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uUHJlZml4S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uXT1cImlucHV0R3JvdXBDb25kaXRpb25zXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIFtuYW1lXT1cImV4cHJlc3Npb24uY29uZGl0aW9uLmljb25OYW1lXCI+PC9pZ3gtaWNvbj5cbiAgICAgICAgPC9pZ3gtcHJlZml4PlxuICAgICAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cInZhbHVlXCI+XG4gICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQ29tbWl0S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Db21taXRDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBmYW1pbHk9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiY29uZmlybVwiPlxuICAgICAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25DbGVhcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImlucHV0X2NsZWFyXCI+XG4gICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICA8L2lneC1zdWZmaXg+XG4gICAgICAgIDwhLS0gZGlzYWJsZSBkZWZhdWx0IGljb25zIC0tPlxuICAgICAgICA8aWd4LXBpY2tlci10b2dnbGU+PC9pZ3gtcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPGlneC1waWNrZXItY2xlYXI+PC9pZ3gtcGlja2VyLWNsZWFyPlxuICAgIDwvaWd4LXRpbWUtcGlja2VyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RGF0ZVRpbWVVST5cbiAgICA8aWd4LWlucHV0LWdyb3VwICNpbnB1dEdyb3VwIHR5cGU9XCJib3hcIiAoZm9jdXNvdXQpPVwib25JbnB1dEdyb3VwRm9jdXNvdXQoKVwiIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgIDxpZ3gtcHJlZml4ICNpbnB1dEdyb3VwUHJlZml4XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpbnB1dEdyb3VwUHJlZml4Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uUHJlZml4S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW2lneERyb3BEb3duSXRlbU5hdmlnYXRpb25dPVwiaW5wdXRHcm91cENvbmRpdGlvbnNcIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgW25hbWVdPVwiZ2V0SWNvbk5hbWUoKVwiPjwvaWd4LWljb24+XG4gICAgICAgIDwvaWd4LXByZWZpeD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFtsb2NhbGVdPVwiZmlsdGVyaW5nU2VydmljZS5ncmlkLmxvY2FsZVwiXG4gICAgICAgICAgICBbZGlzcGxheUZvcm1hdF09XCJjb2x1bW4ucGlwZUFyZ3MuZm9ybWF0XCJcbiAgICAgICAgICAgIFtpZ3hEYXRlVGltZUVkaXRvcl09XCJjb2x1bW4uZWRpdG9yT3B0aW9ucz8uZGF0ZVRpbWVGb3JtYXRcIlxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdFR5cGU9XCJkYXRlVGltZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNVbmFyeUNvbmRpdGlvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25JbnB1dENsaWNrKClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25JbnB1dEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5dXApPVwib25JbnB1dEtleVVwKClcIi8+XG4gICAgICAgICAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cInZhbHVlIHx8IHZhbHVlID09PSAwXCIgPlxuICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNvbW1pdEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNvbW1pdENsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBmYW1pbHk9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNsZWFyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpbnB1dF9jbGVhclwiPlxuICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICA8L2lneC1zdWZmaXg+XG4gICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB0aGlzIH1cIj48L25nLWNvbnRhaW5lcj5cblxuPGJ1dHRvbiBpZ3hJY29uQnV0dG9uPVwiZmxhdFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImlneC1ncmlkX19maWx0ZXJpbmctcm93LXNjcm9sbC1zdGFydFwiICpuZ0lmPVwic2hvd0Fycm93c1wiIChrZXlkb3duKT1cIm9uTGVmdEFycm93S2V5RG93bigkZXZlbnQpXCIgKGNsaWNrKT1cInNjcm9sbENoaXBzT25BcnJvd1ByZXNzKCdsZWZ0JylcIj5cbiAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJwcmV2XCI+PC9pZ3gtaWNvbj5cbjwvYnV0dG9uPlxuXG48ZGl2ICNjb250YWluZXIgY2xhc3M9XCJpZ3gtZ3JpZF9fZmlsdGVyaW5nLXJvdy1tYWluXCI+XG4gICAgPGRpdj5cbiAgICAgICAgIDxpZ3gtY2hpcHMtYXJlYSAjY2hpcHNBcmVhPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBleHByZXNzaW9uc0xpc3Q7IGluZGV4IGFzIGk7IGxldCBsYXN0ID0gbGFzdDtcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICA8aWd4LWNoaXAgI2NoaXAgaWQ9XCJjaGlwXCJcbiAgICAgICAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uQ2hpcFBvaW50ZXJkb3duKCRldmVudCwgY2hpcClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGlwQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQ2hpcEtleURvd24oJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwib25DaGlwUmVtb3ZlZCgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiaXRlbS5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0taWctc2l6ZV09XCJmaWx0ZXJpbmdFbGVtZW50c1NpemVcIlxuICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ3hQcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1cImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5leHByZXNzaW9uLmNvbmRpdGlvbi5pY29uTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2ZpbHRlcmluZ1NlcnZpY2UuZ2V0Q2hpcExhYmVsKGl0ZW0uZXhwcmVzc2lvbil9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2lneC1jaGlwPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJvcGVyYW5kXCIgKm5nSWY9XCIhbGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ3hCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZXJhdG9yc0Ryb3BEb3duKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lneERyb3BEb3duSXRlbU5hdmlnYXRpb25dPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJleHBhbmRfbW9yZVwiPjwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2ZpbHRlcmluZ1NlcnZpY2UuZ2V0T3BlcmF0b3JBc1N0cmluZyhpdGVtLmFmdGVyT3BlcmF0b3IpfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWRyb3AtZG93biAjb3BlcmF0b3JzIChzZWxlY3Rpb25DaGFuZ2luZyk9XCJvbkxvZ2ljT3BlcmF0b3JDaGFuZ2VkKCRldmVudCwgaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWRyb3AtZG93bi1pdGVtIFt2YWx1ZV09XCIwXCIgW3NlbGVjdGVkXT1cIml0ZW0uYWZ0ZXJPcGVyYXRvciA9PT0gMFwiPnt7ZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfb3BlcmF0b3JfYW5kfX08L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWRyb3AtZG93bi1pdGVtIFt2YWx1ZV09XCIxXCIgW3NlbGVjdGVkXT1cIml0ZW0uYWZ0ZXJPcGVyYXRvciA9PT0gMVwiPnt7ZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfb3BlcmF0b3Jfb3J9fTwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC1kcm9wLWRvd24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LWNoaXBzLWFyZWE+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGJ1dHRvbiBpZ3hJY29uQnV0dG9uPVwiZmxhdFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImlneC1ncmlkX19maWx0ZXJpbmctcm93LXNjcm9sbC1lbmRcIiAqbmdJZj1cInNob3dBcnJvd3NcIiAoY2xpY2spPVwic2Nyb2xsQ2hpcHNPbkFycm93UHJlc3MoJ3JpZ2h0JylcIj5cbiAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJuZXh0XCI+PC9pZ3gtaWNvbj5cbjwvYnV0dG9uPlxuXG48ZGl2ICNidXR0b25zQ29udGFpbmVyIFtuZ0NsYXNzXT1cImlzTmFycm93V2lkdGggPyAnaWd4LWdyaWRfX2ZpbHRlcmluZy1yb3ctZWRpdGluZy1idXR0b25zLS1zbWFsbCcgOiAnaWd4LWdyaWRfX2ZpbHRlcmluZy1yb3ctZWRpdGluZy1idXR0b25zJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNOYXJyb3dXaWR0aFwiPlxuICAgICAgICA8YnV0dG9uIGlneEJ1dHRvbj1cImZsYXRcIiB0eXBlPVwiYnV0dG9uXCIgaWd4UmlwcGxlIChjbGljayk9XCJjbGVhckZpbHRlcmluZygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3RhYmluZGV4XT1cImRpc2FibGVkXCIgW3N0eWxlLi0taWctc2l6ZV09XCJmaWx0ZXJpbmdFbGVtZW50c1NpemVcIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgbmFtZT1cInJlZnJlc2hcIj48L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfcm93X3Jlc2V0IH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAjY2xvc2VCdXR0b24gaWd4QnV0dG9uPVwiZmxhdFwiIHR5cGU9XCJidXR0b25cIiBpZ3hSaXBwbGUgKGNsaWNrKT1cImNsb3NlKClcIiBbc3R5bGUuLS1pZy1zaXplXT1cImZpbHRlcmluZ0VsZW1lbnRzU2l6ZVwiPlxuICAgICAgICAgICAgPGlneC1pY29uIGZhbWlseT1cImRlZmF1bHRcIiBuYW1lPVwiY2xvc2VcIj48L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfcm93X2Nsb3NlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNOYXJyb3dXaWR0aFwiPlxuICAgICAgICA8YnV0dG9uIGlneEljb25CdXR0b249XCJmbGF0XCIgdHlwZT1cImJ1dHRvblwiIGlneFJpcHBsZSAoY2xpY2spPVwiY2xlYXJGaWx0ZXJpbmcoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFt0YWJpbmRleF09XCJkaXNhYmxlZFwiIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJyZWZyZXNoXCI+PC9pZ3gtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gI2Nsb3NlQnV0dG9uIGlneEljb25CdXR0b249XCJmbGF0XCIgdHlwZT1cImJ1dHRvblwiIGlneFJpcHBsZSAoY2xpY2spPVwiY2xvc2UoKVwiIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJjbG9zZVwiPjwvaWd4LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|
|
771
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXJpbmctcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvYmFzZS9ncmlkLWZpbHRlcmluZy1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2ZpbHRlcmluZy9iYXNlL2dyaWQtZmlsdGVyaW5nLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFFWixVQUFVLEVBQ1YsV0FBVyxFQUNYLHVCQUF1QixFQUV2QixZQUFZLEVBRWYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxjQUFjLEVBQXdCLE1BQU0seURBQXlELENBQUM7QUFDL0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFtQixNQUFNLHFDQUFxQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBR3ZGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxPQUFPLEVB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QUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBWaWV3UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUsIERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IElGaWx0ZXJpbmdPcGVyYXRpb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBGaWx0ZXJpbmdMb2dpYywgSUZpbHRlcmluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEhvcml6b250YWxBbGlnbm1lbnQsIFZlcnRpY2FsQWxpZ25tZW50LCBPdmVybGF5U2V0dGluZ3MgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vdmVybGF5L3V0aWxpdGllcyc7XG5pbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3ZlcmxheS9wb3NpdGlvbi9jb25uZWN0ZWQtcG9zaXRpb25pbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJU2VsZWN0aW9uRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21tb24nO1xuaW1wb3J0IHsgSWd4RmlsdGVyaW5nU2VydmljZSB9IGZyb20gJy4uL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL292ZXJsYXkvc2Nyb2xsJztcbmltcG9ydCB7IElneERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4VGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc0VxdWFsLCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEV4cHJlc3Npb25VSSB9IGZyb20gJy4uL2V4Y2VsLXN0eWxlL2NvbW1vbic7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneFJpcHBsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4Q2hpcENvbXBvbmVudCwgSUJhc2VDaGlwRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vLi4vY2hpcHMvY2hpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q2hpcHNBcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY2hpcHMvY2hpcHMtYXJlYS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hEYXRlVGltZUVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvZGF0ZS10aW1lLWVkaXRvci9kYXRlLXRpbWUtZWRpdG9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hQaWNrZXJUb2dnbGVDb21wb25lbnQsIElneFBpY2tlckNsZWFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZGF0ZS1jb21tb24vcGlja2VyLWljb25zLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hTdWZmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL3N1ZmZpeC9zdWZmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24tbmF2aWdhdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaW5wdXQtZ3JvdXAvaW5wdXQtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElneEljb25CdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2J1dHRvbi9pY29uLWJ1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9lbnVtcyc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2lneC1ncmlkLWZpbHRlcmluZy1yb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWZpbHRlcmluZy1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nRm9yLCBJZ3hEcm9wRG93bkNvbXBvbmVudCwgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50LCBJZ3hDaGlwc0FyZWFDb21wb25lbnQsIElneENoaXBDb21wb25lbnQsIElneEljb25Db21wb25lbnQsIElneElucHV0R3JvdXBDb21wb25lbnQsIElneFByZWZpeERpcmVjdGl2ZSwgSWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbkRpcmVjdGl2ZSwgSWd4SW5wdXREaXJlY3RpdmUsIE5nSWYsIElneFN1ZmZpeERpcmVjdGl2ZSwgSWd4RGF0ZVBpY2tlckNvbXBvbmVudCwgSWd4UGlja2VyVG9nZ2xlQ29tcG9uZW50LCBJZ3hQaWNrZXJDbGVhckNvbXBvbmVudCwgSWd4VGltZVBpY2tlckNvbXBvbmVudCwgSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXQsIElneEJ1dHRvbkRpcmVjdGl2ZSwgTmdDbGFzcywgSWd4UmlwcGxlRGlyZWN0aXZlLCBJZ3hJY29uQnV0dG9uRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRmlsdGVyaW5nUm93Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgY29sdW1uKCk6IENvbHVtblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgY29sdW1uKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fY29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdC5mb3JFYWNoKGV4cCA9PiBleHAuaXNTZWxlY3RlZCA9IGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW4gPSB2YWw7XG5cbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0ID0gdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdldEV4cHJlc3Npb25zKHRoaXMuX2NvbHVtbi5maWVsZCk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0RXhwcmVzc2lvbigpO1xuXG4gICAgICAgICAgICB0aGlzLmNoaXBBcmVhU2Nyb2xsT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbCkge1xuICAgICAgICBpZiAoIXZhbCAmJiB2YWwgIT09IDAgJiYgKHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWwgfHwgdGhpcy5leHByZXNzaW9uLnNlYXJjaFZhbCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmV4cHJlc3Npb25zTGlzdC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmV4cHJlc3Npb24gPT09IHRoaXMuZXhwcmVzc2lvbik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmNsZWFyRmlsdGVyKHRoaXMuY29sdW1uLmZpZWxkKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uLmlzVW5hcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEV4cHJlc3Npb24odGhpcy5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodmFsID09PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5leHByZXNzaW9uLnNlYXJjaFZhbDtcbiAgICAgICAgICAgIGlmIChpc0VxdWFsKG9sZFZhbHVlLCB2YWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPSBEYXRhVXRpbC5wYXJzZVZhbHVlKHRoaXMuY29sdW1uLmRhdGFUeXBlLCB2YWwpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbmQoaXRlbSA9PiBpdGVtLmV4cHJlc3Npb24gPT09IHRoaXMuZXhwcmVzc2lvbikgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRXhwcmVzc2lvbih0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGZpbHRlcmluZ0VsZW1lbnRzU2l6ZSgpOiBTaXplIHtcbiAgICAgICAgLy8gbmVlZGVkIGJlY2F1c2Ugd2Ugd2FudCB0aGUgc2l6ZSBvZiB0aGUgY2hpcHMgdG8gYmUgZWl0aGVyIE1lZGl1bSBvciBTbWFsbFxuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZ3JpZC5ncmlkU2l6ZSA9PT0gU2l6ZS5MYXJnZSA/IFNpemUuTWVkaXVtIDogdGhpcy5jb2x1bW4uZ3JpZC5ncmlkU2l6ZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX19maWx0ZXJpbmctcm93JylcbiAgICBwdWJsaWMgZGVmYXVsdENTU0NsYXNzID0gdHJ1ZTtcblxuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRGaWx0ZXJVSScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0RmlsdGVyVUk6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RGF0ZVVJJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHREYXRlVUk6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0VGltZVVJJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRUaW1lVUk6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0RGF0ZVRpbWVVSScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByb3RlY3RlZCBkZWZhdWx0RGF0ZVRpbWVVSTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJvdGVjdGVkIGlucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cENvbmRpdGlvbnMnLCB7IHJlYWQ6IElneERyb3BEb3duQ29tcG9uZW50LCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZHJvcERvd25Db25kaXRpb25zOiBJZ3hEcm9wRG93bkNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ2NoaXBzQXJlYScsIHsgcmVhZDogSWd4Q2hpcHNBcmVhQ29tcG9uZW50LCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgY2hpcHNBcmVhOiBJZ3hDaGlwc0FyZWFDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkcmVuKCdvcGVyYXRvcnMnLCB7IHJlYWQ6IElneERyb3BEb3duQ29tcG9uZW50IH0pXG4gICAgcHJvdGVjdGVkIGRyb3BEb3duT3BlcmF0b3JzOiBRdWVyeUxpc3Q8SWd4RHJvcERvd25Db21wb25lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByb3RlY3RlZCBpbnB1dEdyb3VwOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ3BpY2tlcicpXG4gICAgcHJvdGVjdGVkIHBpY2tlcjogSWd4RGF0ZVBpY2tlckNvbXBvbmVudCB8IElneFRpbWVQaWNrZXJDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dEdyb3VwUHJlZml4JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJvdGVjdGVkIGlucHV0R3JvdXBQcmVmaXg6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ29wZXJhbmQnKVxuICAgIHByb3RlY3RlZCBvcGVyYW5kOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2Nsb3NlQnV0dG9uJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgY2xvc2VCdXR0b246IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0Fycm93czogYm9vbGVhbjtcbiAgICBwdWJsaWMgZXhwcmVzc2lvbjogSUZpbHRlcmluZ0V4cHJlc3Npb247XG4gICAgcHVibGljIGV4cHJlc3Npb25zTGlzdDogQXJyYXk8RXhwcmVzc2lvblVJPjtcblxuICAgIHByaXZhdGUgX3Bvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIGhvcml6b250YWxTdGFydFBvaW50OiBIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQsXG4gICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tXG4gICAgfTtcblxuICAgIHByaXZhdGUgX2NvbmRpdGlvbnNPdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogbmV3IENvbm5lY3RlZFBvc2l0aW9uaW5nU3RyYXRlZ3kodGhpcy5fcG9zaXRpb25TZXR0aW5ncylcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfb3BlcmF0b3JzT3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBDb25uZWN0ZWRQb3NpdGlvbmluZ1N0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uU2V0dGluZ3MpXG4gICAgfTtcblxuICAgIHByaXZhdGUgY2hpcHNBcmVhV2lkdGg6IG51bWJlcjtcbiAgICBwcml2YXRlIGNoaXBBcmVhU2Nyb2xsT2Zmc2V0ID0gMDtcbiAgICBwcml2YXRlIF9jb2x1bW4gPSBudWxsO1xuICAgIHByaXZhdGUgaXNLZXlQcmVzc2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NhbmNlbENoaXBDbGljayA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3ZhbHVlID0gbnVsbDtcblxuICAgIC8qKiBzd2l0Y2ggdG8gaWNvbiBidXR0b25zIHdoZW4gd2lkdGggaXMgYmVsb3cgNDMycHggKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IE5BUlJPV19XSURUSF9USFJFU0hPTEQgPSA0MzI7XG5cbiAgICBwcml2YXRlICRkZXN0cm95ZXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBmaWx0ZXJpbmdTZXJ2aWNlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLFxuICAgICkgeyB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlkb3duSGFuZGxlcihldnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNGaWx0ZXJpbmdLZXlDb21ibyhldnQpKSB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuX2NvbmRpdGlvbnNPdmVybGF5U2V0dGluZ3Mub3V0bGV0ID0gdGhpcy5jb2x1bW4uZ3JpZC5vdXRsZXQ7XG4gICAgICAgIHRoaXMuX29wZXJhdG9yc092ZXJsYXlTZXR0aW5ncy5vdXRsZXQgPSB0aGlzLmNvbHVtbi5ncmlkLm91dGxldDtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLmV4cHJlc3Npb25zTGlzdC5maW5kKGV4cHIgPT4gZXhwci5pc1NlbGVjdGVkID09PSB0cnVlKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gc2VsZWN0ZWRJdGVtLmV4cHJlc3Npb247XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZ3JpZC5sb2NhbGVDaGFuZ2VcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuJGRlc3Ryb3llcikpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmZvY3VzRWRpdEVsZW1lbnQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmIHRoaXMuY29sdW1uLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggPiAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0RGF0ZVVJO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRUaW1lVUk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHREYXRlVGltZVVJO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRGaWx0ZXJVSTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jb2x1bW4uZGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlN0cmluZzpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcjpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkN1cnJlbmN5OlxuICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29uZGl0aW9ucygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZmlsdGVycy5jb25kaXRpb25MaXN0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1VuYXJ5Q29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5jb25kaXRpb24uaXNVbmFyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uLmNvbmRpdGlvbiAmJiB0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uLmlzVW5hcnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZ2V0Q2hpcExhYmVsKHRoaXMuZXhwcmVzc2lvbik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2ZpbHRlcl9yb3dfZGF0ZV9wbGFjZWhvbGRlcjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZmlsdGVyX3Jvd19ib29sZWFuX3BsYWNlaG9sZGVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfcm93X3BsYWNlaG9sZGVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3Iga2V5ZG93biBvbiB0aGUgaW5wdXQgZ3JvdXAncyBwcmVmaXguXG4gICAgICovXG4gICAgcHVibGljIG9uUHJlZml4S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpICYmIHRoaXMuZHJvcERvd25Db25kaXRpb25zLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVDb25kaXRpb25zRHJvcERvd24odGhpcy5pbnB1dEdyb3VwUHJlZml4Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5UQUIgJiYgIXRoaXMuZHJvcERvd25Db25kaXRpb25zLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVDb25kaXRpb25zRHJvcERvd24odGhpcy5pbnB1dEdyb3VwUHJlZml4Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3Iga2V5ZG93biBvbiB0aGUgaW5wdXQuXG4gICAgICovXG4gICAgcHVibGljIG9uSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNLZXlQcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0R3JvdXBQcmVmaXgubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ29uZGl0aW9uc0Ryb3BEb3duKHRoaXMuaW5wdXRHcm91cFByZWZpeC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gdGhpcy5wbGF0Zm9ybS5LRVlNQVAuRU5URVIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21taXRJbnB1dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmFsdEtleSAmJiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19ET1dOKSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwUHJlZml4Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ29uZGl0aW9uc0Ryb3BEb3duKHRoaXMuaW5wdXRHcm91cFByZWZpeC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBsYXRmb3JtLmlzRmlsdGVyaW5nS2V5Q29tYm8oZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3Iga2V5dXAgb24gdGhlIGlucHV0LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0S2V5VXAoKSB7XG4gICAgICAgIHRoaXMuaXNLZXlQcmVzc2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3IgaW5wdXQgb24gdGhlIGlucHV0LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0KGV2ZW50QXJncykge1xuICAgICAgICBpZiAoIWV2ZW50QXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlICdpc2tleVByZXNzZWQnIGZsYWcgaXMgbmVlZGVkIGZvciBhIGNhc2UgaW4gSUUsIGJlY2F1c2UgdGhlIGlucHV0IGV2ZW50IGlzIGZpcmVkIG9uIGZvY3VzIGFuZCBmb3Igc29tZSByZWFzb24sXG4gICAgICAgIC8vIHdoZW4geW91IGhhdmUgYSBqYXBhbmVzZSBjaGFyYWN0ZXIgYXMgYSBwbGFjZWhvbGRlciwgb24gaW5pdCB0aGUgdmFsdWUgaGVyZSBpcyBlbXB0eSBzdHJpbmcgLlxuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudEFyZ3MudGFyZ2V0O1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGV2ZW50QXJncztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0VkZ2UgJiYgdGFyZ2V0LnR5cGUgIT09ICdudW1iZXInXG4gICAgICAgICAgICB8fCB0aGlzLmlzS2V5UHJlc3NlZCB8fCB0YXJnZXQudmFsdWUgfHwgdGFyZ2V0LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRhcmdldC52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGNvbXBvc2l0aW9uc3RhcnQgb24gdGhlIGlucHV0LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNvbXBvc2l0aW9uU3RhcnQoKSB7XG4gICAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGNvbXBvc2l0aW9uZW5kIG9uIHRoZSBpbnB1dC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db21wb3NpdGlvbkVuZCgpIHtcbiAgICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGlucHV0IGNsaWNrIGV2ZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0Q2xpY2soKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW4gJiYgdGhpcy5kcm9wRG93bkNvbmRpdGlvbnMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0R3JvdXBQcmVmaXgubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy50b2dnbGVDb25kaXRpb25zRHJvcERvd24odGhpcy5pbnB1dEdyb3VwUHJlZml4Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlsdGVyaW5nIG9wZXJhdGlvbiBjb25kaXRpb24gZm9yIGEgZ2l2ZW4gdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbmRpdGlvbih2YWx1ZTogc3RyaW5nKTogSUZpbHRlcmluZ09wZXJhdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJzLmNvbmRpdGlvbih2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdHJhbnNsYXRlZCBjb25kaXRpb24gbmFtZSBmb3IgYSBnaXZlbiB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJhbnNsYXRlQ29uZGl0aW9uKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdyaWQucmVzb3VyY2VTdHJpbmdzW2BpZ3hfZ3JpZF9maWx0ZXJfJHt0aGlzLmdldENvbmRpdGlvbih2YWx1ZSkubmFtZX1gXSB8fCB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpY29uIG5hbWUgb2YgdGhlIGN1cnJlbnQgY29uZGl0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJY29uTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4uZGF0YVR5cGUgPT09IEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuICYmIHRoaXMuZXhwcmVzc2lvbi5jb25kaXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbmRpdGlvbih0aGlzLmNvbmRpdGlvbnNbMF0pLmljb25OYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5jb25kaXRpb24uaWNvbk5hbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYSBnaXZlbiBjb25kaXRpb24gaXMgc2VsZWN0ZWQgaW4gZHJvcGRvd24uXG4gICAgICovXG4gICAgcHVibGljIGlzQ29uZGl0aW9uU2VsZWN0ZWQoY29uZGl0aW9uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lID09PSBjb25kaXRpb25OYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBjdXJyZW50IGZpbHRlcmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJGaWx0ZXJpbmcoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5jbGVhckZpbHRlcih0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIHRoaXMucmVzZXRFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtKHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbW1pdHMgdGhlIHZhbHVlIG9mIHRoZSBpbnB1dC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29tbWl0SW5wdXQoKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbHRlcihleCA9PiBleC5pc1NlbGVjdGVkID09PSB0cnVlKTtcbiAgICAgICAgc2VsZWN0ZWRJdGVtLmZvckVhY2goZSA9PiBlLmlzU2VsZWN0ZWQgPSBmYWxzZSk7XG5cbiAgICAgICAgbGV0IGluZGV4VG9EZXNlbGVjdCA9IC0xO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uc0xpc3RbaW5kZXhdLmV4cHJlc3Npb247XG4gICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5zZWFyY2hWYWwgPT09IG51bGwgJiYgIWV4cHJlc3Npb24uY29uZGl0aW9uLmlzVW5hcnkpIHtcbiAgICAgICAgICAgICAgICBpbmRleFRvRGVzZWxlY3QgPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXhUb0Rlc2VsZWN0ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFeHByZXNzaW9uKGluZGV4VG9EZXNlbGVjdCwgdGhpcy5leHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0RXhwcmVzc2lvbigpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWw7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ2hpcHNXaGVuQWRkaW5nRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0LlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhcklucHV0KGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGtleWRvd24gb24gY2xlYXIgYnV0dG9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNsZWFyS2V5RG93bihldmVudEFyZ3M6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50QXJncykpIHtcbiAgICAgICAgICAgIGV2ZW50QXJncy5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzRWRpdEVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGNsaWNrIG9uIGNsZWFyIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25DbGVhckNsaWNrKCkge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgICAgdGhpcy5mb2N1c0VkaXRFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3Iga2V5ZG93biBvbiBjb21taXQgYnV0dG9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNvbW1pdEtleURvd24oZXZlbnRBcmdzOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQWN0aXZhdGlvbktleShldmVudEFyZ3MpKSB7XG4gICAgICAgICAgICBldmVudEFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuY29tbWl0SW5wdXQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNFZGl0RWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3IgY2xpY2sgb24gY29tbWl0IGJ1dHRvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db21taXRDbGljayhldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmNvbW1pdElucHV0KCk7XG4gICAgICAgIHRoaXMuZm9jdXNFZGl0RWxlbWVudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgZm9yIGZvY3Vzb3V0IG9uIHRoZSBpbnB1dCBncm91cC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25JbnB1dEdyb3VwRm9jdXNvdXQoKSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlICE9PSAwICYmXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uICYmICF0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uLmlzVW5hcnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZEVsZW1lbnQgPSB0aGlzLmNvbHVtbj8uZ3JpZC5kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAoZm9jdXNlZEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpZ3gtY2hpcF9fcmVtb3ZlJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKGZvY3VzZWRFbGVtZW50ICYmIHRoaXMuZWRpdG9yRm9jdXNlZChmb2N1c2VkRWxlbWVudCkpXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5kcm9wRG93bkNvbmRpdGlvbnMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21taXRJbnB1dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGZpbHRlcmluZyBlZGl0IHJvdy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cHJlc3Npb25zTGlzdC5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0WzBdLmV4cHJlc3Npb24uc2VhcmNoVmFsID09PSBudWxsICYmXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFswXS5leHByZXNzaW9uLmNvbmRpdGlvbi5pc1VuYXJ5ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmdldEV4cHJlc3Npb25zKHRoaXMuY29sdW1uLmZpZWxkKS5wb3AoKTtcblxuICAgICAgICAgICAgdGhpcy5maWx0ZXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRUb1JlbW92ZSA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbHRlcihleCA9PiBleC5leHByZXNzaW9uLnNlYXJjaFZhbCA9PT0gbnVsbCAmJiAhZXguZXhwcmVzc2lvbi5jb25kaXRpb24uaXNVbmFyeSk7XG4gICAgICAgICAgICBpZiAoY29uZFRvUmVtb3ZlICYmIGNvbmRUb1JlbW92ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uZFRvUmVtb3ZlLmZvckVhY2goYyA9PiB0aGlzLmZpbHRlcmluZ1NlcnZpY2UucmVtb3ZlRXhwcmVzc2lvbih0aGlzLmNvbHVtbi5maWVsZCwgdGhpcy5leHByZXNzaW9uc0xpc3QuaW5kZXhPZihjKSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuaXNGaWx0ZXJSb3dWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS51cGRhdGVGaWx0ZXJpbmdDZWxsKHRoaXMuY29sdW1uKTtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmZpbHRlcmVkQ29sdW1uID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLnNlbGVjdGVkRXhwcmVzc2lvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5ncmlkLnRoZWFkUm93Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICB0aGlzLmNoaXBBcmVhU2Nyb2xsT2Zmc2V0ID0gMDtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0odGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIEV2ZW50IGhhbmRsZXIgZm9yIGRhdGUgcGlja2VyJ3Mgc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRhdGVTZWxlY3RlZCh2YWx1ZTogRGF0ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGlucHV0R3JvdXBQcmVmaXhDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgICAgIHRoaXMudG9nZ2xlQ29uZGl0aW9uc0Ryb3BEb3duKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBjb25kaXRpb25zIGRyb3Bkb3duLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVDb25kaXRpb25zRHJvcERvd24odGFyZ2V0OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fY29uZGl0aW9uc092ZXJsYXlTZXR0aW5ncy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIHRoaXMuX2NvbmRpdGlvbnNPdmVybGF5U2V0dGluZ3MuZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2sgPSBbdGFyZ2V0IGFzIEhUTUxFbGVtZW50XTtcbiAgICAgICAgdGhpcy5kcm9wRG93bkNvbmRpdGlvbnMudG9nZ2xlKHRoaXMuX2NvbmRpdGlvbnNPdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBsb2dpYyBvcGVyYXRvcnMgZHJvcGRvd24uXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZU9wZXJhdG9yc0Ryb3BEb3duKGV2ZW50QXJncywgaW5kZXgpIHtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3JzT3ZlcmxheVNldHRpbmdzLnRhcmdldCA9IGV2ZW50QXJncy50YXJnZXQucGFyZW50RWxlbWVudDtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3JzT3ZlcmxheVNldHRpbmdzLmV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrID0gW2V2ZW50QXJncy50YXJnZXQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudF07XG4gICAgICAgIHRoaXMuZHJvcERvd25PcGVyYXRvcnMudG9BcnJheSgpW2luZGV4XS50b2dnbGUodGhpcy5fb3BlcmF0b3JzT3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBoYW5kbGVyIGZvciBjaGFuZ2UgZXZlbnQgaW4gY29uZGl0aW9ucyBkcm9wZG93bi5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db25kaXRpb25zQ2hhbmdlZChldmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZXZlbnRBcmdzLm5ld1NlbGVjdGlvbiBhcyBJZ3hEcm9wRG93bkl0ZW1Db21wb25lbnQpLnZhbHVlO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24uY29uZGl0aW9uID0gdGhpcy5nZXRDb25kaXRpb24odmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uLmNvbmRpdGlvbi5pc1VuYXJ5KSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZ3JpZCdzIGZpbHRlcmluZyBvbiB0aGUgbmV4dCBjeWNsZSB0byBlbnN1cmUgdGhlIGRyb3AtZG93biBpcyBjbG9zZWRcbiAgICAgICAgICAgIC8vIGlmIHRoZSBkcm9wLWRvd24gaXMgbm90IGNsb3NlZCB0aGlzIGV2ZW50IGhhbmRsZXIgd2lsbCBiZSBpbnZva2VkIG11bHRpcGxlIHRpbWVzXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy51bmFyeUNvbmRpdGlvbkNoYW5nZWRDYWxsYmFjaygpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmNvbmRpdGlvbkNoYW5nZWRDYWxsYmFjaygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYmVjYXVzZSBvZiBhbiBpc3N1ZSBpbiBJRSwgd2hlcmUgeW91IGFyZSBzdGlsbCBhYmxlIHRvIHdyaXRlIGluIHRoZSBpbnB1dCxcbiAgICAgICAgLy8gaWYgaXQgaGFzIGJlZW4gZm9jdXNlZCBhbmQgdGhlbiBzZXQgdG8gcmVhZG9ubHkuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmZvY3VzRWRpdEVsZW1lbnQoKSk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgb25DaGlwUG9pbnRlcmRvd24oYXJncywgY2hpcDogSWd4Q2hpcENvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy5jb2x1bW4/LmdyaWQuZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5fY2FuY2VsQ2hpcENsaWNrID0gY2hpcC5zZWxlY3RlZFxuICAgICAgICAgICAgJiYgYWN0aXZlRWxlbWVudCAmJiB0aGlzLmVkaXRvckZvY3VzZWQoYWN0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hpcENsaWNrKGFyZ3MsIGl0ZW06IEV4cHJlc3Npb25VSSkge1xuICAgICAgICBpZiAodGhpcy5fY2FuY2VsQ2hpcENsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxDaGlwQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZvckVhY2goZXggPT4gZXguaXNTZWxlY3RlZCA9IGZhbHNlKTtcblxuICAgICAgICB0aGlzLnRvZ2dsZUNoaXAoaXRlbSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUNoaXAoaXRlbTogRXhwcmVzc2lvblVJKSB7XG4gICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9ICFpdGVtLmlzU2VsZWN0ZWQ7XG4gICAgICAgIGlmIChpdGVtLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGl0ZW0uZXhwcmVzc2lvbjtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5leHByZXNzaW9uLnNlYXJjaFZhbDtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNFZGl0RWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3IgY2hpcCBrZXlkb3duIGV2ZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBLZXlEb3duKGV2ZW50QXJnczogS2V5Ym9hcmRFdmVudCwgaXRlbTogRXhwcmVzc2lvblVJKSB7XG4gICAgICAgIGlmIChldmVudEFyZ3Mua2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5FTlRFUikge1xuICAgICAgICAgICAgZXZlbnRBcmdzLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2hpcChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNjcm9sbHMgdGhlIGZpcnN0IGNoaXAgaW50byB2aWV3IGlmIHRoZSB0YWIga2V5IGlzIHByZXNzZWQgb24gdGhlIGxlZnQgYXJyb3cuXG4gICAgICovXG4gICAgcHVibGljIG9uTGVmdEFycm93S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5UQUIpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQgPSAwO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0odGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBoYW5kbGVyIGZvciBjaGlwIHJlbW92ZWQgZXZlbnQuXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcFJlbW92ZWQoZXZlbnRBcmdzOiBJQmFzZUNoaXBFdmVudEFyZ3MsIGl0ZW06IEV4cHJlc3Npb25VSSkge1xuICAgICAgICBjb25zdCBpbmRleFRvUmVtb3ZlID0gdGhpcy5leHByZXNzaW9uc0xpc3QuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgdGhpcy5yZW1vdmVFeHByZXNzaW9uKGluZGV4VG9SZW1vdmUsIGl0ZW0uZXhwcmVzc2lvbik7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxDaGlwc09uUmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBmb3IgbG9naWMgb3BlcmF0b3IgY2hhbmdlZCBldmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Mb2dpY09wZXJhdG9yQ2hhbmdlZChldmVudEFyZ3M6IElTZWxlY3Rpb25FdmVudEFyZ3MsIGV4cHJlc3Npb246IEV4cHJlc3Npb25VSSkge1xuICAgICAgICBpZiAoZXZlbnRBcmdzLm9sZFNlbGVjdGlvbikge1xuICAgICAgICAgICAgZXhwcmVzc2lvbi5hZnRlck9wZXJhdG9yID0gKGV2ZW50QXJncy5uZXdTZWxlY3Rpb24gYXMgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50KS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnNMaXN0W3RoaXMuZXhwcmVzc2lvbnNMaXN0LmluZGV4T2YoZXhwcmVzc2lvbikgKyAxXS5iZWZvcmVPcGVyYXRvciA9IGV4cHJlc3Npb24uYWZ0ZXJPcGVyYXRvcjtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIGdyaWQncyBmaWx0ZXJpbmcgb24gdGhlIG5leHQgY3ljbGUgdG8gZW5zdXJlIHRoZSBkcm9wLWRvd24gaXMgY2xvc2VkXG4gICAgICAgICAgICAvLyBpZiB0aGUgZHJvcC1kb3duIGlzIG5vdCBjbG9zZWQgdGhpcyBldmVudCBoYW5kbGVyIHdpbGwgYmUgaW52b2tlZCBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuZmlsdGVyKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2Nyb2xscyB0aGUgY2hpcHMgaW50byB0aGUgY2hpcCBhcmVhIHdoZW4gbGVmdCBvciByaWdodCBhcnJvd3MgYXJlIHByZXNzZWQuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbENoaXBzT25BcnJvd1ByZXNzKGFycm93UG9zaXRpb246IHN0cmluZykge1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBjb25zdCBjaGlwQXJhZUNoaWxkcmVuID0gdGhpcy5jaGlwc0FyZWEuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAoYXJyb3dQb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlwIG9mIGNoaXBBcmFlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5jZWlsKGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpIDwgTWF0aC5jZWlsKGNvbnRhaW5lclJlY3QucmlnaHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY291bnQgPCBjaGlwQXJhZUNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQgLT0gTWF0aC5jZWlsKGNoaXBBcmFlQ2hpbGRyZW5bY291bnRdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSAtXG4gICAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChjb250YWluZXJSZWN0LnJpZ2h0KSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0odGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJyb3dQb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaXAgb2YgY2hpcEFyYWVDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmNlaWwoY2hpcC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSA8IE1hdGguY2VpbChjb250YWluZXJSZWN0LmxlZnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCArPSBNYXRoLmNlaWwoY29udGFpbmVyUmVjdC5sZWZ0KSAtXG4gICAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChjaGlwQXJhZUNoaWxkcmVuW2NvdW50IC0gMV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkgKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlc2V0cyB0aGUgY2hpcHMgYXJlYVxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkRmlsdGVyaW5nUm93Q29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHJlc2V0Q2hpcHNBcmVhKCkge1xuICAgICAgICB0aGlzLmNoaXBBcmVhU2Nyb2xsT2Zmc2V0ID0gMDtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0odGhpcy5jaGlwQXJlYVNjcm9sbE9mZnNldCk7XG4gICAgICAgIHRoaXMuc2hvd0hpZGVBcnJvd0J1dHRvbnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZm9jdXNFZGl0RWxlbWVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGlja2VyKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlci5nZXRFZGl0RWxlbWVudCgpLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuJGRlc3Ryb3llci5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93SGlkZUFycm93QnV0dG9ucygpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmluZ1NlcnZpY2UuaXNGaWx0ZXJSb3dWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpcHNBcmVhV2lkdGggPSB0aGlzLmNoaXBzQXJlYS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNob3dBcnJvd3MgPSB0aGlzLmNoaXBzQXJlYVdpZHRoID49IGNvbnRhaW5lcldpZHRoICYmIHRoaXMuaXNDb2x1bW5GaWx0ZXJlZDtcblxuICAgICAgICAgICAgICAgIC8vIFRPRE86IHJldmlzZSB0aGUgY2RyLmRldGVjdENoYW5nZXMoKSB1c2FnZSBoZXJlXG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcy5jZHIgYXMgVmlld1JlZikuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRXhwcmVzc2lvbihpc1NlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGV4cHJVSSA9IG5ldyBFeHByZXNzaW9uVUkoKTtcbiAgICAgICAgZXhwclVJLmV4cHJlc3Npb24gPSB0aGlzLmV4cHJlc3Npb247XG4gICAgICAgIGV4cHJVSS5iZWZvcmVPcGVyYXRvciA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aCA+IDAgPyBGaWx0ZXJpbmdMb2dpYy5BbmQgOiBudWxsO1xuICAgICAgICBleHByVUkuaXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQ7XG5cbiAgICAgICAgdGhpcy5leHByZXNzaW9uc0xpc3QucHVzaChleHByVUkpO1xuXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuZXhwcmVzc2lvbnNMaXN0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0W2xlbmd0aCAtIDJdKSB7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zTGlzdFtsZW5ndGggLSAyXS5hZnRlck9wZXJhdG9yID0gdGhpcy5leHByZXNzaW9uc0xpc3RbbGVuZ3RoIC0gMV0uYmVmb3JlT3BlcmF0b3I7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dIaWRlQXJyb3dCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVFeHByZXNzaW9uKGluZGV4VG9SZW1vdmU6IG51bWJlciwgZXhwcmVzc2lvbjogSUZpbHRlcmluZ0V4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGluZGV4VG9SZW1vdmUgPT09IDAgJiYgdGhpcy5leHByZXNzaW9uc0xpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyRmlsdGVyaW5nKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UucmVtb3ZlRXhwcmVzc2lvbih0aGlzLmNvbHVtbi5maWVsZCwgaW5kZXhUb1JlbW92ZSk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uID09PSBleHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93SGlkZUFycm93QnV0dG9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRFeHByZXNzaW9uKGNvbmRpdGlvbj86IHN0cmluZykge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSB7XG4gICAgICAgICAgICBmaWVsZE5hbWU6IHRoaXMuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgY29uZGl0aW9uOiBudWxsLFxuICAgICAgICAgICAgc2VhcmNoVmFsOiBudWxsLFxuICAgICAgICAgICAgaWdub3JlQ2FzZTogdGhpcy5jb2x1bW4uZmlsdGVyaW5nSWdub3JlQ2FzZVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSAhPT0gR3JpZENvbHVtbkRhdGFUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbi5jb25kaXRpb24gPSB0aGlzLmdldENvbmRpdGlvbihjb25kaXRpb24gPz8gdGhpcy5jb25kaXRpb25zWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbHVtbi5kYXRhVHlwZSA9PT0gR3JpZENvbHVtbkRhdGFUeXBlLkRhdGUgJiYgdGhpcy5pbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2hvd0hpZGVBcnJvd0J1dHRvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjcm9sbENoaXBzV2hlbkFkZGluZ0V4cHJlc3Npb24oKSB7XG4gICAgICAgIGNvbnN0IGNoaXBBcmFlQ2hpbGRyZW4gPSB0aGlzLmNoaXBzQXJlYS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgIGlmICghY2hpcEFyYWVDaGlsZHJlbiB8fCBjaGlwQXJhZUNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpcHNDb250YWluZXJXaWR0aCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IGNoaXBzQXJlYVdpZHRoID0gdGhpcy5jaGlwc0FyZWEuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgIGlmIChjaGlwc0FyZWFXaWR0aCA+IGNoaXBzQ29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQgPSBjaGlwc0NvbnRhaW5lcldpZHRoIC0gY2hpcHNBcmVhV2lkdGg7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSh0aGlzLmNoaXBBcmVhU2Nyb2xsT2Zmc2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtKG9mZnNldDogbnVtYmVyKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoaXBzQXJlYS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke29mZnNldH1weClgO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjcm9sbENoaXBzT25SZW1vdmUoKSB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGNvbnN0IGNoaXBBcmFlQ2hpbGRyZW4gPSB0aGlzLmNoaXBzQXJlYS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hpcCBvZiBjaGlwQXJhZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAoTWF0aC5jZWlsKGNoaXAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpIDwgTWF0aC5jZWlsKGNvbnRhaW5lclJlY3QubGVmdCkpIHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvdW50IDw9IDIpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGlmID0gY2hpcEFyYWVDaGlsZHJlbltjb3VudF0uaWQgPT09ICdjaGlwJyA/IGNvdW50IC0gMiA6IGNvdW50IC0gMTtcbiAgICAgICAgICAgIHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQgKz0gTWF0aC5jZWlsKGNvbnRhaW5lclJlY3QubGVmdCkgLSBNYXRoLmNlaWwoY2hpcEFyYWVDaGlsZHJlbltkaWZdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJhbnNmb3JtKHRoaXMuY2hpcEFyZWFTY3JvbGxPZmZzZXQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZGl0aW9uQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgICAgICBpZiAoISF0aGlzLmV4cHJlc3Npb24uc2VhcmNoVmFsIHx8IHRoaXMuZXhwcmVzc2lvbi5zZWFyY2hWYWwgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVuYXJ5Q29uZGl0aW9uQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbnNMaXN0LmZpbmQoaXRlbSA9PiBpdGVtLmV4cHJlc3Npb24gPT09IHRoaXMuZXhwcmVzc2lvbikgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5hZGRFeHByZXNzaW9uKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5maWx0ZXJJbnRlcm5hbCh0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlZGl0b3JGb2N1c2VkKGFjdGl2ZUVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGNoZWNrIGlzIGZhbHNlIGFuZCB0aGUgc2Vjb25kIGlzIHVuZGVmaW5lZCB0aGlzIHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAvLyBtYWtlIHN1cmUgaXQgYWx3YXlzIHJldHVybnMgYm9vbGVhblxuICAgICAgICByZXR1cm4gISEodGhpcy5pbnB1dEdyb3VwICYmIHRoaXMuaW5wdXRHcm91cC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGFjdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICB8fCB0aGlzLnBpY2tlciAmJiB0aGlzLnBpY2tlci5pc0ZvY3VzZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzQ29sdW1uRmlsdGVyZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiYgdGhpcy5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc05hcnJvd1dpZHRoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgdGhpcy5OQVJST1dfV0lEVEhfVEhSRVNIT0xEO1xuICAgIH1cbn1cbiIsIjwhLS0gSGF2ZSB0byBhcHBseSBzdHlsZXMgaW5saW5lIGJlY2F1c2Ugb2YgdGhlIG92ZXJsYXkgb3V0bGV0IC4uLiAtLT5cbjxpZ3gtZHJvcC1kb3duICNpbnB1dEdyb3VwQ29uZGl0aW9ucyBbc3R5bGUuLS1pZy1zaXplXT1cImZpbHRlcmluZ0VsZW1lbnRzU2l6ZVwiIFtoZWlnaHRdPVwiJzIwMHB4J1wiIChzZWxlY3Rpb25DaGFuZ2luZyk9XCJvbkNvbmRpdGlvbnNDaGFuZ2VkKCRldmVudClcIj5cbiAgICA8aWd4LWRyb3AtZG93bi1pdGVtICpuZ0Zvcj1cImxldCBjb25kaXRpb24gb2YgY29uZGl0aW9uc1wiXG4gICAgICAgIFt2YWx1ZV09XCJjb25kaXRpb25cIlxuICAgICAgICBbc2VsZWN0ZWRdPVwiaXNDb25kaXRpb25TZWxlY3RlZChjb25kaXRpb24pXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fZmlsdGVyaW5nLWRyb3Bkb3duLWl0ZW1zXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIFtuYW1lXT1cImdldENvbmRpdGlvbihjb25kaXRpb24pLmljb25OYW1lXCI+PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX2ZpbHRlcmluZy1kcm9wZG93bi10ZXh0XCI+e3sgdHJhbnNsYXRlQ29uZGl0aW9uKGNvbmRpdGlvbikgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvaWd4LWRyb3AtZG93bi1pdGVtPlxuPC9pZ3gtZHJvcC1kb3duPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRGaWx0ZXJVST5cbiAgICA8aWd4LWlucHV0LWdyb3VwICNpbnB1dEdyb3VwIHR5cGU9XCJib3hcIiAoZm9jdXNvdXQpPVwib25JbnB1dEdyb3VwRm9jdXNvdXQoKVwiIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgIDxpZ3gtcHJlZml4ICNpbnB1dEdyb3VwUHJlZml4XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpbnB1dEdyb3VwUHJlZml4Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uUHJlZml4S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW2lneERyb3BEb3duSXRlbU5hdmlnYXRpb25dPVwiaW5wdXRHcm91cENvbmRpdGlvbnNcIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgW25hbWVdPVwiZ2V0SWNvbk5hbWUoKVwiPjwvaWd4LWljb24+XG4gICAgICAgIDwvaWd4LXByZWZpeD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJpc1VuYXJ5Q29uZGl0aW9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbklucHV0Q2xpY2soKVwiXG4gICAgICAgICAgICAoY29tcG9zaXRpb25zdGFydCk9XCJvbkNvbXBvc2l0aW9uU3RhcnQoKVwiXG4gICAgICAgICAgICAoY29tcG9zaXRpb25lbmQpPVwib25Db21wb3NpdGlvbkVuZCgpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgKGtleXVwKT1cIm9uSW5wdXRLZXlVcCgpXCIvPlxuICAgICAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cInZhbHVlIHx8IHZhbHVlID09PSAwXCIgPlxuICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Db21taXRLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNvbW1pdENsaWNrKClcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNsZWFyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGVhckNsaWNrKClcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImlucHV0X2NsZWFyXCI+XG4gICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICA8L2lneC1zdWZmaXg+XG4gICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHREYXRlVUk+XG4gICAgPGlneC1kYXRlLXBpY2tlciAjcGlja2VyXG4gICAgICAgIFsodmFsdWUpXT1cInZhbHVlXCJcbiAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxuICAgICAgICBbb3V0bGV0XT1cImZpbHRlcmluZ1NlcnZpY2UuZ3JpZC5vdXRsZXRcIlxuICAgICAgICBbbG9jYWxlXT1cImZpbHRlcmluZ1NlcnZpY2UuZ3JpZC5sb2NhbGVcIlxuICAgICAgICAoY2xpY2spPVwiZXhwcmVzc2lvbi5jb25kaXRpb24uaXNVbmFyeSA/IG51bGwgOiBwaWNrZXIub3BlbigpXCJcbiAgICAgICAgdHlwZT1cImJveFwiXG4gICAgICAgIFtkaXNwbGF5Rm9ybWF0XT1cImNvbHVtbi5waXBlQXJncy5mb3JtYXRcIlxuICAgICAgICBbZm9ybWF0dGVyXT1cImNvbHVtbi5mb3JtYXR0ZXJcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbd2Vla1N0YXJ0XT1cImNvbHVtbi5waXBlQXJncy53ZWVrU3RhcnRcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3Vzb3V0KT1cIm9uSW5wdXRHcm91cEZvY3Vzb3V0KClcIlxuICAgICAgICAoY2xvc2VkKT1cImZvY3VzRWRpdEVsZW1lbnQoKVwiPlxuICAgICAgICA8aWd4LXByZWZpeCAjaW5wdXRHcm91cFByZWZpeFxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJpbnB1dEdyb3VwUHJlZml4Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblByZWZpeEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICBbaWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbl09XCJpbnB1dEdyb3VwQ29uZGl0aW9uc1wiPlxuICAgICAgICAgICAgPGlneC1pY29uIGZhbWlseT1cImRlZmF1bHRcIiBbbmFtZV09XCJleHByZXNzaW9uLmNvbmRpdGlvbi5pY29uTmFtZVwiPjwvaWd4LWljb24+XG4gICAgICAgIDwvaWd4LXByZWZpeD5cbiAgICAgICAgPGlneC1zdWZmaXggKm5nSWY9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNvbW1pdEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ29tbWl0Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQ2xlYXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhcklucHV0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIGZhbWlseT1cImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJpbnB1dF9jbGVhclwiPlxuICAgICAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICAgICAgPC9pZ3gtc3VmZml4PlxuICAgICAgICA8IS0tIGRpc2FibGUgZGVmYXVsdCBpY29ucyAtLT5cbiAgICAgICAgPGlneC1waWNrZXItdG9nZ2xlPjwvaWd4LXBpY2tlci10b2dnbGU+XG4gICAgICAgIDxpZ3gtcGlja2VyLWNsZWFyPjwvaWd4LXBpY2tlci1jbGVhcj5cbiAgICA8L2lneC1kYXRlLXBpY2tlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRpbWVVST5cbiAgICA8aWd4LXRpbWUtcGlja2VyICNwaWNrZXJcbiAgICAgICAgWyh2YWx1ZSldPVwidmFsdWVcIlxuICAgICAgICBbaW5wdXRGb3JtYXRdPVwiY29sdW1uLmVkaXRvck9wdGlvbnM/LmRhdGVUaW1lRm9ybWF0XCJcbiAgICAgICAgW2Rpc3BsYXlGb3JtYXRdPVwiY29sdW1uLnBpcGVBcmdzLmZvcm1hdFwiXG4gICAgICAgIFtsb2NhbGVdPVwiZmlsdGVyaW5nU2VydmljZS5ncmlkLmxvY2FsZVwiXG4gICAgICAgIFtmb3JtYXR0ZXJdPVwiY29sdW1uLmZvcm1hdHRlclwiXG4gICAgICAgIFtvdXRsZXRdPVwiZmlsdGVyaW5nU2VydmljZS5ncmlkLm91dGxldFwiXG4gICAgICAgIHR5cGU9XCJib3hcIlxuICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiXG4gICAgICAgIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgKGNsb3NlZCk9XCJmb2N1c0VkaXRFbGVtZW50KClcIlxuICAgICAgICAoZm9jdXNvdXQpPVwib25JbnB1dEdyb3VwRm9jdXNvdXQoKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwiZXhwcmVzc2lvbi5jb25kaXRpb24uaXNVbmFyeSA/IG51bGwgOiBwaWNrZXIub3BlbigpXCI+XG4gICAgICAgIDxpZ3gtcHJlZml4ICNpbnB1dEdyb3VwUHJlZml4XG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImlucHV0R3JvdXBQcmVmaXhDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uUHJlZml4S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIFtpZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uXT1cImlucHV0R3JvdXBDb25kaXRpb25zXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIFtuYW1lXT1cImV4cHJlc3Npb24uY29uZGl0aW9uLmljb25OYW1lXCI+PC9pZ3gtaWNvbj5cbiAgICAgICAgPC9pZ3gtcHJlZml4PlxuICAgICAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cInZhbHVlXCI+XG4gICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQ29tbWl0S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Db21taXRDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBmYW1pbHk9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiY29uZmlybVwiPlxuICAgICAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25DbGVhcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cImlucHV0X2NsZWFyXCI+XG4gICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICA8L2lneC1zdWZmaXg+XG4gICAgICAgIDwhLS0gZGlzYWJsZSBkZWZhdWx0IGljb25zIC0tPlxuICAgICAgICA8aWd4LXBpY2tlci10b2dnbGU+PC9pZ3gtcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPGlneC1waWNrZXItY2xlYXI+PC9pZ3gtcGlja2VyLWNsZWFyPlxuICAgIDwvaWd4LXRpbWUtcGlja2VyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RGF0ZVRpbWVVST5cbiAgICA8aWd4LWlucHV0LWdyb3VwICNpbnB1dEdyb3VwIHR5cGU9XCJib3hcIiAoZm9jdXNvdXQpPVwib25JbnB1dEdyb3VwRm9jdXNvdXQoKVwiIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgIDxpZ3gtcHJlZml4ICNpbnB1dEdyb3VwUHJlZml4XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpbnB1dEdyb3VwUHJlZml4Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uUHJlZml4S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW2lneERyb3BEb3duSXRlbU5hdmlnYXRpb25dPVwiaW5wdXRHcm91cENvbmRpdGlvbnNcIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgW25hbWVdPVwiZ2V0SWNvbk5hbWUoKVwiPjwvaWd4LWljb24+XG4gICAgICAgIDwvaWd4LXByZWZpeD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIGlneElucHV0XG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFtsb2NhbGVdPVwiZmlsdGVyaW5nU2VydmljZS5ncmlkLmxvY2FsZVwiXG4gICAgICAgICAgICBbZGlzcGxheUZvcm1hdF09XCJjb2x1bW4ucGlwZUFyZ3MuZm9ybWF0XCJcbiAgICAgICAgICAgIFtpZ3hEYXRlVGltZUVkaXRvcl09XCJjb2x1bW4uZWRpdG9yT3B0aW9ucz8uZGF0ZVRpbWVGb3JtYXRcIlxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdFR5cGU9XCJkYXRlVGltZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNVbmFyeUNvbmRpdGlvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25JbnB1dENsaWNrKClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25JbnB1dEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5dXApPVwib25JbnB1dEtleVVwKClcIi8+XG4gICAgICAgICAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cInZhbHVlIHx8IHZhbHVlID09PSAwXCIgPlxuICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNvbW1pdEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNvbW1pdENsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBmYW1pbHk9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNsZWFyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgZmFtaWx5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpbnB1dF9jbGVhclwiPlxuICAgICAgICAgICAgICAgIDwvaWd4LWljb24+XG4gICAgICAgICAgICA8L2lneC1zdWZmaXg+XG4gICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB0aGlzIH1cIj48L25nLWNvbnRhaW5lcj5cblxuPGJ1dHRvbiBpZ3hJY29uQnV0dG9uPVwiZmxhdFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImlneC1ncmlkX19maWx0ZXJpbmctcm93LXNjcm9sbC1zdGFydFwiICpuZ0lmPVwic2hvd0Fycm93c1wiIChrZXlkb3duKT1cIm9uTGVmdEFycm93S2V5RG93bigkZXZlbnQpXCIgKGNsaWNrKT1cInNjcm9sbENoaXBzT25BcnJvd1ByZXNzKCdsZWZ0JylcIj5cbiAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJwcmV2XCI+PC9pZ3gtaWNvbj5cbjwvYnV0dG9uPlxuXG48ZGl2ICNjb250YWluZXIgY2xhc3M9XCJpZ3gtZ3JpZF9fZmlsdGVyaW5nLXJvdy1tYWluXCI+XG4gICAgPGRpdj5cbiAgICAgICAgIDxpZ3gtY2hpcHMtYXJlYSAjY2hpcHNBcmVhPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBleHByZXNzaW9uc0xpc3Q7IGluZGV4IGFzIGk7IGxldCBsYXN0ID0gbGFzdDtcIiB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICA8aWd4LWNoaXAgI2NoaXAgaWQ9XCJjaGlwXCJcbiAgICAgICAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uQ2hpcFBvaW50ZXJkb3duKCRldmVudCwgY2hpcClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGlwQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQ2hpcEtleURvd24oJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwib25DaGlwUmVtb3ZlZCgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiaXRlbS5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0taWctc2l6ZV09XCJmaWx0ZXJpbmdFbGVtZW50c1NpemVcIlxuICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ3hQcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1cImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5leHByZXNzaW9uLmNvbmRpdGlvbi5pY29uTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2ZpbHRlcmluZ1NlcnZpY2UuZ2V0Q2hpcExhYmVsKGl0ZW0uZXhwcmVzc2lvbil9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2lneC1jaGlwPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJvcGVyYW5kXCIgKm5nSWY9XCIhbGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ3hCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZXJhdG9yc0Ryb3BEb3duKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lneERyb3BEb3duSXRlbU5hdmlnYXRpb25dPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJleHBhbmRfbW9yZVwiPjwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2ZpbHRlcmluZ1NlcnZpY2UuZ2V0T3BlcmF0b3JBc1N0cmluZyhpdGVtLmFmdGVyT3BlcmF0b3IpfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWRyb3AtZG93biAjb3BlcmF0b3JzIChzZWxlY3Rpb25DaGFuZ2luZyk9XCJvbkxvZ2ljT3BlcmF0b3JDaGFuZ2VkKCRldmVudCwgaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWRyb3AtZG93bi1pdGVtIFt2YWx1ZV09XCIwXCIgW3NlbGVjdGVkXT1cIml0ZW0uYWZ0ZXJPcGVyYXRvciA9PT0gMFwiPnt7ZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfb3BlcmF0b3JfYW5kfX08L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWRyb3AtZG93bi1pdGVtIFt2YWx1ZV09XCIxXCIgW3NlbGVjdGVkXT1cIml0ZW0uYWZ0ZXJPcGVyYXRvciA9PT0gMVwiPnt7ZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfb3BlcmF0b3Jfb3J9fTwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8L2lneC1kcm9wLWRvd24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LWNoaXBzLWFyZWE+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGJ1dHRvbiBpZ3hJY29uQnV0dG9uPVwiZmxhdFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImlneC1ncmlkX19maWx0ZXJpbmctcm93LXNjcm9sbC1lbmRcIiAqbmdJZj1cInNob3dBcnJvd3NcIiAoY2xpY2spPVwic2Nyb2xsQ2hpcHNPbkFycm93UHJlc3MoJ3JpZ2h0JylcIj5cbiAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJuZXh0XCI+PC9pZ3gtaWNvbj5cbjwvYnV0dG9uPlxuXG48ZGl2ICNidXR0b25zQ29udGFpbmVyIFtuZ0NsYXNzXT1cImlzTmFycm93V2lkdGggPyAnaWd4LWdyaWRfX2ZpbHRlcmluZy1yb3ctZWRpdGluZy1idXR0b25zLS1zbWFsbCcgOiAnaWd4LWdyaWRfX2ZpbHRlcmluZy1yb3ctZWRpdGluZy1idXR0b25zJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNOYXJyb3dXaWR0aFwiPlxuICAgICAgICA8YnV0dG9uIGlneEJ1dHRvbj1cImZsYXRcIiB0eXBlPVwiYnV0dG9uXCIgaWd4UmlwcGxlIChjbGljayk9XCJjbGVhckZpbHRlcmluZygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3RhYmluZGV4XT1cImRpc2FibGVkXCIgW3N0eWxlLi0taWctc2l6ZV09XCJmaWx0ZXJpbmdFbGVtZW50c1NpemVcIj5cbiAgICAgICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgbmFtZT1cInJlZnJlc2hcIj48L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfcm93X3Jlc2V0IH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAjY2xvc2VCdXR0b24gaWd4QnV0dG9uPVwiZmxhdFwiIHR5cGU9XCJidXR0b25cIiBpZ3hSaXBwbGUgKGNsaWNrKT1cImNsb3NlKClcIiBbc3R5bGUuLS1pZy1zaXplXT1cImZpbHRlcmluZ0VsZW1lbnRzU2l6ZVwiPlxuICAgICAgICAgICAgPGlneC1pY29uIGZhbWlseT1cImRlZmF1bHRcIiBuYW1lPVwiY2xvc2VcIj48L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgZmlsdGVyaW5nU2VydmljZS5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9maWx0ZXJfcm93X2Nsb3NlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNOYXJyb3dXaWR0aFwiPlxuICAgICAgICA8YnV0dG9uIGlneEljb25CdXR0b249XCJmbGF0XCIgdHlwZT1cImJ1dHRvblwiIGlneFJpcHBsZSAoY2xpY2spPVwiY2xlYXJGaWx0ZXJpbmcoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFt0YWJpbmRleF09XCJkaXNhYmxlZFwiIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJyZWZyZXNoXCI+PC9pZ3gtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gI2Nsb3NlQnV0dG9uIGlneEljb25CdXR0b249XCJmbGF0XCIgdHlwZT1cImJ1dHRvblwiIGlneFJpcHBsZSAoY2xpY2spPVwiY2xvc2UoKVwiIFtzdHlsZS4tLWlnLXNpemVdPVwiZmlsdGVyaW5nRWxlbWVudHNTaXplXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJjbG9zZVwiPjwvaWd4LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|