igniteui-angular 13.2.11 → 13.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/date-picker/date-picker.component.mjs +2 -1
- package/esm2020/lib/date-range-picker/date-range-picker.component.mjs +3 -3
- package/esm2020/lib/directives/drag-drop/drag-drop.directive.mjs +9 -5
- package/esm2020/lib/directives/radio/radio-group.directive.mjs +11 -5
- package/esm2020/lib/grids/grid-navigation.service.mjs +8 -3
- package/esm2020/lib/grids/selection/selection.service.mjs +9 -4
- package/esm2020/lib/radio/radio.component.mjs +15 -2
- package/esm2020/lib/simple-combo/simple-combo.component.mjs +7 -2
- package/esm2020/lib/time-picker/time-picker.component.mjs +3 -2
- package/fesm2015/igniteui-angular.mjs +57 -17
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +57 -17
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/directives/radio/radio-group.directive.d.ts +5 -0
- package/lib/grids/selection/selection.service.d.ts +2 -1
- package/lib/radio/radio.component.d.ts +13 -2
- package/package.json +1 -1
|
@@ -170,6 +170,7 @@ export class IgxDatePickerComponent extends PickerBaseDirective {
|
|
|
170
170
|
this._onTouchedCallback = noop;
|
|
171
171
|
this._onValidatorChange = noop;
|
|
172
172
|
this.onStatusChanged = () => {
|
|
173
|
+
this.disabled = this._ngControl.disabled;
|
|
173
174
|
this.updateValidity();
|
|
174
175
|
this.inputGroup.isRequired = this.required;
|
|
175
176
|
};
|
|
@@ -806,4 +807,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
806
807
|
type: HostListener,
|
|
807
808
|
args: ['keydown', ['$event']]
|
|
808
809
|
}] } });
|
|
809
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsWUFBWSxFQUNFLGVBQWUsRUFDcEUsU0FBUyxFQUFhLFFBQVEsRUFDNUMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNtQixpQkFBaUIsRUFBRSxTQUFTLEVBQ2xELGFBQWEsRUFDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ21CLGtDQUFrQyxFQUFFLHFDQUFxQyxFQUMvRixRQUFRLEVBQUUsY0FBYyxFQUMzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDSCxpQkFBaUIsRUFBRSxzQkFBc0IsRUFDekMsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQXFCLGFBQWEsRUFDNUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUFnQixJQUFJLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUNjLGlCQUFpQixFQUFFLHNCQUFzQixFQUMxRCxvQkFBb0IsRUFHdkIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRSxP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QURYLFlBQVk7dUJBQUMsaUJBQWlCO2dCQUl2QixjQUFjO3NCQURyQixZQUFZO3VCQUFDLGtDQUFrQztnQkFJeEMsY0FBYztzQkFEckIsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSS9DLFVBQVU7c0JBRGpCLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUl6QixjQUFjO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQjtnQkFJcEIsY0FBYztzQkFEckIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSXBCLGlCQUFpQjtzQkFEeEIsWUFBWTt1QkFBQyxxQ0FBcUM7Z0JBSTNDLGFBQWE7c0JBRHBCLFlBQVk7dUJBQUMseUJBQXlCO2dCQTRHaEMsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LFxuICAgIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEluamVjdCwgSG9zdExpc3RlbmVyLFxuICAgIE5nTW9kdWxlUmVmLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIEluamVjdG9yLCBBZnRlclZpZXdDaGVja2VkLCBDb250ZW50Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LCBMT0NBTEVfSUQsIFJlbmRlcmVyMiwgT3B0aW9uYWwsIFBpcGVUcmFuc2Zvcm0sIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCwgQWJzdHJhY3RDb250cm9sLFxuICAgIE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIElneENhbGVuZGFyQ29tcG9uZW50LCBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIFdFRUtEQVlTLCBpc0RhdGVJblJhbmdlcywgSUZvcm1hdHRpbmdWaWV3cywgSUZvcm1hdHRpbmdPcHRpb25zXG59IGZyb20gJy4uL2NhbGVuZGFyL3B1YmxpY19hcGknO1xuaW1wb3J0IHtcbiAgICBJZ3hJbnB1dERpcmVjdGl2ZSwgSWd4SW5wdXRHcm91cENvbXBvbmVudCxcbiAgICBJZ3hMYWJlbERpcmVjdGl2ZSwgSUdYX0lOUFVUX0dST1VQX1RZUEUsIElneElucHV0R3JvdXBUeXBlLCBJZ3hJbnB1dFN0YXRlXG59IGZyb20gJy4uL2lucHV0LWdyb3VwL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb24sIG5vb3AsIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICAgIE92ZXJsYXlTZXR0aW5ncywgSWd4T3ZlcmxheVNlcnZpY2UsIEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksXG4gICAgQXV0b1Bvc2l0aW9uU3RyYXRlZ3ksXG4gICAgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MsXG4gICAgT3ZlcmxheUV2ZW50QXJnc1xufSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElEYXRlUGlja2VyUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL2RhdGUtcGlja2VyLXJlc291cmNlcyc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VEZXNjcmlwdG9yLCBEYXRlUmFuZ2VUeXBlIH0gZnJvbSAnLi4vY29yZS9kYXRlcy9kYXRlUmFuZ2UnO1xuaW1wb3J0IHsgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgUGxhdGZvcm1VdGlsLCBpc0RhdGUgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vY2FsZW5kYXItY29udGFpbmVyL2NhbGVuZGFyLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmFkZUluLCBmYWRlT3V0IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9mYWRlJztcbmltcG9ydCB7IFBpY2tlckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9waWNrZXItYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBEYXRlUGFydCwgRGF0ZVBhcnREZWx0YXMsIElneERhdGVUaW1lRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRlLXRpbWUtZWRpdG9yL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgRGF0ZVRpbWVVdGlsIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vdXRpbC9kYXRlLXRpbWUudXRpbCc7XG5pbXBvcnQgeyBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbiBhcyBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbiB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IElEYXRlUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncyB9IGZyb20gJy4vZGF0ZS1waWNrZXIuY29tbW9uJztcbmltcG9ydCB7IElneFBpY2tlckNsZWFyQ29tcG9uZW50LCBJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vcHVibGljX2FwaSc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuLyoqXG4gKiBEYXRlIFBpY2tlciBkaXNwbGF5cyBhIHBvcHVwIGNhbGVuZGFyIHRoYXQgbGV0cyB1c2VycyBzZWxlY3QgYSBzaW5nbGUgZGF0ZS5cbiAqXG4gKiBAaWd4TW9kdWxlIElneERhdGVQaWNrZXJNb2R1bGVcbiAqIEBpZ3hUaGVtZSBpZ3gtY2FsZW5kYXItdGhlbWUsIGlneC1pY29uLXRoZW1lXG4gKiBAaWd4R3JvdXAgU2NoZWR1bGluZ1xuICogQGlneEtleXdvcmRzIGRhdGVwaWNrZXIsIGNhbGVuZGFyLCBzY2hlZHVsZSwgZGF0ZVxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtZGF0ZS1waWNrZXIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneERhdGVQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IElneERhdGVQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH1cbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnaWd4LWRhdGUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfSddXG59KVxuZXhwb3J0IGNsYXNzIElneERhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBQaWNrZXJCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvcixcbiAgICBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIG9uIHdoaWNoIGRheSB0aGUgd2VlayBzdGFydHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFt3ZWVrU3RhcnRdPVwiNFwiIGNhbmNlbEJ1dHRvbkxhYmVsPVwiY2FuY2VsXCIgdG9kYXlCdXR0b25MYWJlbD1cInRvZGF5XCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgd2Vla1N0YXJ0OiBXRUVLREFZUyB8IG51bWJlciA9IFdFRUtEQVlTLlNVTkRBWTtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB3aGV0aGVyIHRoZSBpbmFjdGl2ZSBkYXRlcyB3aWxsIGJlIGhpZGRlbi5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQXBwbGllcyB0byBkYXRlcyB0aGF0IGFyZSBvdXQgb2YgdGhlIGN1cnJlbnQgbW9udGguXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW2hpZGVPdXRzaWRlRGF5c109XCJ0cnVlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhpZGVPdXRzaWRlRGF5cyA9IHRoaXMuZGF0ZVBpY2tlci5oaWRlT3V0c2lkZURheXM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGlkZU91dHNpZGVEYXlzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBudW1iZXIgb2YgbW9udGggdmlld3MgZGlzcGxheWVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGAxYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW2Rpc3BsYXlNb250aHNDb3VudF09XCIyXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IG1vbnRoVmlld3NEaXNwbGF5ZWQgPSB0aGlzLmRhdGVQaWNrZXIuZGlzcGxheU1vbnRoc0NvdW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc3BsYXlNb250aHNDb3VudCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgd2VlayBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtzaG93V2Vla051bWJlcnNdPVwidHJ1ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd1dlZWtOdW1iZXJzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIGEgY3VzdG9tIGZvcm1hdHRlciBmdW5jdGlvbiBvbiB0aGUgc2VsZWN0ZWQgb3IgcGFzc2VkIGRhdGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFt2YWx1ZV09XCJkYXRlXCIgW2Zvcm1hdHRlcl09XCJmb3JtYXR0ZXJcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtYXR0ZXI6ICh2YWw6IERhdGUpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGBJZ3hEYXRlUGlja2VyQ29tcG9uZW50YCBoZWFkZXIuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBoZWFkZXJPcmllbnRhdGlvbj1cInZlcnRpY2FsXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVhZGVyT3JpZW50YXRpb246IFBpY2tlckhlYWRlck9yaWVudGF0aW9uID0gUGlja2VySGVhZGVyT3JpZW50YXRpb24uSG9yaXpvbnRhbDtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgdG9kYXkgYnV0dG9uJ3MgbGFiZWwuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciB0b2RheUJ1dHRvbkxhYmVsPVwiVG9kYXlcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0b2RheUJ1dHRvbkxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGNhbmNlbCBidXR0b24ncyBsYWJlbC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgY2FuY2VsQnV0dG9uTGFiZWw9XCJDYW5jZWxcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjYW5jZWxCdXR0b25MYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBpZiB0aGUgY3VycmVudGx5IHNwdW4gZGF0ZSBzZWdtZW50IHNob3VsZCBsb29wIG92ZXIuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbc3Bpbkxvb3BdPVwiZmFsc2VcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzcGluTG9vcCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBEZWx0YSB2YWx1ZXMgdXNlZCB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGVhY2ggZWRpdG9yIGRhdGUgcGFydCBvbiBzcGluIGFjdGlvbnMuXG4gICAgICogQWxsIHZhbHVlcyBkZWZhdWx0IHRvIGAxYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW3NwaW5EZWx0YV09XCJ7IGRhdGU6IDUsIG1vbnRoOiAyIH1cIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzcGluRGVsdGE6IFBpY2s8RGF0ZVBhcnREZWx0YXMsICdkYXRlJyB8ICdtb250aCcgfCAneWVhcic+O1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBjb250YWluZXIgdXNlZCBmb3IgdGhlIHBvcHVwIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqICBgb3V0bGV0YCBpcyBhbiBpbnN0YW5jZSBvZiBgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZWAgb3IgYW4gYEVsZW1lbnRSZWZgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXYgaWd4T3ZlcmxheU91dGxldCAjb3V0bGV0PVwib3ZlcmxheS1vdXRsZXRcIj48L2Rpdj5cbiAgICAgKiAvLy4uXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbb3V0bGV0XT1cIm91dGxldFwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdXRsZXQ6IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfCBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB2YWx1ZSBvZiBgaWRgIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW2lkXT1cIidpZ3gtZGF0ZS1waWNrZXItMydcIiBjYW5jZWxCdXR0b25MYWJlbD1cImNhbmNlbFwiIHRvZGF5QnV0dG9uTGFiZWw9XCJ0b2RheVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWRhdGUtcGlja2VyLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvLyNyZWdpb24gY2FsZW5kYXIgbWVtYmVyc1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBmb3JtYXQgdmlld3Mgb2YgdGhlIGBJZ3hEYXRlUGlja2VyQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBmb3JtYXRWaWV3cyA9IHRoaXMuZGF0ZVBpY2tlci5mb3JtYXRWaWV3cztcbiAgICAgKiAgdGhpcy5kYXRlUGlja2VyLmZvcm1hdFZpZXdzID0ge2RheTpmYWxzZSwgbW9udGg6IGZhbHNlLCB5ZWFyOmZhbHNlfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtYXRWaWV3czogSUZvcm1hdHRpbmdWaWV3cztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZGlzYWJsZWQgZGF0ZXMgZGVzY3JpcHRvcnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZGlzYWJsZWREYXRlcyA9IHRoaXMuZGF0ZXBpY2tlci5kaXNhYmxlZERhdGVzO1xuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5kaXNhYmxlZERhdGVzID0gWyB7dHlwZTogRGF0ZVJhbmdlVHlwZS5XZWVrZW5kc30sIC4uLl07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkRGF0ZXMoKTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRGF0ZXM7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkRGF0ZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHNwZWNpYWwgZGF0ZXMgZGVzY3JpcHRvcnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc3BlY2lhbERhdGVzID0gdGhpcy5kYXRlcGlja2VyLnNwZWNpYWxEYXRlcztcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuc3BlY2lhbERhdGVzID0gWyB7dHlwZTogRGF0ZVJhbmdlVHlwZS5XZWVrZW5kc30sIC4uLiBdO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzcGVjaWFsRGF0ZXMoKTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxEYXRlcztcbiAgICB9XG4gICAgcHVibGljIHNldCBzcGVjaWFsRGF0ZXModmFsdWU6IERhdGVSYW5nZURlc2NyaXB0b3JbXSkge1xuICAgICAgICB0aGlzLl9zcGVjaWFsRGF0ZXMgPSB2YWx1ZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZm9ybWF0IG9wdGlvbnMgb2YgdGhlIGBJZ3hEYXRlUGlja2VyQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5jYWxlbmRhckZvcm1hdCA9IHtkYXk6IFwibnVtZXJpY1wiLCAgbW9udGg6IFwibG9uZ1wiLCB3ZWVrZGF5OiBcImxvbmdcIiwgeWVhcjogXCJudW1lcmljXCJ9O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNhbGVuZGFyRm9ybWF0OiBJRm9ybWF0dGluZ09wdGlvbnM7XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgc2VsZWN0ZWQgZGF0ZS5cbiAgICAgKlxuICAgICAqICBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFt2YWx1ZV09XCJkYXRlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgdmFsdWUoZGF0ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuc2V0RGF0ZVZhbHVlKGRhdGUpO1xuICAgICAgICBpZiAodGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSAhPT0gZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSA9IHRoaXMuX2RhdGVWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5kYXRlVmFsdWUpO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuZGF0ZVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSB2YWx1ZSB0aGUgcGlja2VyIHdpbGwgYWNjZXB0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFttaW5WYWx1ZV09XCJtaW5EYXRlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG1pblZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21pblZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pblZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIHRoZSBwaWNrZXIgd2lsbCBhY2NlcHQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW21heFZhbHVlXT1cIm1heERhdGVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbWF4VmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heFZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzIGZvciB0aGUgcGlja2VyJ3MgZGVmYXVsdCB0b2dnbGUgaWNvbi5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlc291cmNlU3RyaW5nczogSURhdGVQaWNrZXJSZXNvdXJjZVN0cmluZ3M7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBwaWNrZXIncyB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBVc2VkIGZvciBgdHdvLXdheWAgYmluZGluZ3MuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFsodmFsdWUpXT1cImRhdGVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgdHlwZXMvc3BpbnMgaW52YWxpZCBkYXRlIGluIHRoZSBkYXRlLXBpY2tlciBlZGl0b3IuXG4gICAgICpcbiAgICAgKiAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciAodmFsaWRhdGlvbkZhaWxlZCk9XCJvblZhbGlkYXRpb25GYWlsZWQoJGV2ZW50KVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWxpZGF0aW9uRmFpbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJRGF0ZVBpY2tlclZhbGlkYXRpb25GYWlsZWRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneFBpY2tlckNsZWFyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBjbGVhckNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxJZ3hQaWNrZXJDbGVhckNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkKElneExhYmVsRGlyZWN0aXZlKVxuICAgIHB1YmxpYyBsYWJlbDogSWd4TGFiZWxEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBoZWFkZXJUZW1wbGF0ZTogSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBkYXRlVGltZUVkaXRvcjogSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0R3JvdXBDb21wb25lbnQpXG4gICAgcHJpdmF0ZSBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZChJZ3hMYWJlbERpcmVjdGl2ZSlcbiAgICBwcml2YXRlIGxhYmVsRGlyZWN0aXZlOiBJZ3hMYWJlbERpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoSWd4SW5wdXREaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBpbnB1dERpcmVjdGl2ZTogSWd4SW5wdXREaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSBzdWJoZWFkZXJUZW1wbGF0ZTogSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIEBDb250ZW50Q2hpbGQoSWd4UGlja2VyQWN0aW9uc0RpcmVjdGl2ZSlcbiAgICBwcml2YXRlIHBpY2tlckFjdGlvbnM6IElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmU7XG5cbiAgICBwcml2YXRlIGdldCBkaWFsb2dPdmVybGF5U2V0dGluZ3MoKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RpYWxvZ092ZXJsYXlTZXR0aW5ncywgdGhpcy5vdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGRyb3BEb3duT3ZlcmxheVNldHRpbmdzKCk6IE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kcm9wRG93bk92ZXJsYXlTZXR0aW5ncywgdGhpcy5vdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlucHV0R3JvdXBFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRHcm91cD8uZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGRhdGVWYWx1ZSgpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBwaWNrZXJGb3JtYXRWaWV3cygpOiBJRm9ybWF0dGluZ1ZpZXdzIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RlZkZvcm1hdFZpZXdzLCB0aGlzLmZvcm1hdFZpZXdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBwaWNrZXJDYWxlbmRhckZvcm1hdCgpOiBJRm9ybWF0dGluZ09wdGlvbnMge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fY2FsZW5kYXJGb3JtYXQsIHRoaXMuY2FsZW5kYXJGb3JtYXQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBkaXNwbGF5VmFsdWU6IFBpcGVUcmFuc2Zvcm0gPSB7IHRyYW5zZm9ybTogKGRhdGU6IERhdGUpID0+IHRoaXMuZm9ybWF0dGVyKGRhdGUpIH07XG5cbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLkRhdGVQaWNrZXJSZXNvdXJjZVN0cmluZ3M7XG4gICAgcHJpdmF0ZSBfZGF0ZVZhbHVlOiBEYXRlO1xuICAgIHByaXZhdGUgX292ZXJsYXlJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ZhbHVlOiBEYXRlIHwgc3RyaW5nO1xuICAgIHByaXZhdGUgX3RhcmdldFZpZXdEYXRlOiBEYXRlO1xuICAgIHByaXZhdGUgX25nQ29udHJvbDogTmdDb250cm9sID0gbnVsbDtcbiAgICBwcml2YXRlIF9zdGF0dXNDaGFuZ2VzJDogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgX2NhbGVuZGFyOiBJZ3hDYWxlbmRhckNvbXBvbmVudDtcbiAgICBwcml2YXRlIF9zcGVjaWFsRGF0ZXM6IERhdGVSYW5nZURlc2NyaXB0b3JbXSA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWREYXRlczogRGF0ZVJhbmdlRGVzY3JpcHRvcltdID0gbnVsbDtcbiAgICBwcml2YXRlIF9vdmVybGF5U3ViRmlsdGVyOlxuICAgICAgICBbTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPE92ZXJsYXlFdmVudEFyZ3M+LFxuICAgICAgICAgICAgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPE92ZXJsYXlFdmVudEFyZ3MgfCBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncz5dID0gW1xuICAgICAgICAgICAgZmlsdGVyKHggPT4geC5pZCA9PT0gdGhpcy5fb3ZlcmxheUlkKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgICAgXTtcbiAgICBwcml2YXRlIF9kcm9wRG93bk92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICB0YXJnZXQ6IHRoaXMuaW5wdXRHcm91cEVsZW1lbnQsXG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZSxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneSh7XG4gICAgICAgICAgICBvcGVuQW5pbWF0aW9uOiBmYWRlSW4sXG4gICAgICAgICAgICBjbG9zZUFuaW1hdGlvbjogZmFkZU91dFxuICAgICAgICB9KVxuICAgIH07XG4gICAgcHJpdmF0ZSBfZGlhbG9nT3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgIG1vZGFsOiB0cnVlLFxuICAgICAgICBjbG9zZU9uRXNjYXBlOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIF9jYWxlbmRhckZvcm1hdDogSUZvcm1hdHRpbmdPcHRpb25zID0ge1xuICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgIHdlZWtkYXk6ICdzaG9ydCcsXG4gICAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH07XG4gICAgcHJpdmF0ZSBfZGVmRm9ybWF0Vmlld3M6IElGb3JtYXR0aW5nVmlld3MgPSB7XG4gICAgICAgIGRheTogZmFsc2UsXG4gICAgICAgIG1vbnRoOiB0cnVlLFxuICAgICAgICB5ZWFyOiBmYWxzZVxuICAgIH07XG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IERhdGUpID0+IHZvaWQgPSBub29wO1xuICAgIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblZhbGlkYXRvckNoYW5nZTogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcm90ZWN0ZWQgX2xvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIEBJbmplY3QoSWd4T3ZlcmxheVNlcnZpY2UpIHByaXZhdGUgX292ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlUmVmOiBOZ01vZHVsZVJlZjxhbnk+LFxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIHByb3RlY3RlZCBfZGlzcGxheURlbnNpdHlPcHRpb25zPzogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfSU5QVVRfR1JPVVBfVFlQRSkgcHJvdGVjdGVkIF9pbnB1dEdyb3VwVHlwZT86IElneElucHV0R3JvdXBUeXBlKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQsIF9sb2NhbGVJZCwgX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucywgX2lucHV0R3JvdXBUeXBlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgICAgICAgLy8gUnVuIHRoZSB2YWxpZGF0aW9uIHdpdGggZW1wdHkgb2JqZWN0IHRvIGNoZWNrIGlmIHJlcXVpcmVkIGlzIGVuYWJsZWQuXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcih7fSBhcyBBYnN0cmFjdENvbnRyb2wpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yICYmIGVycm9yLnJlcXVpcmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcGlja2VyUmVzb3VyY2VTdHJpbmdzKCk6IElEYXRlUGlja2VyUmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdGhpcy5yZXNvdXJjZVN0cmluZ3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfVVA6XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19ET1dOOlxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5TUEFDRTpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgdGhlIHBpY2tlcidzIGRyb3Bkb3duIG9yIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgI3BpY2tlcj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIj5PcGVuIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3ZlcmxheVNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5pc0Ryb3Bkb3duXG4gICAgICAgICAgICA/IHRoaXMuZHJvcERvd25PdmVybGF5U2V0dGluZ3NcbiAgICAgICAgICAgIDogdGhpcy5kaWFsb2dPdmVybGF5U2V0dGluZ3NcbiAgICAgICAgICAgICwgc2V0dGluZ3MpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRHJvcGRvd24gJiYgdGhpcy5pbnB1dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgb3ZlcmxheVNldHRpbmdzLnRhcmdldCA9IHRoaXMuaW5wdXRHcm91cEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3V0bGV0KSB7XG4gICAgICAgICAgICBvdmVybGF5U2V0dGluZ3Mub3V0bGV0ID0gdGhpcy5vdXRsZXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vdmVybGF5SWQgPSB0aGlzLl9vdmVybGF5U2VydmljZVxuICAgICAgICAgICAgLmF0dGFjaChJZ3hDYWxlbmRhckNvbnRhaW5lckNvbXBvbmVudCwgb3ZlcmxheVNldHRpbmdzLCB0aGlzLl9tb2R1bGVSZWYpO1xuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5zaG93KHRoaXMuX292ZXJsYXlJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgcGlja2VyJ3MgZHJvcGRvd24gb3IgZGlhbG9nXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyICNwaWNrZXI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJwaWNrZXIudG9nZ2xlKClcIj5Ub2dnbGUgRGlhbG9nPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZShzZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbihzZXR0aW5ncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIHBpY2tlcidzIGRyb3Bkb3duIG9yIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgI3BpY2tlcj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cInBpY2tlci5jbG9zZSgpXCI+Q2xvc2UgRGlhbG9nPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5oaWRlKHRoaXMuX292ZXJsYXlJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzIGEgZGF0ZS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzIFVwZGF0ZXMgdGhlIHZhbHVlIGluIHRoZSBpbnB1dCBmaWVsZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5zZWxlY3QoZGF0ZSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGRhdGUgcGFzc2VkIGRhdGUgdGhhdCBoYXMgdG8gYmUgc2V0IHRvIHRoZSBjYWxlbmRhci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KHZhbHVlOiBEYXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RzIHRvZGF5J3MgZGF0ZSBhbmQgY2xvc2VzIHRoZSBwaWNrZXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyICNwaWNrZXI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJwaWNrZXIuc2VsZWN0VG9kYXkoKVwiPlNlbGVjdCBUb2RheTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqICovXG4gICAgcHVibGljIHNlbGVjdFRvZGF5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIHRvZGF5LnNldEhvdXJzKDApO1xuICAgICAgICB0b2RheS5zZXRNaW51dGVzKDApO1xuICAgICAgICB0b2RheS5zZXRTZWNvbmRzKDApO1xuICAgICAgICB0b2RheS5zZXRNaWxsaXNlY29uZHMoMCk7XG4gICAgICAgIHRoaXMuc2VsZWN0KHRvZGF5KTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgaW5wdXQgZmllbGQgYW5kIHRoZSBwaWNrZXIncyB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5jbGVhcigpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhcj8uZGVzZWxlY3REYXRlKCk7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnQgYSBzcGVjaWZpZWQgYERhdGVQYXJ0YC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRlUGFydCBUaGUgb3B0aW9uYWwgRGF0ZVBhcnQgdG8gaW5jcmVtZW50LiBEZWZhdWx0cyB0byBEYXRlLlxuICAgICAqIEBwYXJhbSBkZWx0YSBUaGUgb3B0aW9uYWwgZGVsdGEgdG8gaW5jcmVtZW50IGJ5LiBPdmVycmlkZXMgYHNwaW5EZWx0YWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5kYXRlUGlja2VyLmluY3JlbWVudChEYXRlUGFydC5EYXRlKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5jcmVtZW50KGRhdGVQYXJ0PzogRGF0ZVBhcnQsIGRlbHRhPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IuaW5jcmVtZW50KGRhdGVQYXJ0LCBkZWx0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjcmVtZW50IGEgc3BlY2lmaWVkIGBEYXRlUGFydGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRlUGFydCBUaGUgb3B0aW9uYWwgRGF0ZVBhcnQgdG8gZGVjcmVtZW50LiBEZWZhdWx0cyB0byBEYXRlLlxuICAgICAqIEBwYXJhbSBkZWx0YSBUaGUgb3B0aW9uYWwgZGVsdGEgdG8gZGVjcmVtZW50IGJ5LiBPdmVycmlkZXMgYHNwaW5EZWx0YWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5kYXRlUGlja2VyLmRlY3JlbWVudChEYXRlUGFydC5EYXRlKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVjcmVtZW50KGRhdGVQYXJ0PzogRGF0ZVBhcnQsIGRlbHRhPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IuZGVjcmVtZW50KGRhdGVQYXJ0LCBkZWx0YSk7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uIENvbnRyb2wgVmFsdWUgQWNjZXNzb3JcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldERhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZSA9IHRoaXMuX2RhdGVWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIFZhbGlkYXRvclxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIEludmFsaWREYXRlIGhhbmRsaW5nXG4gICAgICAgIGlmIChpc0RhdGUoY29udHJvbC52YWx1ZSkgJiYgIURhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZShjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHRydWUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCB2YWx1ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZShjb250cm9sLnZhbHVlKSA/IGNvbnRyb2wudmFsdWUgOiBEYXRlVGltZVV0aWwucGFyc2VJc29EYXRlKGNvbnRyb2wudmFsdWUpO1xuICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5kaXNhYmxlZERhdGVzICYmIGlzRGF0ZUluUmFuZ2VzKHZhbHVlLCB0aGlzLmRpc2FibGVkRGF0ZXMpKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgeyBkYXRlSXNEaXNhYmxlZDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgRGF0ZVRpbWVVdGlsLnZhbGlkYXRlTWluTWF4KHZhbHVlLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlLCBmYWxzZSkpO1xuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA+IDAgPyBlcnJvcnMgOiBudWxsO1xuICAgIH1cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdDb250cm9sID0gdGhpcy5faW5qZWN0b3IuZ2V0PE5nQ29udHJvbD4oTmdDb250cm9sLCBudWxsKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0NsaWNrKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9PdmVybGF5RXZlbnRzKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlRWRpdG9yRXZlbnRzKCk7XG5cbiAgICAgICAgdGhpcy5zdWJUb0ljb25zQ2xpY2tlZCh0aGlzLmNsZWFyQ29tcG9uZW50cywgKCkgPT4gdGhpcy5jbGVhcigpKTtcbiAgICAgICAgdGhpcy5jbGVhckNvbXBvbmVudHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3ViVG9JY29uc0NsaWNrZWQodGhpcy5jbGVhckNvbXBvbmVudHMsICgpID0+IHRoaXMuY2xlYXIoKSkpO1xuXG4gICAgICAgIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzLmV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrID0gW3RoaXMuaW5wdXRHcm91cC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnRdO1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQsICdibHVyJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkID1cbiAgICAgICAgICAgICAgICB0aGlzLl9uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUodGhpcy5vblN0YXR1c0NoYW5nZWQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0R3JvdXAuaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBpZiAodGhpcy5sYWJlbERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudCwgJ2FyaWEtbGFiZWxsZWRieScsIHRoaXMubGFiZWxEaXJlY3RpdmUuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5fc3RhdHVzQ2hhbmdlcyQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlJZCkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuZGV0YWNoKHRoaXMuX292ZXJsYXlJZCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb3ZlcmxheUlkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dERpcmVjdGl2ZS5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9DbGljaygpIHtcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZ2V0RWRpdEVsZW1lbnQoKSwgJ2NsaWNrJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIGlmIChpc0RhdGUodmFsdWUpICYmIGlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh2YWx1ZSkgPyB2YWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmFsaWRpdHkoKSB7XG4gICAgICAgIC8vIEIuUC4gMTggTWF5IDIwMjE6IElneERhdGVQaWNrZXIgZG9lcyBub3QgcmVzZXQgaXRzIHN0YXRlIHVwb24gcmVzZXRGb3JtICM5NTI2XG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wgJiYgIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5pc1RvdWNoZWRPckRpcnR5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSB0aGlzLl9uZ0NvbnRyb2wudmFsaWRcbiAgICAgICAgICAgICAgICAgICAgPyBJZ3hJbnB1dFN0YXRlLlZBTElEXG4gICAgICAgICAgICAgICAgICAgIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbGlkID0gdGhpcy5fbmdDb250cm9sLnZhbGlkXG4gICAgICAgICAgICAgICAgICAgID8gSWd4SW5wdXRTdGF0ZS5JTklUSUFMXG4gICAgICAgICAgICAgICAgICAgIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWxpZCA9IElneElucHV0U3RhdGUuSU5JVElBTDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzVG91Y2hlZE9yRGlydHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5fbmdDb250cm9sLmNvbnRyb2wudG91Y2hlZCB8fCB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5kaXJ0eSlcbiAgICAgICAgICAgICYmICghIXRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvciB8fCAhIXRoaXMuX25nQ29udHJvbC5jb250cm9sLmFzeW5jVmFsaWRhdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU3RhdHVzQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLmlucHV0R3JvdXAuaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uKGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVZhbHVlICYmIERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLmRhdGVWYWx1ZSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0SG91cnModGhpcy5kYXRlVmFsdWUuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlVmFsdWUuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgIGRhdGUuc2V0U2Vjb25kcyh0aGlzLmRhdGVWYWx1ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlVmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRlO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci52aWV3RGF0ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvRGF0ZUVkaXRvckV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci52YWx1ZUNoYW5nZS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbGlkYXRpb25GYWlsZWQucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBwcmV2VmFsdWU6IGV2ZW50Lm9sZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9PdmVybGF5RXZlbnRzKCkge1xuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5vcGVuaW5nLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKChlOiBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJnczogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyA9IHsgb3duZXI6IHRoaXMsIGV2ZW50OiBlLmV2ZW50LCBjYW5jZWw6IGUuY2FuY2VsIH07XG4gICAgICAgICAgICB0aGlzLm9wZW5pbmcuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIGUuY2FuY2VsID0gYXJncy5jYW5jZWw7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5kZXRhY2godGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDYWxlbmRhckNvbnRhaW5lcihlLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uub3BlbmVkLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYWxlbmRhcj8uZGF5c1ZpZXc/LnNlbGVjdGVkRGF0ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxlbmRhcj8uZGF5c1ZpZXc/LmZvY3VzQWN0aXZlRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl90YXJnZXRWaWV3RGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldFZpZXdEYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyPy5kYXlzVmlldz8uZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoZCA9PiBkLmRhdGUuZGF0ZS5nZXRUaW1lKCkgPT09IHRoaXMuX3RhcmdldFZpZXdEYXRlLmdldFRpbWUoKSk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuY2xvc2luZy5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoZTogT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgPSB7IG93bmVyOiB0aGlzLCBldmVudDogZS5ldmVudCwgY2FuY2VsOiBlLmNhbmNlbCB9O1xuICAgICAgICAgICAgdGhpcy5jbG9zaW5nLmVtaXQoYXJncyk7XG4gICAgICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG8gbm90IGZvY3VzIHRoZSBpbnB1dCBpZiBjbGlja2luZyBvdXRzaWRlIGluIGRyb3Bkb3duIG1vZGVcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEVkaXRFbGVtZW50KCkgJiYgIShhcmdzLmV2ZW50ICYmIHRoaXMuaXNEcm9wZG93bikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5jbG9zZWQucGlwZSguLi50aGlzLl9vdmVybGF5U3ViRmlsdGVyKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuZGV0YWNoKHRoaXMuX292ZXJsYXlJZCk7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheUlkID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNaW5NYXhEYXRlcygpIHtcbiAgICAgICAgY29uc3QgbWluVmFsdWUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5taW5WYWx1ZSkgPyB0aGlzLm1pblZhbHVlIDogRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZSh0aGlzLm1pblZhbHVlKTtcbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSBEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5tYXhWYWx1ZSkgPyB0aGlzLm1heFZhbHVlIDogRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZSh0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHsgbWluVmFsdWUsIG1heFZhbHVlIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREaXNhYmxlZERhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5kaXNhYmxlZERhdGVzID0gdGhpcy5kaXNhYmxlZERhdGVzID8gWy4uLnRoaXMuZGlzYWJsZWREYXRlc10gOiBbXTtcbiAgICAgICAgY29uc3QgeyBtaW5WYWx1ZSwgbWF4VmFsdWUgfSA9IHRoaXMuZ2V0TWluTWF4RGF0ZXMoKTtcbiAgICAgICAgaWYgKG1pblZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhci5kaXNhYmxlZERhdGVzLnB1c2goeyB0eXBlOiBEYXRlUmFuZ2VUeXBlLkJlZm9yZSwgZGF0ZVJhbmdlOiBbbWluVmFsdWVdIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIuZGlzYWJsZWREYXRlcy5wdXNoKHsgdHlwZTogRGF0ZVJhbmdlVHlwZS5BZnRlciwgZGF0ZVJhbmdlOiBbbWF4VmFsdWVdIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNhbGVuZGFyQ29udGFpbmVyKGNvbXBvbmVudEluc3RhbmNlOiBJZ3hDYWxlbmRhckNvbnRhaW5lckNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLl9jYWxlbmRhciA9IGNvbXBvbmVudEluc3RhbmNlLmNhbGVuZGFyO1xuICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5oZWFkZXJPcmllbnRhdGlvbiA9PT0gUGlja2VySGVhZGVyT3JpZW50YXRpb24uVmVydGljYWw7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmhhc0hlYWRlciA9ICF0aGlzLmlzRHJvcGRvd247XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmZvcm1hdE9wdGlvbnMgPSB0aGlzLnBpY2tlckNhbGVuZGFyRm9ybWF0O1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5mb3JtYXRWaWV3cyA9IHRoaXMucGlja2VyRm9ybWF0Vmlld3M7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmxvY2FsZSA9IHRoaXMubG9jYWxlO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci52ZXJ0aWNhbCA9IGlzVmVydGljYWw7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLndlZWtTdGFydCA9IHRoaXMud2Vla1N0YXJ0O1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5zcGVjaWFsRGF0ZXMgPSB0aGlzLnNwZWNpYWxEYXRlcztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5zdWJoZWFkZXJUZW1wbGF0ZSA9IHRoaXMuc3ViaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmhpZGVPdXRzaWRlRGF5cyA9IHRoaXMuaGlkZU91dHNpZGVEYXlzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5tb250aHNWaWV3TnVtYmVyID0gdGhpcy5kaXNwbGF5TW9udGhzQ291bnQ7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnNob3dXZWVrTnVtYmVycyA9IHRoaXMuc2hvd1dlZWtOdW1iZXJzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5zZWxlY3RlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoZXY6IERhdGUpID0+IHRoaXMuaGFuZGxlU2VsZWN0aW9uKGV2KSk7XG4gICAgICAgIHRoaXMuc2V0RGlzYWJsZWREYXRlcygpO1xuXG4gICAgICAgIGlmIChEYXRlVGltZVV0aWwuaXNWYWxpZERhdGUodGhpcy5kYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBjYWxlbmRhciB3aWxsIHRocm93IGlmIHRoZSBwaWNrZXIncyB2YWx1ZSBpcyBJbnZhbGlkRGF0ZSAjOTIwOFxuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIudmFsdWUgPSB0aGlzLmRhdGVWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldENhbGVuZGFyVmlld0RhdGUoKTtcblxuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5tb2RlID0gdGhpcy5tb2RlO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS52ZXJ0aWNhbCA9IGlzVmVydGljYWw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNsb3NlQnV0dG9uTGFiZWwgPSB0aGlzLmNhbmNlbEJ1dHRvbkxhYmVsO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS50b2RheUJ1dHRvbkxhYmVsID0gdGhpcy50b2RheUJ1dHRvbkxhYmVsO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5waWNrZXJBY3Rpb25zID0gdGhpcy5waWNrZXJBY3Rpb25zO1xuXG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNhbGVuZGFyQ2xvc2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZSgpKTtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UudG9kYXlTZWxlY3Rpb24ucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZWxlY3RUb2RheSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENhbGVuZGFyVmlld0RhdGUoKSB7XG4gICAgICAgIGNvbnN0IHsgbWluVmFsdWUsIG1heFZhbHVlIH0gPSB0aGlzLmdldE1pbk1heERhdGVzKCk7XG4gICAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IHRoaXMuZGF0ZVZhbHVlIHx8IG5ldyBEYXRlKCk7XG4gICAgICAgIGlmIChtaW5WYWx1ZSAmJiBEYXRlVGltZVV0aWwubGVzc1RoYW5NaW5WYWx1ZSh0aGlzLmRhdGVWYWx1ZSwgbWluVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhci52aWV3RGF0ZSA9IHRoaXMuX3RhcmdldFZpZXdEYXRlID0gbWluVmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heFZhbHVlICYmIERhdGVUaW1lVXRpbC5ncmVhdGVyVGhhbk1heFZhbHVlKHRoaXMuZGF0ZVZhbHVlLCBtYXhWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyLnZpZXdEYXRlID0gdGhpcy5fdGFyZ2V0Vmlld0RhdGUgPSBtYXhWYWx1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYWxlbmRhci52aWV3RGF0ZSA9IHRoaXMuX3RhcmdldFZpZXdEYXRlID0gdGhpcy5kYXRlVmFsdWU7XG4gICAgfVxufVxuIiwiPGlneC1pbnB1dC1ncm91cCBbZGlzcGxheURlbnNpdHldPVwidGhpcy5kaXNwbGF5RGVuc2l0eVwiIFt0eXBlXT1cInRoaXMudHlwZVwiIFtzdXBwcmVzc0lucHV0QXV0b2ZvY3VzXT1cInRydWVcIj5cbiAgICA8aWd4LXByZWZpeCAqbmdJZj1cIiF0aGlzLnRvZ2dsZUNvbXBvbmVudHMubGVuZ3RoXCIgKGNsaWNrKT1cInRoaXMudG9nZ2xlKClcIj5cbiAgICAgICAgPGlneC1pY29uIFt0aXRsZV09XCJ0aGlzLnZhbHVlXG4gICAgICAgICAgICA/IHBpY2tlclJlc291cmNlU3RyaW5ncy5pZ3hfZGF0ZV9waWNrZXJfY2hhbmdlX2RhdGVcbiAgICAgICAgICAgIDogcGlja2VyUmVzb3VyY2VTdHJpbmdzLmlneF9kYXRlX3BpY2tlcl9jaG9vc2VfZGF0ZVwiPnRvZGF5PC9pZ3gtaWNvbj5cbiAgICA8L2lneC1wcmVmaXg+XG5cbiAgICA8aW5wdXQgY2xhc3M9XCJpZ3gtZGF0ZS1waWNrZXJfX2lucHV0LWRhdGVcIiBbZGlzcGxheVZhbHVlUGlwZV09XCJ0aGlzLmZvcm1hdHRlciA/IGRpc3BsYXlWYWx1ZSA6IG51bGxcIiBpZ3hJbnB1dFxuICAgICAgICBbaWd4RGF0ZVRpbWVFZGl0b3JdPVwidGhpcy5pbnB1dEZvcm1hdFwiIFtkaXNwbGF5Rm9ybWF0XT1cInRoaXMuZGlzcGxheUZvcm1hdFwiXG4gICAgICAgIFttaW5WYWx1ZV09XCJ0aGlzLm1pblZhbHVlXCIgW21heFZhbHVlXT1cInRoaXMubWF4VmFsdWVcIiBbc3BpbkRlbHRhXT1cInRoaXMuc3BpbkRlbHRhXCIgW3NwaW5Mb29wXT1cInRoaXMuc3Bpbkxvb3BcIiBcbiAgICAgICAgW2Rpc2FibGVkXT1cInRoaXMuZGlzYWJsZWRcIiBbcGxhY2Vob2xkZXJdPVwidGhpcy5wbGFjZWhvbGRlclwiIFtyZWFkb25seV09XCIhdGhpcy5pc0Ryb3Bkb3duIHx8IHRoaXMucmVhZE9ubHlcIlxuICAgICAgICBbaWd4VGV4dFNlbGVjdGlvbl09XCJ0aGlzLmlzRHJvcGRvd24gJiYgIXRoaXMucmVhZE9ubHlcIiBbbG9jYWxlXT1cInRoaXMubG9jYWxlXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhdGhpcy5jb2xsYXBzZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidGhpcy5sYWJlbD8uaWRcIiBhcmlhLWhhc3BvcHVwPVwiZGlhbG9nXCIgYXJpYS1hdXRvY29tcGxldGU9XCJub25lXCIgcm9sZT1cImNvbWJvYm94XCI+XG5cbiAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cIiF0aGlzLmNsZWFyQ29tcG9uZW50cy5sZW5ndGggJiYgdGhpcy52YWx1ZVwiIChjbGljayk9XCJ0aGlzLmNsZWFyKClcIj5cbiAgICAgICAgPGlneC1pY29uPmNsZWFyPC9pZ3gtaWNvbj5cbiAgICA8L2lneC1zdWZmaXg+XG5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiW2lneExhYmVsXVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWd4TGFiZWxdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtcHJlZml4XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1wcmVmaXgsW2lneFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1zdWZmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXN1ZmZpeCxbaWd4U3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LWhpbnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWhpbnQsW2lneEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9pZ3gtaW5wdXQtZ3JvdXA+XG4iXX0=
|
|
810
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFDOUMsTUFBTSxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsWUFBWSxFQUNFLGVBQWUsRUFDcEUsU0FBUyxFQUFhLFFBQVEsRUFDNUMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNtQixpQkFBaUIsRUFBRSxTQUFTLEVBQ2xELGFBQWEsRUFDaEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ21CLGtDQUFrQyxFQUFFLHFDQUFxQyxFQUMvRixRQUFRLEVBQUUsY0FBYyxFQUMzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDSCxpQkFBaUIsRUFBRSxzQkFBc0IsRUFDekMsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQXFCLGFBQWEsRUFDNUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsU0FBUyxFQUFnQixJQUFJLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUNjLGlCQUFpQixFQUFFLHNCQUFzQixFQUMxRCxvQkFBb0IsRUFHdkIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRSxP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LE1BQU07Z0JBS0EsZUFBZTtzQkFEckIsZUFBZTt1QkFBQyx1QkFBdUI7Z0JBS2pDLEtBQUs7c0JBRFgsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBSXZCLGNBQWM7c0JBRHJCLFlBQVk7dUJBQUMsa0NBQWtDO2dCQUl4QyxjQUFjO3NCQURyQixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJL0MsVUFBVTtzQkFEakIsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBSXpCLGNBQWM7c0JBRHJCLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUlwQixjQUFjO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQjtnQkFJcEIsaUJBQWlCO3NCQUR4QixZQUFZO3VCQUFDLHFDQUFxQztnQkFJM0MsYUFBYTtzQkFEcEIsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBNEdoQyxTQUFTO3NCQURmLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsXG4gICAgT25EZXN0cm95LCBPdXRwdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5qZWN0LCBIb3N0TGlzdGVuZXIsXG4gICAgTmdNb2R1bGVSZWYsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgSW5qZWN0b3IsIEFmdGVyVmlld0NoZWNrZWQsIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsIExPQ0FMRV9JRCwgUmVuZGVyZXIyLCBPcHRpb25hbCwgUGlwZVRyYW5zZm9ybSwgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdDb250cm9sLCBBYnN0cmFjdENvbnRyb2wsXG4gICAgTkdfVkFMSURBVE9SUywgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgSWd4Q2FsZW5kYXJDb21wb25lbnQsIElneENhbGVuZGFySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIElneENhbGVuZGFyU3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgV0VFS0RBWVMsIGlzRGF0ZUluUmFuZ2VzLCBJRm9ybWF0dGluZ1ZpZXdzLCBJRm9ybWF0dGluZ09wdGlvbnNcbn0gZnJvbSAnLi4vY2FsZW5kYXIvcHVibGljX2FwaSc7XG5pbXBvcnQge1xuICAgIElneElucHV0RGlyZWN0aXZlLCBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LFxuICAgIElneExhYmVsRGlyZWN0aXZlLCBJR1hfSU5QVVRfR1JPVVBfVFlQRSwgSWd4SW5wdXRHcm91cFR5cGUsIElneElucHV0U3RhdGVcbn0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiwgbm9vcCwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgT3ZlcmxheVNldHRpbmdzLCBJZ3hPdmVybGF5U2VydmljZSwgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSxcbiAgICBBdXRvUG9zaXRpb25TdHJhdGVneSxcbiAgICBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncyxcbiAgICBPdmVybGF5RXZlbnRBcmdzXG59IGZyb20gJy4uL3NlcnZpY2VzL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vZGF0ZS1waWNrZXItcmVzb3VyY2VzJztcbmltcG9ydCB7IERhdGVSYW5nZURlc2NyaXB0b3IsIERhdGVSYW5nZVR5cGUgfSBmcm9tICcuLi9jb3JlL2RhdGVzL2RhdGVSYW5nZSc7XG5pbXBvcnQgeyBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzLCBQbGF0Zm9ybVV0aWwsIGlzRGF0ZSB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4Q2FsZW5kYXJDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9jYWxlbmRhci1jb250YWluZXIvY2FsZW5kYXItY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmYWRlSW4sIGZhZGVPdXQgfSBmcm9tICcuLi9hbmltYXRpb25zL2ZhZGUnO1xuaW1wb3J0IHsgUGlja2VyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3BpY2tlci1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IERhdGVQYXJ0LCBEYXRlUGFydERlbHRhcywgSWd4RGF0ZVRpbWVFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2RhdGUtdGltZS1lZGl0b3IvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEYXRlVGltZVV0aWwgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi91dGlsL2RhdGUtdGltZS51dGlsJztcbmltcG9ydCB7IFBpY2tlckhlYWRlck9yaWVudGF0aW9uIGFzIFBpY2tlckhlYWRlck9yaWVudGF0aW9uIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgSURhdGVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzIH0gZnJvbSAnLi9kYXRlLXBpY2tlci5jb21tb24nO1xuaW1wb3J0IHsgSWd4UGlja2VyQ2xlYXJDb21wb25lbnQsIElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9wdWJsaWNfYXBpJztcblxubGV0IE5FWFRfSUQgPSAwO1xuXG4vKipcbiAqIERhdGUgUGlja2VyIGRpc3BsYXlzIGEgcG9wdXAgY2FsZW5kYXIgdGhhdCBsZXRzIHVzZXJzIHNlbGVjdCBhIHNpbmdsZSBkYXRlLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4RGF0ZVBpY2tlck1vZHVsZVxuICogQGlneFRoZW1lIGlneC1jYWxlbmRhci10aGVtZSwgaWd4LWljb24tdGhlbWVcbiAqIEBpZ3hHcm91cCBTY2hlZHVsaW5nXG4gKiBAaWd4S2V5d29yZHMgZGF0ZXBpY2tlciwgY2FsZW5kYXIsIHNjaGVkdWxlLCBkYXRlXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlneC1kYXRlLXBpY2tlciBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSWd4RGF0ZVBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogSWd4RGF0ZVBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfVxuICAgIF0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtZGF0ZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J11cbn0pXG5leHBvcnQgY2xhc3MgSWd4RGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIFBpY2tlckJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLFxuICAgIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgb24gd2hpY2ggZGF5IHRoZSB3ZWVrIHN0YXJ0cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW3dlZWtTdGFydF09XCI0XCIgY2FuY2VsQnV0dG9uTGFiZWw9XCJjYW5jZWxcIiB0b2RheUJ1dHRvbkxhYmVsPVwidG9kYXlcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB3ZWVrU3RhcnQ6IFdFRUtEQVlTIHwgbnVtYmVyID0gV0VFS0RBWVMuU1VOREFZO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHdoZXRoZXIgdGhlIGluYWN0aXZlIGRhdGVzIHdpbGwgYmUgaGlkZGVuLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBBcHBsaWVzIHRvIGRhdGVzIHRoYXQgYXJlIG91dCBvZiB0aGUgY3VycmVudCBtb250aC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbaGlkZU91dHNpZGVEYXlzXT1cInRydWVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaGlkZU91dHNpZGVEYXlzID0gdGhpcy5kYXRlUGlja2VyLmhpZGVPdXRzaWRlRGF5cztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoaWRlT3V0c2lkZURheXM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIG51bWJlciBvZiBtb250aCB2aWV3cyBkaXNwbGF5ZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYDFgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbZGlzcGxheU1vbnRoc0NvdW50XT1cIjJcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbW9udGhWaWV3c0Rpc3BsYXllZCA9IHRoaXMuZGF0ZVBpY2tlci5kaXNwbGF5TW9udGhzQ291bnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheU1vbnRoc0NvdW50ID0gMTtcblxuICAgIC8qKlxuICAgICAqIFNob3cvaGlkZSB3ZWVrIG51bWJlcnNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW3Nob3dXZWVrTnVtYmVyc109XCJ0cnVlXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93V2Vla051bWJlcnM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgYSBjdXN0b20gZm9ybWF0dGVyIGZ1bmN0aW9uIG9uIHRoZSBzZWxlY3RlZCBvciBwYXNzZWQgZGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW3ZhbHVlXT1cImRhdGVcIiBbZm9ybWF0dGVyXT1cImZvcm1hdHRlclwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm1hdHRlcjogKHZhbDogRGF0ZSkgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgYElneERhdGVQaWNrZXJDb21wb25lbnRgIGhlYWRlci5cbiAgICAgKlxuICAgICAqICBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIGhlYWRlck9yaWVudGF0aW9uPVwidmVydGljYWxcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoZWFkZXJPcmllbnRhdGlvbjogUGlja2VySGVhZGVyT3JpZW50YXRpb24gPSBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB0b2RheSBidXR0b24ncyBsYWJlbC5cbiAgICAgKlxuICAgICAqICBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIHRvZGF5QnV0dG9uTGFiZWw9XCJUb2RheVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRvZGF5QnV0dG9uTGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgY2FuY2VsIGJ1dHRvbidzIGxhYmVsLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBjYW5jZWxCdXR0b25MYWJlbD1cIkNhbmNlbFwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNhbmNlbEJ1dHRvbkxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGlmIHRoZSBjdXJyZW50bHkgc3B1biBkYXRlIHNlZ21lbnQgc2hvdWxkIGxvb3Agb3Zlci5cbiAgICAgKlxuICAgICAqICBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtzcGluTG9vcF09XCJmYWxzZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNwaW5Mb29wID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIERlbHRhIHZhbHVlcyB1c2VkIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgZWFjaCBlZGl0b3IgZGF0ZSBwYXJ0IG9uIHNwaW4gYWN0aW9ucy5cbiAgICAgKiBBbGwgdmFsdWVzIGRlZmF1bHQgdG8gYDFgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbc3BpbkRlbHRhXT1cInsgZGF0ZTogNSwgbW9udGg6IDIgfVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNwaW5EZWx0YTogUGljazxEYXRlUGFydERlbHRhcywgJ2RhdGUnIHwgJ21vbnRoJyB8ICd5ZWFyJz47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGNvbnRhaW5lciB1c2VkIGZvciB0aGUgcG9wdXAgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogIGBvdXRsZXRgIGlzIGFuIGluc3RhbmNlIG9mIGBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlYCBvciBhbiBgRWxlbWVudFJlZmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGRpdiBpZ3hPdmVybGF5T3V0bGV0ICNvdXRsZXQ9XCJvdmVybGF5LW91dGxldFwiPjwvZGl2PlxuICAgICAqIC8vLi5cbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyIFtvdXRsZXRdPVwib3V0bGV0XCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogLy8uLlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG91dGxldDogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB8IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHZhbHVlIG9mIGBpZGAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQHJlbWFya3MgSWYgbm90IHByb3ZpZGVkIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbaWRdPVwiJ2lneC1kYXRlLXBpY2tlci0zJ1wiIGNhbmNlbEJ1dHRvbkxhYmVsPVwiY2FuY2VsXCIgdG9kYXlCdXR0b25MYWJlbD1cInRvZGF5XCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtZGF0ZS1waWNrZXItJHtORVhUX0lEKyt9YDtcblxuICAgIC8vI3JlZ2lvbiBjYWxlbmRhciBtZW1iZXJzXG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGZvcm1hdCB2aWV3cyBvZiB0aGUgYElneERhdGVQaWNrZXJDb21wb25lbnRgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGZvcm1hdFZpZXdzID0gdGhpcy5kYXRlUGlja2VyLmZvcm1hdFZpZXdzO1xuICAgICAqICB0aGlzLmRhdGVQaWNrZXIuZm9ybWF0Vmlld3MgPSB7ZGF5OmZhbHNlLCBtb250aDogZmFsc2UsIHllYXI6ZmFsc2V9O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm1hdFZpZXdzOiBJRm9ybWF0dGluZ1ZpZXdzO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBkaXNhYmxlZCBkYXRlcyBkZXNjcmlwdG9ycy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBkaXNhYmxlZERhdGVzID0gdGhpcy5kYXRlcGlja2VyLmRpc2FibGVkRGF0ZXM7XG4gICAgICogdGhpcy5kYXRlUGlja2VyLmRpc2FibGVkRGF0ZXMgPSBbIHt0eXBlOiBEYXRlUmFuZ2VUeXBlLldlZWtlbmRzfSwgLi4uXTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWREYXRlcygpOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWREYXRlcztcbiAgICB9XG4gICAgcHVibGljIHNldCBkaXNhYmxlZERhdGVzKHZhbHVlOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWREYXRlcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9vblZhbGlkYXRvckNoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgc3BlY2lhbCBkYXRlcyBkZXNjcmlwdG9ycy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzcGVjaWFsRGF0ZXMgPSB0aGlzLmRhdGVwaWNrZXIuc3BlY2lhbERhdGVzO1xuICAgICAqIHRoaXMuZGF0ZVBpY2tlci5zcGVjaWFsRGF0ZXMgPSBbIHt0eXBlOiBEYXRlUmFuZ2VUeXBlLldlZWtlbmRzfSwgLi4uIF07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHNwZWNpYWxEYXRlcygpOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3BlY2lhbERhdGVzO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHNwZWNpYWxEYXRlcyh2YWx1ZTogRGF0ZVJhbmdlRGVzY3JpcHRvcltdKSB7XG4gICAgICAgIHRoaXMuX3NwZWNpYWxEYXRlcyA9IHZhbHVlO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBmb3JtYXQgb3B0aW9ucyBvZiB0aGUgYElneERhdGVQaWNrZXJDb21wb25lbnRgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5kYXRlUGlja2VyLmNhbGVuZGFyRm9ybWF0ID0ge2RheTogXCJudW1lcmljXCIsICBtb250aDogXCJsb25nXCIsIHdlZWtkYXk6IFwibG9uZ1wiLCB5ZWFyOiBcIm51bWVyaWNcIn07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2FsZW5kYXJGb3JtYXQ6IElGb3JtYXR0aW5nT3B0aW9ucztcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBzZWxlY3RlZCBkYXRlLlxuICAgICAqXG4gICAgICogIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW3ZhbHVlXT1cImRhdGVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCB2YWx1ZShkYXRlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5zZXREYXRlVmFsdWUoZGF0ZSk7XG4gICAgICAgIGlmICh0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbHVlICE9PSBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbHVlID0gdGhpcy5fZGF0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmRhdGVWYWx1ZSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5kYXRlVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIHZhbHVlIHRoZSBwaWNrZXIgd2lsbCBhY2NlcHQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgW21pblZhbHVlXT1cIm1pbkRhdGVcIj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbWluVmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWluVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pblZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gdmFsdWUgdGhlIHBpY2tlciB3aWxsIGFjY2VwdC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPGlneC1kYXRlLXBpY2tlciBbbWF4VmFsdWVdPVwibWF4RGF0ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtYXhWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9tYXhWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9vblZhbGlkYXRvckNoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHJlc291cmNlIHN0cmluZ3MgZm9yIHRoZSBwaWNrZXIncyBkZWZhdWx0IHRvZ2dsZSBpY29uLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVzb3VyY2VTdHJpbmdzOiBJRGF0ZVBpY2tlclJlc291cmNlU3RyaW5ncztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlYWRPbmx5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHBpY2tlcidzIHZhbHVlIGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFVzZWQgZm9yIGB0d28td2F5YCBiaW5kaW5ncy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgWyh2YWx1ZSldPVwiZGF0ZVwiPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciB0eXBlcy9zcGlucyBpbnZhbGlkIGRhdGUgaW4gdGhlIGRhdGUtcGlja2VyIGVkaXRvci5cbiAgICAgKlxuICAgICAqICBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcGlja2VyICh2YWxpZGF0aW9uRmFpbGVkKT1cIm9uVmFsaWRhdGlvbkZhaWxlZCgkZXZlbnQpXCI+PC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbGlkYXRpb25GYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElEYXRlUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncz4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4UGlja2VyQ2xlYXJDb21wb25lbnQpXG4gICAgcHVibGljIGNsZWFyQ29tcG9uZW50czogUXVlcnlMaXN0PElneFBpY2tlckNsZWFyQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4TGFiZWxEaXJlY3RpdmUpXG4gICAgcHVibGljIGxhYmVsOiBJZ3hMYWJlbERpcmVjdGl2ZTtcblxuICAgIEBDb250ZW50Q2hpbGQoSWd4Q2FsZW5kYXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBwcml2YXRlIGhlYWRlclRlbXBsYXRlOiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgQFZpZXdDaGlsZChJZ3hEYXRlVGltZUVkaXRvckRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGRhdGVUaW1lRWRpdG9yOiBJZ3hEYXRlVGltZUVkaXRvckRpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoSWd4SW5wdXRHcm91cENvbXBvbmVudClcbiAgICBwcml2YXRlIGlucHV0R3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKElneExhYmVsRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgbGFiZWxEaXJlY3RpdmU6IElneExhYmVsRGlyZWN0aXZlO1xuXG4gICAgQFZpZXdDaGlsZChJZ3hJbnB1dERpcmVjdGl2ZSlcbiAgICBwcml2YXRlIGlucHV0RGlyZWN0aXZlOiBJZ3hJbnB1dERpcmVjdGl2ZTtcblxuICAgIEBDb250ZW50Q2hpbGQoSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBwcml2YXRlIHN1YmhlYWRlclRlbXBsYXRlOiBJZ3hDYWxlbmRhclN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgcGlja2VyQWN0aW9uczogSWd4UGlja2VyQWN0aW9uc0RpcmVjdGl2ZTtcblxuICAgIHByaXZhdGUgZ2V0IGRpYWxvZ092ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGlhbG9nT3ZlcmxheVNldHRpbmdzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZHJvcERvd25PdmVybGF5U2V0dGluZ3MoKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaW5wdXRHcm91cEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dEdyb3VwPy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZGF0ZVZhbHVlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHBpY2tlckZvcm1hdFZpZXdzKCk6IElGb3JtYXR0aW5nVmlld3Mge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGVmRm9ybWF0Vmlld3MsIHRoaXMuZm9ybWF0Vmlld3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHBpY2tlckNhbGVuZGFyRm9ybWF0KCk6IElGb3JtYXR0aW5nT3B0aW9ucyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9jYWxlbmRhckZvcm1hdCwgdGhpcy5jYWxlbmRhckZvcm1hdCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGRpc3BsYXlWYWx1ZTogUGlwZVRyYW5zZm9ybSA9IHsgdHJhbnNmb3JtOiAoZGF0ZTogRGF0ZSkgPT4gdGhpcy5mb3JtYXR0ZXIoZGF0ZSkgfTtcblxuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuRGF0ZVBpY2tlclJlc291cmNlU3RyaW5ncztcbiAgICBwcml2YXRlIF9kYXRlVmFsdWU6IERhdGU7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheUlkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdmFsdWU6IERhdGUgfCBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdGFyZ2V0Vmlld0RhdGU6IERhdGU7XG4gICAgcHJpdmF0ZSBfbmdDb250cm9sOiBOZ0NvbnRyb2wgPSBudWxsO1xuICAgIHByaXZhdGUgX3N0YXR1c0NoYW5nZXMkOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfY2FsZW5kYXI6IElneENhbGVuZGFyQ29tcG9uZW50O1xuICAgIHByaXZhdGUgX3NwZWNpYWxEYXRlczogRGF0ZVJhbmdlRGVzY3JpcHRvcltdID0gbnVsbDtcbiAgICBwcml2YXRlIF9kaXNhYmxlZERhdGVzOiBEYXRlUmFuZ2VEZXNjcmlwdG9yW10gPSBudWxsO1xuICAgIHByaXZhdGUgX292ZXJsYXlTdWJGaWx0ZXI6XG4gICAgICAgIFtNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248T3ZlcmxheUV2ZW50QXJncz4sXG4gICAgICAgICAgICBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248T3ZlcmxheUV2ZW50QXJncyB8IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzPl0gPSBbXG4gICAgICAgICAgICBmaWx0ZXIoeCA9PiB4LmlkID09PSB0aGlzLl9vdmVybGF5SWQpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICAgICBdO1xuICAgIHByaXZhdGUgX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIHRhcmdldDogdGhpcy5pbnB1dEdyb3VwRWxlbWVudCxcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICBjbG9zZU9uRXNjYXBlOiB0cnVlLFxuICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogbmV3IEF1dG9Qb3NpdGlvblN0cmF0ZWd5KHtcbiAgICAgICAgICAgIG9wZW5BbmltYXRpb246IGZhZGVJbixcbiAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBmYWRlT3V0XG4gICAgICAgIH0pXG4gICAgfTtcbiAgICBwcml2YXRlIF9kaWFsb2dPdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgbW9kYWw6IHRydWUsXG4gICAgICAgIGNsb3NlT25Fc2NhcGU6IHRydWVcbiAgICB9O1xuICAgIHByaXZhdGUgX2NhbGVuZGFyRm9ybWF0OiBJRm9ybWF0dGluZ09wdGlvbnMgPSB7XG4gICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgd2Vla2RheTogJ3Nob3J0JyxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnXG4gICAgfTtcbiAgICBwcml2YXRlIF9kZWZGb3JtYXRWaWV3czogSUZvcm1hdHRpbmdWaWV3cyA9IHtcbiAgICAgICAgZGF5OiBmYWxzZSxcbiAgICAgICAgbW9udGg6IHRydWUsXG4gICAgICAgIHllYXI6IGZhbHNlXG4gICAgfTtcbiAgICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogRGF0ZSkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICAgIHByaXZhdGUgX29uVmFsaWRhdG9yQ2hhbmdlOiAoKSA9PiB2b2lkID0gbm9vcDtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIHByb3RlY3RlZCBfbG9jYWxlSWQ6IHN0cmluZyxcbiAgICAgICAgQEluamVjdChJZ3hPdmVybGF5U2VydmljZSkgcHJpdmF0ZSBfb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVSZWY6IE5nTW9kdWxlUmVmPGFueT4sXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgcHJvdGVjdGVkIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM/OiBJRGlzcGxheURlbnNpdHlPcHRpb25zLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElHWF9JTlBVVF9HUk9VUF9UWVBFKSBwcm90ZWN0ZWQgX2lucHV0R3JvdXBUeXBlPzogSWd4SW5wdXRHcm91cFR5cGUpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCwgX2xvY2FsZUlkLCBfZGlzcGxheURlbnNpdHlPcHRpb25zLCBfaW5wdXRHcm91cFR5cGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wgJiYgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wgJiYgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAvLyBSdW4gdGhlIHZhbGlkYXRpb24gd2l0aCBlbXB0eSBvYmplY3QgdG8gY2hlY2sgaWYgcmVxdWlyZWQgaXMgZW5hYmxlZC5cbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5fbmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKHt9IGFzIEFic3RyYWN0Q29udHJvbCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IucmVxdWlyZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBwaWNrZXJSZXNvdXJjZVN0cmluZ3MoKTogSURhdGVQaWNrZXJSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB0aGlzLnJlc291cmNlU3RyaW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19VUDpcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX0RPV046XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLlNQQUNFOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyB0aGUgcGlja2VyJ3MgZHJvcGRvd24gb3IgZGlhbG9nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciAjcGlja2VyPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqXG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiPk9wZW4gRGlhbG9nPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG9wZW4oc2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCB8fCB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdmVybGF5U2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmlzRHJvcGRvd25cbiAgICAgICAgICAgID8gdGhpcy5kcm9wRG93bk92ZXJsYXlTZXR0aW5nc1xuICAgICAgICAgICAgOiB0aGlzLmRpYWxvZ092ZXJsYXlTZXR0aW5nc1xuICAgICAgICAgICAgLCBzZXR0aW5ncyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEcm9wZG93biAmJiB0aGlzLmlucHV0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICBvdmVybGF5U2V0dGluZ3MudGFyZ2V0ID0gdGhpcy5pbnB1dEdyb3VwRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdXRsZXQpIHtcbiAgICAgICAgICAgIG92ZXJsYXlTZXR0aW5ncy5vdXRsZXQgPSB0aGlzLm91dGxldDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX292ZXJsYXlJZCA9IHRoaXMuX292ZXJsYXlTZXJ2aWNlXG4gICAgICAgICAgICAuYXR0YWNoKElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50LCBvdmVybGF5U2V0dGluZ3MsIHRoaXMuX21vZHVsZVJlZik7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLnNob3codGhpcy5fb3ZlcmxheUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2dcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgI3BpY2tlcj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cInBpY2tlci50b2dnbGUoKVwiPlRvZ2dsZSBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKHNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuKHNldHRpbmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgcGlja2VyJ3MgZHJvcGRvd24gb3IgZGlhbG9nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXBpY2tlciAjcGlja2VyPjwvaWd4LWRhdGUtcGlja2VyPlxuICAgICAqXG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwicGlja2VyLmNsb3NlKClcIj5DbG9zZSBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmhpZGUodGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgYSBkYXRlLlxuICAgICAqXG4gICAgICogQHJlbWFya3MgVXBkYXRlcyB0aGUgdmFsdWUgaW4gdGhlIGlucHV0IGZpZWxkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5kYXRlUGlja2VyLnNlbGVjdChkYXRlKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGF0ZSBwYXNzZWQgZGF0ZSB0aGF0IGhhcyB0byBiZSBzZXQgdG8gdGhlIGNhbGVuZGFyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3QodmFsdWU6IERhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgdG9kYXkncyBkYXRlIGFuZCBjbG9zZXMgdGhlIHBpY2tlci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1waWNrZXIgI3BpY2tlcj48L2lneC1kYXRlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cInBpY2tlci5zZWxlY3RUb2RheSgpXCI+U2VsZWN0IFRvZGF5PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICogKi9cbiAgICBwdWJsaWMgc2VsZWN0VG9kYXkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgICAgdG9kYXkuc2V0SG91cnMoMCk7XG4gICAgICAgIHRvZGF5LnNldE1pbnV0ZXMoMCk7XG4gICAgICAgIHRvZGF5LnNldFNlY29uZHMoMCk7XG4gICAgICAgIHRvZGF5LnNldE1pbGxpc2Vjb25kcygwKTtcbiAgICAgICAgdGhpcy5zZWxlY3QodG9kYXkpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBpbnB1dCBmaWVsZCBhbmQgdGhlIHBpY2tlcidzIHZhbHVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5kYXRlUGlja2VyLmNsZWFyKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyPy5kZXNlbGVjdERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluY3JlbWVudCBhIHNwZWNpZmllZCBgRGF0ZVBhcnRgLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGVQYXJ0IFRoZSBvcHRpb25hbCBEYXRlUGFydCB0byBpbmNyZW1lbnQuIERlZmF1bHRzIHRvIERhdGUuXG4gICAgICogQHBhcmFtIGRlbHRhIFRoZSBvcHRpb25hbCBkZWx0YSB0byBpbmNyZW1lbnQgYnkuIE92ZXJyaWRlcyBgc3BpbkRlbHRhYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuaW5jcmVtZW50KERhdGVQYXJ0LkRhdGUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBpbmNyZW1lbnQoZGF0ZVBhcnQ/OiBEYXRlUGFydCwgZGVsdGE/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci5pbmNyZW1lbnQoZGF0ZVBhcnQsIGRlbHRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNyZW1lbnQgYSBzcGVjaWZpZWQgYERhdGVQYXJ0YFxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGVQYXJ0IFRoZSBvcHRpb25hbCBEYXRlUGFydCB0byBkZWNyZW1lbnQuIERlZmF1bHRzIHRvIERhdGUuXG4gICAgICogQHBhcmFtIGRlbHRhIFRoZSBvcHRpb25hbCBkZWx0YSB0byBkZWNyZW1lbnQgYnkuIE92ZXJyaWRlcyBgc3BpbkRlbHRhYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmRhdGVQaWNrZXIuZGVjcmVtZW50KERhdGVQYXJ0LkRhdGUpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZWNyZW1lbnQoZGF0ZVBhcnQ/OiBEYXRlUGFydCwgZGVsdGE/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlVGltZUVkaXRvci5kZWNyZW1lbnQoZGF0ZVBhcnQsIGRlbHRhKTtcbiAgICB9XG5cbiAgICAvLyNyZWdpb24gQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0RGF0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbHVlID0gdGhpcy5fZGF0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gVmFsaWRhdG9yXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLl9vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW52YWxpZERhdGUgaGFuZGxpbmdcbiAgICAgICAgaWYgKGlzRGF0ZShjb250cm9sLnZhbHVlKSAmJiAhRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogdHJ1ZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IHZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKGNvbnRyb2wudmFsdWUpID8gY29udHJvbC52YWx1ZSA6IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUoY29udHJvbC52YWx1ZSk7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0aGlzLmRpc2FibGVkRGF0ZXMgJiYgaXNEYXRlSW5SYW5nZXModmFsdWUsIHRoaXMuZGlzYWJsZWREYXRlcykpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCB7IGRhdGVJc0Rpc2FibGVkOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCBEYXRlVGltZVV0aWwudmFsaWRhdGVNaW5NYXgodmFsdWUsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUsIGZhbHNlKSk7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCA/IGVycm9ycyA6IG51bGw7XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ0NvbnRyb2wgPSB0aGlzLl9pbmplY3Rvci5nZXQ8TmdDb250cm9sPihOZ0NvbnRyb2wsIG51bGwpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvQ2xpY2soKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb092ZXJsYXlFdmVudHMoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVFZGl0b3JFdmVudHMoKTtcblxuICAgICAgICB0aGlzLnN1YlRvSWNvbnNDbGlja2VkKHRoaXMuY2xlYXJDb21wb25lbnRzLCAoKSA9PiB0aGlzLmNsZWFyKCkpO1xuICAgICAgICB0aGlzLmNsZWFyQ29tcG9uZW50cy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdWJUb0ljb25zQ2xpY2tlZCh0aGlzLmNsZWFyQ29tcG9uZW50cywgKCkgPT4gdGhpcy5jbGVhcigpKSk7XG5cbiAgICAgICAgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MuZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2sgPSBbdGhpcy5pbnB1dEdyb3VwLmVsZW1lbnQubmF0aXZlRWxlbWVudF07XG5cbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudCwgJ2JsdXInKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdHVzQ2hhbmdlcyQgPVxuICAgICAgICAgICAgICAgIHRoaXMuX25nQ29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSh0aGlzLm9uU3RhdHVzQ2hhbmdlZC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cC5pc1JlcXVpcmVkID0gdGhpcy5yZXF1aXJlZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5pbnB1dERpcmVjdGl2ZS5uYXRpdmVFbGVtZW50LCAnYXJpYS1sYWJlbGxlZGJ5JywgdGhpcy5sYWJlbERpcmVjdGl2ZS5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0dXNDaGFuZ2VzJCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdHVzQ2hhbmdlcyQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5kZXRhY2godGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vdmVybGF5SWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0RWRpdEVsZW1lbnQoKTogSFRNTElucHV0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0NsaWNrKCkge1xuICAgICAgICBmcm9tRXZlbnQodGhpcy5nZXRFZGl0RWxlbWVudCgpLCAnY2xpY2snKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0Ryb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREYXRlVmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGlzRGF0ZSh2YWx1ZSkgJiYgaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZVZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0ZVZhbHVlID0gRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHZhbHVlKSA/IHZhbHVlIDogRGF0ZVRpbWVVdGlsLnBhcnNlSXNvRGF0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWxpZGl0eSgpIHtcbiAgICAgICAgLy8gQi5QLiAxOCBNYXkgMjAyMTogSWd4RGF0ZVBpY2tlciBkb2VzIG5vdCByZXNldCBpdHMgc3RhdGUgdXBvbiByZXNldEZvcm0gIzk1MjZcbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCAmJiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLmlzVG91Y2hlZE9yRGlydHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0R3JvdXAuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWxpZCA9IHRoaXMuX25nQ29udHJvbC52YWxpZFxuICAgICAgICAgICAgICAgICAgICA/IElneElucHV0U3RhdGUuVkFMSURcbiAgICAgICAgICAgICAgICAgICAgOiBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSB0aGlzLl9uZ0NvbnRyb2wudmFsaWRcbiAgICAgICAgICAgICAgICAgICAgPyBJZ3hJbnB1dFN0YXRlLklOSVRJQUxcbiAgICAgICAgICAgICAgICAgICAgOiBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLnZhbGlkID0gSWd4SW5wdXRTdGF0ZS5JTklUSUFMO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNUb3VjaGVkT3JEaXJ0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC50b3VjaGVkIHx8IHRoaXMuX25nQ29udHJvbC5jb250cm9sLmRpcnR5KVxuICAgICAgICAgICAgJiYgKCEhdGhpcy5fbmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yIHx8ICEhdGhpcy5fbmdDb250cm9sLmNvbnRyb2wuYXN5bmNWYWxpZGF0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TdGF0dXNDaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5fbmdDb250cm9sLmRpc2FibGVkO1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMuaW5wdXRHcm91cC5pc1JlcXVpcmVkID0gdGhpcy5yZXF1aXJlZDtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBoYW5kbGVTZWxlY3Rpb24oZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRlVmFsdWUgJiYgRGF0ZVRpbWVVdGlsLmlzVmFsaWREYXRlKHRoaXMuZGF0ZVZhbHVlKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXRIb3Vycyh0aGlzLmRhdGVWYWx1ZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGVWYWx1ZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZVZhbHVlLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICBkYXRlLnNldE1pbGxpc2Vjb25kcyh0aGlzLmRhdGVWYWx1ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnZpZXdEYXRlID0gZGF0ZTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9EYXRlRWRpdG9yRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVUaW1lRWRpdG9yLnZhbHVlQ2hhbmdlLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUodmFsID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGF0ZVRpbWVFZGl0b3IudmFsaWRhdGlvbkZhaWxlZC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgb3duZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIHByZXZWYWx1ZTogZXZlbnQub2xkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb092ZXJsYXlFdmVudHMoKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLm9wZW5pbmcucGlwZSguLi50aGlzLl9vdmVybGF5U3ViRmlsdGVyKS5zdWJzY3JpYmUoKGU6IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZS5jYW5jZWwgfTtcbiAgICAgICAgICAgIHRoaXMub3BlbmluZy5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgZS5jYW5jZWwgPSBhcmdzLmNhbmNlbDtcbiAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmRldGFjaCh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhbGVuZGFyQ29udGFpbmVyKGUuY29tcG9uZW50UmVmLmluc3RhbmNlKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5vcGVuZWQucGlwZSguLi50aGlzLl9vdmVybGF5U3ViRmlsdGVyKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcGVuZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NhbGVuZGFyPy5kYXlzVmlldz8uc2VsZWN0ZWREYXRlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyPy5kYXlzVmlldz8uZm9jdXNBY3RpdmVEYXRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldFZpZXdEYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0Vmlld0RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXI/LmRheXNWaWV3Py5kYXRlc1xuICAgICAgICAgICAgICAgICAgICAuZmluZChkID0+IGQuZGF0ZS5kYXRlLmdldFRpbWUoKSA9PT0gdGhpcy5fdGFyZ2V0Vmlld0RhdGUuZ2V0VGltZSgpKT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5jbG9zaW5nLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKChlOiBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJnczogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyA9IHsgb3duZXI6IHRoaXMsIGV2ZW50OiBlLmV2ZW50LCBjYW5jZWw6IGUuY2FuY2VsIH07XG4gICAgICAgICAgICB0aGlzLmNsb3NpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIGUuY2FuY2VsID0gYXJncy5jYW5jZWw7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkbyBub3QgZm9jdXMgdGhlIGlucHV0IGlmIGNsaWNraW5nIG91dHNpZGUgaW4gZHJvcGRvd24gbW9kZVxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0RWRpdEVsZW1lbnQoKSAmJiAhKGFyZ3MuZXZlbnQgJiYgdGhpcy5pc0Ryb3Bkb3duKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmNsb3NlZC5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KHsgb3duZXI6IHRoaXMgfSk7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5kZXRhY2godGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5SWQgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1pbk1heERhdGVzKCkge1xuICAgICAgICBjb25zdCBtaW5WYWx1ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLm1pblZhbHVlKSA/IHRoaXMubWluVmFsdWUgOiBEYXRlVGltZVV0aWwucGFyc2VJc29EYXRlKHRoaXMubWluVmFsdWUpO1xuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLm1heFZhbHVlKSA/IHRoaXMubWF4VmFsdWUgOiBEYXRlVGltZVV0aWwucGFyc2VJc29EYXRlKHRoaXMubWF4VmFsdWUpO1xuICAgICAgICByZXR1cm4geyBtaW5WYWx1ZSwgbWF4VmFsdWUgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERpc2FibGVkRGF0ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmRpc2FibGVkRGF0ZXMgPSB0aGlzLmRpc2FibGVkRGF0ZXMgPyBbLi4udGhpcy5kaXNhYmxlZERhdGVzXSA6IFtdO1xuICAgICAgICBjb25zdCB7IG1pblZhbHVlLCBtYXhWYWx1ZSB9ID0gdGhpcy5nZXRNaW5NYXhEYXRlcygpO1xuICAgICAgICBpZiAobWluVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyLmRpc2FibGVkRGF0ZXMucHVzaCh7IHR5cGU6IERhdGVSYW5nZVR5cGUuQmVmb3JlLCBkYXRlUmFuZ2U6IFttaW5WYWx1ZV0gfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhci5kaXNhYmxlZERhdGVzLnB1c2goeyB0eXBlOiBEYXRlUmFuZ2VUeXBlLkFmdGVyLCBkYXRlUmFuZ2U6IFttYXhWYWx1ZV0gfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ2FsZW5kYXJDb250YWluZXIoY29tcG9uZW50SW5zdGFuY2U6IElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyID0gY29tcG9uZW50SW5zdGFuY2UuY2FsZW5kYXI7XG4gICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmhlYWRlck9yaWVudGF0aW9uID09PSBQaWNrZXJIZWFkZXJPcmllbnRhdGlvbi5WZXJ0aWNhbDtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuaGFzSGVhZGVyID0gIXRoaXMuaXNEcm9wZG93bjtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuZm9ybWF0T3B0aW9ucyA9IHRoaXMucGlja2VyQ2FsZW5kYXJGb3JtYXQ7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFZpZXdzID0gdGhpcy5waWNrZXJGb3JtYXRWaWV3cztcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIubG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnZlcnRpY2FsID0gaXNWZXJ0aWNhbDtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIud2Vla1N0YXJ0ID0gdGhpcy53ZWVrU3RhcnQ7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnNwZWNpYWxEYXRlcyA9IHRoaXMuc3BlY2lhbERhdGVzO1xuICAgICAgICB0aGlzLl9jYWxlbmRhci5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnN1YmhlYWRlclRlbXBsYXRlID0gdGhpcy5zdWJoZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuaGlkZU91dHNpZGVEYXlzID0gdGhpcy5oaWRlT3V0c2lkZURheXM7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLm1vbnRoc1ZpZXdOdW1iZXIgPSB0aGlzLmRpc3BsYXlNb250aHNDb3VudDtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIuc2hvd1dlZWtOdW1iZXJzID0gdGhpcy5zaG93V2Vla051bWJlcnM7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnNlbGVjdGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKChldjogRGF0ZSkgPT4gdGhpcy5oYW5kbGVTZWxlY3Rpb24oZXYpKTtcbiAgICAgICAgdGhpcy5zZXREaXNhYmxlZERhdGVzKCk7XG5cbiAgICAgICAgaWYgKERhdGVUaW1lVXRpbC5pc1ZhbGlkRGF0ZSh0aGlzLmRhdGVWYWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIGNhbGVuZGFyIHdpbGwgdGhyb3cgaWYgdGhlIHBpY2tlcidzIHZhbHVlIGlzIEludmFsaWREYXRlICM5MjA4XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhci52YWx1ZSA9IHRoaXMuZGF0ZVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0Q2FsZW5kYXJWaWV3RGF0ZSgpO1xuXG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLm1vZGUgPSB0aGlzLm1vZGU7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnZlcnRpY2FsID0gaXNWZXJ0aWNhbDtcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuY2xvc2VCdXR0b25MYWJlbCA9IHRoaXMuY2FuY2VsQnV0dG9uTGFiZWw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnRvZGF5QnV0dG9uTGFiZWwgPSB0aGlzLnRvZGF5QnV0dG9uTGFiZWw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnBpY2tlckFjdGlvbnMgPSB0aGlzLnBpY2tlckFjdGlvbnM7XG5cbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuY2FsZW5kYXJDbG9zZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS50b2RheVNlbGVjdGlvbi5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNlbGVjdFRvZGF5KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2FsZW5kYXJWaWV3RGF0ZSgpIHtcbiAgICAgICAgY29uc3QgeyBtaW5WYWx1ZSwgbWF4VmFsdWUgfSA9IHRoaXMuZ2V0TWluTWF4RGF0ZXMoKTtcbiAgICAgICAgdGhpcy5fZGF0ZVZhbHVlID0gdGhpcy5kYXRlVmFsdWUgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgaWYgKG1pblZhbHVlICYmIERhdGVUaW1lVXRpbC5sZXNzVGhhbk1pblZhbHVlKHRoaXMuZGF0ZVZhbHVlLCBtaW5WYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyLnZpZXdEYXRlID0gdGhpcy5fdGFyZ2V0Vmlld0RhdGUgPSBtaW5WYWx1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4VmFsdWUgJiYgRGF0ZVRpbWVVdGlsLmdyZWF0ZXJUaGFuTWF4VmFsdWUodGhpcy5kYXRlVmFsdWUsIG1heFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXIudmlld0RhdGUgPSB0aGlzLl90YXJnZXRWaWV3RGF0ZSA9IG1heFZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyLnZpZXdEYXRlID0gdGhpcy5fdGFyZ2V0Vmlld0RhdGUgPSB0aGlzLmRhdGVWYWx1ZTtcbiAgICB9XG59XG4iLCI8aWd4LWlucHV0LWdyb3VwIFtkaXNwbGF5RGVuc2l0eV09XCJ0aGlzLmRpc3BsYXlEZW5zaXR5XCIgW3R5cGVdPVwidGhpcy50eXBlXCIgW3N1cHByZXNzSW5wdXRBdXRvZm9jdXNdPVwidHJ1ZVwiPlxuICAgIDxpZ3gtcHJlZml4ICpuZ0lmPVwiIXRoaXMudG9nZ2xlQ29tcG9uZW50cy5sZW5ndGhcIiAoY2xpY2spPVwidGhpcy50b2dnbGUoKVwiPlxuICAgICAgICA8aWd4LWljb24gW3RpdGxlXT1cInRoaXMudmFsdWVcbiAgICAgICAgICAgID8gcGlja2VyUmVzb3VyY2VTdHJpbmdzLmlneF9kYXRlX3BpY2tlcl9jaGFuZ2VfZGF0ZVxuICAgICAgICAgICAgOiBwaWNrZXJSZXNvdXJjZVN0cmluZ3MuaWd4X2RhdGVfcGlja2VyX2Nob29zZV9kYXRlXCI+dG9kYXk8L2lneC1pY29uPlxuICAgIDwvaWd4LXByZWZpeD5cblxuICAgIDxpbnB1dCBjbGFzcz1cImlneC1kYXRlLXBpY2tlcl9faW5wdXQtZGF0ZVwiIFtkaXNwbGF5VmFsdWVQaXBlXT1cInRoaXMuZm9ybWF0dGVyID8gZGlzcGxheVZhbHVlIDogbnVsbFwiIGlneElucHV0XG4gICAgICAgIFtpZ3hEYXRlVGltZUVkaXRvcl09XCJ0aGlzLmlucHV0Rm9ybWF0XCIgW2Rpc3BsYXlGb3JtYXRdPVwidGhpcy5kaXNwbGF5Rm9ybWF0XCJcbiAgICAgICAgW21pblZhbHVlXT1cInRoaXMubWluVmFsdWVcIiBbbWF4VmFsdWVdPVwidGhpcy5tYXhWYWx1ZVwiIFtzcGluRGVsdGFdPVwidGhpcy5zcGluRGVsdGFcIiBbc3Bpbkxvb3BdPVwidGhpcy5zcGluTG9vcFwiIFxuICAgICAgICBbZGlzYWJsZWRdPVwidGhpcy5kaXNhYmxlZFwiIFtwbGFjZWhvbGRlcl09XCJ0aGlzLnBsYWNlaG9sZGVyXCIgW3JlYWRvbmx5XT1cIiF0aGlzLmlzRHJvcGRvd24gfHwgdGhpcy5yZWFkT25seVwiXG4gICAgICAgIFtpZ3hUZXh0U2VsZWN0aW9uXT1cInRoaXMuaXNEcm9wZG93biAmJiAhdGhpcy5yZWFkT25seVwiIFtsb2NhbGVdPVwidGhpcy5sb2NhbGVcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiF0aGlzLmNvbGxhcHNlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0aGlzLmxhYmVsPy5pZFwiIGFyaWEtaGFzcG9wdXA9XCJkaWFsb2dcIiBhcmlhLWF1dG9jb21wbGV0ZT1cIm5vbmVcIiByb2xlPVwiY29tYm9ib3hcIj5cblxuICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwiIXRoaXMuY2xlYXJDb21wb25lbnRzLmxlbmd0aCAmJiB0aGlzLnZhbHVlXCIgKGNsaWNrKT1cInRoaXMuY2xlYXIoKVwiPlxuICAgICAgICA8aWd4LWljb24+Y2xlYXI8L2lneC1pY29uPlxuICAgIDwvaWd4LXN1ZmZpeD5cblxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJbaWd4TGFiZWxdXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hMYWJlbF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1wcmVmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXByZWZpeCxbaWd4UHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LXN1ZmZpeFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc3VmZml4LFtpZ3hTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtaGludFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtaGludCxbaWd4SGludF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2lneC1pbnB1dC1ncm91cD5cbiJdfQ==
|