igniteui-angular 18.1.0-beta.1 → 18.1.0

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.
Files changed (51) hide show
  1. package/esm2022/lib/combo/combo.common.mjs +8 -8
  2. package/esm2022/lib/combo/combo.component.mjs +3 -3
  3. package/esm2022/lib/grids/headers/grid-header-group.component.mjs +3 -3
  4. package/esm2022/lib/grids/state-base.directive.mjs +1 -1
  5. package/esm2022/lib/grids/state.directive.mjs +5 -5
  6. package/esm2022/lib/icon/icon.service.mjs +3 -3
  7. package/esm2022/lib/navigation-drawer/navigation-drawer.directives.mjs +22 -4
  8. package/esm2022/lib/select/select.component.mjs +8 -8
  9. package/esm2022/lib/services/overlay/overlay.mjs +27 -16
  10. package/esm2022/lib/services/overlay/utilities.mjs +1 -1
  11. package/esm2022/lib/services/public_api.mjs +6 -6
  12. package/esm2022/lib/simple-combo/simple-combo.component.mjs +3 -3
  13. package/esm2022/lib/tree/tree-node/tree-node.component.mjs +3 -3
  14. package/esm2022/lib/tree/tree.component.mjs +5 -5
  15. package/fesm2022/igniteui-angular.mjs +118 -89
  16. package/fesm2022/igniteui-angular.mjs.map +1 -1
  17. package/lib/core/styles/components/stepper/_stepper-theme.scss +7 -7
  18. package/lib/grids/state-base.directive.d.ts +0 -1
  19. package/lib/grids/state.directive.d.ts +4 -3
  20. package/lib/icon/icon.service.d.ts +1 -1
  21. package/lib/navigation-drawer/navigation-drawer.directives.d.ts +21 -3
  22. package/lib/services/overlay/overlay.d.ts +16 -6
  23. package/lib/services/overlay/utilities.d.ts +7 -1
  24. package/lib/services/public_api.d.ts +5 -5
  25. package/package.json +2 -2
  26. package/styles/igniteui-angular-dark.css +1 -1
  27. package/styles/igniteui-angular.css +1 -1
  28. package/styles/igniteui-bootstrap-dark.css +1 -1
  29. package/styles/igniteui-bootstrap-light.css +1 -1
  30. package/styles/igniteui-dark-green.css +1 -1
  31. package/styles/igniteui-fluent-dark-excel.css +1 -1
  32. package/styles/igniteui-fluent-dark-word.css +1 -1
  33. package/styles/igniteui-fluent-dark.css +1 -1
  34. package/styles/igniteui-fluent-light-excel.css +1 -1
  35. package/styles/igniteui-fluent-light-word.css +1 -1
  36. package/styles/igniteui-fluent-light.css +1 -1
  37. package/styles/igniteui-indigo-dark.css +1 -1
  38. package/styles/igniteui-indigo-light.css +1 -1
  39. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  40. package/styles/maps/igniteui-angular.css.map +1 -1
  41. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  42. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  43. package/styles/maps/igniteui-dark-green.css.map +1 -1
  44. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  45. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  46. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  47. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  48. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  49. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  50. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  51. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -239,8 +239,8 @@ export class IgxSelectComponent extends IgxDropDownComponent {
239
239
  this._type = null;
240
240
  this._icons = [
241
241
  {
242
- name: 'expand',
243
- family: 'combo',
242
+ name: 'input_expand',
243
+ family: 'default',
244
244
  ref: new Map(Object.entries({
245
245
  'material': {
246
246
  name: 'expand_more',
@@ -253,8 +253,8 @@ export class IgxSelectComponent extends IgxDropDownComponent {
253
253
  }))
254
254
  },
255
255
  {
256
- name: 'collapse',
257
- family: 'combo',
256
+ name: 'input_collapse',
257
+ family: 'default',
258
258
  ref: new Map(Object.entries({
259
259
  'material': {
260
260
  name: 'expand_less',
@@ -449,7 +449,7 @@ export class IgxSelectComponent extends IgxDropDownComponent {
449
449
  }
450
450
  /** @hidden @internal */
451
451
  get toggleIcon() {
452
- return this.collapsed ? 'expand' : 'collapse';
452
+ return this.collapsed ? 'input_expand' : 'input_collapse';
453
453
  }
454
454
  /**
455
455
  * @hidden @internal
@@ -513,14 +513,14 @@ export class IgxSelectComponent extends IgxDropDownComponent {
513
513
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.0.5", type: IgxSelectComponent, isStandalone: true, selector: "igx-select", inputs: { placeholder: "placeholder", disabled: ["disabled", "disabled", booleanAttribute], overlaySettings: "overlaySettings", value: "value", type: "type" }, outputs: { opening: "opening", opened: "opened", closing: "closing", closed: "closed" }, host: { properties: { "style.maxHeight": "this.maxHeight" } }, providers: [
514
514
  { provide: NG_VALUE_ACCESSOR, useExisting: IgxSelectComponent, multi: true },
515
515
  { provide: IGX_DROPDOWN_BASE, useExisting: IgxSelectComponent }
516
- ], queries: [{ propertyName: "label", first: true, predicate: i0.forwardRef(() => IgxLabelDirective), descendants: true, static: true }, { propertyName: "toggleIconTemplate", first: true, predicate: IgxSelectToggleIconDirective, descendants: true, read: TemplateRef }, { propertyName: "headerTemplate", first: true, predicate: IgxSelectHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: IgxSelectFooterDirective, descendants: true, read: TemplateRef }, { propertyName: "hintElement", first: true, predicate: IgxHintDirective, descendants: true, read: ElementRef }, { propertyName: "children", predicate: i0.forwardRef(() => IgxSelectItemComponent), descendants: true }, { propertyName: "prefixes", predicate: IgxPrefixDirective, descendants: true }, { propertyName: "suffixes", predicate: IgxSuffixDirective, descendants: true }], viewQueries: [{ propertyName: "inputGroup", first: true, predicate: ["inputGroup"], descendants: true, read: IgxInputGroupComponent, static: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true, read: IgxInputDirective, static: true }], usesInheritance: true, ngImport: i0, template: "<igx-input-group #inputGroup class=\"input-group\" (click)=\"inputGroupClick($event)\" [type]=\"type\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n </ng-container>\n <input #input class=\"input\" type=\"text\" igxInput [igxSelectItemNavigation]=\"this\"\n [disabled]=\"disabled\"\n readonly=\"true\"\n [attr.placeholder]=\"this.placeholder\"\n [value]=\"this.selectionValue\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-labelledby]=\"this.label?.id\"\n [attr.aria-expanded]=\"!this.collapsed\"\n [attr.aria-owns]=\"this.listId\"\n [attr.aria-activedescendant]=\"!this.collapsed ? this.focusedItem?.id : null\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n </ng-container>\n <igx-suffix class=\"igx-select__toggle-button\">\n <ng-container *ngIf=\"toggleIconTemplate\">\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: this.collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\" family=\"combo\" [name]=\"toggleIcon\"></igx-icon>\n </igx-suffix>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\" >\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n</igx-input-group>\n<div igxToggle class=\"igx-drop-down__list\" (mousedown)=\"mousedownHandler($event);\"\n (appended)=\"onToggleContentAppended($event)\"\n (opening)=\"handleOpening($event)\"\n (opened)=\"handleOpened()\"\n (closing)=\"handleClosing($event)\"\n (closed)=\"handleClosed()\">\n\n <div *ngIf=\"headerTemplate\" class=\"igx-drop-down__select-header\">\n <ng-content *ngTemplateOutlet=\"headerTemplate\"></ng-content>\n </div>\n\n <!-- #7436 LMB scrolling closes items container - unselectable attribute is IE specific -->\n <div #scrollContainer class=\"igx-drop-down__list-scroll\" unselectable=\"on\" [style.maxHeight]=\"maxHeight\"\n [attr.id]=\"this.listId\" role=\"listbox\" [attr.aria-labelledby]=\"this.label?.id\">\n <ng-content select=\"igx-select-item, igx-select-item-group\"></ng-content>\n </div>\n\n <div *ngIf=\"footerTemplate\" class=\"igx-drop-down__select-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "directive", type: IgxSelectItemNavigationDirective, selector: "[igxSelectItemNavigation]", inputs: ["igxSelectItemNavigation"] }, { kind: "directive", type: IgxSuffixDirective, selector: "igx-suffix,[igxSuffix],[igxEnd]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "name", "active"] }, { kind: "directive", type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }] }); }
516
+ ], queries: [{ propertyName: "label", first: true, predicate: i0.forwardRef(() => IgxLabelDirective), descendants: true, static: true }, { propertyName: "toggleIconTemplate", first: true, predicate: IgxSelectToggleIconDirective, descendants: true, read: TemplateRef }, { propertyName: "headerTemplate", first: true, predicate: IgxSelectHeaderDirective, descendants: true, read: TemplateRef }, { propertyName: "footerTemplate", first: true, predicate: IgxSelectFooterDirective, descendants: true, read: TemplateRef }, { propertyName: "hintElement", first: true, predicate: IgxHintDirective, descendants: true, read: ElementRef }, { propertyName: "children", predicate: i0.forwardRef(() => IgxSelectItemComponent), descendants: true }, { propertyName: "prefixes", predicate: IgxPrefixDirective, descendants: true }, { propertyName: "suffixes", predicate: IgxSuffixDirective, descendants: true }], viewQueries: [{ propertyName: "inputGroup", first: true, predicate: ["inputGroup"], descendants: true, read: IgxInputGroupComponent, static: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true, read: IgxInputDirective, static: true }], usesInheritance: true, ngImport: i0, template: "<igx-input-group #inputGroup class=\"input-group\" (click)=\"inputGroupClick($event)\" [type]=\"type\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n </ng-container>\n <input #input class=\"input\" type=\"text\" igxInput [igxSelectItemNavigation]=\"this\"\n [disabled]=\"disabled\"\n readonly=\"true\"\n [attr.placeholder]=\"this.placeholder\"\n [value]=\"this.selectionValue\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-labelledby]=\"this.label?.id\"\n [attr.aria-expanded]=\"!this.collapsed\"\n [attr.aria-owns]=\"this.listId\"\n [attr.aria-activedescendant]=\"!this.collapsed ? this.focusedItem?.id : null\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n </ng-container>\n <igx-suffix class=\"igx-select__toggle-button\">\n <ng-container *ngIf=\"toggleIconTemplate\">\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: this.collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\" family=\"default\" [name]=\"toggleIcon\"></igx-icon>\n </igx-suffix>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\" >\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n</igx-input-group>\n<div igxToggle class=\"igx-drop-down__list\" (mousedown)=\"mousedownHandler($event);\"\n (appended)=\"onToggleContentAppended($event)\"\n (opening)=\"handleOpening($event)\"\n (opened)=\"handleOpened()\"\n (closing)=\"handleClosing($event)\"\n (closed)=\"handleClosed()\">\n\n <div *ngIf=\"headerTemplate\" class=\"igx-drop-down__select-header\">\n <ng-content *ngTemplateOutlet=\"headerTemplate\"></ng-content>\n </div>\n\n <!-- #7436 LMB scrolling closes items container - unselectable attribute is IE specific -->\n <div #scrollContainer class=\"igx-drop-down__list-scroll\" unselectable=\"on\" [style.maxHeight]=\"maxHeight\"\n [attr.id]=\"this.listId\" role=\"listbox\" [attr.aria-labelledby]=\"this.label?.id\">\n <ng-content select=\"igx-select-item, igx-select-item-group\"></ng-content>\n </div>\n\n <div *ngIf=\"footerTemplate\" class=\"igx-drop-down__select-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "directive", type: IgxSelectItemNavigationDirective, selector: "[igxSelectItemNavigation]", inputs: ["igxSelectItemNavigation"] }, { kind: "directive", type: IgxSuffixDirective, selector: "igx-suffix,[igxSuffix],[igxEnd]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "name", "active"] }, { kind: "directive", type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }] }); }
517
517
  }
518
518
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: IgxSelectComponent, decorators: [{
519
519
  type: Component,
520
520
  args: [{ selector: 'igx-select', providers: [
521
521
  { provide: NG_VALUE_ACCESSOR, useExisting: IgxSelectComponent, multi: true },
522
522
  { provide: IGX_DROPDOWN_BASE, useExisting: IgxSelectComponent }
523
- ], standalone: true, imports: [IgxInputGroupComponent, IgxInputDirective, IgxSelectItemNavigationDirective, IgxSuffixDirective, NgIf, NgTemplateOutlet, IgxIconComponent, IgxToggleDirective], template: "<igx-input-group #inputGroup class=\"input-group\" (click)=\"inputGroupClick($event)\" [type]=\"type\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n </ng-container>\n <input #input class=\"input\" type=\"text\" igxInput [igxSelectItemNavigation]=\"this\"\n [disabled]=\"disabled\"\n readonly=\"true\"\n [attr.placeholder]=\"this.placeholder\"\n [value]=\"this.selectionValue\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-labelledby]=\"this.label?.id\"\n [attr.aria-expanded]=\"!this.collapsed\"\n [attr.aria-owns]=\"this.listId\"\n [attr.aria-activedescendant]=\"!this.collapsed ? this.focusedItem?.id : null\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n </ng-container>\n <igx-suffix class=\"igx-select__toggle-button\">\n <ng-container *ngIf=\"toggleIconTemplate\">\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: this.collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\" family=\"combo\" [name]=\"toggleIcon\"></igx-icon>\n </igx-suffix>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\" >\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n</igx-input-group>\n<div igxToggle class=\"igx-drop-down__list\" (mousedown)=\"mousedownHandler($event);\"\n (appended)=\"onToggleContentAppended($event)\"\n (opening)=\"handleOpening($event)\"\n (opened)=\"handleOpened()\"\n (closing)=\"handleClosing($event)\"\n (closed)=\"handleClosed()\">\n\n <div *ngIf=\"headerTemplate\" class=\"igx-drop-down__select-header\">\n <ng-content *ngTemplateOutlet=\"headerTemplate\"></ng-content>\n </div>\n\n <!-- #7436 LMB scrolling closes items container - unselectable attribute is IE specific -->\n <div #scrollContainer class=\"igx-drop-down__list-scroll\" unselectable=\"on\" [style.maxHeight]=\"maxHeight\"\n [attr.id]=\"this.listId\" role=\"listbox\" [attr.aria-labelledby]=\"this.label?.id\">\n <ng-content select=\"igx-select-item, igx-select-item-group\"></ng-content>\n </div>\n\n <div *ngIf=\"footerTemplate\" class=\"igx-drop-down__select-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"] }]
523
+ ], standalone: true, imports: [IgxInputGroupComponent, IgxInputDirective, IgxSelectItemNavigationDirective, IgxSuffixDirective, NgIf, NgTemplateOutlet, IgxIconComponent, IgxToggleDirective], template: "<igx-input-group #inputGroup class=\"input-group\" (click)=\"inputGroupClick($event)\" [type]=\"type\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n </ng-container>\n <input #input class=\"input\" type=\"text\" igxInput [igxSelectItemNavigation]=\"this\"\n [disabled]=\"disabled\"\n readonly=\"true\"\n [attr.placeholder]=\"this.placeholder\"\n [value]=\"this.selectionValue\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-labelledby]=\"this.label?.id\"\n [attr.aria-expanded]=\"!this.collapsed\"\n [attr.aria-owns]=\"this.listId\"\n [attr.aria-activedescendant]=\"!this.collapsed ? this.focusedItem?.id : null\"\n (blur)=\"onBlur()\"\n (focus)=\"onFocus()\"\n />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n </ng-container>\n <igx-suffix class=\"igx-select__toggle-button\">\n <ng-container *ngIf=\"toggleIconTemplate\">\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: this.collapsed}\"></ng-container>\n </ng-container>\n <igx-icon *ngIf=\"!toggleIconTemplate\" family=\"default\" [name]=\"toggleIcon\"></igx-icon>\n </igx-suffix>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\" >\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n</igx-input-group>\n<div igxToggle class=\"igx-drop-down__list\" (mousedown)=\"mousedownHandler($event);\"\n (appended)=\"onToggleContentAppended($event)\"\n (opening)=\"handleOpening($event)\"\n (opened)=\"handleOpened()\"\n (closing)=\"handleClosing($event)\"\n (closed)=\"handleClosed()\">\n\n <div *ngIf=\"headerTemplate\" class=\"igx-drop-down__select-header\">\n <ng-content *ngTemplateOutlet=\"headerTemplate\"></ng-content>\n </div>\n\n <!-- #7436 LMB scrolling closes items container - unselectable attribute is IE specific -->\n <div #scrollContainer class=\"igx-drop-down__list-scroll\" unselectable=\"on\" [style.maxHeight]=\"maxHeight\"\n [attr.id]=\"this.listId\" role=\"listbox\" [attr.aria-labelledby]=\"this.label?.id\">\n <ng-content select=\"igx-select-item, igx-select-item-group\"></ng-content>\n </div>\n\n <div *ngIf=\"footerTemplate\" class=\"igx-drop-down__select-footer\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n</div>\n", styles: [":host{display:block}\n"] }]
524
524
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
525
525
  type: Inject,
526
526
  args: [DOCUMENT]
@@ -590,4 +590,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImpor
590
590
  }], type: [{
591
591
  type: Input
592
592
  }] } });
593
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJSCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBRU4sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25FLE9BQU8sRUFBeUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFpQyxNQUFNLCtCQUErQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlC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QUFLLEVBQUU7Z0JBd0JyRSxjQUFjO3NCQURwQixZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdkLFdBQVc7c0JBQXhFLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQWtFekMsS0FBSztzQkFEZixLQUFLO2dCQW9CSyxJQUFJO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudENoZWNrZWQsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBFZGl0b3JQcm92aWRlciB9IGZyb20gJy4uL2NvcmUvZWRpdC1wcm92aWRlcic7XG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneExhYmVsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9sYWJlbC9sYWJlbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2Ryb3AtZG93bi9kcm9wLWRvd24taXRlbS5iYXNlJztcbmltcG9ydCB7IElHWF9EUk9QRE9XTl9CQVNFLCBJU2VsZWN0aW9uRXZlbnRBcmdzLCBOYXZpZ2F0ZSB9IGZyb20gJy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tbW9uJztcbmltcG9ydCB7IElneElucHV0R3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC1ncm91cC9pbnB1dC1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSB9IGZyb20gJy4uL3NlcnZpY2VzL292ZXJsYXkvc2Nyb2xsL2Fic29sdXRlLXNjcm9sbC1zdHJhdGVneSc7XG5pbXBvcnQgeyBPdmVybGF5U2V0dGluZ3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9vdmVybGF5L3V0aWxpdGllcyc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkNvbXBvbmVudCB9IGZyb20gJy4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4U2VsZWN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vc2VsZWN0LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdFBvc2l0aW9uaW5nU3RyYXRlZ3kgfSBmcm9tICcuL3NlbGVjdC1wb3NpdGlvbmluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3RCYXNlIH0gZnJvbSAnLi9zZWxlY3QuY29tbW9uJztcbmltcG9ydCB7IElneEhpbnREaXJlY3RpdmUsIElneElucHV0R3JvdXBUeXBlLCBJZ3hQcmVmaXhEaXJlY3RpdmUsIElHWF9JTlBVVF9HUk9VUF9UWVBFIH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBUb2dnbGVWaWV3Q2FuY2VsYWJsZUV2ZW50QXJncywgVG9nZ2xlVmlld0V2ZW50QXJncywgSWd4VG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL292ZXJsYXkvb3ZlcmxheSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hTdWZmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3N1ZmZpeC9zdWZmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFNlbGVjdEl0ZW1OYXZpZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9zZWxlY3QtbmF2aWdhdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SW5wdXREaXJlY3RpdmUsIElneElucHV0U3RhdGUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2lucHV0L2lucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJY29uU2VydmljZSB9IGZyb20gJy4uL2ljb24vaWNvbi5zZXJ2aWNlJztcblxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hTZWxlY3RUb2dnbGVJY29uXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTZWxlY3RUb2dnbGVJY29uRGlyZWN0aXZlIHtcbn1cblxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hTZWxlY3RIZWFkZXJdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneFNlbGVjdEhlYWRlckRpcmVjdGl2ZSB7XG59XG5cbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4U2VsZWN0Rm9vdGVyXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTZWxlY3RGb290ZXJEaXJlY3RpdmUge1xufVxuXG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIFNlbGVjdCoqIC1cbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9zZWxlY3QpXG4gKlxuICogVGhlIGBpZ3hTZWxlY3RgIHByb3ZpZGVzIGFuIGlucHV0IHdpdGggZHJvcGRvd24gbGlzdCBhbGxvd2luZyBzZWxlY3Rpb24gb2YgYSBzaW5nbGUgaXRlbS5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1zZWxlY3QgI3NlbGVjdDEgW3BsYWNlaG9sZGVyXT1cIidQaWNrIE9uZSdcIj5cbiAqICAgPGxhYmVsIGlneExhYmVsPlNlbGVjdCBMYWJlbDwvbGFiZWw+XG4gKiAgIDxpZ3gtc2VsZWN0LWl0ZW0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIiBbdmFsdWVdPVwiaXRlbS5maWVsZFwiPlxuICogICAgIHt7IGl0ZW0uZmllbGQgfX1cbiAqICAgPC9pZ3gtc2VsZWN0LWl0ZW0+XG4gKiA8L2lneC1zZWxlY3Q+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtc2VsZWN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneFNlbGVjdENvbXBvbmVudCwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBJR1hfRFJPUERPV05fQkFTRSwgdXNlRXhpc3Rpbmc6IElneFNlbGVjdENvbXBvbmVudCB9XG4gICAgXSxcbiAgICBzdHlsZXM6IFtgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgYF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSWd4SW5wdXRHcm91cENvbXBvbmVudCwgSWd4SW5wdXREaXJlY3RpdmUsIElneFNlbGVjdEl0ZW1OYXZpZ2F0aW9uRGlyZWN0aXZlLCBJZ3hTdWZmaXhEaXJlY3RpdmUsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQsIElneEljb25Db21wb25lbnQsIElneFRvZ2dsZURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4U2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgSWd4RHJvcERvd25Db21wb25lbnQgaW1wbGVtZW50cyBJZ3hTZWxlY3RCYXNlLCBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgRWRpdG9yUHJvdmlkZXIsIEFmdGVyQ29udGVudENoZWNrZWQge1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cCcsIHsgcmVhZDogSWd4SW5wdXRHcm91cENvbXBvbmVudCwgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBpbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSkgcHVibGljIGlucHV0OiBJZ3hJbnB1dERpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50KSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBjaGlsZHJlbjogUXVlcnlMaXN0PElneFNlbGVjdEl0ZW1Db21wb25lbnQ+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hQcmVmaXhEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgcHJlZml4ZXM6IFF1ZXJ5TGlzdDxJZ3hQcmVmaXhEaXJlY3RpdmU+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hTdWZmaXhEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgc3VmZml4ZXM6IFF1ZXJ5TGlzdDxJZ3hTdWZmaXhEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IElneExhYmVsRGlyZWN0aXZlKSwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIGxhYmVsOiBJZ3hMYWJlbERpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgaW5wdXQgcGxhY2Vob2xkZXIuXG4gICAgICpcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcGxhY2Vob2xkZXI7XG5cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBjb21wb25lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2VsZWN0IFtkaXNhYmxlZF09XCIndHJ1ZSdcIj48L2lneC1zZWxlY3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBjdXN0b20gT3ZlcmxheVNldHRpbmdzIGBJZ3hTZWxlY3RDb21wb25lbnRgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNlbGVjdCBbb3ZlcmxheVNldHRpbmdzXSA9IFwiY3VzdG9tT3ZlcmxheVNldHRpbmdzXCI+PC9pZ3gtc2VsZWN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5tYXhIZWlnaHQnKVxuICAgIHB1YmxpYyBvdmVycmlkZSBtYXhIZWlnaHQgPSAnMjU2cHgnO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBiZWZvcmUgdGhlIGRyb3Bkb3duIGlzIG9wZW5lZFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2VsZWN0IG9wZW5pbmc9J2hhbmRsZU9wZW5pbmcoJGV2ZW50KSc+PC9pZ3gtc2VsZWN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBvcGVuaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBhZnRlciB0aGUgZHJvcGRvd24gaXMgb3BlbmVkXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zZWxlY3QgKG9wZW5lZCk9J2hhbmRsZU9wZW5lZCgkZXZlbnQpJz48L2lneC1zZWxlY3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIG9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGJlZm9yZSB0aGUgZHJvcGRvd24gaXMgY2xvc2VkXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zZWxlY3QgKGNsb3NpbmcpPSdoYW5kbGVDbG9zaW5nKCRldmVudCknPjwvaWd4LXNlbGVjdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2xvc2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIGRyb3Bkb3duIGlzIGNsb3NlZFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2VsZWN0IChjbG9zZWQpPSdoYW5kbGVDbG9zZWQoJGV2ZW50KSc+PC9pZ3gtc2VsZWN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElCYXNlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRoZSBzZWxlY3QgVE9HR0xFKG9wZW4vY2xvc2UpIGJ1dHRvblxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIFNldCBpbiB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG15Q29tcG9uZW50LmN1c3RvbVRlbXBsYXRlO1xuICAgICAqIG15Q29tcG9uZW50LnNlbGVjdC50b2dnbGVJY29uVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtc2VsZWN0ICNzZWxlY3Q+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hTZWxlY3RUb2dnbGVJY29uIGxldC1jb2xsYXBzZWQ+XG4gICAgICogICAgICAgICAgPGlneC1pY29uPnt7IGNvbGxhcHNlZCA/ICdyZW1vdmVfY2lyY2xlJyA6ICdyZW1vdmVfY2lyY2xlX291dGxpbmUnfX08L2lneC1pY29uPlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgPC9pZ3gtc2VsZWN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4U2VsZWN0VG9nZ2xlSWNvbkRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyB0b2dnbGVJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRoZSBIRUFERVIgZm9yIHRoZSBzZWxlY3QgaXRlbXMgbGlzdFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIFNldCBpbiB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG15Q29tcG9uZW50LmN1c3RvbVRlbXBsYXRlO1xuICAgICAqIG15Q29tcG9uZW50LnNlbGVjdC5oZWFkZXJUZW1wbGF0ZSA9IG15Q3VzdG9tVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS0gU2V0IGluIG1hcmt1cCAtLT5cbiAgICAgKiAgPGlneC1zZWxlY3QgI3NlbGVjdD5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneFNlbGVjdEhlYWRlcj5cbiAgICAgKiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0X19oZWFkZXJcIj5cbiAgICAgKiAgICAgICAgICAgICAgVGhpcyBpcyBhIGN1c3RvbSBoZWFkZXJcbiAgICAgKiAgICAgICAgICA8L2Rpdj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LXNlbGVjdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFNlbGVjdEhlYWRlckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VzdG9tIHRlbXBsYXRlLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIEZPT1RFUiBmb3IgdGhlIHNlbGVjdCBpdGVtcyBsaXN0XG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gU2V0IGluIHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBteUN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbXlDb21wb25lbnQuY3VzdG9tVGVtcGxhdGU7XG4gICAgICogbXlDb21wb25lbnQuc2VsZWN0LmZvb3RlclRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LXNlbGVjdCAjc2VsZWN0PlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4U2VsZWN0Rm9vdGVyPlxuICAgICAqICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RfX2Zvb3RlclwiPlxuICAgICAqICAgICAgICAgICAgICBUaGlzIGlzIGEgY3VzdG9tIGZvb3RlclxuICAgICAqICAgICAgICAgIDwvZGl2PlxuICAgICAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgPC9pZ3gtc2VsZWN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4U2VsZWN0Rm9vdGVyRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGZvb3RlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcblxuICAgIEBDb250ZW50Q2hpbGQoSWd4SGludERpcmVjdGl2ZSwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgaGludEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2lkdGg6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCBkbyBub3QgdXNlIHRoZSBkcm9wLWRvd24gY29udGFpbmVyIGNsYXNzICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNzc0NsYXNzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWxsb3dJdGVtc0ZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgaGVpZ2h0OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIG5nQ29udHJvbDogTmdDb250cm9sID0gbnVsbDtcbiAgICBwcml2YXRlIF9vdmVybGF5RGVmYXVsdHM6IE92ZXJsYXlTZXR0aW5ncztcbiAgICBwcml2YXRlIF92YWx1ZTogYW55O1xuICAgIHByaXZhdGUgX3R5cGUgPSBudWxsO1xuICAgIHByaXZhdGUgX2ljb25zID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnZXhwYW5kJyxcbiAgICAgICAgICAgIGZhbWlseTogJ2NvbWJvJyxcbiAgICAgICAgICAgIHJlZjogbmV3IE1hcChPYmplY3QuZW50cmllcyh7XG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsJzoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXhwYW5kX21vcmUnLFxuICAgICAgICAgICAgICAgICAgICBmYW1pbHk6ICdtYXRlcmlhbCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYWxsJzoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYXJyb3dfZHJvcF9kb3duJyxcbiAgICAgICAgICAgICAgICAgICAgZmFtaWx5OiAnbWF0ZXJpYWwnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdjb2xsYXBzZScsXG4gICAgICAgICAgICBmYW1pbHk6ICdjb21ibycsXG4gICAgICAgICAgICByZWY6IG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoe1xuICAgICAgICAgICAgICAgICdtYXRlcmlhbCc6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2V4cGFuZF9sZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgZmFtaWx5OiAnbWF0ZXJpYWwnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2FsbCc6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Fycm93X2Ryb3BfdXAnLFxuICAgICAgICAgICAgICAgICAgICBmYW1pbHk6ICdtYXRlcmlhbCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGNvbXBvbmVudCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgc2VsZWN0VmFsdWUgPSB0aGlzLnNlbGVjdC52YWx1ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBzZXRcbiAgICAgKiB0aGlzLnNlbGVjdC52YWx1ZSA9ICdMb25kb24nO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNlbGVjdCBbdmFsdWVdPVwidmFsdWVcIj48L2lneC1zZWxlY3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlID09PSB2KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbih0aGlzLml0ZW1zLmZpbmQoeCA9PiB4LnZhbHVlID09PSB0aGlzLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBob3cgdGhlIHNlbGVjdCB3aWxsIGJlIHN0eWxlZC5cbiAgICAgKiBUaGUgYWxsb3dlZCB2YWx1ZXMgYXJlIGBsaW5lYCwgYGJveGAgYW5kIGBib3JkZXJgLiBUaGUgaW5wdXQtZ3JvdXAgZGVmYXVsdCBpcyBgbGluZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2VsZWN0IFt0eXBlXT1cIidib3gnXCI+PC9pZ3gtc2VsZWN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB0eXBlKCk6IElneElucHV0R3JvdXBUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgfHwgdGhpcy5faW5wdXRHcm91cFR5cGUgfHwgJ2xpbmUnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdHlwZSh2YWw6IElneElucHV0R3JvdXBUeXBlKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBzZWxlY3Rpb25WYWx1ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZEl0ZW07XG4gICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW0gPyBzZWxlY3RlZEl0ZW0uaXRlbVRleHQgOiAnJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHNlbGVjdGVkSXRlbSgpOiBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmZpcnN0X2l0ZW0odGhpcy5pZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIGRvY3VtZW50OiBhbnksXG4gICAgICAgIHNlbGVjdGlvbjogSWd4U2VsZWN0aW9uQVBJU2VydmljZSxcbiAgICAgICAgQEluamVjdChJZ3hPdmVybGF5U2VydmljZSkgcHJvdGVjdGVkIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfSU5QVVRfR1JPVVBfVFlQRSkgcHJpdmF0ZSBfaW5wdXRHcm91cFR5cGU6IElneElucHV0R3JvdXBUeXBlLFxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSWd4SWNvblNlcnZpY2UpXG4gICAgICAgIHByb3RlY3RlZCBpY29uU2VydmljZT86IElneEljb25TZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmLCBjZHIsIGRvY3VtZW50LCBzZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIC8vI3JlZ2lvbiBDb250cm9sVmFsdWVBY2Nlc3NvclxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUgPSAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0RWRpdEVsZW1lbnQoKTogSFRNTElucHV0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNlbGVjdEl0ZW0obmV3U2VsZWN0aW9uOiBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlLCBldmVudD8pIHtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5zZWxlY3RlZEl0ZW0gPz8gPElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmU+e307XG5cbiAgICAgICAgaWYgKG5ld1NlbGVjdGlvbiA9PT0gbnVsbCB8fCBuZXdTZWxlY3Rpb24uZGlzYWJsZWQgfHwgbmV3U2VsZWN0aW9uLmlzSGVhZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3U2VsZWN0aW9uID09PSBvbGRTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRGlyZWN0aXZlLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzOiBJU2VsZWN0aW9uRXZlbnRBcmdzID0geyBvbGRTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbiwgY2FuY2VsOiBmYWxzZSwgb3duZXI6IHRoaXMgfTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuXG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdTZWxlY3Rpb24udmFsdWU7XG5cbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZURpcmVjdGl2ZS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXRGaXJzdEl0ZW1FbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZmlyc3QuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBzZWxlY3RcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnNlbGVjdC5vcGVuKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG9wZW4ob3ZlcmxheVNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUZpcnN0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5vcGVuKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX292ZXJsYXlEZWZhdWx0cywgdGhpcy5vdmVybGF5U2V0dGluZ3MsIG92ZXJsYXlTZXR0aW5ncykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnB1dEdyb3VwQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIG92ZXJsYXlTZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncykge1xuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGlmICh0aGlzLmhpbnRFbGVtZW50ICYmIHRhcmdldEVsZW1lbnQuY29udGFpbnModGhpcy5oaW50RWxlbWVudC5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9nZ2xlKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX292ZXJsYXlEZWZhdWx0cywgdGhpcy5vdmVybGF5U2V0dGluZ3MsIG92ZXJsYXlTZXR0aW5ncykpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlEZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIHRhcmdldDogdGhpcy5nZXRFZGl0RWxlbWVudCgpLFxuICAgICAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogbmV3IFNlbGVjdFBvc2l0aW9uaW5nU3RyYXRlZ3kodGhpcyksXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogbmV3IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIGV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrOiBbdGhpcy5pbnB1dEdyb3VwLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudF1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2hhbmdlcyQgPSB0aGlzLmNoaWxkcmVuLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbih0aGlzLml0ZW1zLmZpbmQoeCA9PiB4LnZhbHVlID09PSB0aGlzLnZhbHVlKSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghY2hhbmdlcyQuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlcnNcbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZU9wZW5pbmcoZTogVG9nZ2xlVmlld0NhbmNlbGFibGVFdmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3QgYXJnczogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyA9IHsgb3duZXI6IHRoaXMsIGV2ZW50OiBlLmV2ZW50LCBjYW5jZWw6IGUuY2FuY2VsIH07XG4gICAgICAgIHRoaXMub3BlbmluZy5lbWl0KGFyZ3MpO1xuXG4gICAgICAgIGUuY2FuY2VsID0gYXJncy5jYW5jZWw7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIG9uVG9nZ2xlQ29udGVudEFwcGVuZGVkKGV2ZW50OiBUb2dnbGVWaWV3RXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLmdldE92ZXJsYXlCeUlkKGV2ZW50LmlkKTtcbiAgICAgICAgaWYgKGluZm8/LnNldHRpbmdzPy5wb3NpdGlvblN0cmF0ZWd5IGluc3RhbmNlb2YgU2VsZWN0UG9zaXRpb25pbmdTdHJhdGVneSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm9uVG9nZ2xlQ29udGVudEFwcGVuZGVkKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlT3BlbmVkKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1Gb2N1cygpO1xuICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgb3duZXI6IHRoaXMgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUNsb3NpbmcoZTogVG9nZ2xlVmlld0NhbmNlbGFibGVFdmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3QgYXJnczogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyA9IHsgb3duZXI6IHRoaXMsIGV2ZW50OiBlLmV2ZW50LCBjYW5jZWw6IGUuY2FuY2VsIH07XG4gICAgICAgIHRoaXMuY2xvc2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVDbG9zZWQoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGZhbHNlKTtcbiAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnZhbGlkID0gSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWxpZCA9IElneElucHV0U3RhdGUuSU5JVElBTDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvbkZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuX2luamVjdG9yLmdldDxOZ0NvbnRyb2w+KE5nQ29udHJvbCwgbnVsbCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpY29uIG9mIHRoaXMuX2ljb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuaW5wdXRHcm91cD8udGhlbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwibWF0ZXJpYWxcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pY29uU2VydmljZT8uYWRkSWNvblJlZihcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb24uZmFtaWx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbi5yZWYuZ2V0KFwibWF0ZXJpYWxcIiksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaWNvblNlcnZpY2U/LmFkZEljb25SZWYoXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uLmZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb24ucmVmLmdldChcImFsbFwiKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUodGhpcy5vblN0YXR1c0NoYW5nZWQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLm1hbmFnZVJlcXVpcmVkQXN0ZXJpc2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwICYmIHRoaXMucHJlZml4ZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cC5wcmVmaXhlcyA9IHRoaXMucHJlZml4ZXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwICYmIHRoaXMuc3VmZml4ZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cC5zdWZmaXhlcyA9IHRoaXMuc3VmZml4ZXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHRvZ2dsZUljb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2VkID8gJ2V4cGFuZCcgOiAnY29sbGFwc2UnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogUHJldmVudCBpbnB1dCBibHVyIC0gY2xvc2luZyB0aGUgaXRlbXMgY29udGFpbmVyIG9uIEhlYWRlci9Gb290ZXIgVGVtcGxhdGUgY2xpY2suXG4gICAgICovXG4gICAgcHVibGljIG1vdXNlZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25TdGF0dXNDaGFuZ2VkKCkge1xuICAgICAgICB0aGlzLm1hbmFnZVJlcXVpcmVkQXN0ZXJpc2soKTtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sICYmICF0aGlzLmRpc2FibGVkICYmIHRoaXMuaXNUb3VjaGVkT3JEaXJ0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzVmFsaWRhdG9ycyAmJiB0aGlzLmlucHV0R3JvdXAuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC52YWxpZCA9IHRoaXMubmdDb250cm9sLnZhbGlkID8gSWd4SW5wdXRTdGF0ZS5WQUxJRCA6IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQi5QLiAxOCBNYXkgMjAyMTogSWd4RGF0ZVBpY2tlciBkb2VzIG5vdCByZXNldCBpdHMgc3RhdGUgdXBvbiByZXNldEZvcm0gIzk1MjZcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnZhbGlkID0gdGhpcy5uZ0NvbnRyb2wudmFsaWQgPyBJZ3hJbnB1dFN0YXRlLklOSVRJQUwgOiBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnZhbGlkID0gSWd4SW5wdXRTdGF0ZS5JTklUSUFMO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNUb3VjaGVkT3JEaXJ0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLm5nQ29udHJvbC5jb250cm9sLnRvdWNoZWQgfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5kaXJ0eSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaGFzVmFsaWRhdG9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICghIXRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yIHx8ICEhdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG5hdmlnYXRlKGRpcmVjdGlvbjogTmF2aWdhdGUsIGN1cnJlbnRJbmRleD86IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtLml0ZW1JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmF2aWdhdGUoZGlyZWN0aW9uLCBjdXJyZW50SW5kZXgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBtYW5hZ2VSZXF1aXJlZEFzdGVyaXNrKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBoYXNSZXF1aXJlZEhUTUxBdHRyaWJ1dGUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3JlcXVpcmVkJyk7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgICAgICAgLy8gUnVuIHRoZSB2YWxpZGF0aW9uIHdpdGggZW1wdHkgb2JqZWN0IHRvIGNoZWNrIGlmIHJlcXVpcmVkIGlzIGVuYWJsZWQuXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKHt9IGFzIEFic3RyYWN0Q29udHJvbCk7XG4gICAgICAgICAgICB0aGlzLmlucHV0R3JvdXAuaXNSZXF1aXJlZCA9IGVycm9yICYmIGVycm9yLnJlcXVpcmVkO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgICAgIC8vIElmIHZhbGlkYXRvciBpcyBkeW5hbWljYWxseSBjbGVhcmVkIGFuZCBubyByZXF1aXJlZCBIVE1MIGF0dHJpYnV0ZSBpcyBzZXQsXG4gICAgICAgICAgICAvLyByZXNldCBsYWJlbCdzIHJlcXVpcmVkIGNsYXNzKGFzdGVyaXNrKSBhbmQgSWd4SW5wdXRTdGF0ZSAjNjg5NlxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRHcm91cC5pc1JlcXVpcmVkICYmIHRoaXMubmdDb250cm9sICYmICF0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvciAmJiAhaGFzUmVxdWlyZWRIVE1MQXR0cmlidXRlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnZhbGlkID0gSWd4SW5wdXRTdGF0ZS5JTklUSUFMO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwLmlzUmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZWxlY3Rpb24oaXRlbTogSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZSkge1xuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXRlbS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0KHRoaXMuaWQsIG5ldyBTZXQoW2l0ZW1dKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcih0aGlzLmlkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuIiwiPGlneC1pbnB1dC1ncm91cCAjaW5wdXRHcm91cCBjbGFzcz1cImlucHV0LWdyb3VwXCIgKGNsaWNrKT1cImlucHV0R3JvdXBDbGljaygkZXZlbnQpXCIgW3R5cGVdPVwidHlwZVwiPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJbaWd4TGFiZWxdXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hMYWJlbF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1wcmVmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXByZWZpeCxbaWd4UHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8aW5wdXQgI2lucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwidGV4dFwiIGlneElucHV0IFtpZ3hTZWxlY3RJdGVtTmF2aWdhdGlvbl09XCJ0aGlzXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgcmVhZG9ubHk9XCJ0cnVlXCJcbiAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwidGhpcy5wbGFjZWhvbGRlclwiXG4gICAgICAgIFt2YWx1ZV09XCJ0aGlzLnNlbGVjdGlvblZhbHVlXCJcbiAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidGhpcy5sYWJlbD8uaWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiF0aGlzLmNvbGxhcHNlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtb3duc109XCJ0aGlzLmxpc3RJZFwiXG4gICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCIhdGhpcy5jb2xsYXBzZWQgPyB0aGlzLmZvY3VzZWRJdGVtPy5pZCA6IG51bGxcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgIC8+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1zdWZmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXN1ZmZpeCxbaWd4U3VmZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8aWd4LXN1ZmZpeCBjbGFzcz1cImlneC1zZWxlY3RfX3RvZ2dsZS1idXR0b25cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvZ2dsZUljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvZ2dsZUljb25UZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogdGhpcy5jb2xsYXBzZWR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8aWd4LWljb24gKm5nSWY9XCIhdG9nZ2xlSWNvblRlbXBsYXRlXCIgZmFtaWx5PVwiY29tYm9cIiBbbmFtZV09XCJ0b2dnbGVJY29uXCI+PC9pZ3gtaWNvbj5cbiAgICA8L2lneC1zdWZmaXg+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1oaW50LCBbaWd4SGludF1cIiA+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1oaW50LCBbaWd4SGludF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2lneC1pbnB1dC1ncm91cD5cbjxkaXYgaWd4VG9nZ2xlIGNsYXNzPVwiaWd4LWRyb3AtZG93bl9fbGlzdFwiIChtb3VzZWRvd24pPVwibW91c2Vkb3duSGFuZGxlcigkZXZlbnQpO1wiXG4gICAgKGFwcGVuZGVkKT1cIm9uVG9nZ2xlQ29udGVudEFwcGVuZGVkKCRldmVudClcIlxuICAgIChvcGVuaW5nKT1cImhhbmRsZU9wZW5pbmcoJGV2ZW50KVwiXG4gICAgKG9wZW5lZCk9XCJoYW5kbGVPcGVuZWQoKVwiXG4gICAgKGNsb3NpbmcpPVwiaGFuZGxlQ2xvc2luZygkZXZlbnQpXCJcbiAgICAoY2xvc2VkKT1cImhhbmRsZUNsb3NlZCgpXCI+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyVGVtcGxhdGVcIiBjbGFzcz1cImlneC1kcm9wLWRvd25fX3NlbGVjdC1oZWFkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gIzc0MzYgTE1CIHNjcm9sbGluZyBjbG9zZXMgaXRlbXMgY29udGFpbmVyIC0gdW5zZWxlY3RhYmxlIGF0dHJpYnV0ZSBpcyBJRSBzcGVjaWZpYyAgLS0+XG4gICAgPGRpdiAjc2Nyb2xsQ29udGFpbmVyIGNsYXNzPVwiaWd4LWRyb3AtZG93bl9fbGlzdC1zY3JvbGxcIiB1bnNlbGVjdGFibGU9XCJvblwiIFtzdHlsZS5tYXhIZWlnaHRdPVwibWF4SGVpZ2h0XCJcbiAgICAgICAgW2F0dHIuaWRdPVwidGhpcy5saXN0SWRcIiByb2xlPVwibGlzdGJveFwiIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0aGlzLmxhYmVsPy5pZFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc2VsZWN0LWl0ZW0sIGlneC1zZWxlY3QtaXRlbS1ncm91cFwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJmb290ZXJUZW1wbGF0ZVwiIGNsYXNzPVwiaWd4LWRyb3AtZG93bl9fc2VsZWN0LWZvb3RlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
593
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJSCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBRU4sS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25FLE9BQU8sRUFBeUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFpQyxNQUFNLCtCQUErQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRTdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlC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LEVBQUUsS0FBSyxFQUFFO2dCQXdCckUsY0FBYztzQkFEcEIsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHZCxXQUFXO3NCQUF4RSxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFrRXpDLEtBQUs7c0JBRGYsS0FBSztnQkFvQkssSUFBSTtzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRWRpdG9yUHJvdmlkZXIgfSBmcm9tICcuLi9jb3JlL2VkaXQtcHJvdmlkZXInO1xuaW1wb3J0IHsgSWd4U2VsZWN0aW9uQVBJU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VsZWN0aW9uJztcbmltcG9ydCB7IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MsIElCYXNlRXZlbnRBcmdzIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hMYWJlbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvbGFiZWwvbGFiZWwuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLWl0ZW0uYmFzZSc7XG5pbXBvcnQgeyBJR1hfRFJPUERPV05fQkFTRSwgSVNlbGVjdGlvbkV2ZW50QXJncywgTmF2aWdhdGUgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvaW5wdXQtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9vdmVybGF5L3Njcm9sbC9hYnNvbHV0ZS1zY3JvbGwtc3RyYXRlZ3knO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vc2VydmljZXMvb3ZlcmxheS91dGlsaXRpZXMnO1xuaW1wb3J0IHsgSWd4RHJvcERvd25Db21wb25lbnQgfSBmcm9tICcuLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IElneFNlbGVjdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3NlbGVjdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RQb3NpdGlvbmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi9zZWxlY3QtcG9zaXRpb25pbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgSWd4U2VsZWN0QmFzZSB9IGZyb20gJy4vc2VsZWN0LmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hIaW50RGlyZWN0aXZlLCBJZ3hJbnB1dEdyb3VwVHlwZSwgSWd4UHJlZml4RGlyZWN0aXZlLCBJR1hfSU5QVVRfR1JPVVBfVFlQRSB9IGZyb20gJy4uL2lucHV0LWdyb3VwL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgVG9nZ2xlVmlld0NhbmNlbGFibGVFdmVudEFyZ3MsIFRvZ2dsZVZpZXdFdmVudEFyZ3MsIElneFRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4T3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9vdmVybGF5L292ZXJsYXknO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4U3VmZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9zdWZmaXgvc3VmZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3RJdGVtTmF2aWdhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vc2VsZWN0LW5hdmlnYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlLCBJZ3hJbnB1dFN0YXRlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SWNvblNlcnZpY2UgfSBmcm9tICcuLi9pY29uL2ljb24uc2VydmljZSc7XG5cbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4U2VsZWN0VG9nZ2xlSWNvbl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4U2VsZWN0VG9nZ2xlSWNvbkRpcmVjdGl2ZSB7XG59XG5cbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4U2VsZWN0SGVhZGVyXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTZWxlY3RIZWFkZXJEaXJlY3RpdmUge1xufVxuXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneFNlbGVjdEZvb3Rlcl0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4U2VsZWN0Rm9vdGVyRGlyZWN0aXZlIHtcbn1cblxuLyoqXG4gKiAqKklnbml0ZSBVSSBmb3IgQW5ndWxhciBTZWxlY3QqKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvc2VsZWN0KVxuICpcbiAqIFRoZSBgaWd4U2VsZWN0YCBwcm92aWRlcyBhbiBpbnB1dCB3aXRoIGRyb3Bkb3duIGxpc3QgYWxsb3dpbmcgc2VsZWN0aW9uIG9mIGEgc2luZ2xlIGl0ZW0uXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtc2VsZWN0ICNzZWxlY3QxIFtwbGFjZWhvbGRlcl09XCInUGljayBPbmUnXCI+XG4gKiAgIDxsYWJlbCBpZ3hMYWJlbD5TZWxlY3QgTGFiZWw8L2xhYmVsPlxuICogICA8aWd4LXNlbGVjdC1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCIgW3ZhbHVlXT1cIml0ZW0uZmllbGRcIj5cbiAqICAgICB7eyBpdGVtLmZpZWxkIH19XG4gKiAgIDwvaWd4LXNlbGVjdC1pdGVtPlxuICogPC9pZ3gtc2VsZWN0PlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBJZ3hTZWxlY3RDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX0RST1BET1dOX0JBU0UsIHVzZUV4aXN0aW5nOiBJZ3hTZWxlY3RDb21wb25lbnQgfVxuICAgIF0sXG4gICAgc3R5bGVzOiBbYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgIGBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0lneElucHV0R3JvdXBDb21wb25lbnQsIElneElucHV0RGlyZWN0aXZlLCBJZ3hTZWxlY3RJdGVtTmF2aWdhdGlvbkRpcmVjdGl2ZSwgSWd4U3VmZml4RGlyZWN0aXZlLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBJZ3hJY29uQ29tcG9uZW50LCBJZ3hUb2dnbGVEaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIElneFNlbGVjdENvbXBvbmVudCBleHRlbmRzIElneERyb3BEb3duQ29tcG9uZW50IGltcGxlbWVudHMgSWd4U2VsZWN0QmFzZSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEVkaXRvclByb3ZpZGVyLCBBZnRlckNvbnRlbnRDaGVja2VkIHtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXAnLCB7IHJlYWQ6IElneElucHV0R3JvdXBDb21wb25lbnQsIHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgaW5wdXRHcm91cDogSWd4SW5wdXRHcm91cENvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyByZWFkOiBJZ3hJbnB1dERpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBpbnB1dDogSWd4SW5wdXREaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gSWd4U2VsZWN0SXRlbUNvbXBvbmVudCksIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2hpbGRyZW46IFF1ZXJ5TGlzdDxJZ3hTZWxlY3RJdGVtQ29tcG9uZW50PjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4UHJlZml4RGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIHByZWZpeGVzOiBRdWVyeUxpc3Q8SWd4UHJlZml4RGlyZWN0aXZlPjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4U3VmZml4RGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIHN1ZmZpeGVzOiBRdWVyeUxpc3Q8SWd4U3VmZml4RGlyZWN0aXZlPjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hMYWJlbERpcmVjdGl2ZSksIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBsYWJlbDogSWd4TGFiZWxEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGlucHV0IHBsYWNlaG9sZGVyLlxuICAgICAqXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyO1xuXG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgY29tcG9uZW50LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNlbGVjdCBbZGlzYWJsZWRdPVwiJ3RydWUnXCI+PC9pZ3gtc2VsZWN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgY3VzdG9tIE92ZXJsYXlTZXR0aW5ncyBgSWd4U2VsZWN0Q29tcG9uZW50YC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zZWxlY3QgW292ZXJsYXlTZXR0aW5nc10gPSBcImN1c3RvbU92ZXJsYXlTZXR0aW5nc1wiPjwvaWd4LXNlbGVjdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWF4SGVpZ2h0JylcbiAgICBwdWJsaWMgb3ZlcnJpZGUgbWF4SGVpZ2h0ID0gJzI1NnB4JztcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYmVmb3JlIHRoZSBkcm9wZG93biBpcyBvcGVuZWRcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNlbGVjdCBvcGVuaW5nPSdoYW5kbGVPcGVuaW5nKCRldmVudCknPjwvaWd4LXNlbGVjdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgb3BlbmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgdGhlIGRyb3Bkb3duIGlzIG9wZW5lZFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2VsZWN0IChvcGVuZWQpPSdoYW5kbGVPcGVuZWQoJGV2ZW50KSc+PC9pZ3gtc2VsZWN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBvcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElCYXNlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCBiZWZvcmUgdGhlIGRyb3Bkb3duIGlzIGNsb3NlZFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2VsZWN0IChjbG9zaW5nKT0naGFuZGxlQ2xvc2luZygkZXZlbnQpJz48L2lneC1zZWxlY3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNsb3NpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIGFmdGVyIHRoZSBkcm9wZG93biBpcyBjbG9zZWRcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNlbGVjdCAoY2xvc2VkKT0naGFuZGxlQ2xvc2VkKCRldmVudCknPjwvaWd4LXNlbGVjdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gdGVtcGxhdGUsIGlmIGFueSwgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmluZyB0aGUgc2VsZWN0IFRPR0dMRShvcGVuL2Nsb3NlKSBidXR0b25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5zZWxlY3QudG9nZ2xlSWNvblRlbXBsYXRlID0gbXlDdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLSBTZXQgaW4gbWFya3VwIC0tPlxuICAgICAqICA8aWd4LXNlbGVjdCAjc2VsZWN0PlxuICAgICAqICAgICAgLi4uXG4gICAgICogICAgICA8bmctdGVtcGxhdGUgaWd4U2VsZWN0VG9nZ2xlSWNvbiBsZXQtY29sbGFwc2VkPlxuICAgICAqICAgICAgICAgIDxpZ3gtaWNvbj57eyBjb2xsYXBzZWQgPyAncmVtb3ZlX2NpcmNsZScgOiAncmVtb3ZlX2NpcmNsZV9vdXRsaW5lJ319PC9pZ3gtaWNvbj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LXNlbGVjdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFNlbGVjdFRvZ2dsZUljb25EaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgdG9nZ2xlSWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gdGVtcGxhdGUsIGlmIGFueSwgdGhhdCBzaG91bGQgYmUgdXNlZCB3aGVuIHJlbmRlcmluZyB0aGUgSEVBREVSIGZvciB0aGUgc2VsZWN0IGl0ZW1zIGxpc3RcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXQgaW4gdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Q3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBteUNvbXBvbmVudC5jdXN0b21UZW1wbGF0ZTtcbiAgICAgKiBteUNvbXBvbmVudC5zZWxlY3QuaGVhZGVyVGVtcGxhdGUgPSBteUN1c3RvbVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCBpbiBtYXJrdXAgLS0+XG4gICAgICogIDxpZ3gtc2VsZWN0ICNzZWxlY3Q+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hTZWxlY3RIZWFkZXI+XG4gICAgICogICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdF9faGVhZGVyXCI+XG4gICAgICogICAgICAgICAgICAgIFRoaXMgaXMgYSBjdXN0b20gaGVhZGVyXG4gICAgICogICAgICAgICAgPC9kaXY+XG4gICAgICogICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICA8L2lneC1zZWxlY3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hTZWxlY3RIZWFkZXJEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgaGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGN1c3RvbSB0ZW1wbGF0ZSwgaWYgYW55LCB0aGF0IHNob3VsZCBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRoZSBGT09URVIgZm9yIHRoZSBzZWxlY3QgaXRlbXMgbGlzdFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIFNldCBpbiB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlDdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG15Q29tcG9uZW50LmN1c3RvbVRlbXBsYXRlO1xuICAgICAqIG15Q29tcG9uZW50LnNlbGVjdC5mb290ZXJUZW1wbGF0ZSA9IG15Q3VzdG9tVGVtcGxhdGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDwhLS0gU2V0IGluIG1hcmt1cCAtLT5cbiAgICAgKiAgPGlneC1zZWxlY3QgI3NlbGVjdD5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICAgICAgPG5nLXRlbXBsYXRlIGlneFNlbGVjdEZvb3Rlcj5cbiAgICAgKiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0X19mb290ZXJcIj5cbiAgICAgKiAgICAgICAgICAgICAgVGhpcyBpcyBhIGN1c3RvbSBmb290ZXJcbiAgICAgKiAgICAgICAgICA8L2Rpdj5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogIDwvaWd4LXNlbGVjdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFNlbGVjdEZvb3RlckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cbiAgICBAQ29udGVudENoaWxkKElneEhpbnREaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIGhpbnRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIHdpZHRoOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgZG8gbm90IHVzZSB0aGUgZHJvcC1kb3duIGNvbnRhaW5lciBjbGFzcyAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjc3NDbGFzcyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGFsbG93SXRlbXNGb2N1cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGhlaWdodDogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheURlZmF1bHRzOiBPdmVybGF5U2V0dGluZ3M7XG4gICAgcHJpdmF0ZSBfdmFsdWU6IGFueTtcbiAgICBwcml2YXRlIF90eXBlID0gbnVsbDtcbiAgICBwcml2YXRlIF9pY29ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2lucHV0X2V4cGFuZCcsXG4gICAgICAgICAgICBmYW1pbHk6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgIHJlZjogbmV3IE1hcChPYmplY3QuZW50cmllcyh7XG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsJzoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXhwYW5kX21vcmUnLFxuICAgICAgICAgICAgICAgICAgICBmYW1pbHk6ICdtYXRlcmlhbCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYWxsJzoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYXJyb3dfZHJvcF9kb3duJyxcbiAgICAgICAgICAgICAgICAgICAgZmFtaWx5OiAnbWF0ZXJpYWwnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdpbnB1dF9jb2xsYXBzZScsXG4gICAgICAgICAgICBmYW1pbHk6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgIHJlZjogbmV3IE1hcChPYmplY3QuZW50cmllcyh7XG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsJzoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXhwYW5kX2xlc3MnLFxuICAgICAgICAgICAgICAgICAgICBmYW1pbHk6ICdtYXRlcmlhbCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYWxsJzoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYXJyb3dfZHJvcF91cCcsXG4gICAgICAgICAgICAgICAgICAgIGZhbWlseTogJ21hdGVyaWFsJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG4gICAgXTtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgY29tcG9uZW50IHZhbHVlLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBzZWxlY3RWYWx1ZSA9IHRoaXMuc2VsZWN0LnZhbHVlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIHNldFxuICAgICAqIHRoaXMuc2VsZWN0LnZhbHVlID0gJ0xvbmRvbic7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2VsZWN0IFt2YWx1ZV09XCJ2YWx1ZVwiPjwvaWd4LXNlbGVjdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5fdmFsdWUgPT09IHYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHRoaXMuaXRlbXMuZmluZCh4ID0+IHgudmFsdWUgPT09IHRoaXMudmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGhvdyB0aGUgc2VsZWN0IHdpbGwgYmUgc3R5bGVkLlxuICAgICAqIFRoZSBhbGxvd2VkIHZhbHVlcyBhcmUgYGxpbmVgLCBgYm94YCBhbmQgYGJvcmRlcmAuIFRoZSBpbnB1dC1ncm91cCBkZWZhdWx0IGlzIGBsaW5lYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zZWxlY3QgW3R5cGVdPVwiJ2JveCdcIj48L2lneC1zZWxlY3Q+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHR5cGUoKTogSWd4SW5wdXRHcm91cFR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSB8fCB0aGlzLl9pbnB1dEdyb3VwVHlwZSB8fCAnbGluZSc7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB0eXBlKHZhbDogSWd4SW5wdXRHcm91cFR5cGUpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGlvblZhbHVlKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbSA/IHNlbGVjdGVkSXRlbS5pdGVtVGV4dCA6ICcnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc2VsZWN0ZWRJdGVtKCk6IElneFNlbGVjdEl0ZW1Db21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uZmlyc3RfaXRlbSh0aGlzLmlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQ6IGFueSxcbiAgICAgICAgc2VsZWN0aW9uOiBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KElneE92ZXJsYXlTZXJ2aWNlKSBwcm90ZWN0ZWQgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElHWF9JTlBVVF9HUk9VUF9UWVBFKSBwcml2YXRlIF9pbnB1dEdyb3VwVHlwZTogSWd4SW5wdXRHcm91cFR5cGUsXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJZ3hJY29uU2VydmljZSlcbiAgICAgICAgcHJvdGVjdGVkIGljb25TZXJ2aWNlPzogSWd4SWNvblNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGNkciwgZG9jdW1lbnQsIHNlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSA9ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2VsZWN0SXRlbShuZXdTZWxlY3Rpb246IElneERyb3BEb3duSXRlbUJhc2VEaXJlY3RpdmUsIGV2ZW50Pykge1xuICAgICAgICBjb25zdCBvbGRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGVkSXRlbSA/PyA8SWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZT57fTtcblxuICAgICAgICBpZiAobmV3U2VsZWN0aW9uID09PSBudWxsIHx8IG5ld1NlbGVjdGlvbi5kaXNhYmxlZCB8fCBuZXdTZWxlY3Rpb24uaXNIZWFkZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdTZWxlY3Rpb24gPT09IG9sZFNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVEaXJlY3RpdmUuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElTZWxlY3Rpb25FdmVudEFyZ3MgPSB7IG9sZFNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLCBjYW5jZWw6IGZhbHNlLCBvd25lcjogdGhpcyB9O1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG5cbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IG5ld1NlbGVjdGlvbi52YWx1ZTtcblxuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRGlyZWN0aXZlLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldEZpcnN0SXRlbUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5maXJzdC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgdGhlIHNlbGVjdFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuc2VsZWN0Lm9wZW4oKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgb3BlbihvdmVybGF5U2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5pdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlRmlyc3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLm9wZW4oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fb3ZlcmxheURlZmF1bHRzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncywgb3ZlcmxheVNldHRpbmdzKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlucHV0R3JvdXBDbGljayhldmVudDogTW91c2VFdmVudCwgb3ZlcmxheVNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuaGludEVsZW1lbnQgJiYgdGFyZ2V0RWxlbWVudC5jb250YWlucyh0aGlzLmhpbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2dnbGUoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fb3ZlcmxheURlZmF1bHRzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncywgb3ZlcmxheVNldHRpbmdzKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheURlZmF1bHRzID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLmdldEVkaXRFbGVtZW50KCksXG4gICAgICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgU2VsZWN0UG9zaXRpb25pbmdTdHJhdGVneSh0aGlzKSxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSgpLFxuICAgICAgICAgICAgZXhjbHVkZUZyb21PdXRzaWRlQ2xpY2s6IFt0aGlzLmlucHV0R3JvdXAuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50XVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjaGFuZ2VzJCA9IHRoaXMuY2hpbGRyZW4uY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHRoaXMuaXRlbXMuZmluZCh4ID0+IHgudmFsdWUgPT09IHRoaXMudmFsdWUpKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2VzJC5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBoYW5kbGVyc1xuICAgICAqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaGFuZGxlT3BlbmluZyhlOiBUb2dnbGVWaWV3Q2FuY2VsYWJsZUV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZS5jYW5jZWwgfTtcbiAgICAgICAgdGhpcy5vcGVuaW5nLmVtaXQoYXJncyk7XG5cbiAgICAgICAgZS5jYW5jZWwgPSBhcmdzLmNhbmNlbDtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgb25Ub2dnbGVDb250ZW50QXBwZW5kZWQoZXZlbnQ6IFRvZ2dsZVZpZXdFdmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMub3ZlcmxheVNlcnZpY2UuZ2V0T3ZlcmxheUJ5SWQoZXZlbnQuaWQpO1xuICAgICAgICBpZiAoaW5mbz8uc2V0dGluZ3M/LnBvc2l0aW9uU3RyYXRlZ3kgaW5zdGFuY2VvZiBTZWxlY3RQb3NpdGlvbmluZ1N0cmF0ZWd5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIub25Ub2dnbGVDb250ZW50QXBwZW5kZWQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVPcGVuZWQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSXRlbUZvY3VzKCk7XG4gICAgICAgIHRoaXMub3BlbmVkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlQ2xvc2luZyhlOiBUb2dnbGVWaWV3Q2FuY2VsYWJsZUV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZS5jYW5jZWwgfTtcbiAgICAgICAgdGhpcy5jbG9zaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGUuY2FuY2VsID0gYXJncy5jYW5jZWw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUNsb3NlZCgpIHtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oZmFsc2UpO1xuICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KHsgb3duZXI6IHRoaXMgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sICYmIHRoaXMubmdDb250cm9sLmludmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LnZhbGlkID0gSWd4SW5wdXRTdGF0ZS5JTklUSUFMO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubmdDb250cm9sID0gdGhpcy5faW5qZWN0b3IuZ2V0PE5nQ29udHJvbD4oTmdDb250cm9sLCBudWxsKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGljb24gb2YgdGhpcy5faWNvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5pbnB1dEdyb3VwPy50aGVtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtYXRlcmlhbFwiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmljb25TZXJ2aWNlPy5hZGRJY29uUmVmKFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbi5mYW1pbHksXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uLnJlZi5nZXQoXCJtYXRlcmlhbFwiKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pY29uU2VydmljZT8uYWRkSWNvblJlZihcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb24uZmFtaWx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbi5yZWYuZ2V0KFwiYWxsXCIpLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh0aGlzLm9uU3RhdHVzQ2hhbmdlZC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlUmVxdWlyZWRBc3RlcmlzaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0R3JvdXAgJiYgdGhpcy5wcmVmaXhlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwLnByZWZpeGVzID0gdGhpcy5wcmVmaXhlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlucHV0R3JvdXAgJiYgdGhpcy5zdWZmaXhlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwLnN1ZmZpeGVzID0gdGhpcy5zdWZmaXhlcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgdG9nZ2xlSWNvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xsYXBzZWQgPyAnaW5wdXRfZXhwYW5kJyA6ICdpbnB1dF9jb2xsYXBzZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBQcmV2ZW50IGlucHV0IGJsdXIgLSBjbG9zaW5nIHRoZSBpdGVtcyBjb250YWluZXIgb24gSGVhZGVyL0Zvb3RlciBUZW1wbGF0ZSBjbGljay5cbiAgICAgKi9cbiAgICBwdWJsaWMgbW91c2Vkb3duSGFuZGxlcihldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblN0YXR1c0NoYW5nZWQoKSB7XG4gICAgICAgIHRoaXMubWFuYWdlUmVxdWlyZWRBc3RlcmlzaygpO1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wgJiYgIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5pc1RvdWNoZWRPckRpcnR5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNWYWxpZGF0b3JzICYmIHRoaXMuaW5wdXRHcm91cC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnZhbGlkID0gdGhpcy5uZ0NvbnRyb2wudmFsaWQgPyBJZ3hJbnB1dFN0YXRlLlZBTElEIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBCLlAuIDE4IE1heSAyMDIxOiBJZ3hEYXRlUGlja2VyIGRvZXMgbm90IHJlc2V0IGl0cyBzdGF0ZSB1cG9uIHJlc2V0Rm9ybSAjOTUyNlxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsaWQgPSB0aGlzLm5nQ29udHJvbC52YWxpZCA/IElneElucHV0U3RhdGUuSU5JVElBTCA6IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1RvdWNoZWRPckRpcnR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMubmdDb250cm9sLmNvbnRyb2wudG91Y2hlZCB8fCB0aGlzLm5nQ29udHJvbC5jb250cm9sLmRpcnR5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBoYXNWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKCEhdGhpcy5uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IgfHwgISF0aGlzLm5nQ29udHJvbC5jb250cm9sLmFzeW5jVmFsaWRhdG9yKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmF2aWdhdGUoZGlyZWN0aW9uOiBOYXZpZ2F0ZSwgY3VycmVudEluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0uaXRlbUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uYXZpZ2F0ZShkaXJlY3Rpb24sIGN1cnJlbnRJbmRleCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG1hbmFnZVJlcXVpcmVkQXN0ZXJpc2soKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhhc1JlcXVpcmVkSFRNTEF0dHJpYnV0ZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgncmVxdWlyZWQnKTtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sICYmIHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAvLyBSdW4gdGhlIHZhbGlkYXRpb24gd2l0aCBlbXB0eSBvYmplY3QgdG8gY2hlY2sgaWYgcmVxdWlyZWQgaXMgZW5hYmxlZC5cbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3Ioe30gYXMgQWJzdHJhY3RDb250cm9sKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cC5pc1JlcXVpcmVkID0gZXJyb3IgJiYgZXJyb3IucmVxdWlyZWQ7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICAgICAgLy8gSWYgdmFsaWRhdG9yIGlzIGR5bmFtaWNhbGx5IGNsZWFyZWQgYW5kIG5vIHJlcXVpcmVkIEhUTUwgYXR0cmlidXRlIGlzIHNldCxcbiAgICAgICAgICAgIC8vIHJlc2V0IGxhYmVsJ3MgcmVxdWlyZWQgY2xhc3MoYXN0ZXJpc2spIGFuZCBJZ3hJbnB1dFN0YXRlICM2ODk2XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbnB1dEdyb3VwLmlzUmVxdWlyZWQgJiYgdGhpcy5uZ0NvbnRyb2wgJiYgIXRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yICYmICFoYXNSZXF1aXJlZEhUTUxBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgICAgICB0aGlzLmlucHV0R3JvdXAuaXNSZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNlbGVjdGlvbihpdGVtOiBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlKSB7XG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0udmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpdGVtLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXQodGhpcy5pZCwgbmV3IFNldChbaXRlbV0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKHRoaXMuaWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4iLCI8aWd4LWlucHV0LWdyb3VwICNpbnB1dEdyb3VwIGNsYXNzPVwiaW5wdXQtZ3JvdXBcIiAoY2xpY2spPVwiaW5wdXRHcm91cENsaWNrKCRldmVudClcIiBbdHlwZV09XCJ0eXBlXCI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cIltpZ3hMYWJlbF1cIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lneExhYmVsXVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LXByZWZpeFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtcHJlZml4LFtpZ3hQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxpbnB1dCAjaW5wdXQgY2xhc3M9XCJpbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgaWd4SW5wdXQgW2lneFNlbGVjdEl0ZW1OYXZpZ2F0aW9uXT1cInRoaXNcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICByZWFkb25seT1cInRydWVcIlxuICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJ0aGlzLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInRoaXMuc2VsZWN0aW9uVmFsdWVcIlxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0aGlzLmxhYmVsPy5pZFwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIXRoaXMuY29sbGFwc2VkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cInRoaXMubGlzdElkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIiF0aGlzLmNvbGxhcHNlZCA/IHRoaXMuZm9jdXNlZEl0ZW0/LmlkIDogbnVsbFwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXG4gICAgLz5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LXN1ZmZpeFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc3VmZml4LFtpZ3hTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxpZ3gtc3VmZml4IGNsYXNzPVwiaWd4LXNlbGVjdF9fdG9nZ2xlLWJ1dHRvblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9nZ2xlSWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9nZ2xlSWNvblRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiB0aGlzLmNvbGxhcHNlZH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxpZ3gtaWNvbiAqbmdJZj1cIiF0b2dnbGVJY29uVGVtcGxhdGVcIiBmYW1pbHk9XCJkZWZhdWx0XCIgW25hbWVdPVwidG9nZ2xlSWNvblwiPjwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtaGludCwgW2lneEhpbnRdXCIgPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtaGludCwgW2lneEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9pZ3gtaW5wdXQtZ3JvdXA+XG48ZGl2IGlneFRvZ2dsZSBjbGFzcz1cImlneC1kcm9wLWRvd25fX2xpc3RcIiAobW91c2Vkb3duKT1cIm1vdXNlZG93bkhhbmRsZXIoJGV2ZW50KTtcIlxuICAgIChhcHBlbmRlZCk9XCJvblRvZ2dsZUNvbnRlbnRBcHBlbmRlZCgkZXZlbnQpXCJcbiAgICAob3BlbmluZyk9XCJoYW5kbGVPcGVuaW5nKCRldmVudClcIlxuICAgIChvcGVuZWQpPVwiaGFuZGxlT3BlbmVkKClcIlxuICAgIChjbG9zaW5nKT1cImhhbmRsZUNsb3NpbmcoJGV2ZW50KVwiXG4gICAgKGNsb3NlZCk9XCJoYW5kbGVDbG9zZWQoKVwiPlxuXG4gICAgPGRpdiAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCIgY2xhc3M9XCJpZ3gtZHJvcC1kb3duX19zZWxlY3QtaGVhZGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50ICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tICM3NDM2IExNQiBzY3JvbGxpbmcgY2xvc2VzIGl0ZW1zIGNvbnRhaW5lciAtIHVuc2VsZWN0YWJsZSBhdHRyaWJ1dGUgaXMgSUUgc3BlY2lmaWMgIC0tPlxuICAgIDxkaXYgI3Njcm9sbENvbnRhaW5lciBjbGFzcz1cImlneC1kcm9wLWRvd25fX2xpc3Qtc2Nyb2xsXCIgdW5zZWxlY3RhYmxlPVwib25cIiBbc3R5bGUubWF4SGVpZ2h0XT1cIm1heEhlaWdodFwiXG4gICAgICAgIFthdHRyLmlkXT1cInRoaXMubGlzdElkXCIgcm9sZT1cImxpc3Rib3hcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidGhpcy5sYWJlbD8uaWRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXNlbGVjdC1pdGVtLCBpZ3gtc2VsZWN0LWl0ZW0tZ3JvdXBcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiZm9vdGVyVGVtcGxhdGVcIiBjbGFzcz1cImlneC1kcm9wLWRvd25fX3NlbGVjdC1mb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==