@ieeesa-npm/groups 0.15.26 → 0.15.28
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/components/interested-rosters/interested-rosters.component.mjs +2 -2
- package/esm2022/lib/components/tree-view/tree-view.component.mjs +25 -6
- package/esm2022/lib/groups.component.mjs +26 -4
- package/esm2022/lib/models/feature-flag.model.mjs +6 -0
- package/esm2022/lib/models/permission-type.model.mjs +2 -2
- package/esm2022/lib/models/tenant-feature.model.mjs +2 -0
- package/esm2022/lib/services/group-permissions-map-service.mjs +10 -1
- package/esm2022/lib/services/groups.service.mjs +66 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ieeesa-npm-groups.mjs +130 -10
- package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
- package/lib/components/tree-view/tree-view.component.d.ts +11 -1
- package/lib/groups.component.d.ts +15 -1
- package/lib/models/feature-flag.model.d.ts +3 -0
- package/lib/models/permission-type.model.d.ts +1 -1
- package/lib/models/tenant-feature.model.d.ts +16 -0
- package/lib/services/groups.service.d.ts +45 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -141,7 +141,7 @@ export class InterestedRostersComponent {
|
|
|
141
141
|
this.totalRecords = 0;
|
|
142
142
|
this.paginatorConfig = { ...this.paginatorConfig, totalRecords: 0 };
|
|
143
143
|
this.isLoading = false;
|
|
144
|
-
this.groupsService.handleErrors(error);
|
|
144
|
+
this.groupsService.handleErrors(error, false);
|
|
145
145
|
this.cdr.detectChanges();
|
|
146
146
|
},
|
|
147
147
|
});
|
|
@@ -380,4 +380,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
380
380
|
type: Inject,
|
|
381
381
|
args: [MAT_DIALOG_DATA]
|
|
382
382
|
}] }]; } });
|
|
383
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJlc3RlZC1yb3N0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvaW50ZXJlc3RlZC1yb3N0ZXJzL2ludGVyZXN0ZWQtcm9zdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2ludGVyZXN0ZWQtcm9zdGVycy9pbnRlcmVzdGVkLXJvc3RlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxNQUFNLEVBR04sUUFBUSxFQUNSLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBYSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd2RixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUlkLGVBQWUsR0FDaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLFNBQVMsTUFBTSw2QkFBNkIsQ0FBQztBQVNwRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7OztBQVFoRzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQVNILE1BQU0sT0FBTywwQkFBMEI7SUE0Q3JDO0lBQ0UsMENBQTBDO0lBQ2xDLE1BQWlCO0lBQ3pCLDBDQUEwQztJQUNsQyxhQUE0QjtJQUNwQywwQ0FBMEM7SUFDbEMsR0FBc0I7SUFDOUIsMENBQTBDO0lBQ0UsS0FBdUI7UUFOM0QsV0FBTSxH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SSxDQUFDLGtCQUFrQjtnQkFDeEMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxzQkFBc0I7Z0JBQ3ZELDhEQUE4RDtnQkFDOUQsY0FBYyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDO29CQUMvRCxJQUFJO2FBQ1A7WUFDRDtnQkFDRSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxTQUFTLEVBQUUsTUFBTTtnQkFDakIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJO2dCQUN0QixVQUFVLEVBQUUsZUFBZSxDQUFDLElBQUk7Z0JBQ2hDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVM7Z0JBQ3JDLFNBQVMsRUFBRSxDQUFDLEdBQXFCLEVBQUUsRUFBRSxDQUNuQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUU7YUFDakU7U0FDRixDQUFDO0lBQ0osQ0FBQzsrR0F4V1UsMEJBQTBCLHlHQW9EZixlQUFlO21HQXBEMUIsMEJBQTBCLHFGQ3BFdkMseTJCQWtCQSxtekNENkNZLFlBQVksK0JBQUUsa0JBQWtCLDRpREFBa0IsZUFBZTs7NEZBS2hFLDBCQUEwQjtrQkFSdEMsU0FBUzsrQkFDRSwyQkFBMkIsY0FDekIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxlQUFlLENBQUMsaUJBRzdELGlCQUFpQixDQUFDLElBQUk7OzBCQXNEbEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSW5qZWN0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNb2RhbFR5cGUsIFNlbGVjdE9wdGlvbiB9IGZyb20gJ0BpZWVlc2EtbnBtL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgRGF0YVRhYmxlQ29tcG9uZW50LFxyXG4gIE1vZGFsQ29tcG9uZW50LFxyXG4gIFBhZ2luYXRvckNvbmZpZyxcclxuICBUYWJsZUFjdGlvbnMsXHJcbiAgVGFibGVDb2x1bW5TY2hlbWEsXHJcbiAgVGFibGVDb2x1bW5UeXBlLFxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEdyb3VwSW50ZXJlc3RSZXNwb25zZVZpZXcsXHJcbiAgSW50ZXJlc3RlZFJvc3RlcixcclxuICBJbnRlcmVzdGVkUm9zdGVyc1JlcXVlc3RQYXlsb2FkLFxyXG4gIFVwZGF0ZU1lbWJlckxldmVsUGF5bG9hZCxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvaW50ZXJlc3QtcmVzcG9uc2UubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ3JvdXBzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnRlcmVzdFJlc3BvbnNlc0NvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZXN0LXJlc3BvbnNlcy9pbnRlcmVzdC1yZXNwb25zZXMuY29tcG9uZW50JztcclxuXHJcbi8vIEdyb3VwcyBtYXkgY29tcGlsZSBhZ2FpbnN0IHB1Ymxpc2hlZCBQcmVzZW50YXRpb24gdHlwZXMgd2l0aG91dCB0aGUgcm93LWxhYmVsIGNhbGxiYWNrLlxyXG50eXBlIEludGVyZXN0ZWRSb3N0ZXJDb2x1bW5TY2hlbWEgPSBUYWJsZUNvbHVtblNjaGVtYSAmIHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBhcmlhTGFiZWw/OiAocm93OiBJbnRlcmVzdGVkUm9zdGVyKSA9PiBzdHJpbmc7XHJcbn07XHJcblxyXG4vKipcclxuICogXCJJbnRlcmVzdGVkIFJvc3RlcnNcIiB0YWIgb2YgdGhlIFJvc3RlciBJbnRlcmVzdHMgZGlhbG9nIChTUDNNLTQyOCkuIExpc3RzIHRoZVxyXG4gKiB1c2VycyB3aG8gZXhwcmVzc2VkIGludGVyZXN0IGluIHRoZSBncm91cCBhbmQgbGV0cyBhIEdyb3VwIEFkbWluIHJldmlldyBlYWNoXHJcbiAqIHJlcXVlc3RlcidzIHN1Ym1pdHRlZCByZXNwb25zZXMgYW5kIHNldC9vdmVycmlkZSB0aGVpciBtZW1iZXJzaGlwIGxldmVsIGZyb21cclxuICogdGhlIFJvc3RlciBNYW5hZ2VtZW50IHNjcmVlbi5cclxuICpcclxuICogVGhlIGxpc3QgaXMgcmVuZGVyZWQgdGhyb3VnaCB0aGUgc2hhcmVkIHtAbGluayBEYXRhVGFibGVDb21wb25lbnR9OiB0aGVcclxuICogTmFtZS9FbWFpbC9BZmZpbGlhdGlvbnMvU3VibWl0dGVkIE9uIGNvbHVtbnMgYXJlIHBsYWluIFRFWFQsIE1lbWJlciBMZXZlbCBpc1xyXG4gKiB0aGUgcmV1c2FibGUgdGFibGUncyBEUk9QRE9XTiBjb2x1bW4gKGFuIGlubGluZSB7QGNvZGUgaWVlZXNhLXNlbGVjdH0pIGFuZFxyXG4gKiBGb3JtIGlzIGEgTElOSyB0aGF0IG9wZW5zIHRoZSBcIlZpZXcgUmVzcG9uc2VzXCIgZGlhbG9nLiBUaGUgTWVtYmVyIExldmVsXHJcbiAqIG9wdGlvbnMgYXJlIHNvdXJjZWQgZnJvbSB0aGUgcm9sZXMgQVBJXHJcbiAqICh7QGxpbmsgR3JvdXBzU2VydmljZS5nZXRHcm91cFR5cGVSb2xlc30pIGZpbHRlcmVkIHRvIHRoZSBcIk1lbWJlciBMZXZlbFwiIHJvbGVcclxuICogdHlwZS4gSW50ZXJlc3RlZC1yb3N0ZXIgcm93cyBhcmUgbG9hZGVkIGZyb21cclxuICoge0BsaW5rIEdyb3Vwc1NlcnZpY2UuZ2V0SW50ZXJlc3RSZXNwb25zZXNCeUdyb3VwfSBhbmQgZWFjaCByZXF1ZXN0ZXIncyBzdG9yZWRcclxuICogZm9ybSByZXNwb25zZXMgYXJlIGxvYWRlZCBvbiBkZW1hbmQgZnJvbVxyXG4gKiB7QGxpbmsgR3JvdXBzU2VydmljZS5nZXRJbnRlcmVzdFJlc3BvbnNlc30gdXNpbmcgdGhlIHJvdydzIGBpbnRlcmVzdElkYC4gQWxsXHJcbiAqIGRpc3BsYXkgdGV4dCBpcyBzb3VyY2VkIGZyb20gY29uc3RhbnRzLmpzb24uXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEludGVyZXN0ZWRSb3N0ZXJzQ29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2llZWVzYS1pbnRlcmVzdGVkLXJvc3RlcnMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRGF0YVRhYmxlQ29tcG9uZW50LCBNb2RhbENvbXBvbmVudCwgTWF0RGlhbG9nTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW50ZXJlc3RlZC1yb3N0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnRlcmVzdGVkLXJvc3RlcnMuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW50ZXJlc3RlZFJvc3RlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICB0ZXh0cyA9IHRoaXMuY29uc3RhbnRzPy5yb3N0ZXJJbnRlcmVzdHM/LmludGVyZXN0ZWRSb3N0ZXJzO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWVtYmVyLWxldmVsIGRyb3Bkb3duIG9wdGlvbnMsIHNvdXJjZWQgZnJvbSB0aGUgcm9sZXMgQVBJXHJcbiAgKiAoe0Bjb2RlIEdFVCAvZ3JvdXBzL2NvbmZpZy9yb2xlc0J5R3JvdXBUeXBlL3tncm91cFR5cGV9fSkgZmlsdGVyZWQgdG8gdGhlIFwiTWVtYmVyIExldmVsXCIgcm9sZSB0eXBlLlxyXG4gICAqIEVhY2ggb3B0aW9uIGlzIHtAY29kZSB7IGlkOiByb2xlSWQsIG5hbWU6IHJvbGVOYW1lIH19LlxyXG4gICAqL1xyXG4gIG1lbWJlckxldmVsT3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuXHJcbiAgcm9zdGVyczogSW50ZXJlc3RlZFJvc3RlcltdID0gW107XHJcbiAgdGFibGVEYXRhOiBJbnRlcmVzdGVkUm9zdGVyW10gPSBbXTtcclxuICBjb2x1bW5TY2hlbWE6IEludGVyZXN0ZWRSb3N0ZXJDb2x1bW5TY2hlbWFbXSA9IFtdO1xyXG5cclxuICAvKiogVG90YWwgaW50ZXJlc3RlZC1yb3N0ZXIgcm93cyByZXBvcnRlZCBieSB0aGUgYmFja2VuZCAoZm9yIHBhZ2luZy9jb3VudHMpLiAqL1xyXG4gIHRvdGFsUmVjb3JkcyA9IDA7XHJcblxyXG4gIHBhZ2luYXRvckNvbmZpZzogUGFnaW5hdG9yQ29uZmlnID0ge1xyXG4gICAgcmVjb3Jkc1BlclBhZ2U6IHRoaXMudGV4dHM/LnBhZ2VTaXplT3B0aW9ucz8uWzBdLFxyXG4gICAgcGFnZVNpemVPcHRpb25zOiB0aGlzLnRleHRzPy5wYWdlU2l6ZU9wdGlvbnMsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgfTtcclxuICBwYWdlSW5kZXggPSAwO1xyXG4gIGRlZmF1bHRTb3J0ZWRDb2x1bW4gPSAnc3VibWl0dGVkT24nO1xyXG4gIGRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uOiBTb3J0WydkaXJlY3Rpb24nXSA9ICdkZXNjJztcclxuICBwcml2YXRlIHNvcnRlZEJ5ID0gdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uO1xyXG4gIHByaXZhdGUgc29ydGVkT3JkZXJCeSA9IHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb247XHJcblxyXG4gIC8qKiBSZWFkLW9ubHkgdGFibGUg4oCUIG5vIHNlYXJjaCAvIGZpbHRlciAvIGFkZCAvIGVkaXQgLyBkZWxldGUgYWN0aW9ucy4gKi9cclxuICB0YWJsZUFjdGlvbnM6IFRhYmxlQWN0aW9ucyA9IHtcclxuICAgIGlzUGFnaW5hdGlvbk5lZWRlZDogdHJ1ZSxcclxuICAgIGlzU2VhcmNoTmVlZGVkOiBmYWxzZSxcclxuICAgIGlzRmlsdGVyTmVlZGVkOiBmYWxzZSxcclxuICAgIGlzQWRkTmVlZGVkOiBmYWxzZSxcclxuICAgIGlzRWRpdE5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0RlbGV0ZU5lZWRlZDogZmFsc2UsXHJcbiAgfTtcclxuXHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdyb3Vwc1NlcnZpY2U6IEdyb3Vwc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBncm91cDogR3JvdXBJbmZvIHwgbnVsbFxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGRzIHRoZSByZXVzYWJsZS10YWJsZSBjb2x1bW4gc2NoZW1hIGFuZCBsb2FkcyB0aGUgaW50ZXJlc3RlZC1yb3N0ZXJcclxuICAgKiBsaXN0IGZvciB0aGUgY3VycmVudCBncm91cCBmcm9tIHRoZSBiYWNrZW5kLlxyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkTWVtYmVyTGV2ZWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLmJ1aWxkQ29sdW1uU2NoZW1hKCk7XHJcbiAgICB0aGlzLmxvYWRJbnRlcmVzdGVkUm9zdGVycygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYW5zIHVwIGluLWZsaWdodCBzdWJzY3JpcHRpb25zIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIEludGVyZXN0ZWRSb3N0ZXJzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlcyB0aGUgY3VycmVudCBncm91cCBpZCBmcm9tIHRoZSBkaWFsb2cgZGF0YSAoZmFsbGluZyBiYWNrIHRvIHRoZVxyXG4gICAqIHNlcnZpY2UncyBzZWxlY3RlZCBncm91cCkgYW5kIGxvYWRzIHRoZSBpbnRlcmVzdGVkLXJvc3RlciByb3dzIGZvciBpdC4gTWFwc1xyXG4gICAqIGVhY2ggYmFja2VuZCB7QGxpbmsgR3JvdXBJbnRlcmVzdFJlc3BvbnNlVmlld30gb250byB0aGUgZmxhdHRlbmVkXHJcbiAgICoge0BsaW5rIEludGVyZXN0ZWRSb3N0ZXJ9IHNoYXBlIHRoZSByZXVzYWJsZSB0YWJsZSBiaW5kcyB0by4gT24gZmFpbHVyZSB0aGVcclxuICAgKiB0YWJsZSBpcyBjbGVhcmVkIGFuZCB0aGUgZXJyb3IgaXMgZGVsZWdhdGVkIHRvIEdyb3Vwc1NlcnZpY2UgZm9yIGFsZXJ0aW5nLlxyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbG9hZEludGVyZXN0ZWRSb3N0ZXJzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZ3JvdXBJZCA9XHJcbiAgICAgIHRoaXMuZ3JvdXA/Lmdyb3VwSWQgPz9cclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwSWQ7XHJcbiAgICBpZiAoIWdyb3VwSWQpIHJldHVybjtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IEludGVyZXN0ZWRSb3N0ZXJzUmVxdWVzdFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICBzZWFyY2hCeU5hbWVPckVtYWlsOiAnJyxcclxuICAgICAgICBvZmZzZXQ6IHRoaXMucGFnZUluZGV4ICogdGhpcy5wYWdpbmF0b3JDb25maWcucmVjb3Jkc1BlclBhZ2UsXHJcbiAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yQ29uZmlnLnJlY29yZHNQZXJQYWdlLFxyXG4gICAgICAgIHNvcnRlZEJ5OiB0aGlzLnNvcnRlZEJ5LFxyXG4gICAgICAgIHNvcnRlZE9yZGVyQnk6IHRoaXMuc29ydGVkT3JkZXJCeSxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmdyb3Vwc1NlcnZpY2VcclxuICAgICAgLmdldEludGVyZXN0UmVzcG9uc2VzQnlHcm91cChncm91cElkLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXNwb25zZT8udG90YWxSZWNvcmRzID8/IDA7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvckNvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5wYWdpbmF0b3JDb25maWcsXHJcbiAgICAgICAgICAgIHRvdGFsUmVjb3JkczogdGhpcy50b3RhbFJlY29yZHMsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5yb3N0ZXJzID0gKHJlc3BvbnNlPy5kYXRhID8/IFtdKS5tYXAoKHZpZXcpID0+XHJcbiAgICAgICAgICAgIHRoaXMubWFwVG9Sb3N0ZXIodmlldylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMucm9zdGVycztcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJvc3RlcnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IDA7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvckNvbmZpZyA9IHsgLi4udGhpcy5wYWdpbmF0b3JDb25maWcsIHRvdGFsUmVjb3JkczogMCB9O1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25QYWdpbmF0aW9uQ2hhbmdlKGV2ZW50OiBQYWdlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQucGFnZUluZGV4O1xyXG4gICAgdGhpcy5wYWdpbmF0b3JDb25maWcgPSB7XHJcbiAgICAgIC4uLnRoaXMucGFnaW5hdG9yQ29uZmlnLFxyXG4gICAgICByZWNvcmRzUGVyUGFnZTogZXZlbnQucGFnZVNpemUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5sb2FkSW50ZXJlc3RlZFJvc3RlcnMoKTtcclxuICB9XHJcblxyXG4gIG9uU29ydENoYW5nZShldmVudDogU29ydCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0ZWRCeSA9IGV2ZW50LmRpcmVjdGlvbiA/IGV2ZW50LmFjdGl2ZSA6IHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbjtcclxuICAgIHRoaXMuc29ydGVkT3JkZXJCeSA9IGV2ZW50LmRpcmVjdGlvbiB8fCB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uO1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xyXG4gICAgdGhpcy5sb2FkSW50ZXJlc3RlZFJvc3RlcnMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcHMgYSBiYWNrZW5kIHtAbGluayBHcm91cEludGVyZXN0UmVzcG9uc2VWaWV3fSB0byB0aGUgZmxhdHRlbmVkXHJcbiAgICoge0BsaW5rIEludGVyZXN0ZWRSb3N0ZXJ9IHJvdyB0aGUgdGFibGUgcmVuZGVyczogYWZmaWxpYXRpb24gb3JnIG5hbWVzIGFyZVxyXG4gICAqIGpvaW5lZCBpbnRvIHRoZSBhZmZpbGlhdGlvbnMgbGlzdCwgdGhlIGFzc2lnbmVkIG1lbWJlcnNoaXAgbGV2ZWwgKGlmIGFueSlcclxuICAgKiBiZWNvbWVzIHRoZSByb2xlIG5hbWUg4oCUIHdoaWNoIHRoZSBNZW1iZXIgTGV2ZWwgZHJvcGRvd24gYmluZHMgYXMgaXRzXHJcbiAgICogcHJlLXNlbGVjdGVkIHZhbHVlIOKAlCB0aGUgc3VibWl0dGVkIHRpbWVzdGFtcCBpcyBmb3JtYXR0ZWQgZm9yIGRpc3BsYXksIGFuZFxyXG4gICAqIHRoZSBpbnRlcmVzdCBpZCBpcyBjYXJyaWVkIHRocm91Z2ggZm9yIHRoZSByZXNwb25zZXMgZGlhbG9nIGFuZCB0aGUgbGV2ZWxcclxuICAgKiBvdmVycmlkZS5cclxuICAgKiBAcGFyYW0ge0dyb3VwSW50ZXJlc3RSZXNwb25zZVZpZXd9IHZpZXdcclxuICAgKiBAcmV0dXJuIHtJbnRlcmVzdGVkUm9zdGVyfVxyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgbWFwVG9Sb3N0ZXIodmlldzogR3JvdXBJbnRlcmVzdFJlc3BvbnNlVmlldyk6IEludGVyZXN0ZWRSb3N0ZXIge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaW50ZXJlc3RJZDogdmlldz8uaW50ZXJlc3RJZCxcclxuICAgICAgdXNlcklkOiB2aWV3Py51c2VySWQsXHJcbiAgICAgIG5hbWU6IHZpZXc/Lm5hbWUsXHJcbiAgICAgIGVtYWlsOiB2aWV3Py5lbWFpbCxcclxuICAgICAgYWZmaWxpYXRpb25zOiAodmlldz8uYWZmaWxpYXRpb24gPz8gW10pLm1hcCgob3JnKSA9PiBvcmc/Lm9yZ05hbWUpLFxyXG4gICAgICBzdWJtaXR0ZWRPbjogdGhpcy5mb3JtYXRTdWJtaXR0ZWRPbih2aWV3Py5zdWJtaXR0ZWRPbiksXHJcbiAgICAgIG1lbWJlckxldmVsOiB2aWV3Py5tZW1iZXJMZXZlbD8ubGVuZ3RoXHJcbiAgICAgICAgPyB2aWV3Lm1lbWJlckxldmVsWzBdPy5yb2xlTmFtZSA/PyBudWxsXHJcbiAgICAgICAgOiBudWxsLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1hdHMgdGhlIGJhY2tlbmQgc3VibWl0dGVkIHRpbWVzdGFtcCAoSVNPIGRhdGUgc3RyaW5nKSBmb3IgZGlzcGxheSxcclxuICAgKiBmYWxsaW5nIGJhY2sgdG8gdGhlIHJhdyB2YWx1ZSB3aGVuIGl0IGlzIG5vdCBhIHBhcnNlYWJsZSBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJtaXR0ZWRPblxyXG4gICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgKiBAbWVtYmVyb2YgSW50ZXJlc3RlZFJvc3RlcnNDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIGZvcm1hdFN1Ym1pdHRlZE9uKHN1Ym1pdHRlZE9uOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFzdWJtaXR0ZWRPbikgcmV0dXJuICcnO1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHN1Ym1pdHRlZE9uKTtcclxuICAgIHJldHVybiBpc05hTihkYXRlLmdldFRpbWUoKSlcclxuICAgICAgPyBzdWJtaXR0ZWRPblxyXG4gICAgICA6IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZHMgdGhlIE1lbWJlciBMZXZlbCBkcm9wZG93biBvcHRpb25zIGZyb20gdGhlIHJvbGVzIEFQSVxyXG4gICogKHtAY29kZSBHRVQgL2dyb3Vwcy9jb25maWcvcm9sZXNCeUdyb3VwVHlwZS97Z3JvdXBUeXBlfX0pLCBrZWVwaW5nIG9ubHkgcm9sZXMgd2hvc2VcclxuICAgKiB7QGNvZGUgcm9sZVR5cGVOYW1lfSBpcyBcIk1lbWJlciBMZXZlbFwiIGFuZCBtYXBwaW5nIGVhY2ggdG8gYVxyXG4gICAqIHtAbGluayBTZWxlY3RPcHRpb259ICh7QGNvZGUgeyBpZDogcm9sZUlkLCBuYW1lOiByb2xlTmFtZSB9fSkuXHJcbiAgICogQG1lbWJlcm9mIEludGVyZXN0ZWRSb3N0ZXJzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2FkTWVtYmVyTGV2ZWxPcHRpb25zKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZ3JvdXBUeXBlID1cclxuICAgICAgdGhpcy5ncm91cD8uZ3JvdXBUeXBlID8/XHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cFR5cGU7XHJcbiAgICBpZiAoIWdyb3VwVHlwZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5ncm91cHNTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFR5cGVSb2xlcyhncm91cFR5cGUpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tZW1iZXJMZXZlbE9wdGlvbnMgPSAodGhpcy5ncm91cHNTZXJ2aWNlLmdldE1lbWJlclR5cGVzKCkgPz8gW10pXHJcbiAgICAgICAgICAgIC5tYXAoKHJvbGUpID0+ICh7IGlkOiByb2xlLnJvbGVJZCwgbmFtZTogcm9sZS5yb2xlTmFtZSB9KSk7XHJcbiAgICAgICAgICB0aGlzLmJ1aWxkQ29sdW1uU2NoZW1hKCk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcnNpc3RzIHRoZSBtZW1iZXJzaGlwLWxldmVsIG92ZXJyaWRlIHdoZW4gdGhlIGFkbWluIHBpY2tzIGEgdmFsdWUgaW4gYVxyXG4gICAqIHJvdydzIE1lbWJlciBMZXZlbCBkcm9wZG93biAoYm91bmQgdG8gdGhlIHJldXNhYmxlIHRhYmxlJ3NcclxuICAgKiBgcm93RHJvcGRvd25DaGFuZ2VgIG91dHB1dCkuIEJ1aWxkcyB0aGUgcmVxdWVzdCBmcm9tIHRoZSBkaWFsb2cncyBjdXJyZW50XHJcbiAgICogZ3JvdXAgaWQsIHRoZSByb3cncyB1c2VyIGlkIGFuZCB0aGUgc2VsZWN0ZWQgb3B0aW9uJ3MgaWQgKHRoZSByb2xlIGlkKSwgYW5kXHJcbiAgICogcG9zdHMgaXQgdG8gdGhlIGJhY2tlbmQuIFRoZSByb3cncyBkaXNwbGF5ZWQgbGV2ZWwgaXMgdXBkYXRlZCBvcHRpbWlzdGljYWxseVxyXG4gICAqIGFuZCByZXZlcnRlZCBpZiB0aGUgc2F2ZSBmYWlscy5cclxuICAgKiBAcGFyYW0ge3sgcm93OiBJbnRlcmVzdGVkUm9zdGVyOyBvcHRpb246IFNlbGVjdE9wdGlvbiB9fSBldmVudFxyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uTWVtYmVyTGV2ZWxDaGFuZ2UoZXZlbnQ6IHtcclxuICAgIHJvdzogSW50ZXJlc3RlZFJvc3RlcjtcclxuICAgIG9wdGlvbjogU2VsZWN0T3B0aW9uO1xyXG4gIH0pOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvdyA9IGV2ZW50Py5yb3c7XHJcbiAgICBjb25zdCBvcHRpb24gPSBldmVudD8ub3B0aW9uO1xyXG4gICAgY29uc3QgZ3JvdXBJZCA9XHJcbiAgICAgIHRoaXMuZ3JvdXA/Lmdyb3VwSWQgPz9cclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwSWQ7XHJcbiAgICBjb25zdCByb2xlSWQgPSBvcHRpb24/LmlkIGFzIHN0cmluZztcclxuICAgIGlmICghcm93Py51c2VySWQgfHwgIWdyb3VwSWQgfHwgIXJvbGVJZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHByZXZpb3VzTGV2ZWwgPSByb3cubWVtYmVyTGV2ZWw7XHJcbiAgICAvLyBPcHRpbWlzdGljYWxseSByZWZsZWN0IHRoZSBzZWxlY3Rpb24gaW4gdGhlIHJvdy5cclxuICAgIHJvdy5tZW1iZXJMZXZlbCA9IG9wdGlvbj8ubmFtZSA/PyByb3cubWVtYmVyTGV2ZWw7XHJcblxyXG4gICAgY29uc3QgcGF5bG9hZDogVXBkYXRlTWVtYmVyTGV2ZWxQYXlsb2FkID0ge1xyXG4gICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgZ3JvdXBJZCxcclxuICAgICAgICB1c2VySWQ6IHJvdy51c2VySWQsXHJcbiAgICAgICAgcm9sZUlkLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JvdXBzU2VydmljZVxyXG4gICAgICAudXBkYXRlSW50ZXJlc3RNZW1iZXJMZXZlbChwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIC8vIFJldmVydCB0aGUgb3B0aW1pc3RpYyBjaGFuZ2Ugb24gZmFpbHVyZSBhbmQgc3VyZmFjZSB0aGUgZXJyb3IuXHJcbiAgICAgICAgICByb3cubWVtYmVyTGV2ZWwgPSBwcmV2aW91c0xldmVsO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVucyB0aGUgXCJWaWV3IFJlc3BvbnNlc1wiIGRpYWxvZyBmb3IgYSByb3N0ZXIgcm93IChib3VuZCB0byB0aGUgcmV1c2FibGVcclxuICAgKiB0YWJsZSdzIExJTksgb3V0cHV0KSB1c2luZyB0aGUgc2hhcmVkIHtAbGluayBNb2RhbENvbXBvbmVudH0uIFRoZSBtb2RhbFxyXG4gICAqIHN1cHBsaWVzIHRoZSB0aXRsZSByb3cgYW5kIFggY2xvc2U7IHRoZSByZXF1ZXN0ZXIncyBzdG9yZWQgaW50ZXJlc3QtZm9ybVxyXG4gICAqIHJlc3BvbnNlcyBhcmUgcmVuZGVyZWQgYnkge0BsaW5rIEludGVyZXN0UmVzcG9uc2VzQ29tcG9uZW50fSwgd2hpY2ggbG9hZHNcclxuICAgKiB0aGVtIGZyb20gdGhlIGJhY2tlbmQgdXNpbmcgdGhlIHJvdydzIHtAY29kZSBpbnRlcmVzdElkfSBwYXNzZWQgdmlhIHRoZVxyXG4gICAqIE1vZGFsQ29tcG9uZW50IGR5bmFtaWMtaW5wdXQgcGF0dGVybi5cclxuICAgKiBAcGFyYW0ge0ludGVyZXN0ZWRSb3N0ZXJ9IHJvd1xyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRm9ybUxpbmtDbGljayhyb3c6IEludGVyZXN0ZWRSb3N0ZXIpOiB2b2lkIHtcclxuICAgIGlmICghcm93Py5pbnRlcmVzdElkKSByZXR1cm47XHJcbiAgICBjb25zdCBkaWFsb2dPcHRpb25zID0ge1xyXG4gICAgICBoZWFkaW5nOiB0aGlzLnRleHRzPy5yZXNwb25zZXM/LnRpdGxlLFxyXG4gICAgICBzdWJIZWFkaW5nOiB0aGlzLmdyb3VwPy5ncm91cE5hbWUsXHJcbiAgICAgIGhlYWRpbmdDbGFzczogJ2llZWVzYS10aXRsZS1sZy0yNCcsXHJcbiAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgIGNvbXBvbmVudFJlZmVyZW5jZTogSW50ZXJlc3RSZXNwb25zZXNDb21wb25lbnQsXHJcbiAgICAgIG1vZGFsVHlwZTogTW9kYWxUeXBlLkZPUk0sXHJcbiAgICAgIGRhdGEyRHluYW1pY0NvbXBvbmVudDogeyBpbnRlcmVzdElkOiByb3cuaW50ZXJlc3RJZCB9LFxyXG4gICAgICBkYXRhSW5wdXROYW1lOiAnY29tcG9uZW50RGF0YScsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiBkaWFsb2dPcHRpb25zLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2llZWVzYS1tb2RhbC1kaWFsb2cnLCAnaWVlZXNhLWludGVyZXN0LXJlc3BvbnNlcy1kaWFsb2cnXSxcclxuICAgICAgd2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIG1heFdpZHRoOiAnOTV2dycsXHJcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLFxyXG4gICAgICBhcmlhTW9kYWw6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgdGhlIHJldXNhYmxlLXRhYmxlIGNvbHVtbnMgZm9yIHRoZSBJbnRlcmVzdGVkIFJvc3RlcnMgbGlzdC4gRXZlcnlcclxuICAgKiBgY2VsbERhdGFgL2BzZWxlY3RlZE9wdGlvbmAgaXMgYSBgKHJvdykgPT4gLi4uYCBhY2Nlc3NvciwgbWF0Y2hpbmcgdGhlXHJcbiAgICogc2hhcmVkIHRhYmxlJ3MgY29udHJhY3QuIE1lbWJlciBMZXZlbCBpcyB0aGUgRFJPUERPV04gY29sdW1uIHNlZWRlZCB3aXRoIHRoZVxyXG4gICAqIGNvbmZpZ3VyZWQgbGV2ZWxzIHBsdXMgXCJOb25lXCI7IEZvcm0gaXMgYSBMSU5LIHRoYXQgb3BlbnMgdGhlIHJlc3BvbnNlc1xyXG4gICAqIGRpYWxvZy5cclxuICAgKiBAbWVtYmVyb2YgSW50ZXJlc3RlZFJvc3RlcnNDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkQ29sdW1uU2NoZW1hKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMudGV4dHM/LmNvbHVtbnM7XHJcbiAgICB0aGlzLmNvbHVtblNjaGVtYSA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAxLFxyXG4gICAgICAgIGNvbHVtbkRlZjogJ25hbWUnLFxyXG4gICAgICAgIGhlYWRpbmc6IGNvbHVtbnM/Lm5hbWUsXHJcbiAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNlbGxEYXRhOiAocm93OiBhbnkpID0+IHJvdy5uYW1lLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IDIsXHJcbiAgICAgICAgY29sdW1uRGVmOiAnZW1haWwnLFxyXG4gICAgICAgIGhlYWRpbmc6IGNvbHVtbnM/LmVtYWlsLFxyXG4gICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBjZWxsRGF0YTogKHJvdzogYW55KSA9PiByb3cuZW1haWwsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogMyxcclxuICAgICAgICBjb2x1bW5EZWY6ICdhZmZpbGlhdGlvbnMnLFxyXG4gICAgICAgIGhlYWRpbmc6IGNvbHVtbnM/LmFmZmlsaWF0aW9ucyxcclxuICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNlbGxEYXRhOiAocm93OiBhbnkpID0+IChyb3cuYWZmaWxpYXRpb25zIHx8IFtdKS5qb2luKCcsICcpLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IDQsXHJcbiAgICAgICAgY29sdW1uRGVmOiAnc3VibWl0dGVkT24nLFxyXG4gICAgICAgIGhlYWRpbmc6IGNvbHVtbnM/LnN1Ym1pdHRlZE9uLFxyXG4gICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgIGlzU29ydGFibGVDb2x1bW46IHRydWUsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBjZWxsRGF0YTogKHJvdzogYW55KSA9PiByb3cuc3VibWl0dGVkT24sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogNSxcclxuICAgICAgICBjb2x1bW5EZWY6ICdtZW1iZXJMZXZlbCcsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8ubWVtYmVyTGV2ZWwsXHJcbiAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLkRST1BET1dOLFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgY2VsbERhdGE6IChyb3c6IGFueSkgPT4gcm93Lm1lbWJlckxldmVsLFxyXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uczogdGhpcy5tZW1iZXJMZXZlbE9wdGlvbnMsXHJcbiAgICAgICAgZHJvcGRvd25QbGFjZWhvbGRlcjogdGhpcy50ZXh0cz8ubWVtYmVyTGV2ZWxQbGFjZWhvbGRlcixcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uOiAocm93OiBhbnkpID0+XHJcbiAgICAgICAgICB0aGlzLm1lbWJlckxldmVsT3B0aW9ucy5maW5kKChvKSA9PiBvLm5hbWUgPT09IHJvdy5tZW1iZXJMZXZlbCkgPz9cclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogNixcclxuICAgICAgICBjb2x1bW5EZWY6ICdmb3JtJyxcclxuICAgICAgICBoZWFkaW5nOiBjb2x1bW5zPy5mb3JtLFxyXG4gICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5MSU5LLFxyXG4gICAgICAgIGNlbGxEYXRhOiAoKSA9PiB0aGlzLnRleHRzPy52aWV3TGFiZWwsXHJcbiAgICAgICAgYXJpYUxhYmVsOiAocm93OiBJbnRlcmVzdGVkUm9zdGVyKSA9PlxyXG4gICAgICAgICAgYCR7dGhpcy50ZXh0cz8udmlld0FyaWFMYWJlbFByZWZpeH0gJHtyb3c/Lm5hbWUgPz8gJyd9YC50cmltKCksXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cImllZWVzYS1pbnRlcmVzdGVkLXJvc3RlcnNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInRleHRzPy5yZWdpb25BcmlhTGFiZWxcIj5cclxuICA8cCBjbGFzcz1cImllZWVzYS1pbnRlcmVzdGVkLXJvc3RlcnNfX2NvdW50XCI+e3sgdG90YWxSZWNvcmRzIH19IHt7IHRleHRzPy5jb3VudFN1ZmZpeCB9fTwvcD5cclxuICA8aWVlZXNhLWRhdGEtdGFibGVcclxuICAgIFt0YWJsZURhdGFJbmZvXT1cInRhYmxlRGF0YVwiXHJcbiAgICBbY29sdW1uU2NoZW1hSW5mb109XCJjb2x1bW5TY2hlbWFcIlxyXG4gICAgW3RhYmxlQWN0aW9uc109XCJ0YWJsZUFjdGlvbnNcIlxyXG4gICAgW3BhZ2luYXRvckNvbmZpZ109XCJwYWdpbmF0b3JDb25maWdcIlxyXG4gICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxyXG4gICAgW3BhZ2VTaXplXT1cInBhZ2luYXRvckNvbmZpZy5yZWNvcmRzUGVyUGFnZVwiXHJcbiAgICBbZGVmYXVsdFNvcnRlZENvbHVtbl09XCJkZWZhdWx0U29ydGVkQ29sdW1uXCJcclxuICAgIFtkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbl09XCJkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvblwiXHJcbiAgICBbaXNDbGVhclNvcnROZWVkZWRdPVwiZmFsc2VcIlxyXG4gICAgKHBhZ2luYXRpb25DaGFuZ2UpPVwib25QYWdpbmF0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgKHNvcnRDaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgKHJvd0xpbmspPVwib25Gb3JtTGlua0NsaWNrKCRldmVudClcIlxyXG4gICAgKHJvd0Ryb3Bkb3duQ2hhbmdlKT1cIm9uTWVtYmVyTGV2ZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgPjwvaWVlZXNhLWRhdGEtdGFibGU+XHJcbjwvc2VjdGlvbj5cclxuIl19
|
|
383
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJlc3RlZC1yb3N0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvaW50ZXJlc3RlZC1yb3N0ZXJzL2ludGVyZXN0ZWQtcm9zdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2ludGVyZXN0ZWQtcm9zdGVycy9pbnRlcmVzdGVkLXJvc3RlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxNQUFNLEVBR04sUUFBUSxFQUNSLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBYSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd2RixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLG9CQUFvQixDQUFDO0FBQzdELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUlkLGVBQWUsR0FDaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLFNBQVMsTUFBTSw2QkFBNkIsQ0FBQztBQVNwRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7OztBQVFoRzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQVNILE1BQU0sT0FBTywwQkFBMEI7SUE0Q3JDO0lBQ0UsMENBQTBDO0lBQ2xDLE1BQWlCO0lBQ3pCLDBDQUEwQztJQUNsQyxhQUE0QjtJQUNwQywwQ0FBMEM7SUFDbEMsR0FBc0I7SUFDOUIsMENBQTBDO0lBQ0UsS0FBdUI7UUFOM0QsV0FBTSxH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ZSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7Z0JBQ3hDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsc0JBQXNCO2dCQUN2RCw4REFBOEQ7Z0JBQzlELGNBQWMsRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQztvQkFDL0QsSUFBSTthQUNQO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsU0FBUyxFQUFFLE1BQU07Z0JBQ2pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSTtnQkFDdEIsVUFBVSxFQUFFLGVBQWUsQ0FBQyxJQUFJO2dCQUNoQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTO2dCQUNyQyxTQUFTLEVBQUUsQ0FBQyxHQUFxQixFQUFFLEVBQUUsQ0FDbkMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLG1CQUFtQixJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFO2FBQ2pFO1NBQ0YsQ0FBQztJQUNKLENBQUM7K0dBeFdVLDBCQUEwQix5R0FvRGYsZUFBZTttR0FwRDFCLDBCQUEwQixxRkNwRXZDLHkyQkFrQkEsbXpDRDZDWSxZQUFZLCtCQUFFLGtCQUFrQiw0aURBQWtCLGVBQWU7OzRGQUtoRSwwQkFBMEI7a0JBUnRDLFNBQVM7K0JBQ0UsMkJBQTJCLGNBQ3pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLGlCQUc3RCxpQkFBaUIsQ0FBQyxJQUFJOzswQkFzRGxDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEluamVjdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTW9kYWxUeXBlLCBTZWxlY3RPcHRpb24gfSBmcm9tICdAaWVlZXNhLW5wbS9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIERhdGFUYWJsZUNvbXBvbmVudCxcclxuICBNb2RhbENvbXBvbmVudCxcclxuICBQYWdpbmF0b3JDb25maWcsXHJcbiAgVGFibGVBY3Rpb25zLFxyXG4gIFRhYmxlQ29sdW1uU2NoZW1hLFxyXG4gIFRhYmxlQ29sdW1uVHlwZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgY29uc3RhbnRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IEdyb3VwSW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBHcm91cEludGVyZXN0UmVzcG9uc2VWaWV3LFxyXG4gIEludGVyZXN0ZWRSb3N0ZXIsXHJcbiAgSW50ZXJlc3RlZFJvc3RlcnNSZXF1ZXN0UGF5bG9hZCxcclxuICBVcGRhdGVNZW1iZXJMZXZlbFBheWxvYWQsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL2ludGVyZXN0LXJlc3BvbnNlLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSW50ZXJlc3RSZXNwb25zZXNDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmVzdC1yZXNwb25zZXMvaW50ZXJlc3QtcmVzcG9uc2VzLmNvbXBvbmVudCc7XHJcblxyXG4vLyBHcm91cHMgbWF5IGNvbXBpbGUgYWdhaW5zdCBwdWJsaXNoZWQgUHJlc2VudGF0aW9uIHR5cGVzIHdpdGhvdXQgdGhlIHJvdy1sYWJlbCBjYWxsYmFjay5cclxudHlwZSBJbnRlcmVzdGVkUm9zdGVyQ29sdW1uU2NoZW1hID0gVGFibGVDb2x1bW5TY2hlbWEgJiB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgYXJpYUxhYmVsPzogKHJvdzogSW50ZXJlc3RlZFJvc3RlcikgPT4gc3RyaW5nO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFwiSW50ZXJlc3RlZCBSb3N0ZXJzXCIgdGFiIG9mIHRoZSBSb3N0ZXIgSW50ZXJlc3RzIGRpYWxvZyAoU1AzTS00MjgpLiBMaXN0cyB0aGVcclxuICogdXNlcnMgd2hvIGV4cHJlc3NlZCBpbnRlcmVzdCBpbiB0aGUgZ3JvdXAgYW5kIGxldHMgYSBHcm91cCBBZG1pbiByZXZpZXcgZWFjaFxyXG4gKiByZXF1ZXN0ZXIncyBzdWJtaXR0ZWQgcmVzcG9uc2VzIGFuZCBzZXQvb3ZlcnJpZGUgdGhlaXIgbWVtYmVyc2hpcCBsZXZlbCBmcm9tXHJcbiAqIHRoZSBSb3N0ZXIgTWFuYWdlbWVudCBzY3JlZW4uXHJcbiAqXHJcbiAqIFRoZSBsaXN0IGlzIHJlbmRlcmVkIHRocm91Z2ggdGhlIHNoYXJlZCB7QGxpbmsgRGF0YVRhYmxlQ29tcG9uZW50fTogdGhlXHJcbiAqIE5hbWUvRW1haWwvQWZmaWxpYXRpb25zL1N1Ym1pdHRlZCBPbiBjb2x1bW5zIGFyZSBwbGFpbiBURVhULCBNZW1iZXIgTGV2ZWwgaXNcclxuICogdGhlIHJldXNhYmxlIHRhYmxlJ3MgRFJPUERPV04gY29sdW1uIChhbiBpbmxpbmUge0Bjb2RlIGllZWVzYS1zZWxlY3R9KSBhbmRcclxuICogRm9ybSBpcyBhIExJTksgdGhhdCBvcGVucyB0aGUgXCJWaWV3IFJlc3BvbnNlc1wiIGRpYWxvZy4gVGhlIE1lbWJlciBMZXZlbFxyXG4gKiBvcHRpb25zIGFyZSBzb3VyY2VkIGZyb20gdGhlIHJvbGVzIEFQSVxyXG4gKiAoe0BsaW5rIEdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBUeXBlUm9sZXN9KSBmaWx0ZXJlZCB0byB0aGUgXCJNZW1iZXIgTGV2ZWxcIiByb2xlXHJcbiAqIHR5cGUuIEludGVyZXN0ZWQtcm9zdGVyIHJvd3MgYXJlIGxvYWRlZCBmcm9tXHJcbiAqIHtAbGluayBHcm91cHNTZXJ2aWNlLmdldEludGVyZXN0UmVzcG9uc2VzQnlHcm91cH0gYW5kIGVhY2ggcmVxdWVzdGVyJ3Mgc3RvcmVkXHJcbiAqIGZvcm0gcmVzcG9uc2VzIGFyZSBsb2FkZWQgb24gZGVtYW5kIGZyb21cclxuICoge0BsaW5rIEdyb3Vwc1NlcnZpY2UuZ2V0SW50ZXJlc3RSZXNwb25zZXN9IHVzaW5nIHRoZSByb3cncyBgaW50ZXJlc3RJZGAuIEFsbFxyXG4gKiBkaXNwbGF5IHRleHQgaXMgc291cmNlZCBmcm9tIGNvbnN0YW50cy5qc29uLlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtaW50ZXJlc3RlZC1yb3N0ZXJzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIERhdGFUYWJsZUNvbXBvbmVudCwgTW9kYWxDb21wb25lbnQsIE1hdERpYWxvZ01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ludGVyZXN0ZWQtcm9zdGVycy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW50ZXJlc3RlZC1yb3N0ZXJzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEludGVyZXN0ZWRSb3N0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29uc3RhbnRzOiBhbnkgPSBjb25zdGFudHM7XHJcbiAgdGV4dHMgPSB0aGlzLmNvbnN0YW50cz8ucm9zdGVySW50ZXJlc3RzPy5pbnRlcmVzdGVkUm9zdGVycztcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1lbWJlci1sZXZlbCBkcm9wZG93biBvcHRpb25zLCBzb3VyY2VkIGZyb20gdGhlIHJvbGVzIEFQSVxyXG4gICogKHtAY29kZSBHRVQgL2dyb3Vwcy9jb25maWcvcm9sZXNCeUdyb3VwVHlwZS97Z3JvdXBUeXBlfX0pIGZpbHRlcmVkIHRvIHRoZSBcIk1lbWJlciBMZXZlbFwiIHJvbGUgdHlwZS5cclxuICAgKiBFYWNoIG9wdGlvbiBpcyB7QGNvZGUgeyBpZDogcm9sZUlkLCBuYW1lOiByb2xlTmFtZSB9fS5cclxuICAgKi9cclxuICBtZW1iZXJMZXZlbE9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XHJcblxyXG4gIHJvc3RlcnM6IEludGVyZXN0ZWRSb3N0ZXJbXSA9IFtdO1xyXG4gIHRhYmxlRGF0YTogSW50ZXJlc3RlZFJvc3RlcltdID0gW107XHJcbiAgY29sdW1uU2NoZW1hOiBJbnRlcmVzdGVkUm9zdGVyQ29sdW1uU2NoZW1hW10gPSBbXTtcclxuXHJcbiAgLyoqIFRvdGFsIGludGVyZXN0ZWQtcm9zdGVyIHJvd3MgcmVwb3J0ZWQgYnkgdGhlIGJhY2tlbmQgKGZvciBwYWdpbmcvY291bnRzKS4gKi9cclxuICB0b3RhbFJlY29yZHMgPSAwO1xyXG5cclxuICBwYWdpbmF0b3JDb25maWc6IFBhZ2luYXRvckNvbmZpZyA9IHtcclxuICAgIHJlY29yZHNQZXJQYWdlOiB0aGlzLnRleHRzPy5wYWdlU2l6ZU9wdGlvbnM/LlswXSxcclxuICAgIHBhZ2VTaXplT3B0aW9uczogdGhpcy50ZXh0cz8ucGFnZVNpemVPcHRpb25zLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwLFxyXG4gIH07XHJcbiAgcGFnZUluZGV4ID0gMDtcclxuICBkZWZhdWx0U29ydGVkQ29sdW1uID0gJ3N1Ym1pdHRlZE9uJztcclxuICBkZWZhdWx0Q29sdW1uU29ydERpcmVjdGlvbjogU29ydFsnZGlyZWN0aW9uJ10gPSAnZGVzYyc7XHJcbiAgcHJpdmF0ZSBzb3J0ZWRCeSA9IHRoaXMuZGVmYXVsdFNvcnRlZENvbHVtbjtcclxuICBwcml2YXRlIHNvcnRlZE9yZGVyQnkgPSB0aGlzLmRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uO1xyXG5cclxuICAvKiogUmVhZC1vbmx5IHRhYmxlIOKAlCBubyBzZWFyY2ggLyBmaWx0ZXIgLyBhZGQgLyBlZGl0IC8gZGVsZXRlIGFjdGlvbnMuICovXHJcbiAgdGFibGVBY3Rpb25zOiBUYWJsZUFjdGlvbnMgPSB7XHJcbiAgICBpc1BhZ2luYXRpb25OZWVkZWQ6IHRydWUsXHJcbiAgICBpc1NlYXJjaE5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0ZpbHRlck5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0FkZE5lZWRlZDogZmFsc2UsXHJcbiAgICBpc0VkaXROZWVkZWQ6IGZhbHNlLFxyXG4gICAgaXNEZWxldGVOZWVkZWQ6IGZhbHNlLFxyXG4gIH07XHJcblxyXG4gIGlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cHNTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZ3JvdXA6IEdyb3VwSW5mbyB8IG51bGxcclxuICApIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkcyB0aGUgcmV1c2FibGUtdGFibGUgY29sdW1uIHNjaGVtYSBhbmQgbG9hZHMgdGhlIGludGVyZXN0ZWQtcm9zdGVyXHJcbiAgICogbGlzdCBmb3IgdGhlIGN1cnJlbnQgZ3JvdXAgZnJvbSB0aGUgYmFja2VuZC5cclxuICAgKiBAbWVtYmVyb2YgSW50ZXJlc3RlZFJvc3RlcnNDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZE1lbWJlckxldmVsT3B0aW9ucygpO1xyXG4gICAgdGhpcy5idWlsZENvbHVtblNjaGVtYSgpO1xyXG4gICAgdGhpcy5sb2FkSW50ZXJlc3RlZFJvc3RlcnMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFucyB1cCBpbi1mbGlnaHQgc3Vic2NyaXB0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzb2x2ZXMgdGhlIGN1cnJlbnQgZ3JvdXAgaWQgZnJvbSB0aGUgZGlhbG9nIGRhdGEgKGZhbGxpbmcgYmFjayB0byB0aGVcclxuICAgKiBzZXJ2aWNlJ3Mgc2VsZWN0ZWQgZ3JvdXApIGFuZCBsb2FkcyB0aGUgaW50ZXJlc3RlZC1yb3N0ZXIgcm93cyBmb3IgaXQuIE1hcHNcclxuICAgKiBlYWNoIGJhY2tlbmQge0BsaW5rIEdyb3VwSW50ZXJlc3RSZXNwb25zZVZpZXd9IG9udG8gdGhlIGZsYXR0ZW5lZFxyXG4gICAqIHtAbGluayBJbnRlcmVzdGVkUm9zdGVyfSBzaGFwZSB0aGUgcmV1c2FibGUgdGFibGUgYmluZHMgdG8uIE9uIGZhaWx1cmUgdGhlXHJcbiAgICogdGFibGUgaXMgY2xlYXJlZCBhbmQgdGhlIGVycm9yIGlzIGRlbGVnYXRlZCB0byBHcm91cHNTZXJ2aWNlIGZvciBhbGVydGluZy5cclxuICAgKiBAbWVtYmVyb2YgSW50ZXJlc3RlZFJvc3RlcnNDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIGxvYWRJbnRlcmVzdGVkUm9zdGVycygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGdyb3VwSWQgPVxyXG4gICAgICB0aGlzLmdyb3VwPy5ncm91cElkID8/XHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cElkO1xyXG4gICAgaWYgKCFncm91cElkKSByZXR1cm47XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBJbnRlcmVzdGVkUm9zdGVyc1JlcXVlc3RQYXlsb2FkID0ge1xyXG4gICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgc2VhcmNoQnlOYW1lT3JFbWFpbDogJycsXHJcbiAgICAgICAgb2Zmc2V0OiB0aGlzLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yQ29uZmlnLnJlY29yZHNQZXJQYWdlLFxyXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvckNvbmZpZy5yZWNvcmRzUGVyUGFnZSxcclxuICAgICAgICBzb3J0ZWRCeTogdGhpcy5zb3J0ZWRCeSxcclxuICAgICAgICBzb3J0ZWRPcmRlckJ5OiB0aGlzLnNvcnRlZE9yZGVyQnksXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5ncm91cHNTZXJ2aWNlXHJcbiAgICAgIC5nZXRJbnRlcmVzdFJlc3BvbnNlc0J5R3JvdXAoZ3JvdXBJZCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2U/LnRvdGFsUmVjb3JkcyA/PyAwO1xyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3JDb25maWcgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucGFnaW5hdG9yQ29uZmlnLFxyXG4gICAgICAgICAgICB0b3RhbFJlY29yZHM6IHRoaXMudG90YWxSZWNvcmRzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMucm9zdGVycyA9IChyZXNwb25zZT8uZGF0YSA/PyBbXSkubWFwKCh2aWV3KSA9PlxyXG4gICAgICAgICAgICB0aGlzLm1hcFRvUm9zdGVyKHZpZXcpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0aGlzLnJvc3RlcnM7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yb3N0ZXJzID0gW107XHJcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSAwO1xyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3JDb25maWcgPSB7IC4uLnRoaXMucGFnaW5hdG9yQ29uZmlnLCB0b3RhbFJlY29yZHM6IDAgfTtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuaGFuZGxlRXJyb3JzKGVycm9yLCBmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblBhZ2luYXRpb25DaGFuZ2UoZXZlbnQ6IFBhZ2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XHJcbiAgICB0aGlzLnBhZ2luYXRvckNvbmZpZyA9IHtcclxuICAgICAgLi4udGhpcy5wYWdpbmF0b3JDb25maWcsXHJcbiAgICAgIHJlY29yZHNQZXJQYWdlOiBldmVudC5wYWdlU2l6ZSxcclxuICAgIH07XHJcbiAgICB0aGlzLmxvYWRJbnRlcmVzdGVkUm9zdGVycygpO1xyXG4gIH1cclxuXHJcbiAgb25Tb3J0Q2hhbmdlKGV2ZW50OiBTb3J0KTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRlZEJ5ID0gZXZlbnQuZGlyZWN0aW9uID8gZXZlbnQuYWN0aXZlIDogdGhpcy5kZWZhdWx0U29ydGVkQ29sdW1uO1xyXG4gICAgdGhpcy5zb3J0ZWRPcmRlckJ5ID0gZXZlbnQuZGlyZWN0aW9uIHx8IHRoaXMuZGVmYXVsdENvbHVtblNvcnREaXJlY3Rpb247XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XHJcbiAgICB0aGlzLmxvYWRJbnRlcmVzdGVkUm9zdGVycygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFwcyBhIGJhY2tlbmQge0BsaW5rIEdyb3VwSW50ZXJlc3RSZXNwb25zZVZpZXd9IHRvIHRoZSBmbGF0dGVuZWRcclxuICAgKiB7QGxpbmsgSW50ZXJlc3RlZFJvc3Rlcn0gcm93IHRoZSB0YWJsZSByZW5kZXJzOiBhZmZpbGlhdGlvbiBvcmcgbmFtZXMgYXJlXHJcbiAgICogam9pbmVkIGludG8gdGhlIGFmZmlsaWF0aW9ucyBsaXN0LCB0aGUgYXNzaWduZWQgbWVtYmVyc2hpcCBsZXZlbCAoaWYgYW55KVxyXG4gICAqIGJlY29tZXMgdGhlIHJvbGUgbmFtZSDigJQgd2hpY2ggdGhlIE1lbWJlciBMZXZlbCBkcm9wZG93biBiaW5kcyBhcyBpdHNcclxuICAgKiBwcmUtc2VsZWN0ZWQgdmFsdWUg4oCUIHRoZSBzdWJtaXR0ZWQgdGltZXN0YW1wIGlzIGZvcm1hdHRlZCBmb3IgZGlzcGxheSwgYW5kXHJcbiAgICogdGhlIGludGVyZXN0IGlkIGlzIGNhcnJpZWQgdGhyb3VnaCBmb3IgdGhlIHJlc3BvbnNlcyBkaWFsb2cgYW5kIHRoZSBsZXZlbFxyXG4gICAqIG92ZXJyaWRlLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbnRlcmVzdFJlc3BvbnNlVmlld30gdmlld1xyXG4gICAqIEByZXR1cm4ge0ludGVyZXN0ZWRSb3N0ZXJ9XHJcbiAgICogQG1lbWJlcm9mIEludGVyZXN0ZWRSb3N0ZXJzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtYXBUb1Jvc3Rlcih2aWV3OiBHcm91cEludGVyZXN0UmVzcG9uc2VWaWV3KTogSW50ZXJlc3RlZFJvc3RlciB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpbnRlcmVzdElkOiB2aWV3Py5pbnRlcmVzdElkLFxyXG4gICAgICB1c2VySWQ6IHZpZXc/LnVzZXJJZCxcclxuICAgICAgbmFtZTogdmlldz8ubmFtZSxcclxuICAgICAgZW1haWw6IHZpZXc/LmVtYWlsLFxyXG4gICAgICBhZmZpbGlhdGlvbnM6ICh2aWV3Py5hZmZpbGlhdGlvbiA/PyBbXSkubWFwKChvcmcpID0+IG9yZz8ub3JnTmFtZSksXHJcbiAgICAgIHN1Ym1pdHRlZE9uOiB0aGlzLmZvcm1hdFN1Ym1pdHRlZE9uKHZpZXc/LnN1Ym1pdHRlZE9uKSxcclxuICAgICAgbWVtYmVyTGV2ZWw6IHZpZXc/Lm1lbWJlckxldmVsPy5sZW5ndGhcclxuICAgICAgICA/IHZpZXcubWVtYmVyTGV2ZWxbMF0/LnJvbGVOYW1lID8/IG51bGxcclxuICAgICAgICA6IG51bGwsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0cyB0aGUgYmFja2VuZCBzdWJtaXR0ZWQgdGltZXN0YW1wIChJU08gZGF0ZSBzdHJpbmcpIGZvciBkaXNwbGF5LFxyXG4gICAqIGZhbGxpbmcgYmFjayB0byB0aGUgcmF3IHZhbHVlIHdoZW4gaXQgaXMgbm90IGEgcGFyc2VhYmxlIGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1Ym1pdHRlZE9uXHJcbiAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZm9ybWF0U3VibWl0dGVkT24oc3VibWl0dGVkT246IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXN1Ym1pdHRlZE9uKSByZXR1cm4gJyc7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoc3VibWl0dGVkT24pO1xyXG4gICAgcmV0dXJuIGlzTmFOKGRhdGUuZ2V0VGltZSgpKVxyXG4gICAgICA/IHN1Ym1pdHRlZE9uXHJcbiAgICAgIDogZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkcyB0aGUgTWVtYmVyIExldmVsIGRyb3Bkb3duIG9wdGlvbnMgZnJvbSB0aGUgcm9sZXMgQVBJXHJcbiAgKiAoe0Bjb2RlIEdFVCAvZ3JvdXBzL2NvbmZpZy9yb2xlc0J5R3JvdXBUeXBlL3tncm91cFR5cGV9fSksIGtlZXBpbmcgb25seSByb2xlcyB3aG9zZVxyXG4gICAqIHtAY29kZSByb2xlVHlwZU5hbWV9IGlzIFwiTWVtYmVyIExldmVsXCIgYW5kIG1hcHBpbmcgZWFjaCB0byBhXHJcbiAgICoge0BsaW5rIFNlbGVjdE9wdGlvbn0gKHtAY29kZSB7IGlkOiByb2xlSWQsIG5hbWU6IHJvbGVOYW1lIH19KS5cclxuICAgKiBAbWVtYmVyb2YgSW50ZXJlc3RlZFJvc3RlcnNDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIGxvYWRNZW1iZXJMZXZlbE9wdGlvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBncm91cFR5cGUgPVxyXG4gICAgICB0aGlzLmdyb3VwPy5ncm91cFR5cGUgPz9cclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwVHlwZTtcclxuICAgIGlmICghZ3JvdXBUeXBlKSByZXR1cm47XHJcbiAgICB0aGlzLmdyb3Vwc1NlcnZpY2VcclxuICAgICAgLmdldEdyb3VwVHlwZVJvbGVzKGdyb3VwVHlwZSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1lbWJlckxldmVsT3B0aW9ucyA9ICh0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0TWVtYmVyVHlwZXMoKSA/PyBbXSlcclxuICAgICAgICAgICAgLm1hcCgocm9sZSkgPT4gKHsgaWQ6IHJvbGUucm9sZUlkLCBuYW1lOiByb2xlLnJvbGVOYW1lIH0pKTtcclxuICAgICAgICAgIHRoaXMuYnVpbGRDb2x1bW5TY2hlbWEoKTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyc2lzdHMgdGhlIG1lbWJlcnNoaXAtbGV2ZWwgb3ZlcnJpZGUgd2hlbiB0aGUgYWRtaW4gcGlja3MgYSB2YWx1ZSBpbiBhXHJcbiAgICogcm93J3MgTWVtYmVyIExldmVsIGRyb3Bkb3duIChib3VuZCB0byB0aGUgcmV1c2FibGUgdGFibGUnc1xyXG4gICAqIGByb3dEcm9wZG93bkNoYW5nZWAgb3V0cHV0KS4gQnVpbGRzIHRoZSByZXF1ZXN0IGZyb20gdGhlIGRpYWxvZydzIGN1cnJlbnRcclxuICAgKiBncm91cCBpZCwgdGhlIHJvdydzIHVzZXIgaWQgYW5kIHRoZSBzZWxlY3RlZCBvcHRpb24ncyBpZCAodGhlIHJvbGUgaWQpLCBhbmRcclxuICAgKiBwb3N0cyBpdCB0byB0aGUgYmFja2VuZC4gVGhlIHJvdydzIGRpc3BsYXllZCBsZXZlbCBpcyB1cGRhdGVkIG9wdGltaXN0aWNhbGx5XHJcbiAgICogYW5kIHJldmVydGVkIGlmIHRoZSBzYXZlIGZhaWxzLlxyXG4gICAqIEBwYXJhbSB7eyByb3c6IEludGVyZXN0ZWRSb3N0ZXI7IG9wdGlvbjogU2VsZWN0T3B0aW9uIH19IGV2ZW50XHJcbiAgICogQG1lbWJlcm9mIEludGVyZXN0ZWRSb3N0ZXJzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25NZW1iZXJMZXZlbENoYW5nZShldmVudDoge1xyXG4gICAgcm93OiBJbnRlcmVzdGVkUm9zdGVyO1xyXG4gICAgb3B0aW9uOiBTZWxlY3RPcHRpb247XHJcbiAgfSk6IHZvaWQge1xyXG4gICAgY29uc3Qgcm93ID0gZXZlbnQ/LnJvdztcclxuICAgIGNvbnN0IG9wdGlvbiA9IGV2ZW50Py5vcHRpb247XHJcbiAgICBjb25zdCBncm91cElkID1cclxuICAgICAgdGhpcy5ncm91cD8uZ3JvdXBJZCA/P1xyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKT8uZ3JvdXBJZDtcclxuICAgIGNvbnN0IHJvbGVJZCA9IG9wdGlvbj8uaWQgYXMgc3RyaW5nO1xyXG4gICAgaWYgKCFyb3c/LnVzZXJJZCB8fCAhZ3JvdXBJZCB8fCAhcm9sZUlkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcHJldmlvdXNMZXZlbCA9IHJvdy5tZW1iZXJMZXZlbDtcclxuICAgIC8vIE9wdGltaXN0aWNhbGx5IHJlZmxlY3QgdGhlIHNlbGVjdGlvbiBpbiB0aGUgcm93LlxyXG4gICAgcm93Lm1lbWJlckxldmVsID0gb3B0aW9uPy5uYW1lID8/IHJvdy5tZW1iZXJMZXZlbDtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkOiBVcGRhdGVNZW1iZXJMZXZlbFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICBncm91cElkLFxyXG4gICAgICAgIHVzZXJJZDogcm93LnVzZXJJZCxcclxuICAgICAgICByb2xlSWQsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5ncm91cHNTZXJ2aWNlXHJcbiAgICAgIC51cGRhdGVJbnRlcmVzdE1lbWJlckxldmVsKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBvcHRpbWlzdGljIGNoYW5nZSBvbiBmYWlsdXJlIGFuZCBzdXJmYWNlIHRoZSBlcnJvci5cclxuICAgICAgICAgIHJvdy5tZW1iZXJMZXZlbCA9IHByZXZpb3VzTGV2ZWw7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW5zIHRoZSBcIlZpZXcgUmVzcG9uc2VzXCIgZGlhbG9nIGZvciBhIHJvc3RlciByb3cgKGJvdW5kIHRvIHRoZSByZXVzYWJsZVxyXG4gICAqIHRhYmxlJ3MgTElOSyBvdXRwdXQpIHVzaW5nIHRoZSBzaGFyZWQge0BsaW5rIE1vZGFsQ29tcG9uZW50fS4gVGhlIG1vZGFsXHJcbiAgICogc3VwcGxpZXMgdGhlIHRpdGxlIHJvdyBhbmQgWCBjbG9zZTsgdGhlIHJlcXVlc3RlcidzIHN0b3JlZCBpbnRlcmVzdC1mb3JtXHJcbiAgICogcmVzcG9uc2VzIGFyZSByZW5kZXJlZCBieSB7QGxpbmsgSW50ZXJlc3RSZXNwb25zZXNDb21wb25lbnR9LCB3aGljaCBsb2Fkc1xyXG4gICAqIHRoZW0gZnJvbSB0aGUgYmFja2VuZCB1c2luZyB0aGUgcm93J3Mge0Bjb2RlIGludGVyZXN0SWR9IHBhc3NlZCB2aWEgdGhlXHJcbiAgICogTW9kYWxDb21wb25lbnQgZHluYW1pYy1pbnB1dCBwYXR0ZXJuLlxyXG4gICAqIEBwYXJhbSB7SW50ZXJlc3RlZFJvc3Rlcn0gcm93XHJcbiAgICogQG1lbWJlcm9mIEludGVyZXN0ZWRSb3N0ZXJzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Gb3JtTGlua0NsaWNrKHJvdzogSW50ZXJlc3RlZFJvc3Rlcik6IHZvaWQge1xyXG4gICAgaWYgKCFyb3c/LmludGVyZXN0SWQpIHJldHVybjtcclxuICAgIGNvbnN0IGRpYWxvZ09wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRpbmc6IHRoaXMudGV4dHM/LnJlc3BvbnNlcz8udGl0bGUsXHJcbiAgICAgIHN1YkhlYWRpbmc6IHRoaXMuZ3JvdXA/Lmdyb3VwTmFtZSxcclxuICAgICAgaGVhZGluZ0NsYXNzOiAnaWVlZXNhLXRpdGxlLWxnLTI0JyxcclxuICAgICAgaXNDbG9zZU5lZWRlZDogdHJ1ZSxcclxuICAgICAgY29tcG9uZW50UmVmZXJlbmNlOiBJbnRlcmVzdFJlc3BvbnNlc0NvbXBvbmVudCxcclxuICAgICAgbW9kYWxUeXBlOiBNb2RhbFR5cGUuRk9STSxcclxuICAgICAgZGF0YTJEeW5hbWljQ29tcG9uZW50OiB7IGludGVyZXN0SWQ6IHJvdy5pbnRlcmVzdElkIH0sXHJcbiAgICAgIGRhdGFJbnB1dE5hbWU6ICdjb21wb25lbnREYXRhJyxcclxuICAgIH07XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKE1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IGRpYWxvZ09wdGlvbnMsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnaWVlZXNhLW1vZGFsLWRpYWxvZycsICdpZWVlc2EtaW50ZXJlc3QtcmVzcG9uc2VzLWRpYWxvZyddLFxyXG4gICAgICB3aWR0aDogJzgwMHB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc5NXZ3JyxcclxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXHJcbiAgICAgIGFyaWFNb2RhbDogdHJ1ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lcyB0aGUgcmV1c2FibGUtdGFibGUgY29sdW1ucyBmb3IgdGhlIEludGVyZXN0ZWQgUm9zdGVycyBsaXN0LiBFdmVyeVxyXG4gICAqIGBjZWxsRGF0YWAvYHNlbGVjdGVkT3B0aW9uYCBpcyBhIGAocm93KSA9PiAuLi5gIGFjY2Vzc29yLCBtYXRjaGluZyB0aGVcclxuICAgKiBzaGFyZWQgdGFibGUncyBjb250cmFjdC4gTWVtYmVyIExldmVsIGlzIHRoZSBEUk9QRE9XTiBjb2x1bW4gc2VlZGVkIHdpdGggdGhlXHJcbiAgICogY29uZmlndXJlZCBsZXZlbHMgcGx1cyBcIk5vbmVcIjsgRm9ybSBpcyBhIExJTksgdGhhdCBvcGVucyB0aGUgcmVzcG9uc2VzXHJcbiAgICogZGlhbG9nLlxyXG4gICAqIEBtZW1iZXJvZiBJbnRlcmVzdGVkUm9zdGVyc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnVpbGRDb2x1bW5TY2hlbWEoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy50ZXh0cz8uY29sdW1ucztcclxuICAgIHRoaXMuY29sdW1uU2NoZW1hID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IDEsXHJcbiAgICAgICAgY29sdW1uRGVmOiAnbmFtZScsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8ubmFtZSxcclxuICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuVEVYVCxcclxuICAgICAgICBpc1NvcnRhYmxlQ29sdW1uOiB0cnVlLFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgY2VsbERhdGE6IChyb3c6IGFueSkgPT4gcm93Lm5hbWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogMixcclxuICAgICAgICBjb2x1bW5EZWY6ICdlbWFpbCcsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8uZW1haWwsXHJcbiAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNlbGxEYXRhOiAocm93OiBhbnkpID0+IHJvdy5lbWFpbCxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAzLFxyXG4gICAgICAgIGNvbHVtbkRlZjogJ2FmZmlsaWF0aW9ucycsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8uYWZmaWxpYXRpb25zLFxyXG4gICAgICAgIGNvbHVtblR5cGU6IFRhYmxlQ29sdW1uVHlwZS5URVhULFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgY2VsbERhdGE6IChyb3c6IGFueSkgPT4gKHJvdy5hZmZpbGlhdGlvbnMgfHwgW10pLmpvaW4oJywgJyksXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogNCxcclxuICAgICAgICBjb2x1bW5EZWY6ICdzdWJtaXR0ZWRPbicsXHJcbiAgICAgICAgaGVhZGluZzogY29sdW1ucz8uc3VibWl0dGVkT24sXHJcbiAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLlRFWFQsXHJcbiAgICAgICAgaXNTb3J0YWJsZUNvbHVtbjogdHJ1ZSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNlbGxEYXRhOiAocm93OiBhbnkpID0+IHJvdy5zdWJtaXR0ZWRPbixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiA1LFxyXG4gICAgICAgIGNvbHVtbkRlZjogJ21lbWJlckxldmVsJyxcclxuICAgICAgICBoZWFkaW5nOiBjb2x1bW5zPy5tZW1iZXJMZXZlbCxcclxuICAgICAgICBjb2x1bW5UeXBlOiBUYWJsZUNvbHVtblR5cGUuRFJPUERPV04sXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICBjZWxsRGF0YTogKHJvdzogYW55KSA9PiByb3cubWVtYmVyTGV2ZWwsXHJcbiAgICAgICAgZHJvcGRvd25PcHRpb25zOiB0aGlzLm1lbWJlckxldmVsT3B0aW9ucyxcclxuICAgICAgICBkcm9wZG93blBsYWNlaG9sZGVyOiB0aGlzLnRleHRzPy5tZW1iZXJMZXZlbFBsYWNlaG9sZGVyLFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgc2VsZWN0ZWRPcHRpb246IChyb3c6IGFueSkgPT5cclxuICAgICAgICAgIHRoaXMubWVtYmVyTGV2ZWxPcHRpb25zLmZpbmQoKG8pID0+IG8ubmFtZSA9PT0gcm93Lm1lbWJlckxldmVsKSA/P1xyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiA2LFxyXG4gICAgICAgIGNvbHVtbkRlZjogJ2Zvcm0nLFxyXG4gICAgICAgIGhlYWRpbmc6IGNvbHVtbnM/LmZvcm0sXHJcbiAgICAgICAgY29sdW1uVHlwZTogVGFibGVDb2x1bW5UeXBlLkxJTkssXHJcbiAgICAgICAgY2VsbERhdGE6ICgpID0+IHRoaXMudGV4dHM/LnZpZXdMYWJlbCxcclxuICAgICAgICBhcmlhTGFiZWw6IChyb3c6IEludGVyZXN0ZWRSb3N0ZXIpID0+XHJcbiAgICAgICAgICBgJHt0aGlzLnRleHRzPy52aWV3QXJpYUxhYmVsUHJlZml4fSAke3Jvdz8ubmFtZSA/PyAnJ31gLnRyaW0oKSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiaWVlZXNhLWludGVyZXN0ZWQtcm9zdGVyc1wiIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dHM/LnJlZ2lvbkFyaWFMYWJlbFwiPlxyXG4gIDxwIGNsYXNzPVwiaWVlZXNhLWludGVyZXN0ZWQtcm9zdGVyc19fY291bnRcIj57eyB0b3RhbFJlY29yZHMgfX0ge3sgdGV4dHM/LmNvdW50U3VmZml4IH19PC9wPlxyXG4gIDxpZWVlc2EtZGF0YS10YWJsZVxyXG4gICAgW3RhYmxlRGF0YUluZm9dPVwidGFibGVEYXRhXCJcclxuICAgIFtjb2x1bW5TY2hlbWFJbmZvXT1cImNvbHVtblNjaGVtYVwiXHJcbiAgICBbdGFibGVBY3Rpb25zXT1cInRhYmxlQWN0aW9uc1wiXHJcbiAgICBbcGFnaW5hdG9yQ29uZmlnXT1cInBhZ2luYXRvckNvbmZpZ1wiXHJcbiAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXHJcbiAgICBbcGFnZVNpemVdPVwicGFnaW5hdG9yQ29uZmlnLnJlY29yZHNQZXJQYWdlXCJcclxuICAgIFtkZWZhdWx0U29ydGVkQ29sdW1uXT1cImRlZmF1bHRTb3J0ZWRDb2x1bW5cIlxyXG4gICAgW2RlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXT1cImRlZmF1bHRDb2x1bW5Tb3J0RGlyZWN0aW9uXCJcclxuICAgIFtpc0NsZWFyU29ydE5lZWRlZF09XCJmYWxzZVwiXHJcbiAgICAocGFnaW5hdGlvbkNoYW5nZSk9XCJvblBhZ2luYXRpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAocm93TGluayk9XCJvbkZvcm1MaW5rQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAocm93RHJvcGRvd25DaGFuZ2UpPVwib25NZW1iZXJMZXZlbENoYW5nZSgkZXZlbnQpXCJcclxuICA+PC9pZWVlc2EtZGF0YS10YWJsZT5cclxuPC9zZWN0aW9uPlxyXG4iXX0=
|
|
@@ -613,7 +613,17 @@ export class TreeViewComponent {
|
|
|
613
613
|
}
|
|
614
614
|
}
|
|
615
615
|
/**
|
|
616
|
-
* Returns the
|
|
616
|
+
* Returns the group action menu items the current user may see for the given
|
|
617
|
+
* group, filtered by per-group permissions and group type. The "Manage
|
|
618
|
+
* Interest Form" action (SP3M-380) is gated: it renders only when the
|
|
619
|
+
* interest-form feature is enabled for the tenant
|
|
620
|
+
* (GroupsService.isInterestFormFeatureEnabled()) AND either the user holds the
|
|
621
|
+
* VIEW_AND_MANAGE_GROUP_INTEREST permission for that specific group (strictly
|
|
622
|
+
* per-group, no global fallback) OR the user is a cross-group admin holding
|
|
623
|
+
* MANAGE_ALL_GROUPS ("Manage All Group Details"). It is always hidden on
|
|
624
|
+
* admin/system group types (e.g. the System Users Group), which are not real
|
|
625
|
+
* committees with an interest form, and hidden entirely when the feature is
|
|
626
|
+
* disabled. When shown it is kept leftmost by the trailing sort.
|
|
617
627
|
* @param {GroupNode} group
|
|
618
628
|
* @return {Menu[]}
|
|
619
629
|
* @memberof TreeViewComponent
|
|
@@ -650,10 +660,19 @@ export class TreeViewComponent {
|
|
|
650
660
|
(this.groupsService.validateAccess(this.permissionType.CREATE_SUBGROUP, groupPermissions) ||
|
|
651
661
|
this.groupsService.validateAccess(this.permissionType.MANAGE_ALL_GROUPS)) &&
|
|
652
662
|
!isAdminGroupType) ||
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
663
|
+
(e?.id === GroupAction.MANAGE_INTEREST_FORM &&
|
|
664
|
+
this.groupsService.isInterestFormFeatureEnabled() &&
|
|
665
|
+
// Hidden on admin/system group types (e.g. the System Users Group):
|
|
666
|
+
// those are not real committees with an interest form.
|
|
667
|
+
!isAdminGroupType &&
|
|
668
|
+
// Either the user holds the interest permission on THIS specific group
|
|
669
|
+
// (strictly per-group: a non-member group has `permissions: null`,
|
|
670
|
+
// coerced to [] so validateAccess stays in its per-group branch and does
|
|
671
|
+
// NOT fall back to the global permission set), OR the user is a
|
|
672
|
+
// cross-group admin (MANAGE_ALL_GROUPS = "Manage All Group Details") who
|
|
673
|
+
// manages all groups and therefore sees the action on every non-admin group.
|
|
674
|
+
(this.groupsService.validateAccess(this.permissionType.VIEW_AND_MANAGE_GROUP_INTEREST, groupPermissions ?? []) ||
|
|
675
|
+
this.groupsService.validateAccess(this.permissionType.MANAGE_ALL_GROUPS)))) {
|
|
657
676
|
filteredMenu.push(e);
|
|
658
677
|
}
|
|
659
678
|
});
|
|
@@ -723,4 +742,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
723
742
|
}], manageInterestFormClick: [{
|
|
724
743
|
type: Output
|
|
725
744
|
}] } });
|
|
726
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBR04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxhQUFhLEVBRWIsbUJBQW1CLEVBRW5CLHNCQUFzQixFQUV2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0vQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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LENBQUM7SUFDdkIsQ0FBQztJQUNEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7K0dBN21CVSxpQkFBaUI7bUdBQWpCLGlCQUFpQiwwaUJDOVA5Qiw2cEpBaUlBLDAyVkRnSEksWUFBWSx5bEJBQ1osYUFBYSxnaEJBQ2IsYUFBYSw4QkFDYixlQUFlLCtCQUNmLGFBQWEseUxBQ2IsbUJBQW1CLHFJQUNuQixnQkFBZ0IsK0hBQ2hCLHNCQUFzQjs7NEZBTWIsaUJBQWlCO2tCQWpCN0IsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3FCQUN2QixpQkFHYyxpQkFBaUIsQ0FBQyxJQUFJO3VMQXlCakMsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVVGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBVUYsMkJBQTJCO3NCQUQ5QixLQUFLO2dCQVNGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFTTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBR0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBNZW51Q29tcG9uZW50LFxyXG4gIE1lbnUsXHJcbiAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICBJY29uQnV0dG9uLFxyXG4gIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgQnJlYWtwb2ludE9ic2VydmVyU2VydmljZVxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBHcm91cEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1hY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbGxlY3Rpb25WaWV3ZXIsXHJcbiAgU2VsZWN0aW9uQ2hhbmdlLFxyXG4gIERhdGFTb3VyY2UsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdFRyZWVNb2R1bGUsIE1hdFRyZWVOb2RlUGFkZGluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBHcm91cEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRHcm91cEFuZFBhcmVudEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZWRpdC1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbi8qKlxyXG4gKiBEeW5hbWljIEZsYXQgbm9kZSBjcmVhdGVzIGEgbm9kZSBzdHJ1Y3R1cmVcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBOb2RlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR3JvdXBOb2RlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGl0ZW06IEdyb3VwSW5mbyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGxldmVsID0gMSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGV4cGFuZGFibGUgPSBmYWxzZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxufVxyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBzdG9yZXMgdGhlIHBhcmVudCBub2RlcyBhbmQgY2hpbGQgbm9kZXNcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcclxuICByb290TGV2ZWxOb2RlcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKiBJbml0aWFsIGRhdGEgZnJvbSBkYXRhYmFzZSAqL1xyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICAvKipcclxuICAgKiBHZXQgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHJldHVybiB7Kn0gIHtHcm91cEluZm9bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgZ2V0Q2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBDaGlsZCBncm91cHMgaW5mb1xyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IHZhbHVlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIHNldENoaWxkR3JvdXBzSW5mbyh2YWx1ZTogR3JvdXBJbmZvW10pOiB2b2lkIHtcclxuICAgIHRoaXMuY2hpbGRHcm91cHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgZ3JvdXBzIGRhdGEgYW5kIGNyZWF0ZXMgdGhlIG5vZGUgc3RydWN0dXJlIGZvciBtYXQgdHJlZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IGRhdGFcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBpbml0aWFsRGF0YShkYXRhOiBHcm91cEluZm9bXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHRoaXMucm9vdExldmVsTm9kZXMgPSBkYXRhO1xyXG4gICAgcmV0dXJuIHRoaXMucm9vdExldmVsTm9kZXM/Lm1hcChcclxuICAgICAgKG5vZGUpID0+IG5ldyBHcm91cE5vZGUobm9kZSwgMCwgdGhpcy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gbm9kZVxyXG4gICAqIEByZXR1cm4geyp9ICB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlKG5vZGU6IEdyb3VwSW5mbyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCEhbm9kZT8uY2hpbGRyZW4gJiYgbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHx8IG5vZGU/Lmhhc0NoaWxkcmVuXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRHluYW1pYyBEYXRhIFNvdXJjZSBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIHdpdGggZHluYW1pYyBkYXRhIGJhc2VcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzRGF0YVNvdXJjZVxyXG4gKiBAaW1wbGVtZW50cyB7RGF0YVNvdXJjZTxHcm91cE5vZGU+fVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2UgaW1wbGVtZW50cyBEYXRhU291cmNlPEdyb3VwTm9kZT4ge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBkYXRhQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cE5vZGVbXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVwZGF0ZWQgdHJlZSBjb250cm9sIGRhdGFcclxuICAgKiBAdHlwZSB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBnZXQgZGF0YSgpOiBHcm91cE5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhQ2hhbmdlPy52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5zaW9uTW9kZWw/LmNoYW5nZWRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KS5hZGRlZCB8fFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikucmVtb3ZlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVUcmVlQ29udHJvbChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbWVyZ2UoY29sbGVjdGlvblZpZXdlcj8udmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcy9yZW1vdmVzIHRoZSBjaGlsZCBub2RlcyB3aGlsZSBleHBhbmRzL2NvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+fSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pIHtcclxuICAgIGlmIChjaGFuZ2U/LmFkZGVkKSB7XHJcbiAgICAgIGNoYW5nZS5hZGRlZD8uZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIHRydWUpKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2U/LnJlbW92ZWQpIHtcclxuICAgICAgY2hhbmdlLnJlbW92ZWRcclxuICAgICAgICAuc2xpY2UoKVxyXG4gICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG5vZGUsIGFkZC9yZW1vdmVzIHRoZSBub2RlIGZyb20gZGlzcGxheVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBjbGlja2VkTm9kZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHRvZ2dsZU5vZGUoY2xpY2tlZE5vZGU6IEdyb3VwTm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2U/LmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGE/LmluZGV4T2YoY2xpY2tlZE5vZGUpO1xyXG4gICAgaWYgKCFjaGlsZHJlbiB8fCBpbmRleCA8IDApIHtcclxuICAgICAgLy8gSWYgbm8gY2hpbGRyZW4sIG9yIGNhbm5vdCBmaW5kIHRoZSBub2RlLCBubyBvcFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4cGFuZCkge1xyXG4gICAgICBjbGlja2VkTm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbj8ubWFwKFxyXG4gICAgICAgIChub2RlKSA9PlxyXG4gICAgICAgICAgbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgY2xpY2tlZE5vZGU/LmxldmVsICsgMSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZT8uaXNFeHBhbmRhYmxlKG5vZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YT8uc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4ubm9kZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcclxuICAgICAgICBpIDwgdGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5kYXRhW2ldPy5sZXZlbCA+IGNsaWNrZWROb2RlPy5sZXZlbDtcclxuICAgICAgICBpKyssIGNvdW50KysgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICkge31cclxuICAgICAgdGhpcy5kYXRhPy5zcGxpY2UoaW5kZXggKyAxLCBjb3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoZSBjaGFuZ2VcclxuICAgIHRoaXMuZGF0YUNoYW5nZT8ubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIGdyb3VwcyB3aGVyZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHZpZXcvaGllcmFyY2h5LlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBUcmVlVmlld0NvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUcmVlTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBidXR0b25zOiBNZW51W10gPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8uYnV0dG9ucztcclxuICB0cmVlUGFkZGluZ0luZGVudDogbnVtYmVyID0gdGhpcy5jb25zdGFudHM/LnZpZXdHcm91cHM/LnRyZWVQYWRkaW5nSW5kZW50O1xyXG4gIHNlbGVjdGVkR3JvdXAhOiBHcm91cE5vZGU7XHJcbiAgc2VsZWN0ZWRHcm91cEFjdGlvbiE6IE1lbnUgfCBJY29uQnV0dG9uO1xyXG4gIHRyZWVDb250cm9sITogRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT47XHJcbiAgZGF0YVNvdXJjZSE6IEdyb3Vwc0RhdGFTb3VyY2U7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIG1hdFRyZWVOb2RlUGFkZGluZyE6IE1hdFRyZWVOb2RlUGFkZGluZzxHcm91cE5vZGU+O1xyXG4gIHBsdXNDaXJjbGVJY29uQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5idXR0b25zWzRdO1xyXG4gIG1pbnVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s1XTtcclxuICBlZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8hOiBFZGl0R3JvdXBBbmRQYXJlbnRJbmZvO1xyXG4gIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGU7XHJcblxyXG4gIG1lbnVJdGVtczogTWVudVtdID0gdGhpcy5idXR0b25zPy5maWx0ZXIoXHJcbiAgICAoZSkgPT5cclxuICAgICAgZS5pZCAhPT0gR3JvdXBBY3Rpb24/LkVYUEFORF9HUk9VUF9WSUVXICYmXHJcbiAgICAgIGUuaWQgIT09IEdyb3VwQWN0aW9uPy5DT0xMQVBTRV9HUk9VUF9WSUVXXHJcbiAgKTtcclxuICBwcml2YXRlIHBhcmVudEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhcmVudEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLnBhcmVudEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICBnZXQgcGFyZW50R3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRHcm91cHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjaGlsZEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLmNoaWxkR3JvdXBzID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWRDaGlsZEdyb3VwcygpO1xyXG4gIH1cclxuICBnZXQgY2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGlzR3JvdXBTZWFyY2hPckZpbHRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzR3JvdXBTZWFyY2hPckZpbHRlcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBkZWxldGVkR3JvdXBJZCE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWxldGVkR3JvdXBJZEluZm8oaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IGlkO1xyXG4gICAgdGhpcy5kZWxldGVHcm91cE5vZGUodGhpcy5kZWxldGVkR3JvdXBJZCk7XHJcbiAgfVxyXG4gIGdldCBkZWxldGVkR3JvdXBJZEluZm8oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmRlbGV0ZWRHcm91cElkO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHVzZXJHcm91cFBlcm1pc3Npb25zITogR3JvdXBQZXJtaXNzaW9uW107XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgZWRpdEdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRHcm91cEFuZFBhcmVudEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgdmlld1Jvc3RlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIG1hbmFnZUludGVyZXN0Rm9ybUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgaXNNb2JpbGVWaWV3ID0gZmFsc2U7XHJcbiAgZ3JvdXBGdW5jdGlvblR5cGUgPSBHcm91cEZ1bmN0aW9uVHlwZTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGRhdGFiYXNlOiBHcm91cHMsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZ3JvdXBzU2VydmljZTogR3JvdXBzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlOiBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2VcclxuICAgICAgLmdldEJyZWFrcG9pbnQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogeyBtYXRjaGVzOiBib29sZWFuIH0pID0+IHtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHJlc3VsdD8ubWF0Y2hlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSB0cmVlIHZpZXcgY29tcG9uZW50XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBBc3NpZ24gQVJJQSByb2xlIGZvciBhbGwgbWF0IHRyZWUgbm9kZXMgYXMgXCJyb3dcIlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YUNoYW5nZVxyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGVzID1cclxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9dHJlZWl0ZW1dJyk7XHJcbiAgICAgICAgdHJlZUl0ZW1Ob2Rlcz8uZm9yRWFjaCgobm9kZTogSFRNTEVsZW1lbnQpID0+IChub2RlLnJvbGUgPSAncm93JykpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGV2ZWwgb2YgdGhlIG5vZGVcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldExldmVsID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8ubGV2ZWw7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0aGUgbm9kZSBpcyBleHBhbmRhYmxlIG9yIG5vdFxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8uZXhwYW5kYWJsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHBhc3NlZCBub2RlIGhhcyBjaGlsZHJlbiBvdGhlcndpc2UgZmFsc2VcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFzQ2hpbGRHcm91cHMgPSAoaW5kZXg6IG51bWJlciwgX25vZGVEYXRhOiBHcm91cE5vZGUpID0+XHJcbiAgICBfbm9kZURhdGEuZXhwYW5kYWJsZTtcclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgZ3JvdXAgaW5mbyB3aGVuIHRoZSB0b2dnbGUgZ3JvdXAgaXMgY2xpY2tlZCBvciB0b2dnbGVzIHRoZSBncm91cCB2aWV3XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdmlld0NoaWxkR3JvdXBzKG5vZGU6IEdyb3VwTm9kZSkge1xyXG4gICAgaWYgKCFub2RlPy5pdGVtPy5oYXNDaGlsZHJlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sPy50b2dnbGUobm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2Uuc2V0R3JvdXBGdW5jdGlvblR5cGUoR3JvdXBGdW5jdGlvblR5cGUuVE9HR0xFKTtcclxuICAgICAgdGhpcy50b2dnbGVHcm91cENsaWNrLmVtaXQobm9kZT8uaXRlbSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IG5vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGJveCBzaGFkb3cgYmFzZWQgb24gdGhlIGdyb3VwIHR5cGUgbGVnZW5kIGNvbG9yXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldEJveFNoYWRvdygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYm94U2hhZG93OiAnMHB4IDFweCAwcHggMHB4ICNjOWNiZDAgaW5zZXQnLFxyXG4gICAgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YVNvdXJjZSB3aXRoIHBhcmVudCBncm91cHMgZGF0YVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNldEdyb3VwRGF0YVNvdXJjZSgpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5kYXRhU291cmNlICYmXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBhcmVudEdyb3Vwc0luZm8/LmZvckVhY2goKHBhcmVudEdyb3VwTm9kZSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmluZEluZGV4KFxyXG4gICAgICAgICAgICAobm9kZSkgPT4gbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT0gcGFyZW50R3JvdXBOb2RlPy5ncm91cElkXHJcbiAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgbmV3R3JvdXBOb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgcGFyZW50R3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShwYXJlbnRHcm91cE5vZGUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZ3JvdXBOb2Rlc1JlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2U/LnB1c2gobmV3R3JvdXBOb2RlKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2Rlc1JlZmVyZW5jZTtcclxuICAgICAgICAgIHRoaXMuc29ydFBhcmVudEdyb3Vwc0FscGhhYmV0aWNhbGx5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5FRElUXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lZGl0R3JvdXAodGhpcy5wYXJlbnRHcm91cHNJbmZvKTtcclxuICAgICAgdGhpcy5zb3J0UGFyZW50R3JvdXBzQWxwaGFiZXRpY2FsbHkoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT4oXHJcbiAgICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgR3JvdXBzRGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmRhdGFiYXNlKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFiYXNlPy5pbml0aWFsRGF0YSh0aGlzLnBhcmVudEdyb3Vwc0luZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1cGRhdGVkIG5vZGUgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb1tdfSBncm91cHNJbmZvXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZWRpdEdyb3VwKGdyb3Vwc0luZm86IEdyb3VwSW5mb1tdKSB7XHJcbiAgICBjb25zdCBncm91cE5vZGVSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBjb25zdCBlZGl0ZWROb2RlID0gZ3JvdXBzSW5mbz8uZmluZChcclxuICAgICAgKG5vZGUpID0+XHJcbiAgICAgICAgbm9kZT8uZ3JvdXBJZCA9PT0gdGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8/Lmdyb3VwSW5mbz8uZ3JvdXBJZFxyXG4gICAgKTtcclxuICAgIGdyb3VwTm9kZVJlZmVyZW5jZT8uZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT1cclxuICAgICAgICB0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbz8uZ3JvdXBJbmZvPy5ncm91cElkXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IG5vT2ZDaGlsZHJlblJlZmVyZW5jZSA9IG5vZGUuaXRlbS5ub09mQ2hpbGRyZW47XHJcbiAgICAgICAgbm9kZS5pdGVtID0gZWRpdGVkTm9kZSBhcyBHcm91cEluZm87XHJcbiAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IG5vT2ZDaGlsZHJlblJlZmVyZW5jZTtcclxuICAgICAgICBub2RlLmV4cGFuZGFibGUgPSB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShub2RlPy5pdGVtKTtcclxuICAgICAgICBpZiAobm9kZS5pdGVtLmhhc0NoaWxkcmVuICYmIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICAgICAgdGhpcy50cmVlQ29udHJvbC50b2dnbGUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2RlUmVmZXJlbmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBMb2FkcyB0aGUgY2hpbGQgZ3JvdXBzIGFuZCB1cGRhdGVzIHRoZSB0cmVlIHZpZXcuXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbG9hZENoaWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5kYXRhYmFzZT8uc2V0Q2hpbGRHcm91cHNJbmZvKHRoaXMuY2hpbGRHcm91cHNJbmZvKTtcclxuICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbT8uaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBQYXJlbnROb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwLmxldmVsLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5zcGxpY2UoXHJcbiAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSxcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICBncm91cFBhcmVudE5vZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKGdyb3VwUGFyZW50Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0aGlzLnNlbGVjdGVkR3JvdXApKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmRhdGFiYXNlLmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgICAgIGNoaWxkcmVuPy5mb3JFYWNoKChncm91cE5vZGUpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKG5vZGUpID0+IG5vZGU/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwTm9kZT8uZ3JvdXBJZFxyXG4gICAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0dyb3VwTm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgZ3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cD8ubGV2ZWwgKyAxLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2U/LmlzRXhwYW5kYWJsZShncm91cE5vZGUpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2UuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChub2RlLml0ZW0uZ3JvdXBJZCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwLml0ZW0uZ3JvdXBJZCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLnNwbGljZShcclxuICAgICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSArIDEsXHJcbiAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICBuZXdHcm91cE5vZGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cE5vZGVzUmVmZXJlbmNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkVESVRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cCh0aGlzLmNoaWxkR3JvdXBzSW5mbyk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRQYXJlbnRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZFBhcmVudEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLlRPR0dMRVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2w/LnRvZ2dsZSh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgdXBkYXRlcyB0aGUgdHJlZSB2aWV3LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZWxldGVkR3JvdXBJZFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZUdyb3VwTm9kZShkZWxldGVkR3JvdXBJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbCAmJiBkZWxldGVkR3JvdXBJZCkge1xyXG4gICAgICBjb25zdCBkZWxldGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IGRlbGV0ZWRHcm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGRlbGV0ZWRHcm91cCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmF0KGRlbGV0ZWRHcm91cEluZGV4KTtcclxuICAgICAgY29uc3QgZGF0YVNvdXJjZVJlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgICBpZiAoZGVsZXRlZEdyb3VwSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKGRlbGV0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWxldGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUuaXRlbS5ncm91cElkID09PSBkZWxldGVkR3JvdXA/Lml0ZW0uZ3JvdXBQYXJlbnRJZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChkZWxldGVkUGFyZW50R3JvdXBJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgZGVsZXRlZFBhcmVudEdyb3VwID0gdGhpcy5kYXRhU291cmNlLmRhdGEuYXQoXHJcbiAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwSW5kZXhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGRlbGV0ZWRQYXJlbnRHcm91cCAmJiBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gPVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuIC0gMTtcclxuICAgICAgICAgICAgICBpZiAoZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAubGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXggLSAxLCAyLCBuZXdOb2RlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgbmV4dCBncm91cCBhdCB0aGUgc2FtZSBsZXZlbC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0ZWRHcm91cEluZGV4XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGVbXX0gZGF0YVNvdXJjZVxyXG4gICAqIEByZXR1cm4geyp9ICB7bnVtYmVyfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXg6IG51bWJlciwgZGF0YVNvdXJjZTogR3JvdXBOb2RlW10pOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEFjcm9ueW0gPVxyXG4gICAgICBkYXRhU291cmNlW3NlbGVjdGVkR3JvdXBJbmRleF0uaXRlbS5ncm91cEFjcm9ueW07XHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChpbmRleCA9IHNlbGVjdGVkR3JvdXBJbmRleCArIDE7IGluZGV4IDwgZGF0YVNvdXJjZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgaWYgKGRhdGFTb3VyY2VbaW5kZXhdLml0ZW0uZ3JvdXBBY3JvbnltPy5pbmNsdWRlcyhzZWxlY3RlZEdyb3VwQWNyb255bSkpIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZVtzZWxlY3RlZEdyb3VwSW5kZXhdLmxldmVsID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2Vbc2VsZWN0ZWRHcm91cEluZGV4XS5sZXZlbCA9PT0gZGF0YVNvdXJjZVtpbmRleF0ubGV2ZWxcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgZ3JvdXBzIGFscGhhYmV0aWNhbGx5IGZyb20gZ2l2ZW4gc3RhcnQgaW5kZXggdG8gZW5kIGluZGV4LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydEluZGV4XHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZEluZGV4XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBkYXRhU291cmNlLnNwbGljZShcclxuICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgZW5kSW5kZXggLSBzdGFydEluZGV4LFxyXG4gICAgICAuLi50aGlzLmdyb3Vwc1NvcnRpbmcodGhpcy5kYXRhU291cmNlLmRhdGEuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgcm9vdCBsZXZlbCBwYXJlbnQgZ3JvdXBzIGFscGhhYmV0aWNhbGx5LlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNvcnRQYXJlbnRHcm91cHNBbHBoYWJldGljYWxseSgpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBmb3IgKFxyXG4gICAgICBsZXQgZ3JvdXBBID0gMDtcclxuICAgICAgZ3JvdXBBIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgIGdyb3VwQSA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICkge1xyXG4gICAgICBsZXQgbG93ZXN0R3JvdXAgPSBncm91cEE7XHJcbiAgICAgIGZvciAoXHJcbiAgICAgICAgbGV0IGdyb3VwQiA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgZ3JvdXBCIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgICAgZ3JvdXBCID0gdGhpcy5nZXROZXh0R3JvdXAoZ3JvdXBCLCBkYXRhU291cmNlKVxyXG4gICAgICApIHtcclxuICAgICAgICBsb3dlc3RHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwc1NvcnRpbmcoW1xyXG4gICAgICAgICAgICBkYXRhU291cmNlW2dyb3VwQl0sXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VbbG93ZXN0R3JvdXBdLFxyXG4gICAgICAgICAgXSlbMF0gPT09IGRhdGFTb3VyY2VbZ3JvdXBCXVxyXG4gICAgICAgICAgICA/IGdyb3VwQlxyXG4gICAgICAgICAgICA6IGxvd2VzdEdyb3VwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsb3dlc3RHcm91cCAhPT0gZ3JvdXBBKSB7XHJcbiAgICAgICAgY29uc3QgbGVmdEdyb3VwID0gZGF0YVNvdXJjZS5zbGljZShcclxuICAgICAgICAgIGdyb3VwQSxcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0R3JvdXAgPSBkYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgbG93ZXN0R3JvdXAsXHJcbiAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2VSZWZlcmVuY2UgPSBkYXRhU291cmNlLnNsaWNlKDAsIGdyb3VwQSk7XHJcbiAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5wdXNoKC4uLnJpZ2h0R3JvdXApO1xyXG4gICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2UucHVzaChcclxuICAgICAgICAgIC4uLmRhdGFTb3VyY2Uuc2xpY2UoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGxvd2VzdEdyb3VwXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goLi4ubGVmdEdyb3VwKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goXHJcbiAgICAgICAgICAuLi5kYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UubGVuZ3RoXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhU291cmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVdGlsaXR5IG1ldGhvZCB0byBzb3J0IGdyb3VwcyBieSBncm91cCBhY3JvbnltIGluIGFzY2VuZGluZyBvcmRlci5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZVtdfSBncm91cHNcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdyb3Vwc1NvcnRpbmcoZ3JvdXBzOiBHcm91cE5vZGVbXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHJldHVybiBncm91cHMuc29ydCgoZ3JvdXBBOiBHcm91cE5vZGUsIGdyb3VwQjogR3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBBID0gZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBCID0gZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmIChsb3dlckdyb3VwQSA8IGxvd2VyR3JvdXBCKSByZXR1cm4gLTE7XHJcbiAgICAgIGVsc2UgaWYgKGxvd2VyR3JvdXBBID4gbG93ZXJHcm91cEIpIHJldHVybiAxO1xyXG4gICAgICBlbHNlIGlmIChsb3dlckdyb3VwQSA9PT0gbG93ZXJHcm91cEIpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGdyb3VwQT8uaXRlbT8uZ3JvdXBBY3JvbnltPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChncm91cEEuaXRlbS5ncm91cEFjcm9ueW1baW5kZXhdIDwgZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSlcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAgICAgZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSA+IGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bVtpbmRleF1cclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbWVudSBncm91cCBhY3Rpb25cclxuICAgKiBAcGFyYW0ge01lbnV9IG1lbnVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwQWN0aW9uc0NsaWNrKG1lbnU6IE1lbnUgfCBJY29uQnV0dG9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24gPSBtZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBleHBhbmQvY29sbGFwc2UgaWNvbiBiYXNlZCBvbiB0aGUgdG9nZ2xlXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7Kn0gIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFRvZ2dsZUJ1dHRvbkluZm8oZ3JvdXA6IEdyb3VwTm9kZSk6IEljb25CdXR0b24ge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQoZ3JvdXApKSByZXR1cm4gdGhpcy5taW51c0NpcmNsZUljb25CdXR0b247XHJcbiAgICByZXR1cm4gdGhpcy5wbHVzQ2lyY2xlSWNvbkJ1dHRvbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgZW1pdHRlZCBncm91cCBhY3Rpb25zIGV2ZW50LiBFbWl0cyB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXRcclxuICAgKiBmb3IgdGhlIHNlbGVjdGVkIGFjdGlvbjogdmlldyByb3N0ZXIsIGNyZWF0ZSBzdWIgZ3JvdXAsIGVkaXQgZ3JvdXAsXHJcbiAgICogZGVsZXRlIGdyb3VwLCBvciBtYW5hZ2UgaW50ZXJlc3QgZm9ybS5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBoYW5kbGVHcm91cEFjdGlvbnMoZ3JvdXA6IEdyb3VwTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLlZJRVdfUk9TVEVSKSB7XHJcbiAgICAgIHRoaXMudmlld1Jvc3RlckNsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5DUkVBVEVfU1VCX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgICB0aGlzLmNyZWF0ZUdyb3VwQ2xpY2suZW1pdChncm91cD8uaXRlbSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLkVESVRfR1JPVVApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XHJcbiAgICAgIGNvbnN0IGVkaXRHcm91cFBhcmVudEluZm8gPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/LmZpbHRlcihcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwPy5pdGVtPy5ncm91cFBhcmVudElkXHJcbiAgICAgIClbMF0/Lml0ZW07XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvID0ge1xyXG4gICAgICAgIGdyb3VwSW5mbzogZ3JvdXA/Lml0ZW0sXHJcbiAgICAgICAgcGFyZW50R3JvdXBJbmZvOiBlZGl0R3JvdXBQYXJlbnRJbmZvLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmVkaXRHcm91cENsaWNrLmVtaXQodGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5ERUxFVEVfR1JPVVApIHtcclxuICAgICAgdGhpcy5kZWxldGVHcm91cENsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uTUFOQUdFX0lOVEVSRVNUX0ZPUk1cclxuICAgICkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcclxuICAgICAgdGhpcy5tYW5hZ2VJbnRlcmVzdEZvcm1DbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZmlsdGVyZWQgbWVudSBpdGVtcyBiYXNlZCBvbiBncm91cHMgaGFzQ2hpbGRyZW4uXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7TWVudVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEZpbHRlcmVkR3JvdXBBY3Rpb25zKGdyb3VwOiBHcm91cE5vZGUpOiBNZW51W10ge1xyXG4gICAgY29uc3QgZmlsdGVyZWRNZW51OiBNZW51W10gPSBbXTtcclxuICAgIGNvbnN0IGlzQWRtaW5Hcm91cFR5cGUgPSBncm91cD8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8uYnVzaW5lc3NSdWxlPy5pc0FkbWluO1xyXG4gICAgY29uc3QgZ3JvdXBQZXJtaXNzaW9ucyA9IGdyb3VwPy5pdGVtPy5wZXJtaXNzaW9ucztcclxuICAgIHRoaXMubWVudUl0ZW1zPy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgIGUuaXNUb29sVGlwTmVlZGVkID0gZmFsc2U7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLlZJRVdfUk9TVEVSICYmXHJcbiAgICAgICAgICAoKGlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX1NZU1RFTV9VU0VSUyxcclxuICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICAgICkpIHx8XHJcbiAgICAgICAgICAgICghaXNBZG1pbkdyb3VwVHlwZSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfR1JPVVBfT0ZGSUNFUlMsXHJcbiAgICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9HUk9VUF9PRkZJQ0VSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfR1JPVVBfTUVNQkVSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLlZJRVdfQUxMX1JPU1RFUlNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfTUVNQkVSUyxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgKSkpKSkgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkVESVRfR1JPVVAgJiZcclxuICAgICAgICAgICF0aGlzLmdyb3Vwc1NlcnZpY2UuaXNHcm91cHNBbmRSb3N0ZXJzUmVzdHJpY3RlZCgpICYmXHJcbiAgICAgICAgICAhaXNBZG1pbkdyb3VwVHlwZSAmJlxyXG4gICAgICAgICAgKHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5FRElUX0dST1VQLFxyXG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfR1JPVVBTXHJcbiAgICAgICAgICAgICkpKSB8fFxyXG4gICAgICAgIChlPy5pZCA9PT0gR3JvdXBBY3Rpb24uREVMRVRFX0dST1VQICYmXHJcbiAgICAgICAgICAhdGhpcy5ncm91cHNTZXJ2aWNlLmlzR3JvdXBzQW5kUm9zdGVyc1Jlc3RyaWN0ZWQoKSAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuREVMRVRFX0dST1VQLFxyXG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfR1JPVVBTXHJcbiAgICAgICAgICAgICkpICYmXHJcbiAgICAgICAgICAhZ3JvdXA/Lml0ZW0/Lmhhc0NoaWxkcmVuKSB8fFxyXG4gICAgICAgIChlPy5pZCA9PT0gR3JvdXBBY3Rpb24uQ1JFQVRFX1NVQl9HUk9VUCAmJlxyXG4gICAgICAgICAgIXRoaXMuZ3JvdXBzU2VydmljZS5pc0dyb3Vwc0FuZFJvc3RlcnNSZXN0cmljdGVkKCkgJiZcclxuICAgICAgICAgIGdyb3VwPy5pdGVtPy5ncm91cFR5cGVJbmZvPy5idXNpbmVzc1J1bGU/LmFsbG93U3ViR3JvdXAgJiZcclxuICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuQ1JFQVRFX1NVQkdST1VQLFxyXG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zXHJcbiAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9BTExfR1JPVVBTXHJcbiAgICAgICAgICAgICkpICYmXHJcbiAgICAgICAgICAhaXNBZG1pbkdyb3VwVHlwZSkgfHxcclxuICAgICAgICAvLyBUT0RPOiBHYXRlIHdpdGggTUFOQUdFX0NVU1RPTV9JTlRFUkVTVF9RVUVTVElPTlMgcGVybWlzc2lvbiAoU1AzTS0zODApXHJcbiAgICAgICAgLy8gb25jZSBwZXJtaXNzaW9ucyBhcmUgaW1wbGVtZW50ZWQuIFNob3duIHVuY29uZGl0aW9uYWxseSBmb3Igbm93IHRvXHJcbiAgICAgICAgLy8gc3VwcG9ydCBVSSBkZXZlbG9wbWVudC5cclxuICAgICAgICBlPy5pZCA9PT0gR3JvdXBBY3Rpb24uTUFOQUdFX0lOVEVSRVNUX0ZPUk1cclxuICAgICAgKSB7XHJcbiAgICAgICAgZmlsdGVyZWRNZW51LnB1c2goZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gU2hvdyB0aGUgTWFuYWdlIEludGVyZXN0IEZvcm0gYWN0aW9uIGZpcnN0IChsZWZ0bW9zdCkgcGVyIHRoZSBkZXNpZ24uXHJcbiAgICBmaWx0ZXJlZE1lbnUuc29ydCgobWVudUEsIG1lbnVCKSA9PiB7XHJcbiAgICAgIGlmIChtZW51QT8uaWQgPT09IEdyb3VwQWN0aW9uLk1BTkFHRV9JTlRFUkVTVF9GT1JNKSByZXR1cm4gLTE7XHJcbiAgICAgIGlmIChtZW51Qj8uaWQgPT09IEdyb3VwQWN0aW9uLk1BTkFHRV9JTlRFUkVTVF9GT1JNKSByZXR1cm4gMTtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmaWx0ZXJlZE1lbnU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRha2VzIHRoZSBpbmRleCBhbmQgdGhlIGljb24gYnV0dG9uIGFzIGFyZ3VtZW50cyBhbmQgbmVlZHMgdG8gcmV0dXJuIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpY29uIGJ1dHRvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0ljb25CdXR0b259IGljb25CdXR0b25cclxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGljb25CdXR0b246IEljb25CdXR0b24pOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGljb25CdXR0b24uaWQ7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZVwiPlxyXG4gIDxtYXQtdHJlZVxyXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIlxyXG4gICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fcm9vdFwiXHJcbiAgICAjcm9vdFNlbGVjdG9yXHJcbiAgICByb2xlPVwidHJlZWdyaWRcIlxyXG4gID5cclxuICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcclxuICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgICAgIFttYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnRdPVwidHJlZVBhZGRpbmdJbmRlbnRcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1ib2R5LW1kLTE2XCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUgdy0xMDAgZC1mbGV4XCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRCb3hTaGFkb3coKVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICBub2RlPy5pdGVtPy5ncm91cFBhcmVudElkICYmXHJcbiAgICAgICAgICBncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgIT09IGdyb3VwRnVuY3Rpb25UeXBlLkZJTFRFUiAmJlxyXG4gICAgICAgICAgZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpICE9PSBncm91cEZ1bmN0aW9uVHlwZS5TRUFSQ0hcclxuICAgICAgICAgICAgPyAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZS13aGl0ZS1iZydcclxuICAgICAgICAgICAgOiAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZSdcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICFpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmUgPyAnaWVlZXNhLXRyZWVfX2NvbGxhcHNlLWljb24nIDogJydcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgID48L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cE5vZGVPdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZEdyb3Vwc1wiXHJcbiAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cInRyZWVQYWRkaW5nSW5kZW50XCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNiBpZWVlc2EtdHJlZV9fcGFyZW50LW5vZGUtd3JhcHBlclwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBbbmdDbGFzc109XCJbXHJcbiAgICAgICAgICB0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2llZWVzYS10cmVlX19leHBhbmRlZCcgOiAnJyxcclxuICAgICAgICAgIG5vZGU/Lml0ZW0/Lmdyb3VwUGFyZW50SWQgJiZcclxuICAgICAgICAgIGdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSAhPT0gZ3JvdXBGdW5jdGlvblR5cGUuRklMVEVSICYmXHJcbiAgICAgICAgICBncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgIT09IGdyb3VwRnVuY3Rpb25UeXBlLlNFQVJDSFxyXG4gICAgICAgICAgICA/ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlLXdoaXRlLWJnJ1xyXG4gICAgICAgICAgICA6ICdpZWVlc2EtdHJlZV9fcm9vdC1ub2RlJ1xyXG4gICAgICAgIF1cIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUgdy0xMDAgZC1mbGV4XCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRCb3hTaGFkb3coKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IHJvbGU9XCJncmlkY2VsbFwiPlxyXG4gICAgICAgICAgPGllZWVzYS1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cIiFpc0dyb3VwU2VhcmNoT3JGaWx0ZXJBY3RpdmVcIlxyXG4gICAgICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cInZpZXdDaGlsZEdyb3Vwcyhub2RlKVwiXHJcbiAgICAgICAgICAgIFtpY29uQnV0dG9uXT1cImdldFRvZ2dsZUJ1dHRvbkluZm8obm9kZSlcIlxyXG4gICAgICAgICAgPjwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGllZWVzYUdyb3VwTm9kZU91dGxldDtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNpZWVlc2FHcm91cE5vZGVPdXRsZXQgbGV0LW5vZGU+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImllZWVzYUdyb3VwSW5mb091dGxldDsgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVwiXHJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGQtbm9uZSBnYXAtMyBkLXNtLWZsZXggZC1tZC1mbGV4IGQtbGctZmxleCBpZWVlc2EtdHJlZV9fZ3JvdXAtYWN0aW9uc1wiXHJcbiAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgIGllZWVzYUdyb3VwQWN0aW9uc091dGxldDtcclxuICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUgfVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aWVlZXNhLW1lbnVcclxuICAgICAgICBbYnV0dG9uXT1cImNvbnN0YW50cz8udmlld0dyb3Vwcz8uZ3JvdXBBY3Rpb25zTWVudVwiXHJcbiAgICAgICAgW21lbnVJdGVtc109XCJnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhub2RlKVwiXHJcbiAgICAgICAgKG1lbnVJdGVtQ2xpY2spPVwib25Hcm91cEFjdGlvbnNDbGljaygkZXZlbnQpOyBoYW5kbGVHcm91cEFjdGlvbnMobm9kZSlcIlxyXG4gICAgICAgIGNsYXNzPVwiZC1sZy1ub25lIGQtbWQtbm9uZSBkLXNtLW5vbmVcIlxyXG4gICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgID48L2llZWVzYS1tZW51PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBJbmZvT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVfX2dyb3VwLWluZm8td3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZV9fZ3JvdXAtaW5mbyBkLWZsZXggYWxpZ24taXRlbXMtYmFzZWxpbmVcIj5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtbmFtZSBpZWVlc2EtdGl0bGUtbWQtMThcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJub2RlPy5pdGVtPy5ncm91cE5hbWVcIlxyXG4gICAgICAgICAgICBpZWVlc2FUZXh0VHJ1bmNhdGVkXHJcbiAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgICAgICA+e3sgbm9kZT8uaXRlbT8uZ3JvdXBOYW1lIH19PC9wPlxyXG4gICAgICAgICAgPHBcclxuICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1hY3JvbnltIGllZWVzYS10aXRsZS1zbS0xNlwiXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIm5vZGU/Lml0ZW0/Lmdyb3VwQWNyb255bVwiXHJcbiAgICAgICAgICAgIGllZWVzYVRleHRUcnVuY2F0ZWRcclxuICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICAgID57eyBub2RlPy5pdGVtPy5ncm91cEFjcm9ueW0gfX08L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLWRlc2NcIj5cclxuICAgICAgICAgIHt7IG5vZGU/Lml0ZW0/Lmdyb3VwVHlwZUluZm8/Lm5hbWUgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNpZWVlc2FHcm91cEFjdGlvbnNPdXRsZXQgbGV0LW5vZGU+XHJcbiAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhub2RlKTsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgICBbaWNvbkJ1dHRvbl09XCJpdGVtXCJcclxuICAgICAgICAoaWNvbkJ1dHRvbkNsaWNrKT1cIlxyXG4gICAgICAgICAgb25Hcm91cEFjdGlvbnNDbGljaygkZXZlbnQpOyBoYW5kbGVHcm91cEFjdGlvbnMobm9kZSlcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvaWVlZXNhLWljb24tYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L21hdC10cmVlPlxyXG48L2Rpdj5cclxuIl19
|
|
745
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBR04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxhQUFhLEVBRWIsbUJBQW1CLEVBRW5CLHNCQUFzQixFQUV2QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0vQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9B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c0JBRG5CLEtBQUs7Z0JBR0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLHVCQUF1QjtzQkFBaEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdGFibGUsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBNZW51Q29tcG9uZW50LFxyXG4gIE1lbnUsXHJcbiAgSWNvbkJ1dHRvbkNvbXBvbmVudCxcclxuICBJY29uQnV0dG9uLFxyXG4gIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgQnJlYWtwb2ludE9ic2VydmVyU2VydmljZVxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBHcm91cEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1hY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbGxlY3Rpb25WaWV3ZXIsXHJcbiAgU2VsZWN0aW9uQ2hhbmdlLFxyXG4gIERhdGFTb3VyY2UsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdFRyZWVNb2R1bGUsIE1hdFRyZWVOb2RlUGFkZGluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBHcm91cEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRHcm91cEFuZFBhcmVudEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZWRpdC1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JvdXBGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtZnVuY3Rpb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbi8qKlxyXG4gKiBEeW5hbWljIEZsYXQgbm9kZSBjcmVhdGVzIGEgbm9kZSBzdHJ1Y3R1cmVcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBOb2RlXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgR3JvdXBOb2RlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGl0ZW06IEdyb3VwSW5mbyxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGxldmVsID0gMSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGV4cGFuZGFibGUgPSBmYWxzZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvblxyXG4gICkge31cclxufVxyXG5cclxuLyoqXHJcbiAqIEdyb3VwcyBzdG9yZXMgdGhlIHBhcmVudCBub2RlcyBhbmQgY2hpbGQgbm9kZXNcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcclxuICByb290TGV2ZWxOb2RlcyE6IEdyb3VwSW5mb1tdO1xyXG4gIC8qKiBJbml0aWFsIGRhdGEgZnJvbSBkYXRhYmFzZSAqL1xyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICAvKipcclxuICAgKiBHZXQgdGhlIENoaWxkIGdyb3VwcyBpbmZvXHJcbiAgICogQHJldHVybiB7Kn0gIHtHcm91cEluZm9bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgZ2V0Q2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBDaGlsZCBncm91cHMgaW5mb1xyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IHZhbHVlXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1xyXG4gICAqL1xyXG4gIHNldENoaWxkR3JvdXBzSW5mbyh2YWx1ZTogR3JvdXBJbmZvW10pOiB2b2lkIHtcclxuICAgIHRoaXMuY2hpbGRHcm91cHMgPSB2YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgZ3JvdXBzIGRhdGEgYW5kIGNyZWF0ZXMgdGhlIG5vZGUgc3RydWN0dXJlIGZvciBtYXQgdHJlZVxyXG4gICAqIEBwYXJhbSB7R3JvdXBJbmZvW119IGRhdGFcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNcclxuICAgKi9cclxuICBpbml0aWFsRGF0YShkYXRhOiBHcm91cEluZm9bXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHRoaXMucm9vdExldmVsTm9kZXMgPSBkYXRhO1xyXG4gICAgcmV0dXJuIHRoaXMucm9vdExldmVsTm9kZXM/Lm1hcChcclxuICAgICAgKG5vZGUpID0+IG5ldyBHcm91cE5vZGUobm9kZSwgMCwgdGhpcy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIG5vZGUgaXMgZXhwYW5kYWJsZSBvciBub3RcclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb30gbm9kZVxyXG4gICAqIEByZXR1cm4geyp9ICB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzXHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlKG5vZGU6IEdyb3VwSW5mbyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKCEhbm9kZT8uY2hpbGRyZW4gJiYgbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDApIHx8IG5vZGU/Lmhhc0NoaWxkcmVuXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRHluYW1pYyBEYXRhIFNvdXJjZSBoYW5kbGVzIHRoZSBjb25uZWN0aW9uIHdpdGggZHluYW1pYyBkYXRhIGJhc2VcclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgR3JvdXBzRGF0YVNvdXJjZVxyXG4gKiBAaW1wbGVtZW50cyB7RGF0YVNvdXJjZTxHcm91cE5vZGU+fVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdyb3Vwc0RhdGFTb3VyY2UgaW1wbGVtZW50cyBEYXRhU291cmNlPEdyb3VwTm9kZT4ge1xyXG4gIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBkYXRhQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cE5vZGVbXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHVwZGF0ZWQgdHJlZSBjb250cm9sIGRhdGFcclxuICAgKiBAdHlwZSB7R3JvdXBOb2RlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICBnZXQgZGF0YSgpOiBHcm91cE5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhQ2hhbmdlPy52YWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YSB0byB0cmVlIGNvbnRyb2wgYW5kIGVtaXQgdGhlIHZhbHVlIHRvIGludGltYXRlIHRoZSBkYXRhIGNoYW5nZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgc2V0IGRhdGEodmFsdWU6IEdyb3VwTm9kZVtdKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxHcm91cE5vZGU+LFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGRhdGFiYXNlOiBHcm91cHMgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGRhdGEgYmFzZSBhbmQgbWF0IHRyZWVcclxuICAgKiBAcGFyYW0ge0NvbGxlY3Rpb25WaWV3ZXJ9IGNvbGxlY3Rpb25WaWV3ZXJcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8R3JvdXBOb2RlW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNEYXRhU291cmNlXHJcbiAgICovXHJcbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxHcm91cE5vZGVbXT4ge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5zaW9uTW9kZWw/LmNoYW5nZWRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoY2hhbmdlIGFzIFNlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+KS5hZGRlZCB8fFxyXG4gICAgICAgICAgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8R3JvdXBOb2RlPikucmVtb3ZlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVUcmVlQ29udHJvbChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gbWVyZ2UoY29sbGVjdGlvblZpZXdlcj8udmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKFxyXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiB3aXRoIG1hdCB0cmVlXHJcbiAgICogQHBhcmFtIHtDb2xsZWN0aW9uVmlld2VyfSBjb2xsZWN0aW9uVmlld2VyXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0RhdGFTb3VyY2VcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uLCBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcy9yZW1vdmVzIHRoZSBjaGlsZCBub2RlcyB3aGlsZSBleHBhbmRzL2NvbGxhcHNlcyB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkNoYW5nZTxHcm91cE5vZGU+fSBjaGFuZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPEdyb3VwTm9kZT4pIHtcclxuICAgIGlmIChjaGFuZ2U/LmFkZGVkKSB7XHJcbiAgICAgIGNoYW5nZS5hZGRlZD8uZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIHRydWUpKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2U/LnJlbW92ZWQpIHtcclxuICAgICAgY2hhbmdlLnJlbW92ZWRcclxuICAgICAgICAuc2xpY2UoKVxyXG4gICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG5vZGUsIGFkZC9yZW1vdmVzIHRoZSBub2RlIGZyb20gZGlzcGxheVxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBjbGlja2VkTm9kZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzRGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHRvZ2dsZU5vZGUoY2xpY2tlZE5vZGU6IEdyb3VwTm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZGF0YWJhc2U/LmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGE/LmluZGV4T2YoY2xpY2tlZE5vZGUpO1xyXG4gICAgaWYgKCFjaGlsZHJlbiB8fCBpbmRleCA8IDApIHtcclxuICAgICAgLy8gSWYgbm8gY2hpbGRyZW4sIG9yIGNhbm5vdCBmaW5kIHRoZSBub2RlLCBubyBvcFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4cGFuZCkge1xyXG4gICAgICBjbGlja2VkTm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbj8ubWFwKFxyXG4gICAgICAgIChub2RlKSA9PlxyXG4gICAgICAgICAgbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgY2xpY2tlZE5vZGU/LmxldmVsICsgMSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZT8uaXNFeHBhbmRhYmxlKG5vZGUpXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZGF0YT8uc3BsaWNlKGluZGV4ICsgMSwgMCwgLi4ubm9kZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcclxuICAgICAgICBpIDwgdGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5kYXRhW2ldPy5sZXZlbCA+IGNsaWNrZWROb2RlPy5sZXZlbDtcclxuICAgICAgICBpKyssIGNvdW50KysgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XHJcbiAgICAgICkge31cclxuICAgICAgdGhpcy5kYXRhPy5zcGxpY2UoaW5kZXggKyAxLCBjb3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoZSBjaGFuZ2VcclxuICAgIHRoaXMuZGF0YUNoYW5nZT8ubmV4dCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogRGlzcGxheXMgdGhlIGdyb3VwcyB3aGVyZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB0cmVlIHZpZXcvaGllcmFyY2h5LlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBUcmVlVmlld0NvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUcmVlTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICBJY29uQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIFRleHRUcnVuY2F0ZWREaXJlY3RpdmUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IGNvbnN0YW50cztcclxuICBidXR0b25zOiBNZW51W10gPSB0aGlzLmNvbnN0YW50cz8udmlld0dyb3Vwcz8uYnV0dG9ucztcclxuICB0cmVlUGFkZGluZ0luZGVudDogbnVtYmVyID0gdGhpcy5jb25zdGFudHM/LnZpZXdHcm91cHM/LnRyZWVQYWRkaW5nSW5kZW50O1xyXG4gIHNlbGVjdGVkR3JvdXAhOiBHcm91cE5vZGU7XHJcbiAgc2VsZWN0ZWRHcm91cEFjdGlvbiE6IE1lbnUgfCBJY29uQnV0dG9uO1xyXG4gIHRyZWVDb250cm9sITogRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT47XHJcbiAgZGF0YVNvdXJjZSE6IEdyb3Vwc0RhdGFTb3VyY2U7XHJcbiAgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIG1hdFRyZWVOb2RlUGFkZGluZyE6IE1hdFRyZWVOb2RlUGFkZGluZzxHcm91cE5vZGU+O1xyXG4gIHBsdXNDaXJjbGVJY29uQnV0dG9uOiBJY29uQnV0dG9uID0gdGhpcy5idXR0b25zWzRdO1xyXG4gIG1pbnVzQ2lyY2xlSWNvbkJ1dHRvbjogSWNvbkJ1dHRvbiA9IHRoaXMuYnV0dG9uc1s1XTtcclxuICBlZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8hOiBFZGl0R3JvdXBBbmRQYXJlbnRJbmZvO1xyXG4gIHBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvblR5cGU7XHJcblxyXG4gIG1lbnVJdGVtczogTWVudVtdID0gdGhpcy5idXR0b25zPy5maWx0ZXIoXHJcbiAgICAoZSkgPT5cclxuICAgICAgZS5pZCAhPT0gR3JvdXBBY3Rpb24/LkVYUEFORF9HUk9VUF9WSUVXICYmXHJcbiAgICAgIGUuaWQgIT09IEdyb3VwQWN0aW9uPy5DT0xMQVBTRV9HUk9VUF9WSUVXXHJcbiAgKTtcclxuICBwcml2YXRlIHBhcmVudEdyb3VwcyE6IEdyb3VwSW5mb1tdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhcmVudEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLnBhcmVudEdyb3VwcyA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICBnZXQgcGFyZW50R3JvdXBzSW5mbygpOiBHcm91cEluZm9bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRHcm91cHM7XHJcbiAgfVxyXG4gIHByaXZhdGUgY2hpbGRHcm91cHMhOiBHcm91cEluZm9bXTtcclxuICBASW5wdXQoKVxyXG4gIHNldCBjaGlsZEdyb3Vwc0luZm8odmFsdWU6IEdyb3VwSW5mb1tdKSB7XHJcbiAgICB0aGlzLmNoaWxkR3JvdXBzID0gdmFsdWU7XHJcbiAgICB0aGlzLmxvYWRDaGlsZEdyb3VwcygpO1xyXG4gIH1cclxuICBnZXQgY2hpbGRHcm91cHNJbmZvKCk6IEdyb3VwSW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkR3JvdXBzO1xyXG4gIH1cclxuICBwcml2YXRlIGlzR3JvdXBTZWFyY2hPckZpbHRlciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0dyb3VwU2VhcmNoT3JGaWx0ZXIgPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGlzR3JvdXBTZWFyY2hPckZpbHRlckFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzR3JvdXBTZWFyY2hPckZpbHRlcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBkZWxldGVkR3JvdXBJZCE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHNldCBkZWxldGVkR3JvdXBJZEluZm8oaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IGlkO1xyXG4gICAgdGhpcy5kZWxldGVHcm91cE5vZGUodGhpcy5kZWxldGVkR3JvdXBJZCk7XHJcbiAgfVxyXG4gIGdldCBkZWxldGVkR3JvdXBJZEluZm8oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmRlbGV0ZWRHcm91cElkO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHVzZXJHcm91cFBlcm1pc3Npb25zITogR3JvdXBQZXJtaXNzaW9uW107XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVHcm91cENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgZWRpdEdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRHcm91cEFuZFBhcmVudEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZUdyb3VwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdyb3VwSW5mbz4oKTtcclxuICBAT3V0cHV0KCkgdmlld1Jvc3RlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgQE91dHB1dCgpIG1hbmFnZUludGVyZXN0Rm9ybUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHcm91cEluZm8+KCk7XHJcbiAgaXNNb2JpbGVWaWV3ID0gZmFsc2U7XHJcbiAgZ3JvdXBGdW5jdGlvblR5cGUgPSBHcm91cEZ1bmN0aW9uVHlwZTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGRhdGFiYXNlOiBHcm91cHMsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZ3JvdXBzU2VydmljZTogR3JvdXBzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlOiBCcmVha3BvaW50T2JzZXJ2ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclNlcnZpY2VcclxuICAgICAgLmdldEJyZWFrcG9pbnQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogeyBtYXRjaGVzOiBib29sZWFuIH0pID0+IHtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHJlc3VsdD8ubWF0Y2hlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSB0cmVlIHZpZXcgY29tcG9uZW50XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEdyb3VwRGF0YVNvdXJjZSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBBc3NpZ24gQVJJQSByb2xlIGZvciBhbGwgbWF0IHRyZWUgbm9kZXMgYXMgXCJyb3dcIlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YUNoYW5nZVxyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGVzID1cclxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9dHJlZWl0ZW1dJyk7XHJcbiAgICAgICAgdHJlZUl0ZW1Ob2Rlcz8uZm9yRWFjaCgobm9kZTogSFRNTEVsZW1lbnQpID0+IChub2RlLnJvbGUgPSAncm93JykpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgbGV2ZWwgb2YgdGhlIG5vZGVcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldExldmVsID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8ubGV2ZWw7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyB0aGUgbm9kZSBpcyBleHBhbmRhYmxlIG9yIG5vdFxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBub2RlXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaXNFeHBhbmRhYmxlID0gKG5vZGU6IEdyb3VwTm9kZSkgPT4gbm9kZT8uZXhwYW5kYWJsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHBhc3NlZCBub2RlIGhhcyBjaGlsZHJlbiBvdGhlcndpc2UgZmFsc2VcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gbm9kZVxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgaGFzQ2hpbGRHcm91cHMgPSAoaW5kZXg6IG51bWJlciwgX25vZGVEYXRhOiBHcm91cE5vZGUpID0+XHJcbiAgICBfbm9kZURhdGEuZXhwYW5kYWJsZTtcclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgZ3JvdXAgaW5mbyB3aGVuIHRoZSB0b2dnbGUgZ3JvdXAgaXMgY2xpY2tlZCBvciB0b2dnbGVzIHRoZSBncm91cCB2aWV3XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdmlld0NoaWxkR3JvdXBzKG5vZGU6IEdyb3VwTm9kZSkge1xyXG4gICAgaWYgKCFub2RlPy5pdGVtPy5oYXNDaGlsZHJlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sPy50b2dnbGUobm9kZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2Uuc2V0R3JvdXBGdW5jdGlvblR5cGUoR3JvdXBGdW5jdGlvblR5cGUuVE9HR0xFKTtcclxuICAgICAgdGhpcy50b2dnbGVHcm91cENsaWNrLmVtaXQobm9kZT8uaXRlbSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IG5vZGU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGJveCBzaGFkb3cgYmFzZWQgb24gdGhlIGdyb3VwIHR5cGUgbGVnZW5kIGNvbG9yXHJcbiAgICogQHJldHVybiB7Kn1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGdldEJveFNoYWRvdygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYm94U2hhZG93OiAnMHB4IDFweCAwcHggMHB4ICNjOWNiZDAgaW5zZXQnLFxyXG4gICAgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgZGF0YVNvdXJjZSB3aXRoIHBhcmVudCBncm91cHMgZGF0YVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNldEdyb3VwRGF0YVNvdXJjZSgpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5kYXRhU291cmNlICYmXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBhcmVudEdyb3Vwc0luZm8/LmZvckVhY2goKHBhcmVudEdyb3VwTm9kZSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmluZEluZGV4KFxyXG4gICAgICAgICAgICAobm9kZSkgPT4gbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT0gcGFyZW50R3JvdXBOb2RlPy5ncm91cElkXHJcbiAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgbmV3R3JvdXBOb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgICAgcGFyZW50R3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShwYXJlbnRHcm91cE5vZGUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZ3JvdXBOb2Rlc1JlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YTtcclxuICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2U/LnB1c2gobmV3R3JvdXBOb2RlKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2Rlc1JlZmVyZW5jZTtcclxuICAgICAgICAgIHRoaXMuc29ydFBhcmVudEdyb3Vwc0FscGhhYmV0aWNhbGx5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5FRElUXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lZGl0R3JvdXAodGhpcy5wYXJlbnRHcm91cHNJbmZvKTtcclxuICAgICAgdGhpcy5zb3J0UGFyZW50R3JvdXBzQWxwaGFiZXRpY2FsbHkoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEdyb3VwTm9kZT4oXHJcbiAgICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgR3JvdXBzRGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLmRhdGFiYXNlKTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFiYXNlPy5pbml0aWFsRGF0YSh0aGlzLnBhcmVudEdyb3Vwc0luZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1cGRhdGVkIG5vZGUgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge0dyb3VwSW5mb1tdfSBncm91cHNJbmZvXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZWRpdEdyb3VwKGdyb3Vwc0luZm86IEdyb3VwSW5mb1tdKSB7XHJcbiAgICBjb25zdCBncm91cE5vZGVSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBjb25zdCBlZGl0ZWROb2RlID0gZ3JvdXBzSW5mbz8uZmluZChcclxuICAgICAgKG5vZGUpID0+XHJcbiAgICAgICAgbm9kZT8uZ3JvdXBJZCA9PT0gdGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8/Lmdyb3VwSW5mbz8uZ3JvdXBJZFxyXG4gICAgKTtcclxuICAgIGdyb3VwTm9kZVJlZmVyZW5jZT8uZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbm9kZT8uaXRlbT8uZ3JvdXBJZCA9PT1cclxuICAgICAgICB0aGlzLmVkaXRHcm91cEFuZFBhcmVudEdyb3VwSW5mbz8uZ3JvdXBJbmZvPy5ncm91cElkXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IG5vT2ZDaGlsZHJlblJlZmVyZW5jZSA9IG5vZGUuaXRlbS5ub09mQ2hpbGRyZW47XHJcbiAgICAgICAgbm9kZS5pdGVtID0gZWRpdGVkTm9kZSBhcyBHcm91cEluZm87XHJcbiAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IG5vT2ZDaGlsZHJlblJlZmVyZW5jZTtcclxuICAgICAgICBub2RlLmV4cGFuZGFibGUgPSB0aGlzLmRhdGFiYXNlLmlzRXhwYW5kYWJsZShub2RlPy5pdGVtKTtcclxuICAgICAgICBpZiAobm9kZS5pdGVtLmhhc0NoaWxkcmVuICYmIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSkge1xyXG4gICAgICAgICAgdGhpcy50cmVlQ29udHJvbC50b2dnbGUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZ3JvdXBOb2RlUmVmZXJlbmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBMb2FkcyB0aGUgY2hpbGQgZ3JvdXBzIGFuZCB1cGRhdGVzIHRoZSB0cmVlIHZpZXcuXHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbG9hZENoaWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5kYXRhYmFzZT8uc2V0Q2hpbGRHcm91cHNJbmZvKHRoaXMuY2hpbGRHcm91cHNJbmZvKTtcclxuICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpID09PSBHcm91cEZ1bmN0aW9uVHlwZS5DUkVBVEVcclxuICAgICkge1xyXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbT8uaGFzQ2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBQYXJlbnROb2RlID0gbmV3IEdyb3VwTm9kZShcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwLmxldmVsLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZ3JvdXBOb2Rlc1JlZmVyZW5jZS5zcGxpY2UoXHJcbiAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSxcclxuICAgICAgICAgIDEsXHJcbiAgICAgICAgICBncm91cFBhcmVudE5vZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKGdyb3VwUGFyZW50Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZCh0aGlzLnNlbGVjdGVkR3JvdXApKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmRhdGFiYXNlLmdldENoaWxkR3JvdXBzSW5mbygpO1xyXG4gICAgICAgIGNoaWxkcmVuPy5mb3JFYWNoKChncm91cE5vZGUpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKG5vZGUpID0+IG5vZGU/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwTm9kZT8uZ3JvdXBJZFxyXG4gICAgICAgICAgICApID09PSAtMVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0dyb3VwTm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgZ3JvdXBOb2RlLFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cD8ubGV2ZWwgKyAxLFxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2U/LmlzRXhwYW5kYWJsZShncm91cE5vZGUpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTm9kZXNSZWZlcmVuY2UgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE7XHJcbiAgICAgICAgICAgIGdyb3VwTm9kZXNSZWZlcmVuY2UuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChub2RlLml0ZW0uZ3JvdXBJZCA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwLml0ZW0uZ3JvdXBJZCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5pdGVtLm5vT2ZDaGlsZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLnNwbGljZShcclxuICAgICAgICAgICAgICBncm91cE5vZGVzUmVmZXJlbmNlLmluZGV4T2YodGhpcy5zZWxlY3RlZEdyb3VwKSArIDEsXHJcbiAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICBuZXdHcm91cE5vZGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBncm91cE5vZGVzUmVmZXJlbmNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLkVESVRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVkaXRHcm91cCh0aGlzLmNoaWxkR3JvdXBzSW5mbyk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoXHJcbiAgICAgICAgc2VsZWN0ZWRQYXJlbnRHcm91cEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmdldE5leHRHcm91cChzZWxlY3RlZFBhcmVudEdyb3VwSW5kZXgsIHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgPT09IEdyb3VwRnVuY3Rpb25UeXBlLlRPR0dMRVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2w/LnRvZ2dsZSh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgdXBkYXRlcyB0aGUgdHJlZSB2aWV3LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZWxldGVkR3JvdXBJZFxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRlbGV0ZUdyb3VwTm9kZShkZWxldGVkR3JvdXBJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbCAmJiBkZWxldGVkR3JvdXBJZCkge1xyXG4gICAgICBjb25zdCBkZWxldGVkR3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAobm9kZSkgPT4gbm9kZS5pdGVtLmdyb3VwSWQgPT09IGRlbGV0ZWRHcm91cElkXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGRlbGV0ZWRHcm91cCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmF0KGRlbGV0ZWRHcm91cEluZGV4KTtcclxuICAgICAgY29uc3QgZGF0YVNvdXJjZVJlZmVyZW5jZSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgICBpZiAoZGVsZXRlZEdyb3VwSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKGRlbGV0ZWRHcm91cD8uaXRlbS5ncm91cFBhcmVudElkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWxldGVkUGFyZW50R3JvdXBJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUuaXRlbS5ncm91cElkID09PSBkZWxldGVkR3JvdXA/Lml0ZW0uZ3JvdXBQYXJlbnRJZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChkZWxldGVkUGFyZW50R3JvdXBJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgZGVsZXRlZFBhcmVudEdyb3VwID0gdGhpcy5kYXRhU291cmNlLmRhdGEuYXQoXHJcbiAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwSW5kZXhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGRlbGV0ZWRQYXJlbnRHcm91cCAmJiBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5ub09mQ2hpbGRyZW4gPVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuIC0gMTtcclxuICAgICAgICAgICAgICBpZiAoZGVsZXRlZFBhcmVudEdyb3VwLml0ZW0ubm9PZkNoaWxkcmVuID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAuaXRlbS5oYXNDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IG5ldyBHcm91cE5vZGUoXHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJlbnRHcm91cC5pdGVtLFxyXG4gICAgICAgICAgICAgICAgICBkZWxldGVkUGFyZW50R3JvdXAubGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXggLSAxLCAyLCBuZXdOb2RlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5zcGxpY2UoZGVsZXRlZEdyb3VwSW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnNwbGljZShkZWxldGVkR3JvdXBJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgdGhpcy5kZWxldGVkR3JvdXBJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgbmV4dCBncm91cCBhdCB0aGUgc2FtZSBsZXZlbC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0ZWRHcm91cEluZGV4XHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGVbXX0gZGF0YVNvdXJjZVxyXG4gICAqIEByZXR1cm4geyp9ICB7bnVtYmVyfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE5leHRHcm91cChzZWxlY3RlZEdyb3VwSW5kZXg6IG51bWJlciwgZGF0YVNvdXJjZTogR3JvdXBOb2RlW10pOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEFjcm9ueW0gPVxyXG4gICAgICBkYXRhU291cmNlW3NlbGVjdGVkR3JvdXBJbmRleF0uaXRlbS5ncm91cEFjcm9ueW07XHJcbiAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgZm9yIChpbmRleCA9IHNlbGVjdGVkR3JvdXBJbmRleCArIDE7IGluZGV4IDwgZGF0YVNvdXJjZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgaWYgKGRhdGFTb3VyY2VbaW5kZXhdLml0ZW0uZ3JvdXBBY3JvbnltPy5pbmNsdWRlcyhzZWxlY3RlZEdyb3VwQWNyb255bSkpIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZVtzZWxlY3RlZEdyb3VwSW5kZXhdLmxldmVsID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2Vbc2VsZWN0ZWRHcm91cEluZGV4XS5sZXZlbCA9PT0gZGF0YVNvdXJjZVtpbmRleF0ubGV2ZWxcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgZ3JvdXBzIGFscGhhYmV0aWNhbGx5IGZyb20gZ2l2ZW4gc3RhcnQgaW5kZXggdG8gZW5kIGluZGV4LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydEluZGV4XHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZEluZGV4XHJcbiAgICogQG1lbWJlcm9mIFRyZWVWaWV3Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc29ydENoaWxkR3JvdXBzQWxwaGFiZXRpY2FsbHkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBkYXRhU291cmNlLnNwbGljZShcclxuICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgZW5kSW5kZXggLSBzdGFydEluZGV4LFxyXG4gICAgICAuLi50aGlzLmdyb3Vwc1NvcnRpbmcodGhpcy5kYXRhU291cmNlLmRhdGEuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YVNvdXJjZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU29ydCB0aGUgcm9vdCBsZXZlbCBwYXJlbnQgZ3JvdXBzIGFscGhhYmV0aWNhbGx5LlxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHNvcnRQYXJlbnRHcm91cHNBbHBoYWJldGljYWxseSgpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlLmRhdGE7XHJcbiAgICBmb3IgKFxyXG4gICAgICBsZXQgZ3JvdXBBID0gMDtcclxuICAgICAgZ3JvdXBBIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgIGdyb3VwQSA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICkge1xyXG4gICAgICBsZXQgbG93ZXN0R3JvdXAgPSBncm91cEE7XHJcbiAgICAgIGZvciAoXHJcbiAgICAgICAgbGV0IGdyb3VwQiA9IHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgZ3JvdXBCIDwgZGF0YVNvdXJjZS5sZW5ndGg7XHJcbiAgICAgICAgZ3JvdXBCID0gdGhpcy5nZXROZXh0R3JvdXAoZ3JvdXBCLCBkYXRhU291cmNlKVxyXG4gICAgICApIHtcclxuICAgICAgICBsb3dlc3RHcm91cCA9XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwc1NvcnRpbmcoW1xyXG4gICAgICAgICAgICBkYXRhU291cmNlW2dyb3VwQl0sXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VbbG93ZXN0R3JvdXBdLFxyXG4gICAgICAgICAgXSlbMF0gPT09IGRhdGFTb3VyY2VbZ3JvdXBCXVxyXG4gICAgICAgICAgICA/IGdyb3VwQlxyXG4gICAgICAgICAgICA6IGxvd2VzdEdyb3VwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsb3dlc3RHcm91cCAhPT0gZ3JvdXBBKSB7XHJcbiAgICAgICAgY29uc3QgbGVmdEdyb3VwID0gZGF0YVNvdXJjZS5zbGljZShcclxuICAgICAgICAgIGdyb3VwQSxcclxuICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJpZ2h0R3JvdXAgPSBkYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgbG93ZXN0R3JvdXAsXHJcbiAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2VSZWZlcmVuY2UgPSBkYXRhU291cmNlLnNsaWNlKDAsIGdyb3VwQSk7XHJcbiAgICAgICAgZGF0YVNvdXJjZVJlZmVyZW5jZS5wdXNoKC4uLnJpZ2h0R3JvdXApO1xyXG4gICAgICAgIGRhdGFTb3VyY2VSZWZlcmVuY2UucHVzaChcclxuICAgICAgICAgIC4uLmRhdGFTb3VyY2Uuc2xpY2UoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TmV4dEdyb3VwKGdyb3VwQSwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGxvd2VzdEdyb3VwXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goLi4ubGVmdEdyb3VwKTtcclxuICAgICAgICBkYXRhU291cmNlUmVmZXJlbmNlLnB1c2goXHJcbiAgICAgICAgICAuLi5kYXRhU291cmNlLnNsaWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldE5leHRHcm91cChsb3dlc3RHcm91cCwgZGF0YVNvdXJjZSksXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UubGVuZ3RoXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkYXRhU291cmNlID0gZGF0YVNvdXJjZVJlZmVyZW5jZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhU291cmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVdGlsaXR5IG1ldGhvZCB0byBzb3J0IGdyb3VwcyBieSBncm91cCBhY3JvbnltIGluIGFzY2VuZGluZyBvcmRlci5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZVtdfSBncm91cHNcclxuICAgKiBAcmV0dXJuIHsqfSAge0dyb3VwTm9kZVtdfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdyb3Vwc1NvcnRpbmcoZ3JvdXBzOiBHcm91cE5vZGVbXSk6IEdyb3VwTm9kZVtdIHtcclxuICAgIHJldHVybiBncm91cHMuc29ydCgoZ3JvdXBBOiBHcm91cE5vZGUsIGdyb3VwQjogR3JvdXBOb2RlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBBID0gZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGxvd2VyR3JvdXBCID0gZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmIChsb3dlckdyb3VwQSA8IGxvd2VyR3JvdXBCKSByZXR1cm4gLTE7XHJcbiAgICAgIGVsc2UgaWYgKGxvd2VyR3JvdXBBID4gbG93ZXJHcm91cEIpIHJldHVybiAxO1xyXG4gICAgICBlbHNlIGlmIChsb3dlckdyb3VwQSA9PT0gbG93ZXJHcm91cEIpIHtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGdyb3VwQT8uaXRlbT8uZ3JvdXBBY3JvbnltPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChncm91cEEuaXRlbS5ncm91cEFjcm9ueW1baW5kZXhdIDwgZ3JvdXBCLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSlcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICBlbHNlIGlmIChcclxuICAgICAgICAgICAgZ3JvdXBBLml0ZW0uZ3JvdXBBY3JvbnltW2luZGV4XSA+IGdyb3VwQi5pdGVtLmdyb3VwQWNyb255bVtpbmRleF1cclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgbWVudSBncm91cCBhY3Rpb25cclxuICAgKiBAcGFyYW0ge01lbnV9IG1lbnVcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBvbkdyb3VwQWN0aW9uc0NsaWNrKG1lbnU6IE1lbnUgfCBJY29uQnV0dG9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24gPSBtZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIHRoZSBleHBhbmQvY29sbGFwc2UgaWNvbiBiYXNlZCBvbiB0aGUgdG9nZ2xlXHJcbiAgICogQHBhcmFtIHtHcm91cE5vZGV9IGdyb3VwXHJcbiAgICogQHJldHVybiB7Kn0gIHsqfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFRvZ2dsZUJ1dHRvbkluZm8oZ3JvdXA6IEdyb3VwTm9kZSk6IEljb25CdXR0b24ge1xyXG4gICAgaWYgKHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kZWQoZ3JvdXApKSByZXR1cm4gdGhpcy5taW51c0NpcmNsZUljb25CdXR0b247XHJcbiAgICByZXR1cm4gdGhpcy5wbHVzQ2lyY2xlSWNvbkJ1dHRvbjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgZW1pdHRlZCBncm91cCBhY3Rpb25zIGV2ZW50LiBFbWl0cyB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXRcclxuICAgKiBmb3IgdGhlIHNlbGVjdGVkIGFjdGlvbjogdmlldyByb3N0ZXIsIGNyZWF0ZSBzdWIgZ3JvdXAsIGVkaXQgZ3JvdXAsXHJcbiAgICogZGVsZXRlIGdyb3VwLCBvciBtYW5hZ2UgaW50ZXJlc3QgZm9ybS5cclxuICAgKiBAcGFyYW0ge0dyb3VwTm9kZX0gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBoYW5kbGVHcm91cEFjdGlvbnMoZ3JvdXA6IEdyb3VwTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLlZJRVdfUk9TVEVSKSB7XHJcbiAgICAgIHRoaXMudmlld1Jvc3RlckNsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5DUkVBVEVfU1VCX0dST1VQKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgICB0aGlzLmNyZWF0ZUdyb3VwQ2xpY2suZW1pdChncm91cD8uaXRlbSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cEFjdGlvbj8uaWQgPT09IEdyb3VwQWN0aW9uLkVESVRfR1JPVVApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XHJcbiAgICAgIGNvbnN0IGVkaXRHcm91cFBhcmVudEluZm8gPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/LmZpbHRlcihcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lml0ZW0/Lmdyb3VwSWQgPT09IGdyb3VwPy5pdGVtPy5ncm91cFBhcmVudElkXHJcbiAgICAgIClbMF0/Lml0ZW07XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQW5kUGFyZW50R3JvdXBJbmZvID0ge1xyXG4gICAgICAgIGdyb3VwSW5mbzogZ3JvdXA/Lml0ZW0sXHJcbiAgICAgICAgcGFyZW50R3JvdXBJbmZvOiBlZGl0R3JvdXBQYXJlbnRJbmZvLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmVkaXRHcm91cENsaWNrLmVtaXQodGhpcy5lZGl0R3JvdXBBbmRQYXJlbnRHcm91cEluZm8pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBBY3Rpb24/LmlkID09PSBHcm91cEFjdGlvbi5ERUxFVEVfR1JPVVApIHtcclxuICAgICAgdGhpcy5kZWxldGVHcm91cENsaWNrLmVtaXQoZ3JvdXA/Lml0ZW0pO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwQWN0aW9uPy5pZCA9PT0gR3JvdXBBY3Rpb24uTUFOQUdFX0lOVEVSRVNUX0ZPUk1cclxuICAgICkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXAgPSBncm91cDtcclxuICAgICAgdGhpcy5tYW5hZ2VJbnRlcmVzdEZvcm1DbGljay5lbWl0KGdyb3VwPy5pdGVtKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgYWN0aW9uIG1lbnUgaXRlbXMgdGhlIGN1cnJlbnQgdXNlciBtYXkgc2VlIGZvciB0aGUgZ2l2ZW5cclxuICAgKiBncm91cCwgZmlsdGVyZWQgYnkgcGVyLWdyb3VwIHBlcm1pc3Npb25zIGFuZCBncm91cCB0eXBlLiBUaGUgXCJNYW5hZ2VcclxuICAgKiBJbnRlcmVzdCBGb3JtXCIgYWN0aW9uIChTUDNNLTM4MCkgaXMgZ2F0ZWQ6IGl0IHJlbmRlcnMgb25seSB3aGVuIHRoZVxyXG4gICAqIGludGVyZXN0LWZvcm0gZmVhdHVyZSBpcyBlbmFibGVkIGZvciB0aGUgdGVuYW50XHJcbiAgICogKEdyb3Vwc1NlcnZpY2UuaXNJbnRlcmVzdEZvcm1GZWF0dXJlRW5hYmxlZCgpKSBBTkQgZWl0aGVyIHRoZSB1c2VyIGhvbGRzIHRoZVxyXG4gICAqIFZJRVdfQU5EX01BTkFHRV9HUk9VUF9JTlRFUkVTVCBwZXJtaXNzaW9uIGZvciB0aGF0IHNwZWNpZmljIGdyb3VwIChzdHJpY3RseVxyXG4gICAqIHBlci1ncm91cCwgbm8gZ2xvYmFsIGZhbGxiYWNrKSBPUiB0aGUgdXNlciBpcyBhIGNyb3NzLWdyb3VwIGFkbWluIGhvbGRpbmdcclxuICAgKiBNQU5BR0VfQUxMX0dST1VQUyAoXCJNYW5hZ2UgQWxsIEdyb3VwIERldGFpbHNcIikuIEl0IGlzIGFsd2F5cyBoaWRkZW4gb25cclxuICAgKiBhZG1pbi9zeXN0ZW0gZ3JvdXAgdHlwZXMgKGUuZy4gdGhlIFN5c3RlbSBVc2VycyBHcm91cCksIHdoaWNoIGFyZSBub3QgcmVhbFxyXG4gICAqIGNvbW1pdHRlZXMgd2l0aCBhbiBpbnRlcmVzdCBmb3JtLCBhbmQgaGlkZGVuIGVudGlyZWx5IHdoZW4gdGhlIGZlYXR1cmUgaXNcclxuICAgKiBkaXNhYmxlZC4gV2hlbiBzaG93biBpdCBpcyBrZXB0IGxlZnRtb3N0IGJ5IHRoZSB0cmFpbGluZyBzb3J0LlxyXG4gICAqIEBwYXJhbSB7R3JvdXBOb2RlfSBncm91cFxyXG4gICAqIEByZXR1cm4ge01lbnVbXX1cclxuICAgKiBAbWVtYmVyb2YgVHJlZVZpZXdDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRGaWx0ZXJlZEdyb3VwQWN0aW9ucyhncm91cDogR3JvdXBOb2RlKTogTWVudVtdIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkTWVudTogTWVudVtdID0gW107XHJcbiAgICBjb25zdCBpc0FkbWluR3JvdXBUeXBlID0gZ3JvdXA/Lml0ZW0/Lmdyb3VwVHlwZUluZm8/LmJ1c2luZXNzUnVsZT8uaXNBZG1pbjtcclxuICAgIGNvbnN0IGdyb3VwUGVybWlzc2lvbnMgPSBncm91cD8uaXRlbT8ucGVybWlzc2lvbnM7XHJcbiAgICB0aGlzLm1lbnVJdGVtcz8uZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICBlLmlzVG9vbFRpcE5lZWRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5WSUVXX1JPU1RFUiAmJlxyXG4gICAgICAgICAgKChpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLk1BTkFHRV9TWVNURU1fVVNFUlMsXHJcbiAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICApKSB8fFxyXG4gICAgICAgICAgICAoIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0dST1VQX09GRklDRVJTLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfR1JPVVBfT0ZGSUNFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0dST1VQX01FTUJFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0FMTF9ST1NURVJTXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0dST1VQX01FTUJFUlMsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNcclxuICAgICAgICAgICAgICAgICkpKSkpIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5FRElUX0dST1VQICYmXHJcbiAgICAgICAgICAhdGhpcy5ncm91cHNTZXJ2aWNlLmlzR3JvdXBzQW5kUm9zdGVyc1Jlc3RyaWN0ZWQoKSAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUgJiZcclxuICAgICAgICAgICh0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuRURJVF9HUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSkgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkRFTEVURV9HUk9VUCAmJlxyXG4gICAgICAgICAgIXRoaXMuZ3JvdXBzU2VydmljZS5pc0dyb3Vwc0FuZFJvc3RlcnNSZXN0cmljdGVkKCkgJiZcclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkRFTEVURV9HUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSAmJlxyXG4gICAgICAgICAgIWdyb3VwPy5pdGVtPy5oYXNDaGlsZHJlbikgfHxcclxuICAgICAgICAoZT8uaWQgPT09IEdyb3VwQWN0aW9uLkNSRUFURV9TVUJfR1JPVVAgJiZcclxuICAgICAgICAgICF0aGlzLmdyb3Vwc1NlcnZpY2UuaXNHcm91cHNBbmRSb3N0ZXJzUmVzdHJpY3RlZCgpICYmXHJcbiAgICAgICAgICBncm91cD8uaXRlbT8uZ3JvdXBUeXBlSW5mbz8uYnVzaW5lc3NSdWxlPy5hbGxvd1N1Ykdyb3VwICYmXHJcbiAgICAgICAgICAodGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25UeXBlLkNSRUFURV9TVUJHUk9VUCxcclxuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9uc1xyXG4gICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3MoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5NQU5BR0VfQUxMX0dST1VQU1xyXG4gICAgICAgICAgICApKSAmJlxyXG4gICAgICAgICAgIWlzQWRtaW5Hcm91cFR5cGUpIHx8XHJcbiAgICAgICAgKGU/LmlkID09PSBHcm91cEFjdGlvbi5NQU5BR0VfSU5URVJFU1RfRk9STSAmJlxyXG4gICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLmlzSW50ZXJlc3RGb3JtRmVhdHVyZUVuYWJsZWQoKSAmJlxyXG4gICAgICAgICAgLy8gSGlkZGVuIG9uIGFkbWluL3N5c3RlbSBncm91cCB0eXBlcyAoZS5nLiB0aGUgU3lzdGVtIFVzZXJzIEdyb3VwKTpcclxuICAgICAgICAgIC8vIHRob3NlIGFyZSBub3QgcmVhbCBjb21taXR0ZWVzIHdpdGggYW4gaW50ZXJlc3QgZm9ybS5cclxuICAgICAgICAgICFpc0FkbWluR3JvdXBUeXBlICYmXHJcbiAgICAgICAgICAvLyBFaXRoZXIgdGhlIHVzZXIgaG9sZHMgdGhlIGludGVyZXN0IHBlcm1pc3Npb24gb24gVEhJUyBzcGVjaWZpYyBncm91cFxyXG4gICAgICAgICAgLy8gKHN0cmljdGx5IHBlci1ncm91cDogYSBub24tbWVtYmVyIGdyb3VwIGhhcyBgcGVybWlzc2lvbnM6IG51bGxgLFxyXG4gICAgICAgICAgLy8gY29lcmNlZCB0byBbXSBzbyB2YWxpZGF0ZUFjY2VzcyBzdGF5cyBpbiBpdHMgcGVyLWdyb3VwIGJyYW5jaCBhbmQgZG9lc1xyXG4gICAgICAgICAgLy8gTk9UIGZhbGwgYmFjayB0byB0aGUgZ2xvYmFsIHBlcm1pc3Npb24gc2V0KSwgT1IgdGhlIHVzZXIgaXMgYVxyXG4gICAgICAgICAgLy8gY3Jvc3MtZ3JvdXAgYWRtaW4gKE1BTkFHRV9BTExfR1JPVVBTID0gXCJNYW5hZ2UgQWxsIEdyb3VwIERldGFpbHNcIikgd2hvXHJcbiAgICAgICAgICAvLyBtYW5hZ2VzIGFsbCBncm91cHMgYW5kIHRoZXJlZm9yZSBzZWVzIHRoZSBhY3Rpb24gb24gZXZlcnkgbm9uLWFkbWluIGdyb3VwLlxyXG4gICAgICAgICAgKHRoaXMuZ3JvdXBzU2VydmljZS52YWxpZGF0ZUFjY2VzcyhcclxuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uVHlwZS5WSUVXX0FORF9NQU5BR0VfR1JPVVBfSU5URVJFU1QsXHJcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnMgPz8gW11cclxuICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlLnZhbGlkYXRlQWNjZXNzKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblR5cGUuTUFOQUdFX0FMTF9HUk9VUFNcclxuICAgICAgICAgICAgKSkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGZpbHRlcmVkTWVudS5wdXNoKGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIFNob3cgdGhlIE1hbmFnZSBJbnRlcmVzdCBGb3JtIGFjdGlvbiBmaXJzdCAobGVmdG1vc3QpIHBlciB0aGUgZGVzaWduLlxyXG4gICAgZmlsdGVyZWRNZW51LnNvcnQoKG1lbnVBLCBtZW51QikgPT4ge1xyXG4gICAgICBpZiAobWVudUE/LmlkID09PSBHcm91cEFjdGlvbi5NQU5BR0VfSU5URVJFU1RfRk9STSkgcmV0dXJuIC0xO1xyXG4gICAgICBpZiAobWVudUI/LmlkID09PSBHcm91cEFjdGlvbi5NQU5BR0VfSU5URVJFU1RfRk9STSkgcmV0dXJuIDE7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmlsdGVyZWRNZW51O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBUYWtlcyB0aGUgaW5kZXggYW5kIHRoZSBpY29uIGJ1dHRvbiBhcyBhcmd1bWVudHMgYW5kIG5lZWRzIHRvIHJldHVybiB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaWNvbiBidXR0b24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtJY29uQnV0dG9ufSBpY29uQnV0dG9uXHJcbiAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAqIEBtZW1iZXJvZiBUcmVlVmlld0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpY29uQnV0dG9uOiBJY29uQnV0dG9uKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpY29uQnV0dG9uLmlkO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBOZ09uRGVzdHJveSBwZXJmb3JtcyBuZWNlc3NhcnkgY2xlYW51cCB0YXNrcywgc3VjaCBhcyB1bnN1YnNjcmliaW5nIGZyb20gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBiZWluZyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVcIj5cclxuICA8bWF0LXRyZWVcclxuICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCJcclxuICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX3Jvb3RcIlxyXG4gICAgI3Jvb3RTZWxlY3RvclxyXG4gICAgcm9sZT1cInRyZWVncmlkXCJcclxuICA+XHJcbiAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiXHJcbiAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cInRyZWVQYWRkaW5nSW5kZW50XCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2EtYm9keS1tZC0xNlwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlIHctMTAwIGQtZmxleFwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Qm94U2hhZG93KClcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgbm9kZT8uaXRlbT8uZ3JvdXBQYXJlbnRJZCAmJlxyXG4gICAgICAgICAgZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpICE9PSBncm91cEZ1bmN0aW9uVHlwZS5GSUxURVIgJiZcclxuICAgICAgICAgIGdyb3Vwc1NlcnZpY2UuZ2V0R3JvdXBGdW5jdGlvblR5cGUoKSAhPT0gZ3JvdXBGdW5jdGlvblR5cGUuU0VBUkNIXHJcbiAgICAgICAgICAgID8gJ2llZWVzYS10cmVlX19yb290LW5vZGUtd2hpdGUtYmcnXHJcbiAgICAgICAgICAgIDogJ2llZWVzYS10cmVlX19yb290LW5vZGUnXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAhaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlID8gJ2llZWVzYS10cmVlX19jb2xsYXBzZS1pY29uJyA6ICcnXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgaWVlZXNhR3JvdXBOb2RlT3V0bGV0O1xyXG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZSB9XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRHcm91cHNcIlxyXG4gICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgW21hdFRyZWVOb2RlUGFkZGluZ0luZGVudF09XCJ0cmVlUGFkZGluZ0luZGVudFwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLWJvZHktbWQtMTYgaWVlZXNhLXRyZWVfX3BhcmVudC1ub2RlLXdyYXBwZXJcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgW25nQ2xhc3NdPVwiW1xyXG4gICAgICAgICAgdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdpZWVlc2EtdHJlZV9fZXhwYW5kZWQnIDogJycsXHJcbiAgICAgICAgICBub2RlPy5pdGVtPy5ncm91cFBhcmVudElkICYmXHJcbiAgICAgICAgICBncm91cHNTZXJ2aWNlLmdldEdyb3VwRnVuY3Rpb25UeXBlKCkgIT09IGdyb3VwRnVuY3Rpb25UeXBlLkZJTFRFUiAmJlxyXG4gICAgICAgICAgZ3JvdXBzU2VydmljZS5nZXRHcm91cEZ1bmN0aW9uVHlwZSgpICE9PSBncm91cEZ1bmN0aW9uVHlwZS5TRUFSQ0hcclxuICAgICAgICAgICAgPyAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZS13aGl0ZS1iZydcclxuICAgICAgICAgICAgOiAnaWVlZXNhLXRyZWVfX3Jvb3Qtbm9kZSdcclxuICAgICAgICBdXCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlIHctMTAwIGQtZmxleFwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Qm94U2hhZG93KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiByb2xlPVwiZ3JpZGNlbGxcIj5cclxuICAgICAgICAgIDxpZWVlc2EtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCIhaXNHcm91cFNlYXJjaE9yRmlsdGVyQWN0aXZlXCJcclxuICAgICAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJ2aWV3Q2hpbGRHcm91cHMobm9kZSlcIlxyXG4gICAgICAgICAgICBbaWNvbkJ1dHRvbl09XCJnZXRUb2dnbGVCdXR0b25JbmZvKG5vZGUpXCJcclxuICAgICAgICAgID48L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cE5vZGVPdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBOb2RlT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpZWVlc2FHcm91cEluZm9PdXRsZXQ7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cIlxyXG4gICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImQtZmxleCBkLW5vbmUgZ2FwLTMgZC1zbS1mbGV4IGQtbWQtZmxleCBkLWxnLWZsZXggaWVlZXNhLXRyZWVfX2dyb3VwLWFjdGlvbnNcIlxyXG4gICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICBpZWVlc2FHcm91cEFjdGlvbnNPdXRsZXQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGllZWVzYS1tZW51XHJcbiAgICAgICAgW2J1dHRvbl09XCJjb25zdGFudHM/LnZpZXdHcm91cHM/Lmdyb3VwQWN0aW9uc01lbnVcIlxyXG4gICAgICAgIFttZW51SXRlbXNdPVwiZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMobm9kZSlcIlxyXG4gICAgICAgIChtZW51SXRlbUNsaWNrKT1cIm9uR3JvdXBBY3Rpb25zQ2xpY2soJGV2ZW50KTsgaGFuZGxlR3JvdXBBY3Rpb25zKG5vZGUpXCJcclxuICAgICAgICBjbGFzcz1cImQtbGctbm9uZSBkLW1kLW5vbmUgZC1zbS1ub25lXCJcclxuICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICA+PC9pZWVlc2EtbWVudT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2llZWVzYUdyb3VwSW5mb091dGxldCBsZXQtbm9kZT5cclxuICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS10cmVlX19ncm91cC1pbmZvLXdyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXRyZWVfX2dyb3VwLWluZm8gZC1mbGV4IGFsaWduLWl0ZW1zLWJhc2VsaW5lXCI+XHJcbiAgICAgICAgICA8cFxyXG4gICAgICAgICAgICBjbGFzcz1cImllZWVzYS10cmVlX19ub2RlLWdyb3VwLW5hbWUgaWVlZXNhLXRpdGxlLW1kLTE4XCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwibm9kZT8uaXRlbT8uZ3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgaWVlZXNhVGV4dFRydW5jYXRlZFxyXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxyXG4gICAgICAgICAgPnt7IG5vZGU/Lml0ZW0/Lmdyb3VwTmFtZSB9fTwvcD5cclxuICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXRyZWVfX25vZGUtZ3JvdXAtYWNyb255bSBpZWVlc2EtdGl0bGUtc20tMTZcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJub2RlPy5pdGVtPy5ncm91cEFjcm9ueW1cIlxyXG4gICAgICAgICAgICBpZWVlc2FUZXh0VHJ1bmNhdGVkXHJcbiAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXHJcbiAgICAgICAgICA+e3sgbm9kZT8uaXRlbT8uZ3JvdXBBY3JvbnltIH19PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtdHJlZV9fbm9kZS1ncm91cC1kZXNjXCI+XHJcbiAgICAgICAgICB7eyBub2RlPy5pdGVtPy5ncm91cFR5cGVJbmZvPy5uYW1lIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaWVlZXNhR3JvdXBBY3Rpb25zT3V0bGV0IGxldC1ub2RlPlxyXG4gICAgICA8aWVlZXNhLWljb24tYnV0dG9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0RmlsdGVyZWRHcm91cEFjdGlvbnMobm9kZSk7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgW2ljb25CdXR0b25dPVwiaXRlbVwiXHJcbiAgICAgICAgKGljb25CdXR0b25DbGljayk9XCJcclxuICAgICAgICAgIG9uR3JvdXBBY3Rpb25zQ2xpY2soJGV2ZW50KTsgaGFuZGxlR3JvdXBBY3Rpb25zKG5vZGUpXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICA8L2llZWVzYS1pY29uLWJ1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9tYXQtdHJlZT5cclxuPC9kaXY+XHJcbiJdfQ==
|