@skyux/datetime 6.0.0-beta.5 → 6.0.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/esm2020/index.mjs CHANGED
@@ -4,8 +4,11 @@ export * from './lib/modules/date-pipe/fuzzy-date.pipe';
4
4
  export * from './lib/modules/date-range-picker/types/date-range-calculation';
5
5
  export * from './lib/modules/date-range-picker/types/date-range-calculator';
6
6
  export * from './lib/modules/date-range-picker/types/date-range-calculator-config';
7
+ export * from './lib/modules/date-range-picker/types/date-range-calculator-date-range-function';
7
8
  export * from './lib/modules/date-range-picker/types/date-range-calculator-id';
8
9
  export * from './lib/modules/date-range-picker/types/date-range-calculator-type';
10
+ export * from './lib/modules/date-range-picker/types/date-range-calculator-validate-function';
11
+ export * from './lib/modules/date-range-picker/types/date-range';
9
12
  export * from './lib/modules/date-range-picker/date-range-picker.module';
10
13
  export * from './lib/modules/date-range-picker/date-range.service';
11
14
  export * from './lib/modules/datepicker/datepicker-config.service';
@@ -25,4 +28,4 @@ export { SkyFuzzyDatepickerInputDirective as λ4 } from './lib/modules/datepicke
25
28
  export { SkyDateRangePickerComponent as λ5 } from './lib/modules/date-range-picker/date-range-picker.component';
26
29
  export { SkyTimepickerComponent as λ6 } from './lib/modules/timepicker/timepicker.component';
27
30
  export { SkyTimepickerInputDirective as λ7 } from './lib/modules/timepicker/timepicker.directive';
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywwQ0FBMEMsQ0FBQztBQUV6RCxjQUFjLHlDQUF5QyxDQUFDO0FBRXhELGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyw2REFBNkQsQ0FBQztBQUM1RSxjQUFjLG9FQUFvRSxDQUFDO0FBQ25GLGNBQWMsZ0VBQWdFLENBQUM7QUFDL0UsY0FBYyxrRUFBa0UsQ0FBQztBQUNqRixjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLGNBQWMsb0RBQW9ELENBQUM7QUFFbkUsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsaURBQWlELENBQUM7QUFFaEUsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDRDQUE0QyxDQUFDO0FBRTNELDBGQUEwRjtBQUMxRiwyRUFBMkU7QUFDM0UsT0FBTyxFQUFFLDhCQUE4QixJQUFJLEVBQUUsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzlHLE9BQU8sRUFBRSxzQkFBc0IsSUFBSSxFQUFFLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM3RixPQUFPLEVBQUUsMkJBQTJCLElBQUksRUFBRSxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEcsT0FBTyxFQUFFLGdDQUFnQyxJQUFJLEVBQUUsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ25ILE9BQU8sRUFBRSwyQkFBMkIsSUFBSSxFQUFFLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUNoSCxPQUFPLEVBQUUsc0JBQXNCLElBQUksRUFBRSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDN0YsT0FBTyxFQUFFLDJCQUEyQixJQUFJLEVBQUUsRUFBRSxNQUFNLCtDQUErQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXBpcGUvZGF0ZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvZGF0ZS1waXBlL2RhdGUtcGlwZS5tb2R1bGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGUtcGlwZS9mdXp6eS1kYXRlLnBpcGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvZGF0ZS1yYW5nZS1waWNrZXIvdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLWlkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvZGF0ZS1yYW5nZS1waWNrZXIvdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1jb25maWcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5LWRhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5LWRhdGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1jYWxlbmRhci1jaGFuZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2RhdGVwaWNrZXItY3VzdG9tLWRhdGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL3RpbWVwaWNrZXIvdGltZXBpY2tlci5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy90aW1lcGlja2VyL3RpbWVwaWNrZXIubW9kdWxlJztcblxuLy8gQ29tcG9uZW50cyBhbmQgZGlyZWN0aXZlcyBtdXN0IGJlIGV4cG9ydGVkIHRvIHN1cHBvcnQgQW5ndWxhcuKAmXMg4oCccGFydGlhbOKAnSBJdnkgY29tcGlsZXIuXG4vLyBPYnNjdXJlIG5hbWVzIGFyZSB1c2VkIHRvIGluZGljYXRlIHR5cGVzIGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljIEFQSS5cbmV4cG9ydCB7IFNreURhdGVwaWNrZXJDYWxlbmRhckNvbXBvbmVudCBhcyDOuzEgfSBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQnO1xuZXhwb3J0IHsgU2t5RGF0ZXBpY2tlckNvbXBvbmVudCBhcyDOuzIgfSBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuZXhwb3J0IHsgU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlIGFzIM67MyB9IGZyb20gJy4vbGliL21vZHVsZXMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLWlucHV0LmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBTa3lGdXp6eURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSBhcyDOuzQgfSBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgU2t5RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IGFzIM67NSB9IGZyb20gJy4vbGliL21vZHVsZXMvZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50JztcbmV4cG9ydCB7IFNreVRpbWVwaWNrZXJDb21wb25lbnQgYXMgzrs2IH0gZnJvbSAnLi9saWIvbW9kdWxlcy90aW1lcGlja2VyL3RpbWVwaWNrZXIuY29tcG9uZW50JztcbmV4cG9ydCB7IFNreVRpbWVwaWNrZXJJbnB1dERpcmVjdGl2ZSBhcyDOuzcgfSBmcm9tICcuL2xpYi9tb2R1bGVzL3RpbWVwaWNrZXIvdGltZXBpY2tlci5kaXJlY3RpdmUnO1xuIl19
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywwQ0FBMEMsQ0FBQztBQUV6RCxjQUFjLHlDQUF5QyxDQUFDO0FBRXhELGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyw2REFBNkQsQ0FBQztBQUM1RSxjQUFjLG9FQUFvRSxDQUFDO0FBQ25GLGNBQWMsaUZBQWlGLENBQUM7QUFDaEcsY0FBYyxnRUFBZ0UsQ0FBQztBQUMvRSxjQUFjLGtFQUFrRSxDQUFDO0FBQ2pGLGNBQWMsK0VBQStFLENBQUM7QUFDOUYsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLGNBQWMsb0RBQW9ELENBQUM7QUFFbkUsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsaURBQWlELENBQUM7QUFFaEUsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDRDQUE0QyxDQUFDO0FBRTNELDBGQUEwRjtBQUMxRiwyRUFBMkU7QUFDM0UsT0FBTyxFQUFFLDhCQUE4QixJQUFJLEVBQUUsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzlHLE9BQU8sRUFBRSxzQkFBc0IsSUFBSSxFQUFFLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM3RixPQUFPLEVBQUUsMkJBQTJCLElBQUksRUFBRSxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEcsT0FBTyxFQUFFLGdDQUFnQyxJQUFJLEVBQUUsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ25ILE9BQU8sRUFBRSwyQkFBMkIsSUFBSSxFQUFFLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUNoSCxPQUFPLEVBQUUsc0JBQXNCLElBQUksRUFBRSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDN0YsT0FBTyxFQUFFLDJCQUEyQixJQUFJLEVBQUUsRUFBRSxNQUFNLCtDQUErQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXBpcGUvZGF0ZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvZGF0ZS1waXBlL2RhdGUtcGlwZS5tb2R1bGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGUtcGlwZS9mdXp6eS1kYXRlLnBpcGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvZGF0ZS1yYW5nZS1waWNrZXIvdHlwZXMvZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLWRhdGUtcmFuZ2UtZnVuY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItaWQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRvci12YWxpZGF0ZS1mdW5jdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL3R5cGVzL2RhdGUtcmFuZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1jb25maWcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5LWRhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5LWRhdGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1jYWxlbmRhci1jaGFuZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2RhdGVwaWNrZXItY3VzdG9tLWRhdGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL3RpbWVwaWNrZXIvdGltZXBpY2tlci5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy90aW1lcGlja2VyL3RpbWVwaWNrZXIubW9kdWxlJztcblxuLy8gQ29tcG9uZW50cyBhbmQgZGlyZWN0aXZlcyBtdXN0IGJlIGV4cG9ydGVkIHRvIHN1cHBvcnQgQW5ndWxhcuKAmXMg4oCccGFydGlhbOKAnSBJdnkgY29tcGlsZXIuXG4vLyBPYnNjdXJlIG5hbWVzIGFyZSB1c2VkIHRvIGluZGljYXRlIHR5cGVzIGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljIEFQSS5cbmV4cG9ydCB7IFNreURhdGVwaWNrZXJDYWxlbmRhckNvbXBvbmVudCBhcyDOuzEgfSBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1jYWxlbmRhci5jb21wb25lbnQnO1xuZXhwb3J0IHsgU2t5RGF0ZXBpY2tlckNvbXBvbmVudCBhcyDOuzIgfSBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuZXhwb3J0IHsgU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlIGFzIM67MyB9IGZyb20gJy4vbGliL21vZHVsZXMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLWlucHV0LmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBTa3lGdXp6eURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSBhcyDOuzQgfSBmcm9tICcuL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgU2t5RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50IGFzIM67NSB9IGZyb20gJy4vbGliL21vZHVsZXMvZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50JztcbmV4cG9ydCB7IFNreVRpbWVwaWNrZXJDb21wb25lbnQgYXMgzrs2IH0gZnJvbSAnLi9saWIvbW9kdWxlcy90aW1lcGlja2VyL3RpbWVwaWNrZXIuY29tcG9uZW50JztcbmV4cG9ydCB7IFNreVRpbWVwaWNrZXJJbnB1dERpcmVjdGl2ZSBhcyDOuzcgfSBmcm9tICcuL2xpYi9tb2R1bGVzL3RpbWVwaWNrZXIvdGltZXBpY2tlci5kaXJlY3RpdmUnO1xuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLWRhdGUtcmFuZ2UtZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRvci1kYXRlLXJhbmdlLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lEYXRlUmFuZ2UgfSBmcm9tICcuL2RhdGUtcmFuZ2UnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgdHlwZSBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yR2V0VmFsdWVGdW5jdGlvbiA9IChcbiAgc3RhcnREYXRlSW5wdXQ/OiBEYXRlLFxuICBlbmREYXRlSW5wdXQ/OiBEYXRlXG4pID0+IFNreURhdGVSYW5nZTtcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLWRhdGUtcmFuZ2UtZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGUtcmFuZ2UtcGlja2VyL3R5cGVzL2RhdGUtcmFuZ2UtY2FsY3VsYXRvci1kYXRlLXJhbmdlLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTa3lEYXRlUmFuZ2UgfSBmcm9tICcuL2RhdGUtcmFuZ2UnO1xuXG5leHBvcnQgdHlwZSBTa3lEYXRlUmFuZ2VDYWxjdWxhdG9yR2V0VmFsdWVGdW5jdGlvbiA9IChcbiAgc3RhcnREYXRlSW5wdXQ/OiBEYXRlLFxuICBlbmREYXRlSW5wdXQ/OiBEYXRlXG4pID0+IFNreURhdGVSYW5nZTtcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLXZhbGlkYXRlLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItdmFsaWRhdGUtZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFNreURhdGVSYW5nZSB9IGZyb20gJy4vZGF0ZS1yYW5nZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCB0eXBlIFNreURhdGVSYW5nZUNhbGN1bGF0b3JWYWxpZGF0ZUZ1bmN0aW9uID0gKFxuICB2YWx1ZT86IFNreURhdGVSYW5nZVxuKSA9PiBWYWxpZGF0aW9uRXJyb3JzO1xuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1jYWxjdWxhdG9yLXZhbGlkYXRlLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlLXJhbmdlLXBpY2tlci90eXBlcy9kYXRlLXJhbmdlLWNhbGN1bGF0b3ItdmFsaWRhdGUtZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFNreURhdGVSYW5nZSB9IGZyb20gJy4vZGF0ZS1yYW5nZSc7XG5cbmV4cG9ydCB0eXBlIFNreURhdGVSYW5nZUNhbGN1bGF0b3JWYWxpZGF0ZUZ1bmN0aW9uID0gKFxuICB2YWx1ZT86IFNreURhdGVSYW5nZVxuKSA9PiBWYWxpZGF0aW9uRXJyb3JzO1xuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS9zcmMvbGliL21vZHVsZXMvZGF0ZS1yYW5nZS1waWNrZXIvdHlwZXMvZGF0ZS1yYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTa3lEYXRlUmFuZ2Uge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBsYXN0IGRhdGUgaW4gdGhlIGRhdGUgcmFuZ2UuXG4gICAqL1xuICBlbmREYXRlPzogRGF0ZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBmaXJzdCBkYXRlIGluIHRoZSBkYXRlIHJhbmdlLlxuICAgKi9cbiAgc3RhcnREYXRlPzogRGF0ZTtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9kYXRldGltZS9zcmMvbGliL21vZHVsZXMvZGF0ZS1yYW5nZS1waWNrZXIvdHlwZXMvZGF0ZS1yYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTa3lEYXRlUmFuZ2Uge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBsYXN0IGRhdGUgaW4gdGhlIGRhdGUgcmFuZ2UuXG4gICAqL1xuICBlbmREYXRlPzogRGF0ZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBmaXJzdCBkYXRlIGluIHRoZSBkYXRlIHJhbmdlLlxuICAgKi9cbiAgc3RhcnREYXRlPzogRGF0ZTtcbn1cbiJdfQ==
@@ -307,4 +307,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
307
307
  }], calendarModeChange: [{
308
308
  type: Output
309
309
  }] } });
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFPcEQsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFFekI7O0dBRUc7QUFPSCxNQUFNLE9BQU8sbUNBQW1DO0lBTmhEO1FBa0NTLHVCQUFrQixHQUF1QixJQUFJLFlBQVksQ0FDOUQsU0FBUyxDQUNWLENBQUM7UUFHSyx1QkFBa0IsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUt0RSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxNQUFNLENBQUM7UUFDakIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVmLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxNQUFNLENBQUM7UUFDckIsZUFB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TyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7Z0lBcllVLG1DQUFtQztvSEFBbkMsbUNBQW1DLDRUQ2hDaEQsMEpBT0E7MkZEeUJhLG1DQUFtQztrQkFOL0MsU0FBUzsrQkFDRSxzQkFBc0IsaUJBR2pCLGlCQUFpQixDQUFDLElBQUk7OEJBTTlCLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJQyxPQUFPO3NCQURiLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlLLFlBQVk7c0JBRHRCLEtBQUs7Z0JBYUMsa0JBQWtCO3NCQUR4QixNQUFNO2dCQU1BLGtCQUFrQjtzQkFEeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5RGF0ZUZvcm1hdHRlciB9IGZyb20gJy4vZGF0ZS1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckN1c3RvbURhdGUgfSBmcm9tICcuL2RhdGVwaWNrZXItY3VzdG9tLWRhdGUnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckRhdGUgfSBmcm9tICcuL2RhdGVwaWNrZXItZGF0ZSc7XG5cbnR5cGUgRGF0ZUNvbXBhcmF0b3IgPSAoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKSA9PiBudW1iZXIgfCB1bmRlZmluZWQ7XG50eXBlIEtleWJvYXJkRXZlbnRIYW5kbGVyID0gKGtleTogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZDtcblxubGV0IG5leHREYXRlcGlja2VySWQgPSAwO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZGF0ZXBpY2tlci1pbm5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLWNhbGVuZGFyLWlubmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRlcGlja2VyQ2FsZW5kYXJJbm5lckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXNcbntcbiAgQElucHV0KClcbiAgcHVibGljIGN1c3RvbURhdGVzOiBTa3lEYXRlcGlja2VyQ3VzdG9tRGF0ZVtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGFydGluZ0RheTogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5EYXRlOiBEYXRlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhEYXRlOiBEYXRlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWREYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgaWYgKHRoaXMuZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZERhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF0ZTtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2FsZW5kYXJNb2RlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyBhY3RpdmVEYXRlOiBEYXRlO1xuICBwdWJsaWMgYWN0aXZlRGF0ZUlkOiBzdHJpbmc7XG5cbiAgcHVibGljIG1pbk1vZGUgPSAnZGF5JztcbiAgcHVibGljIG1heE1vZGUgPSAneWVhcic7XG4gIHB1YmxpYyBtb250aENvbExpbWl0ID0gMztcbiAgcHVibGljIHllYXJDb2xMaW1pdCA9IDU7XG4gIHB1YmxpYyBkYXRlcGlja2VyTW9kZSA9ICdkYXknO1xuICBwdWJsaWMgeWVhclJhbmdlID0gMjA7XG5cbiAgcHVibGljIGZvcm1hdERheSA9ICdERCc7XG4gIHB1YmxpYyBmb3JtYXRNb250aCA9ICdNTU1NJztcbiAgcHVibGljIGZvcm1hdFllYXIgPSAnWVlZWSc7XG4gIHB1YmxpYyBmb3JtYXREYXlIZWFkZXIgPSAnZGQnO1xuICBwdWJsaWMgZm9ybWF0RGF5VGl0bGUgPSAnTU1NTSBZWVlZJztcbiAgcHVibGljIGZvcm1hdE1vbnRoVGl0bGUgPSAnWVlZWSc7XG5cbiAgcHVibGljIGRhdGVwaWNrZXJJZCA9IGBza3ktZGF0ZXBpY2tlci0keysrbmV4dERhdGVwaWNrZXJJZH1gO1xuXG4gIHB1YmxpYyBzdGVwRGF5OiBhbnkgPSB7fTtcbiAgcHVibGljIHN0ZXBNb250aDogYW55ID0ge307XG4gIHB1YmxpYyBzdGVwWWVhcjogYW55ID0ge307XG5cbiAgcHJvdGVjdGVkIG1vZGVzOiBzdHJpbmdbXSA9IFsnZGF5JywgJ21vbnRoJywgJ3llYXInXTtcbiAgcHJvdGVjdGVkIGRhdGVGb3JtYXR0ZXI6IFNreURhdGVGb3JtYXR0ZXIgPSBuZXcgU2t5RGF0ZUZvcm1hdHRlcigpO1xuXG4gIHB1YmxpYyByZWZyZXNoVmlld0hhbmRsZXJEYXk6ICgpID0+IHZvaWQ7XG4gIHB1YmxpYyBjb21wYXJlSGFuZGxlckRheTogRGF0ZUNvbXBhcmF0b3I7XG4gIHB1YmxpYyByZWZyZXNoVmlld0hhbmRsZXJNb250aDogKCkgPT4gdm9pZDtcbiAgcHVibGljIGNvbXBhcmVIYW5kbGVyTW9udGg6IERhdGVDb21wYXJhdG9yO1xuICBwdWJsaWMgcmVmcmVzaFZpZXdIYW5kbGVyWWVhcjogKCkgPT4gdm9pZDtcbiAgcHVibGljIGNvbXBhcmVIYW5kbGVyWWVhcjogRGF0ZUNvbXBhcmF0b3I7XG5cbiAgcHVibGljIGhhbmRsZUtleWRvd25EYXk6IEtleWJvYXJkRXZlbnRIYW5kbGVyO1xuICBwdWJsaWMgaGFuZGxlS2V5ZG93bk1vbnRoOiBLZXlib2FyZEV2ZW50SGFuZGxlcjtcbiAgcHVibGljIGhhbmRsZUtleWRvd25ZZWFyOiBLZXlib2FyZEV2ZW50SGFuZGxlcjtcblxuICBwdWJsaWMga2V5czogYW55ID0ge1xuICAgIDEzOiAnZW50ZXInLFxuICAgIDMyOiAnc3BhY2UnLFxuICAgIDMzOiAncGFnZXVwJyxcbiAgICAzNDogJ3BhZ2Vkb3duJyxcbiAgICAzNTogJ2VuZCcsXG4gICAgMzY6ICdob21lJyxcbiAgICAzNzogJ2xlZnQnLFxuICAgIDM4OiAndXAnLFxuICAgIDM5OiAncmlnaHQnLFxuICAgIDQwOiAnZG93bicsXG4gIH07XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIF9zZWxlY3RlZERhdGU6IERhdGU7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3IERhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29tcGFyZUhhbmRsZXIoaGFuZGxlcjogRGF0ZUNvbXBhcmF0b3IsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0eXBlID09PSAnZGF5Jykge1xuICAgICAgdGhpcy5jb21wYXJlSGFuZGxlckRheSA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdtb250aCcpIHtcbiAgICAgIHRoaXMuY29tcGFyZUhhbmRsZXJNb250aCA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICd5ZWFyJykge1xuICAgICAgdGhpcy5jb21wYXJlSGFuZGxlclllYXIgPSBoYW5kbGVyO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjb21wYXJlKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IHVuZGVmaW5lZCB8IG51bWJlciB7XG4gICAgaWYgKGRhdGUxID09PSB1bmRlZmluZWQgfHwgZGF0ZTIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ2RheScgJiYgdGhpcy5jb21wYXJlSGFuZGxlckRheSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZUhhbmRsZXJEYXkoZGF0ZTEsIGRhdGUyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ21vbnRoJyAmJiB0aGlzLmNvbXBhcmVIYW5kbGVyTW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVIYW5kbGVyTW9udGgoZGF0ZTEsIGRhdGUyKTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAneWVhcicgJiYgdGhpcy5jb21wYXJlSGFuZGxlclllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVIYW5kbGVyWWVhcihkYXRlMSwgZGF0ZTIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRSZWZyZXNoVmlld0hhbmRsZXIoaGFuZGxlcjogKCkgPT4gdm9pZCwgdHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgPT09ICdkYXknKSB7XG4gICAgICB0aGlzLnJlZnJlc2hWaWV3SGFuZGxlckRheSA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdtb250aCcpIHtcbiAgICAgIHRoaXMucmVmcmVzaFZpZXdIYW5kbGVyTW9udGggPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAneWVhcicpIHtcbiAgICAgIHRoaXMucmVmcmVzaFZpZXdIYW5kbGVyWWVhciA9IGhhbmRsZXI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZnJlc2hWaWV3KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAnZGF5JyAmJiB0aGlzLnJlZnJlc2hWaWV3SGFuZGxlckRheSkge1xuICAgICAgdGhpcy5yZWZyZXNoVmlld0hhbmRsZXJEYXkoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ21vbnRoJyAmJiB0aGlzLnJlZnJlc2hWaWV3SGFuZGxlck1vbnRoKSB7XG4gICAgICB0aGlzLnJlZnJlc2hWaWV3SGFuZGxlck1vbnRoKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09ICd5ZWFyJyAmJiB0aGlzLnJlZnJlc2hWaWV3SGFuZGxlclllYXIpIHtcbiAgICAgIHRoaXMucmVmcmVzaFZpZXdIYW5kbGVyWWVhcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRLZXlkb3duSGFuZGxlcihoYW5kbGVyOiBLZXlib2FyZEV2ZW50SGFuZGxlciwgdHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09ICdkYXknKSB7XG4gICAgICB0aGlzLmhhbmRsZUtleWRvd25EYXkgPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnbW9udGgnKSB7XG4gICAgICB0aGlzLmhhbmRsZUtleWRvd25Nb250aCA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICd5ZWFyJykge1xuICAgICAgdGhpcy5oYW5kbGVLZXlkb3duWWVhciA9IGhhbmRsZXI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhbmRsZUtleWRvd24oa2V5OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09ICdkYXknICYmIHRoaXMuaGFuZGxlS2V5ZG93bkRheSkge1xuICAgICAgdGhpcy5oYW5kbGVLZXlkb3duRGF5KGtleSwgZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAnbW9udGgnICYmIHRoaXMuaGFuZGxlS2V5ZG93bk1vbnRoKSB7XG4gICAgICB0aGlzLmhhbmRsZUtleWRvd25Nb250aChrZXksIGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ3llYXInICYmIHRoaXMuaGFuZGxlS2V5ZG93blllYXIpIHtcbiAgICAgIHRoaXMuaGFuZGxlS2V5ZG93blllYXIoa2V5LCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRhdGVGaWx0ZXIoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG4gIH1cblxuICBwdWJsaWMgaXNBY3RpdmUoZGF0ZU9iamVjdDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY29tcGFyZShkYXRlT2JqZWN0LmRhdGUsIHRoaXMuYWN0aXZlRGF0ZSkgPT09IDApIHtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZUlkID0gZGF0ZU9iamVjdC51aWQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5rZXlzW2V2ZW50LndoaWNoXTtcblxuICAgIGlmICgha2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoa2V5ID09PSAnZW50ZXInIHx8IGtleSA9PT0gJ3NwYWNlJykge1xuICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCh0aGlzLmFjdGl2ZURhdGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5jdHJsS2V5ICYmIChrZXkgPT09ICd1cCcgfHwga2V5ID09PSAnZG93bicpKSB7XG4gICAgICB0aGlzLnRvZ2dsZU1vZGUoa2V5ID09PSAndXAnID8gMSA6IC0xKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVLZXlkb3duKGtleSwgZXZlbnQpO1xuICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVEYXRlT2JqZWN0KFxuICAgIGRhdGU6IERhdGUsXG4gICAgZm9ybWF0OiBzdHJpbmcsXG4gICAgaXNTZWNvbmRhcnk6IGJvb2xlYW4sXG4gICAgaWQ6IHN0cmluZ1xuICApOiBTa3lEYXRlcGlja2VyRGF0ZSB7XG4gICAgY29uc3QgY3VzdG9tRGF0ZU1hdGNoID0gdGhpcy5nZXRDdXN0b21EYXRlKGRhdGUpO1xuXG4gICAgY29uc3QgZGF0ZU9iamVjdDogU2t5RGF0ZXBpY2tlckRhdGUgPSB7XG4gICAgICBkYXRlOiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpLFxuICAgICAgbGFiZWw6IHRoaXMuZGF0ZUZpbHRlcihkYXRlLCBmb3JtYXQpLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuY29tcGFyZShkYXRlLCB0aGlzLnNlbGVjdGVkRGF0ZSkgPT09IDAsXG4gICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVkKGRhdGUpLFxuICAgICAgY3VycmVudDogdGhpcy5jb21wYXJlKGRhdGUsIG5ldyBEYXRlKCkpID09PSAwLFxuICAgICAgc2Vjb25kYXJ5OiBpc1NlY29uZGFyeSxcbiAgICAgIHVpZDogaWQsXG4gICAgICBrZXlEYXRlOiBjdXN0b21EYXRlTWF0Y2ggPyBjdXN0b21EYXRlTWF0Y2gua2V5RGF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGtleURhdGVUZXh0OiBjdXN0b21EYXRlTWF0Y2ggPyBjdXN0b21EYXRlTWF0Y2gua2V5RGF0ZVRleHQgOiBbXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRhdGVPYmplY3Q7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ2FsZW5kYXJSb3dzKFxuICAgIGRhdGVzOiBBcnJheTxTa3lEYXRlcGlja2VyRGF0ZT4sXG4gICAgc2l6ZTogbnVtYmVyXG4gICk6IEFycmF5PEFycmF5PFNreURhdGVwaWNrZXJEYXRlPj4ge1xuICAgIGNvbnN0IHJvd3M6IEFycmF5PEFycmF5PFNreURhdGVwaWNrZXJEYXRlPj4gPSBbXTtcbiAgICB3aGlsZSAoZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcm93cy5wdXNoKGRhdGVzLnNwbGljZSgwLCBzaXplKSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgLypcbiAgICBUaGlzIGlzIGVuc3VyZXMgdGhhdCBubyBzdHJhbmdlbmVzcyBoYXBwZW5zIHdoZW4gY29udmVydGluZyBhIGRhdGUgdG8gbG9jYWwgdGltZS5cbiAgKi9cbiAgcHVibGljIGZpeFRpbWVab25lKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgbmV3RGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xuXG4gICAgcmV0dXJuIG5ld0RhdGU7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0Q2FsZW5kYXIoXG4gICAgZXZlbnQ6IEV2ZW50LFxuICAgIGRhdGU6IERhdGUsXG4gICAgY2xvc2VQaWNrZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBpZiAoIWNsb3NlUGlja2VyKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0KGRhdGUpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdChkYXRlOiBEYXRlLCBpc01hbnVhbDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgRGF0ZShcbiAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgIGRhdGUuZ2V0RGF0ZSgpXG4gICAgKTtcblxuICAgIC8qXG4gICAgICAgIE9ubHkgYWN0dWFsbHkgc2VsZWN0IGRhdGUgaWYgaW4gbWlubW9kZSAoZGF5IHBpY2tlciBtb2RlKS5cbiAgICAgICAgT3RoZXJ3aXNlLCBqdXN0IGNoYW5nZSB0aGUgYWN0aXZlIHZpZXcgZm9yIHRoZSBkYXRlcGlja2VyLlxuICAgICovXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09IHRoaXMubWluTW9kZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgaWYgKGlzTWFudWFsKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJNb2RlID1cbiAgICAgICAgdGhpcy5tb2Rlc1t0aGlzLm1vZGVzLmluZGV4T2YodGhpcy5kYXRlcGlja2VyTW9kZSkgLSAxXTtcbiAgICAgIHRoaXMuY2FsZW5kYXJNb2RlQ2hhbmdlLmVtaXQodGhpcy5kYXRlcGlja2VyTW9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICB9XG5cbiAgcHVibGljIG1vdmVDYWxlbmRhcihldmVudDogRXZlbnQsIGRpcmVjdGlvbjogbnVtYmVyKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm1vdmUoZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlKGRpcmVjdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGV4cGVjdGVkU3RlcDogYW55O1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAnZGF5Jykge1xuICAgICAgZXhwZWN0ZWRTdGVwID0gdGhpcy5zdGVwRGF5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAnbW9udGgnKSB7XG4gICAgICBleHBlY3RlZFN0ZXAgPSB0aGlzLnN0ZXBNb250aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ3llYXInKSB7XG4gICAgICBleHBlY3RlZFN0ZXAgPSB0aGlzLnN0ZXBZZWFyO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgaWYgKGV4cGVjdGVkU3RlcCkge1xuICAgICAgY29uc3QgeWVhciA9XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpICsgZGlyZWN0aW9uICogKGV4cGVjdGVkU3RlcC55ZWFycyB8fCAwKTtcbiAgICAgIGNvbnN0IG1vbnRoID1cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCkgKyBkaXJlY3Rpb24gKiAoZXhwZWN0ZWRTdGVwLm1vbnRocyB8fCAwKTtcblxuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xuXG4gICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvZ2dsZU1vZGVDYWxlbmRhcihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudG9nZ2xlTW9kZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVNb2RlKGRpcmVjdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCAxO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICBpZiAoXG4gICAgICAhKGRpcmVjdGlvbiA9PT0gMSAmJiB0aGlzLmRhdGVwaWNrZXJNb2RlID09PSB0aGlzLm1heE1vZGUpICYmXG4gICAgICAhKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09IHRoaXMubWluTW9kZSAmJiBkaXJlY3Rpb24gPT09IC0xKVxuICAgICkge1xuICAgICAgdGhpcy5kYXRlcGlja2VyTW9kZSA9XG4gICAgICAgIHRoaXMubW9kZXNbdGhpcy5tb2Rlcy5pbmRleE9mKHRoaXMuZGF0ZXBpY2tlck1vZGUpICsgZGlyZWN0aW9uXTtcbiAgICAgIHRoaXMuY2FsZW5kYXJNb2RlQ2hhbmdlLmVtaXQodGhpcy5kYXRlcGlja2VyTW9kZSk7XG4gICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERhdGUgaXMgZGlzYWJsZWQgaWYgaXQgbWVldHMgYW55IG9mIHRoZXNlIGNyaXRlcmlhOlxuICAgKiAxLiBEYXRlIGZhbGxzIG91dHNpZGUgdGhlIG1pbiBvciBtYXggZGF0ZXMgc2V0IGJ5IHRoZSBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZS5cbiAgICogMi4gRGF0ZSBpcyBtYXJrZWQgYXMgZGlzYWJsZWQgaW4gdGhlIGN1c3RvbURhdGVzIGFycmF5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzRGlzYWJsZWQoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1c3RvbURhdGUgPSB0aGlzLmdldEN1c3RvbURhdGUoZGF0ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLm1pbkRhdGUgJiYgdGhpcy5jb21wYXJlKGRhdGUsIHRoaXMubWluRGF0ZSkgPCAwKSB8fFxuICAgICAgKHRoaXMubWF4RGF0ZSAmJiB0aGlzLmNvbXBhcmUoZGF0ZSwgdGhpcy5tYXhEYXRlKSA+IDApIHx8XG4gICAgICAoY3VzdG9tRGF0ZSAmJiBjdXN0b21EYXRlLmRpc2FibGVkKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDdXN0b21EYXRlKGRhdGU6IERhdGUpOiBTa3lEYXRlcGlja2VyQ3VzdG9tRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuY3VzdG9tRGF0ZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbURhdGVzLmZpbmQoKGN1c3RvbURhdGU6IFNreURhdGVwaWNrZXJDdXN0b21EYXRlKSA9PiB7XG4gICAgICAgIHJldHVybiBjdXN0b21EYXRlLmRhdGUuZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAqbmdJZj1cImRhdGVwaWNrZXJNb2RlXCJcbiAgY2xhc3M9XCJza3ktZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lclwiXG4gIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFPcEQsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFFekI7O0dBRUc7QUFPSCxNQUFNLE9BQU8sbUNBQW1DO0lBTmhEO1FBa0NTLHVCQUFrQixHQUF1QixJQUFJLFlBQVksQ0FDOUQsU0FBUyxDQUNWLENBQUM7UUFHSyx1QkFBa0IsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUt0RSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxNQUFNLENBQUM7UUFDakIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVmLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxNQUFNLENBQUM7UUFDckIsZUFB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TyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7Z0lBcllVLG1DQUFtQztvSEFBbkMsbUNBQW1DLDRUQ2hDaEQsMEpBT0E7MkZEeUJhLG1DQUFtQztrQkFOL0MsU0FBUzsrQkFDRSxzQkFBc0IsaUJBR2pCLGlCQUFpQixDQUFDLElBQUk7OEJBTTlCLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJQyxPQUFPO3NCQURiLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlLLFlBQVk7c0JBRHRCLEtBQUs7Z0JBYUMsa0JBQWtCO3NCQUR4QixNQUFNO2dCQU1BLGtCQUFrQjtzQkFEeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5RGF0ZUZvcm1hdHRlciB9IGZyb20gJy4vZGF0ZS1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckN1c3RvbURhdGUgfSBmcm9tICcuL2RhdGVwaWNrZXItY3VzdG9tLWRhdGUnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckRhdGUgfSBmcm9tICcuL2RhdGVwaWNrZXItZGF0ZSc7XG5cbnR5cGUgRGF0ZUNvbXBhcmF0b3IgPSAoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKSA9PiBudW1iZXIgfCB1bmRlZmluZWQ7XG50eXBlIEtleWJvYXJkRXZlbnRIYW5kbGVyID0gKGtleTogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZDtcblxubGV0IG5leHREYXRlcGlja2VySWQgPSAwO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZGF0ZXBpY2tlci1pbm5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLWNhbGVuZGFyLWlubmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEYXRlcGlja2VyQ2FsZW5kYXJJbm5lckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXNcbntcbiAgQElucHV0KClcbiAgcHVibGljIGN1c3RvbURhdGVzOiBTa3lEYXRlcGlja2VyQ3VzdG9tRGF0ZVtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGFydGluZ0RheTogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5EYXRlOiBEYXRlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtYXhEYXRlOiBEYXRlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWREYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgaWYgKHRoaXMuZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZERhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF0ZTtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWREYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2FsZW5kYXJNb2RlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyBhY3RpdmVEYXRlOiBEYXRlO1xuICBwdWJsaWMgYWN0aXZlRGF0ZUlkOiBzdHJpbmc7XG5cbiAgcHVibGljIG1pbk1vZGUgPSAnZGF5JztcbiAgcHVibGljIG1heE1vZGUgPSAneWVhcic7XG4gIHB1YmxpYyBtb250aENvbExpbWl0ID0gMztcbiAgcHVibGljIHllYXJDb2xMaW1pdCA9IDU7XG4gIHB1YmxpYyBkYXRlcGlja2VyTW9kZSA9ICdkYXknO1xuICBwdWJsaWMgeWVhclJhbmdlID0gMjA7XG5cbiAgcHVibGljIGZvcm1hdERheSA9ICdERCc7XG4gIHB1YmxpYyBmb3JtYXRNb250aCA9ICdNTU1NJztcbiAgcHVibGljIGZvcm1hdFllYXIgPSAnWVlZWSc7XG4gIHB1YmxpYyBmb3JtYXREYXlIZWFkZXIgPSAnZGQnO1xuICBwdWJsaWMgZm9ybWF0RGF5VGl0bGUgPSAnTU1NTSBZWVlZJztcbiAgcHVibGljIGZvcm1hdE1vbnRoVGl0bGUgPSAnWVlZWSc7XG5cbiAgcHVibGljIGRhdGVwaWNrZXJJZCA9IGBza3ktZGF0ZXBpY2tlci0keysrbmV4dERhdGVwaWNrZXJJZH1gO1xuXG4gIHB1YmxpYyBzdGVwRGF5OiBhbnkgPSB7fTtcbiAgcHVibGljIHN0ZXBNb250aDogYW55ID0ge307XG4gIHB1YmxpYyBzdGVwWWVhcjogYW55ID0ge307XG5cbiAgcHJvdGVjdGVkIG1vZGVzOiBzdHJpbmdbXSA9IFsnZGF5JywgJ21vbnRoJywgJ3llYXInXTtcbiAgcHJvdGVjdGVkIGRhdGVGb3JtYXR0ZXI6IFNreURhdGVGb3JtYXR0ZXIgPSBuZXcgU2t5RGF0ZUZvcm1hdHRlcigpO1xuXG4gIHB1YmxpYyByZWZyZXNoVmlld0hhbmRsZXJEYXk6ICgpID0+IHZvaWQ7XG4gIHB1YmxpYyBjb21wYXJlSGFuZGxlckRheTogRGF0ZUNvbXBhcmF0b3I7XG4gIHB1YmxpYyByZWZyZXNoVmlld0hhbmRsZXJNb250aDogKCkgPT4gdm9pZDtcbiAgcHVibGljIGNvbXBhcmVIYW5kbGVyTW9udGg6IERhdGVDb21wYXJhdG9yO1xuICBwdWJsaWMgcmVmcmVzaFZpZXdIYW5kbGVyWWVhcjogKCkgPT4gdm9pZDtcbiAgcHVibGljIGNvbXBhcmVIYW5kbGVyWWVhcjogRGF0ZUNvbXBhcmF0b3I7XG5cbiAgcHVibGljIGhhbmRsZUtleWRvd25EYXk6IEtleWJvYXJkRXZlbnRIYW5kbGVyO1xuICBwdWJsaWMgaGFuZGxlS2V5ZG93bk1vbnRoOiBLZXlib2FyZEV2ZW50SGFuZGxlcjtcbiAgcHVibGljIGhhbmRsZUtleWRvd25ZZWFyOiBLZXlib2FyZEV2ZW50SGFuZGxlcjtcblxuICBwdWJsaWMga2V5czogYW55ID0ge1xuICAgIDEzOiAnZW50ZXInLFxuICAgIDMyOiAnc3BhY2UnLFxuICAgIDMzOiAncGFnZXVwJyxcbiAgICAzNDogJ3BhZ2Vkb3duJyxcbiAgICAzNTogJ2VuZCcsXG4gICAgMzY6ICdob21lJyxcbiAgICAzNzogJ2xlZnQnLFxuICAgIDM4OiAndXAnLFxuICAgIDM5OiAncmlnaHQnLFxuICAgIDQwOiAnZG93bicsXG4gIH07XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9zZWxlY3RlZERhdGU6IERhdGU7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3IERhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29tcGFyZUhhbmRsZXIoaGFuZGxlcjogRGF0ZUNvbXBhcmF0b3IsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0eXBlID09PSAnZGF5Jykge1xuICAgICAgdGhpcy5jb21wYXJlSGFuZGxlckRheSA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdtb250aCcpIHtcbiAgICAgIHRoaXMuY29tcGFyZUhhbmRsZXJNb250aCA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICd5ZWFyJykge1xuICAgICAgdGhpcy5jb21wYXJlSGFuZGxlclllYXIgPSBoYW5kbGVyO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjb21wYXJlKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IHVuZGVmaW5lZCB8IG51bWJlciB7XG4gICAgaWYgKGRhdGUxID09PSB1bmRlZmluZWQgfHwgZGF0ZTIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ2RheScgJiYgdGhpcy5jb21wYXJlSGFuZGxlckRheSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZUhhbmRsZXJEYXkoZGF0ZTEsIGRhdGUyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ21vbnRoJyAmJiB0aGlzLmNvbXBhcmVIYW5kbGVyTW9udGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVIYW5kbGVyTW9udGgoZGF0ZTEsIGRhdGUyKTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAneWVhcicgJiYgdGhpcy5jb21wYXJlSGFuZGxlclllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVIYW5kbGVyWWVhcihkYXRlMSwgZGF0ZTIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRSZWZyZXNoVmlld0hhbmRsZXIoaGFuZGxlcjogKCkgPT4gdm9pZCwgdHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgPT09ICdkYXknKSB7XG4gICAgICB0aGlzLnJlZnJlc2hWaWV3SGFuZGxlckRheSA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdtb250aCcpIHtcbiAgICAgIHRoaXMucmVmcmVzaFZpZXdIYW5kbGVyTW9udGggPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAneWVhcicpIHtcbiAgICAgIHRoaXMucmVmcmVzaFZpZXdIYW5kbGVyWWVhciA9IGhhbmRsZXI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZnJlc2hWaWV3KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAnZGF5JyAmJiB0aGlzLnJlZnJlc2hWaWV3SGFuZGxlckRheSkge1xuICAgICAgdGhpcy5yZWZyZXNoVmlld0hhbmRsZXJEYXkoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ21vbnRoJyAmJiB0aGlzLnJlZnJlc2hWaWV3SGFuZGxlck1vbnRoKSB7XG4gICAgICB0aGlzLnJlZnJlc2hWaWV3SGFuZGxlck1vbnRoKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09ICd5ZWFyJyAmJiB0aGlzLnJlZnJlc2hWaWV3SGFuZGxlclllYXIpIHtcbiAgICAgIHRoaXMucmVmcmVzaFZpZXdIYW5kbGVyWWVhcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRLZXlkb3duSGFuZGxlcihoYW5kbGVyOiBLZXlib2FyZEV2ZW50SGFuZGxlciwgdHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgPT09ICdkYXknKSB7XG4gICAgICB0aGlzLmhhbmRsZUtleWRvd25EYXkgPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnbW9udGgnKSB7XG4gICAgICB0aGlzLmhhbmRsZUtleWRvd25Nb250aCA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICd5ZWFyJykge1xuICAgICAgdGhpcy5oYW5kbGVLZXlkb3duWWVhciA9IGhhbmRsZXI7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhbmRsZUtleWRvd24oa2V5OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09ICdkYXknICYmIHRoaXMuaGFuZGxlS2V5ZG93bkRheSkge1xuICAgICAgdGhpcy5oYW5kbGVLZXlkb3duRGF5KGtleSwgZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAnbW9udGgnICYmIHRoaXMuaGFuZGxlS2V5ZG93bk1vbnRoKSB7XG4gICAgICB0aGlzLmhhbmRsZUtleWRvd25Nb250aChrZXksIGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ3llYXInICYmIHRoaXMuaGFuZGxlS2V5ZG93blllYXIpIHtcbiAgICAgIHRoaXMuaGFuZGxlS2V5ZG93blllYXIoa2V5LCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRhdGVGaWx0ZXIoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG4gIH1cblxuICBwdWJsaWMgaXNBY3RpdmUoZGF0ZU9iamVjdDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY29tcGFyZShkYXRlT2JqZWN0LmRhdGUsIHRoaXMuYWN0aXZlRGF0ZSkgPT09IDApIHtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZUlkID0gZGF0ZU9iamVjdC51aWQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5rZXlzW2V2ZW50LndoaWNoXTtcblxuICAgIGlmICgha2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoa2V5ID09PSAnZW50ZXInIHx8IGtleSA9PT0gJ3NwYWNlJykge1xuICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCh0aGlzLmFjdGl2ZURhdGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5jdHJsS2V5ICYmIChrZXkgPT09ICd1cCcgfHwga2V5ID09PSAnZG93bicpKSB7XG4gICAgICB0aGlzLnRvZ2dsZU1vZGUoa2V5ID09PSAndXAnID8gMSA6IC0xKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVLZXlkb3duKGtleSwgZXZlbnQpO1xuICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVEYXRlT2JqZWN0KFxuICAgIGRhdGU6IERhdGUsXG4gICAgZm9ybWF0OiBzdHJpbmcsXG4gICAgaXNTZWNvbmRhcnk6IGJvb2xlYW4sXG4gICAgaWQ6IHN0cmluZ1xuICApOiBTa3lEYXRlcGlja2VyRGF0ZSB7XG4gICAgY29uc3QgY3VzdG9tRGF0ZU1hdGNoID0gdGhpcy5nZXRDdXN0b21EYXRlKGRhdGUpO1xuXG4gICAgY29uc3QgZGF0ZU9iamVjdDogU2t5RGF0ZXBpY2tlckRhdGUgPSB7XG4gICAgICBkYXRlOiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpLFxuICAgICAgbGFiZWw6IHRoaXMuZGF0ZUZpbHRlcihkYXRlLCBmb3JtYXQpLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuY29tcGFyZShkYXRlLCB0aGlzLnNlbGVjdGVkRGF0ZSkgPT09IDAsXG4gICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVkKGRhdGUpLFxuICAgICAgY3VycmVudDogdGhpcy5jb21wYXJlKGRhdGUsIG5ldyBEYXRlKCkpID09PSAwLFxuICAgICAgc2Vjb25kYXJ5OiBpc1NlY29uZGFyeSxcbiAgICAgIHVpZDogaWQsXG4gICAgICBrZXlEYXRlOiBjdXN0b21EYXRlTWF0Y2ggPyBjdXN0b21EYXRlTWF0Y2gua2V5RGF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGtleURhdGVUZXh0OiBjdXN0b21EYXRlTWF0Y2ggPyBjdXN0b21EYXRlTWF0Y2gua2V5RGF0ZVRleHQgOiBbXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRhdGVPYmplY3Q7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ2FsZW5kYXJSb3dzKFxuICAgIGRhdGVzOiBBcnJheTxTa3lEYXRlcGlja2VyRGF0ZT4sXG4gICAgc2l6ZTogbnVtYmVyXG4gICk6IEFycmF5PEFycmF5PFNreURhdGVwaWNrZXJEYXRlPj4ge1xuICAgIGNvbnN0IHJvd3M6IEFycmF5PEFycmF5PFNreURhdGVwaWNrZXJEYXRlPj4gPSBbXTtcbiAgICB3aGlsZSAoZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcm93cy5wdXNoKGRhdGVzLnNwbGljZSgwLCBzaXplKSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgLypcbiAgICBUaGlzIGlzIGVuc3VyZXMgdGhhdCBubyBzdHJhbmdlbmVzcyBoYXBwZW5zIHdoZW4gY29udmVydGluZyBhIGRhdGUgdG8gbG9jYWwgdGltZS5cbiAgKi9cbiAgcHVibGljIGZpeFRpbWVab25lKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgbmV3RGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xuXG4gICAgcmV0dXJuIG5ld0RhdGU7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0Q2FsZW5kYXIoXG4gICAgZXZlbnQ6IEV2ZW50LFxuICAgIGRhdGU6IERhdGUsXG4gICAgY2xvc2VQaWNrZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBpZiAoIWNsb3NlUGlja2VyKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0KGRhdGUpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdChkYXRlOiBEYXRlLCBpc01hbnVhbDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXcgRGF0ZShcbiAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgIGRhdGUuZ2V0RGF0ZSgpXG4gICAgKTtcblxuICAgIC8qXG4gICAgICAgIE9ubHkgYWN0dWFsbHkgc2VsZWN0IGRhdGUgaWYgaW4gbWlubW9kZSAoZGF5IHBpY2tlciBtb2RlKS5cbiAgICAgICAgT3RoZXJ3aXNlLCBqdXN0IGNoYW5nZSB0aGUgYWN0aXZlIHZpZXcgZm9yIHRoZSBkYXRlcGlja2VyLlxuICAgICovXG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09IHRoaXMubWluTW9kZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgaWYgKGlzTWFudWFsKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJNb2RlID1cbiAgICAgICAgdGhpcy5tb2Rlc1t0aGlzLm1vZGVzLmluZGV4T2YodGhpcy5kYXRlcGlja2VyTW9kZSkgLSAxXTtcbiAgICAgIHRoaXMuY2FsZW5kYXJNb2RlQ2hhbmdlLmVtaXQodGhpcy5kYXRlcGlja2VyTW9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICB9XG5cbiAgcHVibGljIG1vdmVDYWxlbmRhcihldmVudDogRXZlbnQsIGRpcmVjdGlvbjogbnVtYmVyKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm1vdmUoZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlKGRpcmVjdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGV4cGVjdGVkU3RlcDogYW55O1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAnZGF5Jykge1xuICAgICAgZXhwZWN0ZWRTdGVwID0gdGhpcy5zdGVwRGF5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJNb2RlID09PSAnbW9udGgnKSB7XG4gICAgICBleHBlY3RlZFN0ZXAgPSB0aGlzLnN0ZXBNb250aDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRlcGlja2VyTW9kZSA9PT0gJ3llYXInKSB7XG4gICAgICBleHBlY3RlZFN0ZXAgPSB0aGlzLnN0ZXBZZWFyO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgaWYgKGV4cGVjdGVkU3RlcCkge1xuICAgICAgY29uc3QgeWVhciA9XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpICsgZGlyZWN0aW9uICogKGV4cGVjdGVkU3RlcC55ZWFycyB8fCAwKTtcbiAgICAgIGNvbnN0IG1vbnRoID1cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCkgKyBkaXJlY3Rpb24gKiAoZXhwZWN0ZWRTdGVwLm1vbnRocyB8fCAwKTtcblxuICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xuXG4gICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvZ2dsZU1vZGVDYWxlbmRhcihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudG9nZ2xlTW9kZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVNb2RlKGRpcmVjdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCAxO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICBpZiAoXG4gICAgICAhKGRpcmVjdGlvbiA9PT0gMSAmJiB0aGlzLmRhdGVwaWNrZXJNb2RlID09PSB0aGlzLm1heE1vZGUpICYmXG4gICAgICAhKHRoaXMuZGF0ZXBpY2tlck1vZGUgPT09IHRoaXMubWluTW9kZSAmJiBkaXJlY3Rpb24gPT09IC0xKVxuICAgICkge1xuICAgICAgdGhpcy5kYXRlcGlja2VyTW9kZSA9XG4gICAgICAgIHRoaXMubW9kZXNbdGhpcy5tb2Rlcy5pbmRleE9mKHRoaXMuZGF0ZXBpY2tlck1vZGUpICsgZGlyZWN0aW9uXTtcbiAgICAgIHRoaXMuY2FsZW5kYXJNb2RlQ2hhbmdlLmVtaXQodGhpcy5kYXRlcGlja2VyTW9kZSk7XG4gICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERhdGUgaXMgZGlzYWJsZWQgaWYgaXQgbWVldHMgYW55IG9mIHRoZXNlIGNyaXRlcmlhOlxuICAgKiAxLiBEYXRlIGZhbGxzIG91dHNpZGUgdGhlIG1pbiBvciBtYXggZGF0ZXMgc2V0IGJ5IHRoZSBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZS5cbiAgICogMi4gRGF0ZSBpcyBtYXJrZWQgYXMgZGlzYWJsZWQgaW4gdGhlIGN1c3RvbURhdGVzIGFycmF5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzRGlzYWJsZWQoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1c3RvbURhdGUgPSB0aGlzLmdldEN1c3RvbURhdGUoZGF0ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLm1pbkRhdGUgJiYgdGhpcy5jb21wYXJlKGRhdGUsIHRoaXMubWluRGF0ZSkgPCAwKSB8fFxuICAgICAgKHRoaXMubWF4RGF0ZSAmJiB0aGlzLmNvbXBhcmUoZGF0ZSwgdGhpcy5tYXhEYXRlKSA+IDApIHx8XG4gICAgICAoY3VzdG9tRGF0ZSAmJiBjdXN0b21EYXRlLmRpc2FibGVkKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDdXN0b21EYXRlKGRhdGU6IERhdGUpOiBTa3lEYXRlcGlja2VyQ3VzdG9tRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuY3VzdG9tRGF0ZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbURhdGVzLmZpbmQoKGN1c3RvbURhdGU6IFNreURhdGVwaWNrZXJDdXN0b21EYXRlKSA9PiB7XG4gICAgICAgIHJldHVybiBjdXN0b21EYXRlLmRhdGUuZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAqbmdJZj1cImRhdGVwaWNrZXJNb2RlXCJcbiAgY2xhc3M9XCJza3ktZGF0ZXBpY2tlci1jYWxlbmRhci1pbm5lclwiXG4gIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
@@ -41,10 +41,13 @@ export class SkyDatepickerInputDirective {
41
41
  this.dateFormatter = new SkyDateFormatter();
42
42
  this.ngUnsubscribe = new Subject();
43
43
  // eslint-disable-next-line @typescript-eslint/no-empty-function
44
+ // istanbul ignore next
44
45
  this.onChange = (_) => { };
45
46
  // eslint-disable-next-line @typescript-eslint/no-empty-function
47
+ // istanbul ignore next
46
48
  this.onTouched = () => { };
47
49
  // eslint-disable-next-line @typescript-eslint/no-empty-function
50
+ // istanbul ignore next
48
51
  this.onValidatorChange = () => { };
49
52
  this.initialPlaceholder = this.adapter.getPlaceholder(this.elementRef);
50
53
  this.updatePlaceholder();
@@ -253,9 +256,40 @@ export class SkyDatepickerInputDirective {
253
256
  if (!value) {
254
257
  return;
255
258
  }
256
- const dateValue = this.getDateValue(value);
257
- const isDateValid = dateValue && this.dateFormatter.dateIsValid(dateValue);
258
- if (!isDateValid || !this.isDateStringValid(value)) {
259
+ if (value instanceof Date) {
260
+ const isDateValid = this.dateFormatter.dateIsValid(value);
261
+ if (!isDateValid) {
262
+ // Mark the invalid control as touched so that the input's invalid CSS styles appear.
263
+ // (This is only required when the invalid value is set by the FormControl constructor.)
264
+ this.control.markAsTouched();
265
+ return {
266
+ skyDate: {
267
+ invalid: value,
268
+ },
269
+ };
270
+ }
271
+ const minDate = this.minDate;
272
+ if (minDate &&
273
+ this.dateFormatter.dateIsValid(minDate) &&
274
+ value < minDate) {
275
+ return {
276
+ skyDate: {
277
+ minDate,
278
+ },
279
+ };
280
+ }
281
+ const maxDate = this.maxDate;
282
+ if (maxDate &&
283
+ this.dateFormatter.dateIsValid(maxDate) &&
284
+ value > maxDate) {
285
+ return {
286
+ skyDate: {
287
+ maxDate,
288
+ },
289
+ };
290
+ }
291
+ }
292
+ else {
259
293
  // Mark the invalid control as touched so that the input's invalid CSS styles appear.
260
294
  // (This is only required when the invalid value is set by the FormControl constructor.)
261
295
  this.control.markAsTouched();
@@ -265,22 +299,6 @@ export class SkyDatepickerInputDirective {
265
299
  },
266
300
  };
267
301
  }
268
- const minDate = this.minDate;
269
- if (minDate && this.dateFormatter.dateIsValid(minDate) && value < minDate) {
270
- return {
271
- skyDate: {
272
- minDate,
273
- },
274
- };
275
- }
276
- const maxDate = this.maxDate;
277
- if (maxDate && this.dateFormatter.dateIsValid(maxDate) && value > maxDate) {
278
- return {
279
- skyDate: {
280
- maxDate,
281
- },
282
- };
283
- }
284
302
  }
285
303
  registerOnChange(fn) {
286
304
  this.onChange = fn;
@@ -316,18 +334,40 @@ export class SkyDatepickerInputDirective {
316
334
  setInputElementValue(value) {
317
335
  this.renderer.setProperty(this.elementRef.nativeElement, 'value', value);
318
336
  }
337
+ /**
338
+ * Gets the date value from a value - if possible.
339
+ * Will not convert unconvertable dates or numbers outside of the current month's number of days.
340
+ * Returns `undefined` if the value can not be converted.
341
+ */
319
342
  getDateValue(value) {
320
- let dateValue;
321
343
  if (value instanceof Date) {
322
- dateValue = value;
344
+ return value;
323
345
  }
324
346
  else if (typeof value === 'string') {
347
+ return this.getShortcutOrDateValue(value);
348
+ }
349
+ }
350
+ /**
351
+ * Converts a string to a date object if the string is a valid date string.
352
+ * It will also convert numeric input to a date if that number is within the current month's number of days.
353
+ * If the string can not be converted, `undefined` be returned.
354
+ */
355
+ getShortcutOrDateValue(value) {
356
+ const num = Number(value);
357
+ if (Number.isInteger(num)) {
358
+ const now = new Date();
359
+ const shortcutDate = new Date(now.getFullYear(), now.getMonth(), num);
360
+ const daysInMonth = shortcutDate.getDate();
361
+ if (num > 0 && num <= daysInMonth) {
362
+ return shortcutDate;
363
+ }
364
+ }
365
+ else {
325
366
  const date = this.dateFormatter.getDateFromString(value, this.dateFormat, this.strict);
326
367
  if (this.dateFormatter.dateIsValid(date)) {
327
- dateValue = date;
368
+ return date;
328
369
  }
329
370
  }
330
- return dateValue;
331
371
  }
332
372
  /**
333
373
  * Validates the input value to ensure it is formatted correctly.
@@ -360,10 +400,6 @@ export class SkyDatepickerInputDirective {
360
400
  if (this._value === value) {
361
401
  return;
362
402
  }
363
- const dateValue = this.getDateValue(value);
364
- const areDatesEqual = this._value instanceof Date &&
365
- dateValue &&
366
- dateValue.getTime() === this._value.getTime();
367
403
  const isValidDateString = this.isDateStringValid(value);
368
404
  // If the string value supplied is malformed, do not set the value to its Date equivalent.
369
405
  // (JavaScript's Date parser will convert poorly formatted dates to Date objects, such as "abc 123", which isn't ideal.)
@@ -376,23 +412,32 @@ export class SkyDatepickerInputDirective {
376
412
  this.control?.setValue(this._value, { emitEvent: false });
377
413
  }
378
414
  this.datepickerComponent.selectedDate = this._value;
415
+ this.setInputElementValue(value || '');
379
416
  }
380
- else if (dateValue !== this._value || !areDatesEqual) {
381
- this._value = dateValue || value;
382
- if (emitEvent) {
383
- this.onChange(this._value);
417
+ else {
418
+ // This value represents the date value for the input if possible.
419
+ // This value will take into account all shortcut functionality.
420
+ const dateValue = this.getDateValue(value);
421
+ const areDatesEqual = this._value instanceof Date &&
422
+ dateValue &&
423
+ dateValue.getTime() === this._value.getTime();
424
+ if (dateValue !== this._value || !areDatesEqual) {
425
+ this._value = dateValue || value;
426
+ if (emitEvent) {
427
+ this.onChange(this._value);
428
+ }
429
+ else {
430
+ this.control?.setValue(this._value, { emitEvent: false });
431
+ }
432
+ this.datepickerComponent.selectedDate = this._value;
433
+ }
434
+ if (dateValue) {
435
+ const formattedDateString = this.dateFormatter.format(dateValue, this.dateFormat);
436
+ this.setInputElementValue(formattedDateString);
384
437
  }
385
438
  else {
386
- this.control?.setValue(this._value, { emitEvent: false });
439
+ this.setInputElementValue(value || '');
387
440
  }
388
- this.datepickerComponent.selectedDate = this._value;
389
- }
390
- if (dateValue && isValidDateString) {
391
- const formattedDate = this.dateFormatter.format(dateValue, this.dateFormat);
392
- this.setInputElementValue(formattedDate);
393
- }
394
- else {
395
- this.setInputElementValue(value || '');
396
441
  }
397
442
  }
398
443
  }
@@ -440,4 +485,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
440
485
  type: HostListener,
441
486
  args: ['keyup']
442
487
  }] } });
443
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0UsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFFaEUsTUFBTSw2QkFBNkIsR0FBRztJQUNwQyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUM7SUFDMUQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSx3QkFBd0IsR0FBRztJ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QUMxQzthQUFNO1lBQ0wsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN4QztJQUNILENBQUM7O3dIQTVlVSwyQkFBMkI7NEdBQTNCLDJCQUEyQiwrWUFOM0I7UUFDVCw2QkFBNkI7UUFDN0Isd0JBQXdCO1FBQ3hCLDJCQUEyQjtLQUM1QjsyRkFFVSwyQkFBMkI7a0JBUnZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsU0FBUyxFQUFFO3dCQUNULDZCQUE2Qjt3QkFDN0Isd0JBQXdCO3dCQUN4QiwyQkFBMkI7cUJBQzVCO2lCQUNGOzswQkFvTEksUUFBUTs0Q0FwS0EsVUFBVTtzQkFEcEIsS0FBSztnQkFzQkssUUFBUTtzQkFEbEIsS0FBSztnQkF3QkssT0FBTztzQkFEakIsS0FBSztnQkFpQkssT0FBTztzQkFEakIsS0FBSztnQkFtQkssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQW9CQyx1QkFBdUI7c0JBRDdCLEtBQUs7Z0JBVUssV0FBVztzQkFEckIsS0FBSztnQkFxQkssTUFBTTtzQkFEaEIsS0FBSztnQkFtSEMsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMEIzQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE1BQU07Z0JBTWIsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBSZW5kZXJlcjIsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwTG9jYWxlUHJvdmlkZXIsIFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGVGb3JtYXR0ZXIgfSBmcm9tICcuL2RhdGUtZm9ybWF0dGVyJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2RhdGVwaWNrZXItY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuXG5jb25zdCBTS1lfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuY29uc3QgU0tZX0RBVEVQSUNLRVJfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lEYXRlcGlja2VySW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tza3lEYXRlcGlja2VySW5wdXRdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU0tZX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IsXG4gICAgU0tZX0RBVEVQSUNLRVJfVkFMSURBVE9SLFxuICAgIFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlXG4gIGltcGxlbWVudHNcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZGF0ZSBmb3JtYXQgZm9yIHRoZSBpbnB1dC4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudFxuICAgKiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiB0aGUgYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgXCJNTS9ERC9ZWVlZXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0ZUZvcm1hdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX2RhdGVGb3JtYXQpIHtcbiAgICAgIHRoaXMuX2RhdGVGb3JtYXQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuYXBwbHlEYXRlRm9ybWF0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2RhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLnByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGF0ZXBpY2tlci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuZGF0ZXBpY2tlckNvbXBvbmVudC5kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNhYmxlZCcsIHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGlucHV0IGVsZW1lbnQgb3IgYW55IG9mIGl0cyBjaGlsZHJlbiBoYXZlIGZvY3VzLlxuICAgKi9cbiAgcHVibGljIGdldCBpbnB1dElzRm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmVsZW1lbnRJc0ZvY3VzZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGxhdGVzdCBkYXRlIHRoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBjYWxlbmRhci4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb25cbiAgICogdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgdGhpcy5fbWF4RGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuZGF0ZXBpY2tlckNvbXBvbmVudC5tYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xuXG4gICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLl9tYXhEYXRlIHx8IHRoaXMuY29uZmlnU2VydmljZS5tYXhEYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZWFybGllc3QgZGF0ZSB0aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUgY2FsZW5kYXIuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uXG4gICAqIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWluRGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgIHRoaXMuX21pbkRhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLmRhdGVwaWNrZXJDb21wb25lbnQubWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcblxuICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZSB8fCB0aGlzLmNvbmZpZ1NlcnZpY2UubWluRGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBkYXRlcGlja2VyIGlucHV0IGFuZCBjYWxlbmRhci4gUGxhY2UgdGhpcyBkaXJlY3RpdmUgb24gYW4gYGlucHV0YCBlbGVtZW50LFxuICAgKiBhbmQgd3JhcCB0aGUgaW5wdXQgaW4gYSBgc2t5LWRhdGVwaWNrZXJgIGNvbXBvbmVudC4gVGhlIHZhbHVlIHRoYXQgdXNlcnMgc2VsZWN0IGlzIGRyaXZlblxuICAgKiB0aHJvdWdoIHRoZSBgbmdNb2RlbGAgYXR0cmlidXRlIHNwZWNpZmllZCBvbiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2t5RGF0ZXBpY2tlcklucHV0KFxuICAgIHZhbHVlOiBTa3lEYXRlcGlja2VyQ29tcG9uZW50IHwgdW5kZWZpbmVkIHwgJydcbiAgKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdbRGVwcmVjYXRpb24gd2FybmluZ10gWW91IG5vIGxvbmdlciBuZWVkIHRvIHByb3ZpZGUgYSB0ZW1wbGF0ZSByZWZlcmVuY2UgdmFyaWFibGUgJyArXG4gICAgICAgICAgJ3RvIHRoZSBgc2t5RGF0ZXBpY2tlcklucHV0YCBhdHRyaWJ1dGUgKHRoaXMgd2lsbCBiZSBhIGJyZWFraW5nIGNoYW5nZSBpbiB0aGUgbmV4dCAnICtcbiAgICAgICAgICAnbWFqb3IgdmVyc2lvbiByZWxlYXNlKS5cXG4nICtcbiAgICAgICAgICAnRG8gdGhpcyBpbnN0ZWFkOlxcbicgK1xuICAgICAgICAgICc8c2t5LWRhdGVwaWNrZXI+XFxuICA8aW5wdXQgc2t5RGF0ZXBpY2tlcklucHV0IC8+XFxuPC9za3ktZGF0ZXBpY2tlcj4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNhYmxlIGRhdGUgdmFsaWRhdGlvbiBvbiB0aGUgZGF0ZXBpY2tlciBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBza3lEYXRlcGlja2VyTm9WYWxpZGF0ZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHN0YXJ0aW5nIGRheSBvZiB0aGUgd2VlayBpbiB0aGUgY2FsZW5kYXIsIHdoZXJlIGAwYCBzZXRzIHRoZSBzdGFydGluZyBkYXlcbiAgICogdG8gU3VuZGF5LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0XG4gICAqIGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3RhcnRpbmdEYXkodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0aW5nRGF5ID0gdmFsdWU7XG4gICAgdGhpcy5kYXRlcGlja2VyQ29tcG9uZW50LnN0YXJ0aW5nRGF5ID0gdGhpcy5zdGFydGluZ0RheTtcblxuICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhcnRpbmdEYXkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRpbmdEYXkgfHwgdGhpcy5jb25maWdTZXJ2aWNlLnN0YXJ0aW5nRGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGUgdmFsdWUgbXVzdCBtYXRjaCB0aGUgZm9ybWF0IGZyb20gdGhlIGBkYXRlRm9ybWF0YCB2YWx1ZS5cbiAgICogSWYgdGhpcyBwcm9wZXJ0eSBpcyBgdHJ1ZWAgYW5kIHRoZSBkYXRlcGlja2VyIGlucHV0IGRpcmVjdGl2ZSBjYW5ub3QgZmluZCBhbiBleGFjdCBtYXRjaCwgdGhlblxuICAgKiB0aGUgaW5wdXQgaXMgbWFya2VkIGFzIGludmFsaWQuXG4gICAqIElmIHRoaXMgcHJvcGVydHkgaXMgYGZhbHNlYCBhbmQgdGhlIGRhdGVwaWNrZXIgaW5wdXQgZGlyZWN0aXZlIGNhbm5vdCBmaW5kIGFuIGV4YWN0IG1hdGNoLCB0aGVuXG4gICAqIGl0IGF0dGVtcHRzIHRvIGZvcm1hdCB0aGUgc3RyaW5nIGJhc2VkIG9uIHRoZSBbSVNPIDg2MDEgc3RhbmRhcmQgZm9ybWF0XShodHRwczovL3d3dy5pc28ub3JnL2lzby04NjAxLWRhdGUtYW5kLXRpbWUtZm9ybWF0Lmh0bWwpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdHJpY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zdHJpY3QgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RyaWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdHJpY3QgfHwgZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuICBwcml2YXRlIGRhdGVGb3JtYXR0ZXIgPSBuZXcgU2t5RGF0ZUZvcm1hdHRlcigpO1xuICBwcml2YXRlIGluaXRpYWxQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBwcml2YXRlIHByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdDogc3RyaW5nO1xuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX2RhdGVGb3JtYXQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX21heERhdGU6IERhdGU7XG4gIHByaXZhdGUgX21pbkRhdGU6IERhdGU7XG4gIHByaXZhdGUgX3N0YXJ0aW5nRGF5OiBudW1iZXI7XG4gIHByaXZhdGUgX3N0cmljdDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfdmFsdWU6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFkYXB0ZXI6IFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGxvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSByZXNvdXJjZXNTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZXBpY2tlckNvbXBvbmVudDogU2t5RGF0ZXBpY2tlckNvbXBvbmVudFxuICApIHtcbiAgICB0aGlzLmluaXRpYWxQbGFjZWhvbGRlciA9IHRoaXMuYWRhcHRlci5nZXRQbGFjZWhvbGRlcih0aGlzLmVsZW1lbnRSZWYpO1xuICAgIHRoaXMudXBkYXRlUGxhY2Vob2xkZXIoKTtcblxuICAgIHRoaXMubG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxlSW5mbykgPT4ge1xuICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLnNldExvY2FsZShsb2NhbGVJbmZvLmxvY2FsZSk7XG4gICAgICAgIHRoaXMucHJlZmVycmVkU2hvcnREYXRlRm9ybWF0ID1cbiAgICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLmdldFByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdCgpO1xuICAgICAgICB0aGlzLmFwcGx5RGF0ZUZvcm1hdCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGVwaWNrZXJDb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1lvdSBtdXN0IHdyYXAgdGhlIGBza3lEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZSB3aXRoaW4gYSAnICtcbiAgICAgICAgICAnYDxza3ktZGF0ZXBpY2tlcj5gIGNvbXBvbmVudCEnXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ3NreS1mb3JtLWNvbnRyb2wnKTtcblxuICAgIGNvbnN0IGhhc0FyaWFMYWJlbCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyk7XG5cbiAgICBpZiAoIWhhc0FyaWFMYWJlbCkge1xuICAgICAgdGhpcy5yZXNvdXJjZXNTZXJ2aWNlXG4gICAgICAgIC5nZXRTdHJpbmcoJ3NreXV4X2RhdGVfZmllbGRfZGVmYXVsdF9sYWJlbCcpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2FyaWEtbGFiZWwnLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlcGlja2VyQ29tcG9uZW50LmRhdGVDaGFuZ2VcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBEYXRlKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBhZGRyZXNzIGEgYnVnIGluIEFuZ3VsYXIgNC5cbiAgICAvLyBXaGVuIGEgY29udHJvbCB2YWx1ZSBpcyBzZXQgaW50aWFsbHksIGl0cyB2YWx1ZSBpcyBub3QgcmVwcmVzZW50ZWQgb24gdGhlIHZpZXcuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzc5MlxuICAgIC8vIE9mIG5vdGUgaXMgdGhlIHBhcmVudCBjaGVjayB3aGljaCBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmb3JtIGlzIHJlYWN0aXZlLlxuICAgIC8vIFdpdGhvdXQgdGhpcyBjaGVjayB0aGVyZSBpcyBhIGNoYW5nZWQgYmVmb3JlIGNoZWNrZWQgZXJyb3JcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNvbnRyb2wgJiYgdGhpcy5jb250cm9sLnBhcmVudCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh0aGlzLnZhbHVlLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYWRhcHRlci5pbml0KHRoaXMuZWxlbWVudFJlZik7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbklucHV0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICB0aGlzLm9uVmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERvbid0IHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIHZhbHVlIGludG8gYSBEYXRlIHZhbHVlIGlmIGl0IGlzIG1hbGZvcm1lZC5cbiAgICBpZiAodGhpcy5pc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcblxuICAgIHRoaXMuY29udHJvbC5zZXRFcnJvcnMoe1xuICAgICAgc2t5RGF0ZToge1xuICAgICAgICBpbnZhbGlkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBwdWJsaWMgb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJylcbiAgcHVibGljIG9uSW5wdXRLZXl1cCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlLCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHRoaXMuY29udHJvbCA9IGNvbnRyb2w7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZTogYW55ID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlVmFsdWUgPSB0aGlzLmdldERhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgY29uc3QgaXNEYXRlVmFsaWQgPSBkYXRlVmFsdWUgJiYgdGhpcy5kYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKGRhdGVWYWx1ZSk7XG5cbiAgICBpZiAoIWlzRGF0ZVZhbGlkIHx8ICF0aGlzLmlzRGF0ZVN0cmluZ1ZhbGlkKHZhbHVlKSkge1xuICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgdGhpcy5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgIGludmFsaWQ6IHZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtaW5EYXRlID0gdGhpcy5taW5EYXRlO1xuXG4gICAgaWYgKG1pbkRhdGUgJiYgdGhpcy5kYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKG1pbkRhdGUpICYmIHZhbHVlIDwgbWluRGF0ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgIG1pbkRhdGUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLm1heERhdGU7XG5cbiAgICBpZiAobWF4RGF0ZSAmJiB0aGlzLmRhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQobWF4RGF0ZSkgJiYgdmFsdWUgPiBtYXhEYXRlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBza3lEYXRlOiB7XG4gICAgICAgICAgbWF4RGF0ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgdGhpcy5kYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0cyBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQncyB2YWx1ZSBhbmQgdXBkYXRlcyB0aGUgbmdNb2RlbCBhY2NvcmRpbmdseS5cbiAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSBuZ01vZGVsIHZhbHVlIGJlZm9yZSB0aGUgaW5wdXQgZWxlbWVudCBsb3NlcyBmb2N1cy5cbiAgICovXG4gIHB1YmxpYyBkZXRlY3RJbnB1dFZhbHVlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMub25WYWx1ZUNoYW5nZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RGF0ZUZvcm1hdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVBsYWNlaG9sZGVyKCk7XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLmRhdGVGb3JtYXR0ZXIuZm9ybWF0KFxuICAgICAgICB0aGlzLnZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgICB0aGlzLnNldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uVmFsdWVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVZhbHVlKHZhbHVlOiBhbnkpOiBEYXRlIHtcbiAgICBsZXQgZGF0ZVZhbHVlOiBEYXRlO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGRhdGVWYWx1ZSA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUZvcm1hdHRlci5nZXREYXRlRnJvbVN0cmluZyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGhpcy5zdHJpY3RcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5kYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgIGRhdGVWYWx1ZSA9IGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGVWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGlucHV0IHZhbHVlIHRvIGVuc3VyZSBpdCBpcyBmb3JtYXR0ZWQgY29ycmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBpc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBEb2VzIHRoZSB2YWx1ZSBvbmx5IGluY2x1ZGUgZGlnaXRzLCBkYXNoZXMsIG9yIHNsYXNoZXM/XG4gICAgY29uc3QgcmVnZXhwID0gL15bXFxkLy1dKyQvO1xuICAgIGNvbnN0IGlzVmFsaWQgPSByZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90LCBkb2VzIGl0IGNvbmZvcm0gdG8gdGhlIHN0YW5kYXJkIElTTyBmb3JtYXQ/XG4gICAgY29uc3QgaXNWYWxpZElzbyA9IG1vbWVudCh2YWx1ZSwgbW9tZW50LklTT184NjAxKS5pc1ZhbGlkKCk7XG5cbiAgICByZXR1cm4gaXNWYWxpZElzbztcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHJpdmF0ZSBvblZhbGlkYXRvckNoYW5nZSA9ICgpID0+IHt9O1xuXG4gIHByaXZhdGUgdXBkYXRlUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxQbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5hZGFwdGVyLnNldFBsYWNlaG9sZGVyKHRoaXMuZWxlbWVudFJlZiwgdGhpcy5kYXRlRm9ybWF0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sIGFuZCBpbnB1dCBlbGVtZW50XG4gICAqIEBwYXJhbSBlbWl0RXZlbnQgRGVub3RlcyBpZiB3ZSBlbWl0IGFuIGV2ZW50IHRvIHRoZSBjb25zdW1lcidzIGZvcm0gY29udHJvbC4gV2UgZG8gbm90IHdhbnQgdG8gZG8gdGhpcyBpZiB0aGUgdmFsdWUgaXMgYmVpbmcgdXBkYXRlZCB2aWEgYSBgc2V0VmFsdWVgIGNhbGwgb3IgYSBgcGF0Y2hWYWx1ZWAgY2FsbCBhcyB0aGlzIGlzIGFscmVhZHkgaGFuZGxlZCBieSBBbmd1bGFyLlxuICAgKiBJbiB0aGVzZSBjYXNlcyB3ZSBkbyBub3Qgd2FudCB0byBmaXJlIGBvbkNoYW5nZWAgYXMgaXQgd2lsbCBjYXVzZSBleHRyYSBgdmFsdWVDaGFuZ2VgIGFuZCBgc3RhdHVzQ2hhbmdlYCBldmVudHMgYW5kIHRoZSBzdGF0dXMgb2YgdGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55LCBlbWl0RXZlbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVWYWx1ZSA9IHRoaXMuZ2V0RGF0ZVZhbHVlKHZhbHVlKTtcblxuICAgIGNvbnN0IGFyZURhdGVzRXF1YWwgPVxuICAgICAgdGhpcy5fdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmXG4gICAgICBkYXRlVmFsdWUgJiZcbiAgICAgIGRhdGVWYWx1ZS5nZXRUaW1lKCkgPT09IHRoaXMuX3ZhbHVlLmdldFRpbWUoKTtcblxuICAgIGNvbnN0IGlzVmFsaWREYXRlU3RyaW5nID0gdGhpcy5pc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZSk7XG5cbiAgICAvLyBJZiB0aGUgc3RyaW5nIHZhbHVlIHN1cHBsaWVkIGlzIG1hbGZvcm1lZCwgZG8gbm90IHNldCB0aGUgdmFsdWUgdG8gaXRzIERhdGUgZXF1aXZhbGVudC5cbiAgICAvLyAoSmF2YVNjcmlwdCdzIERhdGUgcGFyc2VyIHdpbGwgY29udmVydCBwb29ybHkgZm9ybWF0dGVkIGRhdGVzIHRvIERhdGUgb2JqZWN0cywgc3VjaCBhcyBcImFiYyAxMjNcIiwgd2hpY2ggaXNuJ3QgaWRlYWwuKVxuICAgIGlmICghaXNWYWxpZERhdGVTdHJpbmcpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh0aGlzLl92YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21wb25lbnQuc2VsZWN0ZWREYXRlID0gdGhpcy5fdmFsdWU7XG4gICAgfSBlbHNlIGlmIChkYXRlVmFsdWUgIT09IHRoaXMuX3ZhbHVlIHx8ICFhcmVEYXRlc0VxdWFsKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGRhdGVWYWx1ZSB8fCB2YWx1ZTtcbiAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl92YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKHRoaXMuX3ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbXBvbmVudC5zZWxlY3RlZERhdGUgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZVZhbHVlICYmIGlzVmFsaWREYXRlU3RyaW5nKSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gdGhpcy5kYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgICAgZGF0ZVZhbHVlLFxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRcbiAgICAgICk7XG4gICAgICB0aGlzLnNldElucHV0RWxlbWVudFZhbHVlKGZvcm1hdHRlZERhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldElucHV0RWxlbWVudFZhbHVlKHZhbHVlIHx8ICcnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
488
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLGFBQWEsRUFDYixpQkFBaUIsR0FHbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0UsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFFaEUsTUFBTSw2QkFBNkIsR0FBRztJQUNwQyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUM7SUFDMUQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSx3QkFBd0IsR0FBRztJ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QkFBMkI7cUJBQzVCO2lCQUNGOzswQkFvTEksUUFBUTs0Q0FwS0EsVUFBVTtzQkFEcEIsS0FBSztnQkFzQkssUUFBUTtzQkFEbEIsS0FBSztnQkF3QkssT0FBTztzQkFEakIsS0FBSztnQkFpQkssT0FBTztzQkFEakIsS0FBSztnQkFtQkssa0JBQWtCO3NCQUQ1QixLQUFLO2dCQW9CQyx1QkFBdUI7c0JBRDdCLEtBQUs7Z0JBVUssV0FBVztzQkFEckIsS0FBSztnQkFxQkssTUFBTTtzQkFEaEIsS0FBSztnQkFtSEMsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMEIzQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE1BQU07Z0JBTWIsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBSZW5kZXJlcjIsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwTG9jYWxlUHJvdmlkZXIsIFNreUxpYlJlc291cmNlc1NlcnZpY2UgfSBmcm9tICdAc2t5dXgvaTE4bic7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURhdGVGb3JtYXR0ZXIgfSBmcm9tICcuL2RhdGUtZm9ybWF0dGVyJztcbmltcG9ydCB7IFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1hZGFwdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2RhdGVwaWNrZXItY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuXG5jb25zdCBTS1lfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreURhdGVwaWNrZXJJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuY29uc3QgU0tZX0RBVEVQSUNLRVJfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lEYXRlcGlja2VySW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tza3lEYXRlcGlja2VySW5wdXRdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgU0tZX0RBVEVQSUNLRVJfVkFMVUVfQUNDRVNTT1IsXG4gICAgU0tZX0RBVEVQSUNLRVJfVkFMSURBVE9SLFxuICAgIFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlXG4gIGltcGxlbWVudHNcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZGF0ZSBmb3JtYXQgZm9yIHRoZSBpbnB1dC4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudFxuICAgKiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiB0aGUgYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICogQGRlZmF1bHQgXCJNTS9ERC9ZWVlZXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0ZUZvcm1hdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX2RhdGVGb3JtYXQpIHtcbiAgICAgIHRoaXMuX2RhdGVGb3JtYXQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuYXBwbHlEYXRlRm9ybWF0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2RhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLnByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgZGF0ZXBpY2tlci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuZGF0ZXBpY2tlckNvbXBvbmVudC5kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNhYmxlZCcsIHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGlucHV0IGVsZW1lbnQgb3IgYW55IG9mIGl0cyBjaGlsZHJlbiBoYXZlIGZvY3VzLlxuICAgKi9cbiAgcHVibGljIGdldCBpbnB1dElzRm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmVsZW1lbnRJc0ZvY3VzZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGxhdGVzdCBkYXRlIHRoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBjYWxlbmRhci4gUGxhY2UgdGhpcyBhdHRyaWJ1dGUgb25cbiAgICogdGhlIGBpbnB1dGAgZWxlbWVudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbiBgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2VgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhEYXRlKHZhbHVlOiBEYXRlKSB7XG4gICAgdGhpcy5fbWF4RGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuZGF0ZXBpY2tlckNvbXBvbmVudC5tYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xuXG4gICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLl9tYXhEYXRlIHx8IHRoaXMuY29uZmlnU2VydmljZS5tYXhEYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZWFybGllc3QgZGF0ZSB0aGF0IGlzIGF2YWlsYWJsZSBpbiB0aGUgY2FsZW5kYXIuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uXG4gICAqIHRoZSBgaW5wdXRgIGVsZW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW4gYFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWluRGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgIHRoaXMuX21pbkRhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLmRhdGVwaWNrZXJDb21wb25lbnQubWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcblxuICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZSB8fCB0aGlzLmNvbmZpZ1NlcnZpY2UubWluRGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBkYXRlcGlja2VyIGlucHV0IGFuZCBjYWxlbmRhci4gUGxhY2UgdGhpcyBkaXJlY3RpdmUgb24gYW4gYGlucHV0YCBlbGVtZW50LFxuICAgKiBhbmQgd3JhcCB0aGUgaW5wdXQgaW4gYSBgc2t5LWRhdGVwaWNrZXJgIGNvbXBvbmVudC4gVGhlIHZhbHVlIHRoYXQgdXNlcnMgc2VsZWN0IGlzIGRyaXZlblxuICAgKiB0aHJvdWdoIHRoZSBgbmdNb2RlbGAgYXR0cmlidXRlIHNwZWNpZmllZCBvbiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2t5RGF0ZXBpY2tlcklucHV0KFxuICAgIHZhbHVlOiBTa3lEYXRlcGlja2VyQ29tcG9uZW50IHwgdW5kZWZpbmVkIHwgJydcbiAgKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdbRGVwcmVjYXRpb24gd2FybmluZ10gWW91IG5vIGxvbmdlciBuZWVkIHRvIHByb3ZpZGUgYSB0ZW1wbGF0ZSByZWZlcmVuY2UgdmFyaWFibGUgJyArXG4gICAgICAgICAgJ3RvIHRoZSBgc2t5RGF0ZXBpY2tlcklucHV0YCBhdHRyaWJ1dGUgKHRoaXMgd2lsbCBiZSBhIGJyZWFraW5nIGNoYW5nZSBpbiB0aGUgbmV4dCAnICtcbiAgICAgICAgICAnbWFqb3IgdmVyc2lvbiByZWxlYXNlKS5cXG4nICtcbiAgICAgICAgICAnRG8gdGhpcyBpbnN0ZWFkOlxcbicgK1xuICAgICAgICAgICc8c2t5LWRhdGVwaWNrZXI+XFxuICA8aW5wdXQgc2t5RGF0ZXBpY2tlcklucHV0IC8+XFxuPC9za3ktZGF0ZXBpY2tlcj4nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNhYmxlIGRhdGUgdmFsaWRhdGlvbiBvbiB0aGUgZGF0ZXBpY2tlciBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBza3lEYXRlcGlja2VyTm9WYWxpZGF0ZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHN0YXJ0aW5nIGRheSBvZiB0aGUgd2VlayBpbiB0aGUgY2FsZW5kYXIsIHdoZXJlIGAwYCBzZXRzIHRoZSBzdGFydGluZyBkYXlcbiAgICogdG8gU3VuZGF5LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0XG4gICAqIGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3RhcnRpbmdEYXkodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0aW5nRGF5ID0gdmFsdWU7XG4gICAgdGhpcy5kYXRlcGlja2VyQ29tcG9uZW50LnN0YXJ0aW5nRGF5ID0gdGhpcy5zdGFydGluZ0RheTtcblxuICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhcnRpbmdEYXkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRpbmdEYXkgfHwgdGhpcy5jb25maWdTZXJ2aWNlLnN0YXJ0aW5nRGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtYXQgb2YgdGhlIGRhdGUgdmFsdWUgbXVzdCBtYXRjaCB0aGUgZm9ybWF0IGZyb20gdGhlIGBkYXRlRm9ybWF0YCB2YWx1ZS5cbiAgICogSWYgdGhpcyBwcm9wZXJ0eSBpcyBgdHJ1ZWAgYW5kIHRoZSBkYXRlcGlja2VyIGlucHV0IGRpcmVjdGl2ZSBjYW5ub3QgZmluZCBhbiBleGFjdCBtYXRjaCwgdGhlblxuICAgKiB0aGUgaW5wdXQgaXMgbWFya2VkIGFzIGludmFsaWQuXG4gICAqIElmIHRoaXMgcHJvcGVydHkgaXMgYGZhbHNlYCBhbmQgdGhlIGRhdGVwaWNrZXIgaW5wdXQgZGlyZWN0aXZlIGNhbm5vdCBmaW5kIGFuIGV4YWN0IG1hdGNoLCB0aGVuXG4gICAqIGl0IGF0dGVtcHRzIHRvIGZvcm1hdCB0aGUgc3RyaW5nIGJhc2VkIG9uIHRoZSBbSVNPIDg2MDEgc3RhbmRhcmQgZm9ybWF0XShodHRwczovL3d3dy5pc28ub3JnL2lzby04NjAxLWRhdGUtYW5kLXRpbWUtZm9ybWF0Lmh0bWwpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdHJpY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zdHJpY3QgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RyaWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdHJpY3QgfHwgZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuICBwcml2YXRlIGRhdGVGb3JtYXR0ZXIgPSBuZXcgU2t5RGF0ZUZvcm1hdHRlcigpO1xuICBwcml2YXRlIGluaXRpYWxQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBwcml2YXRlIHByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdDogc3RyaW5nO1xuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX2RhdGVGb3JtYXQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX21heERhdGU6IERhdGU7XG4gIHByaXZhdGUgX21pbkRhdGU6IERhdGU7XG4gIHByaXZhdGUgX3N0YXJ0aW5nRGF5OiBudW1iZXI7XG4gIHByaXZhdGUgX3N0cmljdDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfdmFsdWU6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFkYXB0ZXI6IFNreURhdGVwaWNrZXJBZGFwdGVyU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGxvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSByZXNvdXJjZXNTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZXBpY2tlckNvbXBvbmVudDogU2t5RGF0ZXBpY2tlckNvbXBvbmVudFxuICApIHtcbiAgICB0aGlzLmluaXRpYWxQbGFjZWhvbGRlciA9IHRoaXMuYWRhcHRlci5nZXRQbGFjZWhvbGRlcih0aGlzLmVsZW1lbnRSZWYpO1xuICAgIHRoaXMudXBkYXRlUGxhY2Vob2xkZXIoKTtcblxuICAgIHRoaXMubG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxlSW5mbykgPT4ge1xuICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLnNldExvY2FsZShsb2NhbGVJbmZvLmxvY2FsZSk7XG4gICAgICAgIHRoaXMucHJlZmVycmVkU2hvcnREYXRlRm9ybWF0ID1cbiAgICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLmdldFByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdCgpO1xuICAgICAgICB0aGlzLmFwcGx5RGF0ZUZvcm1hdCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGVwaWNrZXJDb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1lvdSBtdXN0IHdyYXAgdGhlIGBza3lEYXRlcGlja2VySW5wdXRgIGRpcmVjdGl2ZSB3aXRoaW4gYSAnICtcbiAgICAgICAgICAnYDxza3ktZGF0ZXBpY2tlcj5gIGNvbXBvbmVudCEnXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ3NreS1mb3JtLWNvbnRyb2wnKTtcblxuICAgIGNvbnN0IGhhc0FyaWFMYWJlbCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyk7XG5cbiAgICBpZiAoIWhhc0FyaWFMYWJlbCkge1xuICAgICAgdGhpcy5yZXNvdXJjZXNTZXJ2aWNlXG4gICAgICAgIC5nZXRTdHJpbmcoJ3NreXV4X2RhdGVfZmllbGRfZGVmYXVsdF9sYWJlbCcpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2FyaWEtbGFiZWwnLCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlcGlja2VyQ29tcG9uZW50LmRhdGVDaGFuZ2VcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBEYXRlKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBhZGRyZXNzIGEgYnVnIGluIEFuZ3VsYXIgNC5cbiAgICAvLyBXaGVuIGEgY29udHJvbCB2YWx1ZSBpcyBzZXQgaW50aWFsbHksIGl0cyB2YWx1ZSBpcyBub3QgcmVwcmVzZW50ZWQgb24gdGhlIHZpZXcuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzc5MlxuICAgIC8vIE9mIG5vdGUgaXMgdGhlIHBhcmVudCBjaGVjayB3aGljaCBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmb3JtIGlzIHJlYWN0aXZlLlxuICAgIC8vIFdpdGhvdXQgdGhpcyBjaGVjayB0aGVyZSBpcyBhIGNoYW5nZWQgYmVmb3JlIGNoZWNrZWQgZXJyb3JcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNvbnRyb2wgJiYgdGhpcy5jb250cm9sLnBhcmVudCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh0aGlzLnZhbHVlLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYWRhcHRlci5pbml0KHRoaXMuZWxlbWVudFJlZik7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbklucHV0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGlmICh0aGlzLnNreURhdGVwaWNrZXJOb1ZhbGlkYXRlKSB7XG4gICAgICB0aGlzLm9uVmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERvbid0IHRyeSB0byBwYXJzZSB0aGUgc3RyaW5nIHZhbHVlIGludG8gYSBEYXRlIHZhbHVlIGlmIGl0IGlzIG1hbGZvcm1lZC5cbiAgICBpZiAodGhpcy5pc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcblxuICAgIHRoaXMuY29udHJvbC5zZXRFcnJvcnMoe1xuICAgICAgc2t5RGF0ZToge1xuICAgICAgICBpbnZhbGlkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICBwdWJsaWMgb25JbnB1dEJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJylcbiAgcHVibGljIG9uSW5wdXRLZXl1cCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlLCBmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHRoaXMuY29udHJvbCA9IGNvbnRyb2w7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZTogdW5rbm93biA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgY29uc3QgaXNEYXRlVmFsaWQgPSB0aGlzLmRhdGVGb3JtYXR0ZXIuZGF0ZUlzVmFsaWQodmFsdWUpO1xuXG4gICAgICBpZiAoIWlzRGF0ZVZhbGlkKSB7XG4gICAgICAgIC8vIE1hcmsgdGhlIGludmFsaWQgY29udHJvbCBhcyB0b3VjaGVkIHNvIHRoYXQgdGhlIGlucHV0J3MgaW52YWxpZCBDU1Mgc3R5bGVzIGFwcGVhci5cbiAgICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgICB0aGlzLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgICAgaW52YWxpZDogdmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcblxuICAgICAgaWYgKFxuICAgICAgICBtaW5EYXRlICYmXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZChtaW5EYXRlKSAmJlxuICAgICAgICB2YWx1ZSA8IG1pbkRhdGVcbiAgICAgICkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICAgIG1pbkRhdGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF4RGF0ZSA9IHRoaXMubWF4RGF0ZTtcblxuICAgICAgaWYgKFxuICAgICAgICBtYXhEYXRlICYmXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdHRlci5kYXRlSXNWYWxpZChtYXhEYXRlKSAmJlxuICAgICAgICB2YWx1ZSA+IG1heERhdGVcbiAgICAgICkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNreURhdGU6IHtcbiAgICAgICAgICAgIG1heERhdGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgLy8gKFRoaXMgaXMgb25seSByZXF1aXJlZCB3aGVuIHRoZSBpbnZhbGlkIHZhbHVlIGlzIHNldCBieSB0aGUgRm9ybUNvbnRyb2wgY29uc3RydWN0b3IuKVxuICAgICAgdGhpcy5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2t5RGF0ZToge1xuICAgICAgICAgIGludmFsaWQ6IHZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB0aGlzLmRhdGVwaWNrZXJDb21wb25lbnQuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3RzIGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudCdzIHZhbHVlIGFuZCB1cGRhdGVzIHRoZSBuZ01vZGVsIGFjY29yZGluZ2x5LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZCB0byB1cGRhdGUgdGhlIG5nTW9kZWwgdmFsdWUgYmVmb3JlIHRoZSBpbnB1dCBlbGVtZW50IGxvc2VzIGZvY3VzLlxuICAgKi9cbiAgcHVibGljIGRldGVjdElucHV0VmFsdWVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlEYXRlRm9ybWF0KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlUGxhY2Vob2xkZXIoKTtcbiAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuZGF0ZUZvcm1hdHRlci5mb3JtYXQoXG4gICAgICAgIHRoaXMudmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdFxuICAgICAgKTtcbiAgICAgIHRoaXMuc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZSk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25WYWx1ZUNoYW5nZShuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRhdGUgdmFsdWUgZnJvbSBhIHZhbHVlIC0gaWYgcG9zc2libGUuXG4gICAqIFdpbGwgbm90IGNvbnZlcnQgdW5jb252ZXJ0YWJsZSBkYXRlcyBvciBudW1iZXJzIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgbW9udGgncyBudW1iZXIgb2YgZGF5cy5cbiAgICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgdmFsdWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQuXG4gICAqL1xuICBwcml2YXRlIGdldERhdGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNob3J0Y3V0T3JEYXRlVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHN0cmluZyB0byBhIGRhdGUgb2JqZWN0IGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBkYXRlIHN0cmluZy5cbiAgICogSXQgd2lsbCBhbHNvIGNvbnZlcnQgbnVtZXJpYyBpbnB1dCB0byBhIGRhdGUgaWYgdGhhdCBudW1iZXIgaXMgd2l0aGluIHRoZSBjdXJyZW50IG1vbnRoJ3MgbnVtYmVyIG9mIGRheXMuXG4gICAqIElmIHRoZSBzdHJpbmcgY2FuIG5vdCBiZSBjb252ZXJ0ZWQsIGB1bmRlZmluZWRgIGJlIHJldHVybmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTaG9ydGN1dE9yRGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG51bSkpIHtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBzaG9ydGN1dERhdGUgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIG51bSk7XG4gICAgICBjb25zdCBkYXlzSW5Nb250aCA9IHNob3J0Y3V0RGF0ZS5nZXREYXRlKCk7XG4gICAgICBpZiAobnVtID4gMCAmJiBudW0gPD0gZGF5c0luTW9udGgpIHtcbiAgICAgICAgcmV0dXJuIHNob3J0Y3V0RGF0ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUZvcm1hdHRlci5nZXREYXRlRnJvbVN0cmluZyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGhpcy5zdHJpY3RcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5kYXRlRm9ybWF0dGVyLmRhdGVJc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGlucHV0IHZhbHVlIHRvIGVuc3VyZSBpdCBpcyBmb3JtYXR0ZWQgY29ycmVjdGx5LlxuICAgKi9cbiAgcHJpdmF0ZSBpc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBEb2VzIHRoZSB2YWx1ZSBvbmx5IGluY2x1ZGUgZGlnaXRzLCBkYXNoZXMsIG9yIHNsYXNoZXM/XG4gICAgY29uc3QgcmVnZXhwID0gL15bXFxkLy1dKyQvO1xuICAgIGNvbnN0IGlzVmFsaWQgPSByZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90LCBkb2VzIGl0IGNvbmZvcm0gdG8gdGhlIHN0YW5kYXJkIElTTyBmb3JtYXQ/XG4gICAgY29uc3QgaXNWYWxpZElzbyA9IG1vbWVudCh2YWx1ZSwgbW9tZW50LklTT184NjAxKS5pc1ZhbGlkKCk7XG5cbiAgICByZXR1cm4gaXNWYWxpZElzbztcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgcHJpdmF0ZSBvblZhbGlkYXRvckNoYW5nZSA9ICgpID0+IHt9O1xuXG4gIHByaXZhdGUgdXBkYXRlUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxQbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5hZGFwdGVyLnNldFBsYWNlaG9sZGVyKHRoaXMuZWxlbWVudFJlZiwgdGhpcy5kYXRlRm9ybWF0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sIGFuZCBpbnB1dCBlbGVtZW50XG4gICAqIEBwYXJhbSBlbWl0RXZlbnQgRGVub3RlcyBpZiB3ZSBlbWl0IGFuIGV2ZW50IHRvIHRoZSBjb25zdW1lcidzIGZvcm0gY29udHJvbC4gV2UgZG8gbm90IHdhbnQgdG8gZG8gdGhpcyBpZiB0aGUgdmFsdWUgaXMgYmVpbmcgdXBkYXRlZCB2aWEgYSBgc2V0VmFsdWVgIGNhbGwgb3IgYSBgcGF0Y2hWYWx1ZWAgY2FsbCBhcyB0aGlzIGlzIGFscmVhZHkgaGFuZGxlZCBieSBBbmd1bGFyLlxuICAgKiBJbiB0aGVzZSBjYXNlcyB3ZSBkbyBub3Qgd2FudCB0byBmaXJlIGBvbkNoYW5nZWAgYXMgaXQgd2lsbCBjYXVzZSBleHRyYSBgdmFsdWVDaGFuZ2VgIGFuZCBgc3RhdHVzQ2hhbmdlYCBldmVudHMgYW5kIHRoZSBzdGF0dXMgb2YgdGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55LCBlbWl0RXZlbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVmFsaWREYXRlU3RyaW5nID0gdGhpcy5pc0RhdGVTdHJpbmdWYWxpZCh2YWx1ZSk7XG5cbiAgICAvLyBJZiB0aGUgc3RyaW5nIHZhbHVlIHN1cHBsaWVkIGlzIG1hbGZvcm1lZCwgZG8gbm90IHNldCB0aGUgdmFsdWUgdG8gaXRzIERhdGUgZXF1aXZhbGVudC5cbiAgICAvLyAoSmF2YVNjcmlwdCdzIERhdGUgcGFyc2VyIHdpbGwgY29udmVydCBwb29ybHkgZm9ybWF0dGVkIGRhdGVzIHRvIERhdGUgb2JqZWN0cywgc3VjaCBhcyBcImFiYyAxMjNcIiwgd2hpY2ggaXNuJ3QgaWRlYWwuKVxuICAgIGlmICghaXNWYWxpZERhdGVTdHJpbmcpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh0aGlzLl92YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGVwaWNrZXJDb21wb25lbnQuc2VsZWN0ZWREYXRlID0gdGhpcy5fdmFsdWU7XG5cbiAgICAgIHRoaXMuc2V0SW5wdXRFbGVtZW50VmFsdWUodmFsdWUgfHwgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIHZhbHVlIHJlcHJlc2VudHMgdGhlIGRhdGUgdmFsdWUgZm9yIHRoZSBpbnB1dCBpZiBwb3NzaWJsZS5cbiAgICAgIC8vIFRoaXMgdmFsdWUgd2lsbCB0YWtlIGludG8gYWNjb3VudCBhbGwgc2hvcnRjdXQgZnVuY3Rpb25hbGl0eS5cbiAgICAgIGNvbnN0IGRhdGVWYWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCA9IHRoaXMuZ2V0RGF0ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgY29uc3QgYXJlRGF0ZXNFcXVhbCA9XG4gICAgICAgIHRoaXMuX3ZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJlxuICAgICAgICBkYXRlVmFsdWUgJiZcbiAgICAgICAgZGF0ZVZhbHVlLmdldFRpbWUoKSA9PT0gdGhpcy5fdmFsdWUuZ2V0VGltZSgpO1xuXG4gICAgICBpZiAoZGF0ZVZhbHVlICE9PSB0aGlzLl92YWx1ZSB8fCAhYXJlRGF0ZXNFcXVhbCkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGRhdGVWYWx1ZSB8fCB2YWx1ZTtcbiAgICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUodGhpcy5fdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0ZXBpY2tlckNvbXBvbmVudC5zZWxlY3RlZERhdGUgPSB0aGlzLl92YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGVWYWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlU3RyaW5nID0gdGhpcy5kYXRlRm9ybWF0dGVyLmZvcm1hdChcbiAgICAgICAgICBkYXRlVmFsdWUsXG4gICAgICAgICAgdGhpcy5kYXRlRm9ybWF0XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZVN0cmluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldElucHV0RWxlbWVudFZhbHVlKHZhbHVlIHx8ICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==