igniteui-angular 13.0.0-alpha.6 → 13.0.0-alpha.7

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 (72) hide show
  1. package/README.md +31 -30
  2. package/esm2020/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +2 -2
  3. package/esm2020/lib/banner/banner.component.mjs +1 -1
  4. package/esm2020/lib/combo/combo-dropdown.component.mjs +12 -6
  5. package/esm2020/lib/combo/combo-item.component.mjs +5 -3
  6. package/esm2020/lib/combo/combo.api.mjs +3 -3
  7. package/esm2020/lib/combo/combo.common.mjs +1100 -2
  8. package/esm2020/lib/combo/combo.component.mjs +107 -1231
  9. package/esm2020/lib/combo/combo.directives.mjs +9 -25
  10. package/esm2020/lib/combo/combo.pipes.mjs +4 -6
  11. package/esm2020/lib/combo/public_api.mjs +5 -1
  12. package/esm2020/lib/core/utils.mjs +11 -1
  13. package/esm2020/lib/dialog/dialog.component.mjs +22 -10
  14. package/esm2020/lib/directives/focus-trap/focus-trap.directive.mjs +112 -0
  15. package/esm2020/lib/directives/for-of/for_of.directive.mjs +2 -2
  16. package/esm2020/lib/directives/radio/radio-group.directive.mjs +5 -13
  17. package/esm2020/lib/drop-down/drop-down-item.base.mjs +1 -5
  18. package/esm2020/lib/grids/column-actions/column-actions.component.mjs +4 -4
  19. package/esm2020/lib/grids/columns/column-layout.component.mjs +3 -3
  20. package/esm2020/lib/grids/columns/column.component.mjs +5 -5
  21. package/esm2020/lib/grids/common/crud.service.mjs +2 -2
  22. package/esm2020/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +2 -2
  23. package/esm2020/lib/grids/filtering/grid-filtering.service.mjs +9 -9
  24. package/esm2020/lib/grids/grid/grid.component.mjs +4 -8
  25. package/esm2020/lib/grids/grid-base.directive.mjs +82 -69
  26. package/esm2020/lib/grids/grid-public-row.mjs +3 -12
  27. package/esm2020/lib/grids/grouping/group-by-area.directive.mjs +2 -2
  28. package/esm2020/lib/grids/headers/grid-header-row.component.mjs +3 -3
  29. package/esm2020/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +4 -8
  30. package/esm2020/lib/grids/state.directive.mjs +2 -2
  31. package/esm2020/lib/grids/tree-grid/tree-grid.component.mjs +4 -8
  32. package/esm2020/lib/services/overlay/utilities.mjs +1 -1
  33. package/esm2020/lib/simple-combo/public_api.mjs +2 -0
  34. package/esm2020/lib/simple-combo/simple-combo.component.mjs +375 -0
  35. package/esm2020/lib/toast/toast.component.mjs +3 -6
  36. package/esm2020/public_api.mjs +3 -1
  37. package/fesm2015/igniteui-angular.mjs +1723 -1405
  38. package/fesm2015/igniteui-angular.mjs.map +1 -1
  39. package/fesm2020/igniteui-angular.mjs +1714 -1402
  40. package/fesm2020/igniteui-angular.mjs.map +1 -1
  41. package/lib/banner/banner.component.d.ts +1 -2
  42. package/lib/combo/combo-dropdown.component.d.ts +3 -1
  43. package/lib/combo/combo-item.component.d.ts +3 -1
  44. package/lib/combo/combo.common.d.ts +733 -4
  45. package/lib/combo/combo.component.d.ts +41 -799
  46. package/lib/combo/combo.pipes.d.ts +1 -1
  47. package/lib/combo/public_api.d.ts +4 -0
  48. package/lib/core/utils.d.ts +4 -0
  49. package/lib/dialog/dialog.component.d.ts +11 -2
  50. package/lib/directives/focus-trap/focus-trap.directive.d.ts +41 -0
  51. package/lib/directives/radio/radio-group.directive.d.ts +4 -4
  52. package/lib/grids/columns/column.component.d.ts +1 -1
  53. package/lib/grids/grid/grid.component.d.ts +2 -1
  54. package/lib/grids/grid-base.directive.d.ts +64 -8
  55. package/lib/grids/grid-public-row.d.ts +2 -3
  56. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +2 -1
  57. package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -1
  58. package/lib/services/overlay/utilities.d.ts +2 -1
  59. package/lib/simple-combo/public_api.d.ts +1 -0
  60. package/lib/simple-combo/simple-combo.component.d.ts +134 -0
  61. package/lib/toast/toast.component.d.ts +2 -0
  62. package/migrations/common/filterSourceDirs.d.ts +2 -2
  63. package/migrations/common/filterSourceDirs.js +2 -2
  64. package/migrations/update-13_0_0/changes/members.json +26 -0
  65. package/migrations/update-13_0_0/index.js +0 -31
  66. package/package.json +51 -43
  67. package/public_api.d.ts +2 -0
  68. package/src/lib/combo/README.md +14 -14
  69. package/src/lib/directives/focus-trap/README.md +17 -0
  70. package/src/lib/simple-combo/README.md +317 -0
  71. package/esm2020/lib/core/deprecateDecorators.mjs +0 -99
  72. package/lib/core/deprecateDecorators.d.ts +0 -20
@@ -1,4 +1,3 @@
1
- import { __decorate } from "tslib";
2
1
  import { Directive, NgModule, Input, Output, EventEmitter, ContentChildren, HostBinding } from '@angular/core';
3
2
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
3
  import { IgxRadioComponent, RadioLabelPosition } from '../../radio/radio.component';
@@ -6,7 +5,6 @@ import { IgxRippleModule } from '../ripple/ripple.directive';
6
5
  import { takeUntil } from 'rxjs/operators';
7
6
  import { noop, Subject } from 'rxjs';
8
7
  import { mkenum } from '../../core/utils';
9
- import { DeprecateProperty } from '../../core/deprecateDecorators';
10
8
  import * as i0 from "@angular/core";
11
9
  /**
12
10
  * Determines the Radio Group alignment
@@ -170,10 +168,10 @@ export class IgxRadioGroupDirective {
170
168
  this._setRadioButtonsRequired();
171
169
  }
172
170
  /**
173
- * An @Input property that allows you to disable the radio group. By default it's false.
174
- *
175
171
  * @deprecated in version 12.2.0
176
172
  *
173
+ * An input property that allows you to disable the radio group. By default it's false.
174
+ *
177
175
  * @example
178
176
  * ```html
179
177
  * <igx-radio-group disabled></igx-radio-group>
@@ -187,10 +185,10 @@ export class IgxRadioGroupDirective {
187
185
  this.setDisabledState(value);
188
186
  }
189
187
  /**
190
- * Sets/gets the position of the `label` in the child radio buttons.
191
- *
192
188
  * @deprecated in version 12.2.0
193
189
  *
190
+ * Sets/gets the position of the `label` in the child radio buttons.
191
+ *
194
192
  * @remarks
195
193
  * If not set, `labelPosition` will have value `"after"`.
196
194
  *
@@ -422,12 +420,6 @@ export class IgxRadioGroupDirective {
422
420
  }
423
421
  IgxRadioGroupDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxRadioGroupDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
424
422
  IgxRadioGroupDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.0", type: IgxRadioGroupDirective, selector: "igx-radio-group, [igxRadioGroup]", inputs: { value: "value", name: "name", required: "required", disabled: "disabled", labelPosition: "labelPosition", selected: "selected", alignment: "alignment" }, outputs: { change: "change" }, host: { properties: { "class.igx-radio-group": "this.cssClass", "class.igx-radio-group--vertical": "this.vertical" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxRadioGroupDirective, multi: true }], queries: [{ propertyName: "radioButtons", predicate: IgxRadioComponent, descendants: true }], exportAs: ["igxRadioGroup"], ngImport: i0 });
425
- __decorate([
426
- DeprecateProperty('`disabled` is deprecated.')
427
- ], IgxRadioGroupDirective.prototype, "disabled", null);
428
- __decorate([
429
- DeprecateProperty('`labelPosition` is deprecated.')
430
- ], IgxRadioGroupDirective.prototype, "labelPosition", null);
431
423
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxRadioGroupDirective, decorators: [{
432
424
  type: Directive,
433
425
  args: [{
@@ -477,4 +469,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
477
469
  imports: [IgxRippleModule]
478
470
  }]
479
471
  }] });
480
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RpcmVjdGl2ZXMvcmFkaW8vcmFkaW8tZ3JvdXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUNOLFlBQVksRUFFWixlQUFlLEVBRWYsV0FBVyxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sNkJBQTZCLENBQUM7QUFDM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBRW5FOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDO0lBQ3RDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFFBQVEsRUFBRSxVQUFVO0NBQ3ZCLENBQUMsQ0FBQztBQUdILElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUVmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQUxuQztRQTZJSTs7Ozs7Ozs7OztXQVVHO1FBQ0gsNERBQTREO1FBQ2xDLFdBQU0sR0FBd0MsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFF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LEVBQUUsaUJBQWlCLENBQUM7b0JBQ3BELE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBOZ01vZHVsZSxcbiAgICBJbnB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBPbkRlc3Ryb3ksXG4gICAgSG9zdEJpbmRpbmdcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJZ3hSYWRpb0NvbXBvbmVudCwgUmFkaW9MYWJlbFBvc2l0aW9uLCBJQ2hhbmdlUmFkaW9FdmVudEFyZ3MgfSBmcm9tICcuLi8uLi9yYWRpby9yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UmlwcGxlTW9kdWxlIH0gZnJvbSAnLi4vcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbm9vcCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWtlbnVtIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBEZXByZWNhdGVQcm9wZXJ0eSB9IGZyb20gJy4uLy4uL2NvcmUvZGVwcmVjYXRlRGVjb3JhdG9ycyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgUmFkaW8gR3JvdXAgYWxpZ25tZW50XG4gKi9cbmV4cG9ydCBjb25zdCBSYWRpb0dyb3VwQWxpZ25tZW50ID0gbWtlbnVtKHtcbiAgICBob3Jpem9udGFsOiAnaG9yaXpvbnRhbCcsXG4gICAgdmVydGljYWw6ICd2ZXJ0aWNhbCdcbn0pO1xuZXhwb3J0IHR5cGUgUmFkaW9Hcm91cEFsaWdubWVudCA9IHR5cGVvZiBSYWRpb0dyb3VwQWxpZ25tZW50W2tleW9mIHR5cGVvZiBSYWRpb0dyb3VwQWxpZ25tZW50XTtcblxubGV0IG5leHRJZCA9IDA7XG5cbi8qKlxuICogUmFkaW8gZ3JvdXAgZGlyZWN0aXZlIHJlbmRlcnMgc2V0IG9mIHJhZGlvIGJ1dHRvbnMuXG4gKlxuICogQGlneE1vZHVsZSBJZ3hSYWRpb01vZHVsZVxuICpcbiAqIEBpZ3hUaGVtZSBpZ3gtcmFkaW8tdGhlbWVcbiAqXG4gKiBAaWd4S2V5d29yZHMgcmFkaW9ncm91cCwgcmFkaW8sIGJ1dHRvbiwgaW5wdXRcbiAqXG4gKiBAaWd4R3JvdXAgRGF0YSBFbnRyeSAmIERpc3BsYXlcbiAqXG4gKiBAcmVtYXJrc1xuICogVGhlIElnbml0ZSBVSSBSYWRpbyBHcm91cCBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGEgc2luZ2xlIG9wdGlvbiBmcm9tIGFuIGF2YWlsYWJsZSBzZXQgb2Ygb3B0aW9ucyB0aGF0IGFyZSBsaXN0ZWQgc2lkZSBieSBzaWRlLlxuICpcbiAqIEBleGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1yYWRpby1ncm91cCBuYW1lPVwicmFkaW9Hcm91cFwiPlxuICogICA8aWd4LXJhZGlvICpuZ0Zvcj1cImxldCBpdGVtIG9mIFsnRm9vJywgJ0JhcicsICdCYXonXVwiIHZhbHVlPVwie3tpdGVtfX1cIj5cbiAqICAgICAge3tpdGVtfX1cbiAqICAgPC9pZ3gtcmFkaW8+XG4gKiA8L2lneC1yYWRpby1ncm91cD5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBleHBvcnRBczogJ2lneFJhZGlvR3JvdXAnLFxuICAgIHNlbGVjdG9yOiAnaWd4LXJhZGlvLWdyb3VwLCBbaWd4UmFkaW9Hcm91cF0nLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBJZ3hSYWRpb0dyb3VwRGlyZWN0aXZlLCBtdWx0aTogdHJ1ZSB9XVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hSYWRpb0dyb3VwRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcmVxdWlyZWQ6IGJvb2xlYW4gfCAnJztcbiAgICBwcml2YXRlIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogYm9vbGVhbiB8ICcnO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCByYWRpbyBidXR0b25zLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHJhZGlvQnV0dG9ucyA9ICB0aGlzLnJhZGlvR3JvdXAucmFkaW9CdXR0b25zO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4UmFkaW9Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcHVibGljIHJhZGlvQnV0dG9uczogUXVlcnlMaXN0PElneFJhZGlvQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYHZhbHVlYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIFt2YWx1ZV0gPSBcIidyYWRpb0J1dHRvblZhbHVlJ1wiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0UmFkaW9CdXR0b24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYG5hbWVgIGF0dHJpYnV0ZSBvZiB0aGUgcmFkaW8gZ3JvdXAgY29tcG9uZW50LiBBbGwgY2hpbGQgcmFkaW8gYnV0dG9ucyBpbmhlcml0cyB0aGlzIG5hbWUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIG5hbWUgPSBcIlJhZGlvMVwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqICBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBuYW1lKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuX25hbWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9uYW1lID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYWRpb0J1dHRvbk5hbWVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgcmFkaW8gZ3JvdXAgaXMgcmVxdWlyZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIG5vdCBzZXQsIGByZXF1aXJlZGAgd2lsbCBoYXZlIHZhbHVlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIFtyZXF1aXJlZF0gPSBcInRydWVcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgICB9XG4gICAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yZXF1aXJlZCA9ICh2YWx1ZSBhcyBhbnkpID09PSAnJyB8fCB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc2V0UmFkaW9CdXR0b25zUmVxdWlyZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBhbGxvd3MgeW91IHRvIGRpc2FibGUgdGhlIHJhZGlvIGdyb3VwLiBCeSBkZWZhdWx0IGl0J3MgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBpbiB2ZXJzaW9uIDEyLjIuMFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgZGlzYWJsZWQ+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQERlcHJlY2F0ZVByb3BlcnR5KCdgZGlzYWJsZWRgIGlzIGRlcHJlY2F0ZWQuJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9ICh2YWx1ZSBhcyBhbnkpID09PSAnJyB8fCB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXREaXNhYmxlZFN0YXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBgbGFiZWxgIGluIHRoZSBjaGlsZCByYWRpbyBidXR0b25zLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAxMi4yLjBcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgbm90IHNldCwgYGxhYmVsUG9zaXRpb25gIHdpbGwgaGF2ZSB2YWx1ZSBgXCJhZnRlclwiYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgbGFiZWxQb3NpdGlvbiA9IFwiYmVmb3JlXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQERlcHJlY2F0ZVByb3BlcnR5KCdgbGFiZWxQb3NpdGlvbmAgaXMgZGVwcmVjYXRlZC4nKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsYWJlbFBvc2l0aW9uKCk6IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbFBvc2l0aW9uO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGxhYmVsUG9zaXRpb24obmV3VmFsdWU6IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fbGFiZWxQb3NpdGlvbiAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhYmVsUG9zaXRpb24gPSBuZXdWYWx1ZSA9PT0gUmFkaW9MYWJlbFBvc2l0aW9uLkJFRk9SRSA/IFJhZGlvTGFiZWxQb3NpdGlvbi5CRUZPUkUgOiBSYWRpb0xhYmVsUG9zaXRpb24uQUZURVI7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYWRpb0J1dHRvbkxhYmVsUG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgc2VsZWN0ZWQgY2hpbGQgcmFkaW8gYnV0dG9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNlbGVjdGVkQnV0dG9uID0gdGhpcy5yYWRpb0dyb3VwLnNlbGVjdGVkO1xuICAgICAqIHRoaXMucmFkaW9Hcm91cC5zZWxlY3RlZCA9IHNlbGVjdGVkQnV0dG9uO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHNlbGVjdGVkOiBJZ3hSYWRpb0NvbXBvbmVudCB8IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3RlZCA/IHNlbGVjdGVkLnZhbHVlIDogbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgcmFkaW8gZ3JvdXAgYHZhbHVlYCBpcyBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBgSWd4UmFkaW9Db21wb25lbnRgIGFuZCB0aGUgYHZhbHVlYCBwcm9wZXJ0eSBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIChjaGFuZ2UpPVwiaGFuZGxlcigkZXZlbnQpXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxJQ2hhbmdlUmFkaW9FdmVudEFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhbmdlUmFkaW9FdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1yYWRpby1ncm91cCcpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1yYWRpby1ncm91cCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHZlcnRpY2FsIGFsaWdubWVudCB0byB0aGUgcmFkaW8gZ3JvdXAsIGlmIGBhbGlnbm1lbnRgIGlzIHNldCB0byBgdmVydGljYWxgLlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGFsaWdubWVudCBpcyBob3Jpem9udGFsLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBhbGlnbm1lbnQ9XCJ2ZXJ0aWNhbFwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXJhZGlvLWdyb3VwLS12ZXJ0aWNhbCcpXG4gICAgcHJpdmF0ZSB2ZXJ0aWNhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWxpZ25tZW50IG9mIHRoZSBgaWd4LXJhZGlvLWdyb3VwYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15UmFkaW9Hcm91cFwiKVxuICAgICAqIHB1YmxpYyByYWRpb0dyb3VwOiBJZ3hSYWRpb0dyb3VwRGlyZWN0aXZlO1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCByYWRpb0FsaWdubWVudCA9IHRoaXMucmFkaW9Hcm91cC5hbGlnbm1lbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBhbGlnbm1lbnQoKTogUmFkaW9Hcm91cEFsaWdubWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsID8gUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbCA6IFJhZGlvR3JvdXBBbGlnbm1lbnQuaG9yaXpvbnRhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxsb3dzIHlvdSB0byBzZXQgdGhlIHJhZGlvIGdyb3VwIGFsaWdubWVudC5cbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmUgYFJhZGlvR3JvdXBBbGlnbm1lbnQuaG9yaXpvbnRhbGAgKGRlZmF1bHQpIGFuZCBgUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBhbGlnbm1lbnQgPSBSYWRpb0dyb3VwQWxpZ25tZW50LnZlcnRpY2FsO1xuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBbYWxpZ25tZW50XT1cImFsaWdubWVudFwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgYWxpZ25tZW50KHZhbHVlOiBSYWRpb0dyb3VwQWxpZ25tZW50KSB7XG4gICAgICAgIHRoaXMudmVydGljYWwgPSB2YWx1ZSA9PT0gUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX25hbWUgPSBgaWd4LXJhZGlvLWdyb3VwLSR7bmV4dElkKyt9YDtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdmFsdWU6IGFueSA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkOiBJZ3hSYWRpb0NvbXBvbmVudCB8IG51bGwgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2xhYmVsUG9zaXRpb246IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZyA9ICdhZnRlcic7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIC8vIFRoZSBpbml0aWFsIHZhbHVlIGNhbiBwb3NzaWJseSBiZSBzZXQgYnkgTmdNb2RlbCBhbmQgaXQgaXMgcG9zc2libGUgdGhhdFxuICAgICAgICAvLyB0aGUgT25Jbml0IG9mIHRoZSBOZ01vZGVsIG9jY3VycyBhZnRlciB0aGUgT25Jbml0IG9mIHRoaXMgY2xhc3MuXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdFJhZGlvQnV0dG9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBcImNoZWNrZWRcIiBwcm9wZXJ0eSB2YWx1ZSBvbiB0aGUgcmFkaW8gaW5wdXQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGNvbnNpc3RlbnQgdG8gdGhlIGN1cnJlbnQgcmFkaW8gYnV0dG9uLlxuICAgICAqIElmIGl0IGlzLCB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUgd2lsbCBoYXZlIHZhbHVlIGB0cnVlYCBhbmQgc2VsZWN0ZWQgcHJvcGVydHkgd2lsbCBjb250YWluIHRoZSBzZWxlY3RlZCBgSWd4UmFkaW9Db21wb25lbnRgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5yYWRpb0dyb3VwLndyaXRlVmFsdWUoJ3JhZGlvQnV0dG9uVmFsdWUnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29udHJvbCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29udHJvbCBpcyB0b3VjaGVkLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5yZWdpc3Rlck9uVG91Y2hlZChmbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pbml0UmFkaW9CdXR0b25zKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0geyBuYW1lOiB0aGlzLl9uYW1lLCBsYWJlbFBvc2l0aW9uOiB0aGlzLl9sYWJlbFBvc2l0aW9uLCBkaXNhYmxlZDogdGhpcy5fZGlzYWJsZWQsIHJlcXVpcmVkOiB0aGlzLl9yZXF1aXJlZCB9O1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihidXR0b24sIHByb3BzKTtcblxuICAgICAgICAgICAgICAgIGlmIChidXR0b24udmFsdWUgPT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBidXR0b247XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnV0dG9uLmNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChldikgPT4gdGhpcy5fc2VsZWN0ZWRSYWRpb0J1dHRvbkNoYW5nZWQoZXYpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkUmFkaW9CdXR0b25DaGFuZ2VkKGFyZ3M6IElDaGFuZ2VSYWRpb0V2ZW50QXJncykge1xuICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgIGJ1dHRvbi5jaGVja2VkID0gYnV0dG9uLmlkID09PSBhcmdzLnJhZGlvLmlkO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGFyZ3MucmFkaW87XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gYXJncy52YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5faXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0UmFkaW9CdXR0b25OYW1lcygpIHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBidXR0b24ubmFtZSA9IHRoaXMuX25hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RSYWRpb0J1dHRvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gdmFsdWUgLSB1bmNoZWNrIGFsbCByYWRpbyBidXR0b25zXG4gICAgICAgICAgICAgICAgICAgIGlmIChidXR0b24uY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSA9PT0gYnV0dG9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZCAhPT0gYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBidXR0b247XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYnV0dG9uLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub24tc2VsZWN0ZWQgYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnV0dG9uLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0UmFkaW9CdXR0b25MYWJlbFBvc2l0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5sYWJlbFBvc2l0aW9uID0gdGhpcy5fbGFiZWxQb3NpdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldFJhZGlvQnV0dG9uc1JlcXVpcmVkKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5yZXF1aXJlZCA9IHRoaXMuX3JlcXVpcmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneFJhZGlvR3JvdXBEaXJlY3RpdmUsIElneFJhZGlvQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSwgSWd4UmFkaW9Db21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtJZ3hSaXBwbGVNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIElneFJhZGlvTW9kdWxlIHt9XG4iXX0=
472
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RpcmVjdGl2ZXMvcmFkaW8vcmFkaW8tZ3JvdXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUVaLGVBQWUsRUFFZixXQUFXLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBeUIsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFMUM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUM7SUFDdEMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsUUFBUSxFQUFFLFVBQVU7Q0FDdkIsQ0FBQyxDQUFDO0FBR0gsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBRWY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFNSCxNQUFNLE9BQU8sc0JBQXNCO0lBTG5DO1FBMklJOzs7Ozs7Ozs7O1dBVUc7UUFDSCw0REFBNEQ7UUFDbEMsV0FBTSxHQUF3QyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUVsSDs7Ozs7V0FLRztRQUVJLGFBQVEsR0FBRyxpQkFBaUIsQ0FBQztRQUVwQzs7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RSxpQkFBaUI7MkZBWHpCLHNCQUFzQjtrQkFMbEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFLGtDQUFrQztvQkFDNUMsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQ2hHOzhCQVlxRSxZQUFZO3NCQUE3RSxlQUFlO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFXOUMsS0FBSztzQkFEZixLQUFLO2dCQW9CSyxJQUFJO3NCQURkLEtBQUs7Z0JBdUJLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBb0JLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBdUJLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBcUJLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBdUJvQixNQUFNO3NCQUEvQixNQUFNO2dCQVNBLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBYTVCLFFBQVE7c0JBRGYsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBY25DLFNBQVM7c0JBRG5CLEtBQUs7O0FBd1BWOztHQUVHO0FBTUgsTUFBTSxPQUFPLGNBQWM7OzJHQUFkLGNBQWM7NEdBQWQsY0FBYyxpQkFuYmQsc0JBQXNCLEVBK2FRLGlCQUFpQixhQUU5QyxlQUFlLGFBamJoQixzQkFBc0IsRUFnYkcsaUJBQWlCOzRHQUcxQyxjQUFjLFlBRmQsQ0FBQyxlQUFlLENBQUM7MkZBRWpCLGNBQWM7a0JBTDFCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLENBQUM7b0JBQ3pELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixFQUFFLGlCQUFpQixDQUFDO29CQUNwRCxPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7aUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgTmdNb2R1bGUsXG4gICAgSW5wdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgT25EZXN0cm95LFxuICAgIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSWd4UmFkaW9Db21wb25lbnQsIFJhZGlvTGFiZWxQb3NpdGlvbiwgSUNoYW5nZVJhZGlvRXZlbnRBcmdzIH0gZnJvbSAnLi4vLi4vcmFkaW8vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IElneFJpcHBsZU1vZHVsZSB9IGZyb20gJy4uL3JpcHBsZS9yaXBwbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG5vb3AsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1rZW51bSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIFJhZGlvIEdyb3VwIGFsaWdubWVudFxuICovXG5leHBvcnQgY29uc3QgUmFkaW9Hcm91cEFsaWdubWVudCA9IG1rZW51bSh7XG4gICAgaG9yaXpvbnRhbDogJ2hvcml6b250YWwnLFxuICAgIHZlcnRpY2FsOiAndmVydGljYWwnXG59KTtcbmV4cG9ydCB0eXBlIFJhZGlvR3JvdXBBbGlnbm1lbnQgPSB0eXBlb2YgUmFkaW9Hcm91cEFsaWdubWVudFtrZXlvZiB0eXBlb2YgUmFkaW9Hcm91cEFsaWdubWVudF07XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIFJhZGlvIGdyb3VwIGRpcmVjdGl2ZSByZW5kZXJzIHNldCBvZiByYWRpbyBidXR0b25zLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4UmFkaW9Nb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LXJhZGlvLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIHJhZGlvZ3JvdXAsIHJhZGlvLCBidXR0b24sIGlucHV0XG4gKlxuICogQGlneEdyb3VwIERhdGEgRW50cnkgJiBEaXNwbGF5XG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgUmFkaW8gR3JvdXAgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHNpbmdsZSBvcHRpb24gZnJvbSBhbiBhdmFpbGFibGUgc2V0IG9mIG9wdGlvbnMgdGhhdCBhcmUgbGlzdGVkIHNpZGUgYnkgc2lkZS5cbiAqXG4gKiBAZXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtcmFkaW8tZ3JvdXAgbmFtZT1cInJhZGlvR3JvdXBcIj5cbiAqICAgPGlneC1yYWRpbyAqbmdGb3I9XCJsZXQgaXRlbSBvZiBbJ0ZvbycsICdCYXInLCAnQmF6J11cIiB2YWx1ZT1cInt7aXRlbX19XCI+XG4gKiAgICAgIHt7aXRlbX19XG4gKiAgIDwvaWd4LXJhZGlvPlxuICogPC9pZ3gtcmFkaW8tZ3JvdXA+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgZXhwb3J0QXM6ICdpZ3hSYWRpb0dyb3VwJyxcbiAgICBzZWxlY3RvcjogJ2lneC1yYWRpby1ncm91cCwgW2lneFJhZGlvR3JvdXBdJyxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSwgbXVsdGk6IHRydWUgfV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3JlcXVpcmVkOiBib29sZWFuIHwgJyc7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IGJvb2xlYW4gfCAnJztcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgcmFkaW8gYnV0dG9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCByYWRpb0J1dHRvbnMgPSAgdGhpcy5yYWRpb0dyb3VwLnJhZGlvQnV0dG9ucztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneFJhZGlvQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHB1YmxpYyByYWRpb0J1dHRvbnM6IFF1ZXJ5TGlzdDxJZ3hSYWRpb0NvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGB2YWx1ZWAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBbdmFsdWVdID0gXCIncmFkaW9CdXR0b25WYWx1ZSdcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdFJhZGlvQnV0dG9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBuYW1lYCBhdHRyaWJ1dGUgb2YgdGhlIHJhZGlvIGdyb3VwIGNvbXBvbmVudC4gQWxsIGNoaWxkIHJhZGlvIGJ1dHRvbnMgaW5oZXJpdHMgdGhpcyBuYW1lLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBuYW1lID0gXCJSYWRpbzFcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiAgYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbmFtZShuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9uYW1lICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fc2V0UmFkaW9CdXR0b25OYW1lcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIHJhZGlvIGdyb3VwIGlzIHJlcXVpcmVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBub3Qgc2V0LCBgcmVxdWlyZWRgIHdpbGwgaGF2ZSB2YWx1ZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBbcmVxdWlyZWRdID0gXCJ0cnVlXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWQgPSAodmFsdWUgYXMgYW55KSA9PT0gJycgfHwgdmFsdWU7XG4gICAgICAgIHRoaXMuX3NldFJhZGlvQnV0dG9uc1JlcXVpcmVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAxMi4yLjBcbiAgICAgKlxuICAgICAqIEFuIGlucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoZSByYWRpbyBncm91cC4gQnkgZGVmYXVsdCBpdCdzIGZhbHNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgZGlzYWJsZWQ+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSAodmFsdWUgYXMgYW55KSA9PT0gJycgfHwgdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAxMi4yLjBcbiAgICAgKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGBsYWJlbGAgaW4gdGhlIGNoaWxkIHJhZGlvIGJ1dHRvbnMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIG5vdCBzZXQsIGBsYWJlbFBvc2l0aW9uYCB3aWxsIGhhdmUgdmFsdWUgYFwiYWZ0ZXJcImAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIGxhYmVsUG9zaXRpb24gPSBcImJlZm9yZVwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsYWJlbFBvc2l0aW9uKCk6IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbFBvc2l0aW9uO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGxhYmVsUG9zaXRpb24obmV3VmFsdWU6IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fbGFiZWxQb3NpdGlvbiAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhYmVsUG9zaXRpb24gPSBuZXdWYWx1ZSA9PT0gUmFkaW9MYWJlbFBvc2l0aW9uLkJFRk9SRSA/IFJhZGlvTGFiZWxQb3NpdGlvbi5CRUZPUkUgOiBSYWRpb0xhYmVsUG9zaXRpb24uQUZURVI7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYWRpb0J1dHRvbkxhYmVsUG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgc2VsZWN0ZWQgY2hpbGQgcmFkaW8gYnV0dG9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNlbGVjdGVkQnV0dG9uID0gdGhpcy5yYWRpb0dyb3VwLnNlbGVjdGVkO1xuICAgICAqIHRoaXMucmFkaW9Hcm91cC5zZWxlY3RlZCA9IHNlbGVjdGVkQnV0dG9uO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHNlbGVjdGVkOiBJZ3hSYWRpb0NvbXBvbmVudCB8IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3RlZCA/IHNlbGVjdGVkLnZhbHVlIDogbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgcmFkaW8gZ3JvdXAgYHZhbHVlYCBpcyBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBgSWd4UmFkaW9Db21wb25lbnRgIGFuZCB0aGUgYHZhbHVlYCBwcm9wZXJ0eSBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIChjaGFuZ2UpPVwiaGFuZGxlcigkZXZlbnQpXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxJQ2hhbmdlUmFkaW9FdmVudEFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhbmdlUmFkaW9FdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1yYWRpby1ncm91cCcpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1yYWRpby1ncm91cCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHZlcnRpY2FsIGFsaWdubWVudCB0byB0aGUgcmFkaW8gZ3JvdXAsIGlmIGBhbGlnbm1lbnRgIGlzIHNldCB0byBgdmVydGljYWxgLlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGFsaWdubWVudCBpcyBob3Jpem9udGFsLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBhbGlnbm1lbnQ9XCJ2ZXJ0aWNhbFwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXJhZGlvLWdyb3VwLS12ZXJ0aWNhbCcpXG4gICAgcHJpdmF0ZSB2ZXJ0aWNhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWxpZ25tZW50IG9mIHRoZSBgaWd4LXJhZGlvLWdyb3VwYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15UmFkaW9Hcm91cFwiKVxuICAgICAqIHB1YmxpYyByYWRpb0dyb3VwOiBJZ3hSYWRpb0dyb3VwRGlyZWN0aXZlO1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCByYWRpb0FsaWdubWVudCA9IHRoaXMucmFkaW9Hcm91cC5hbGlnbm1lbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBhbGlnbm1lbnQoKTogUmFkaW9Hcm91cEFsaWdubWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsID8gUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbCA6IFJhZGlvR3JvdXBBbGlnbm1lbnQuaG9yaXpvbnRhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxsb3dzIHlvdSB0byBzZXQgdGhlIHJhZGlvIGdyb3VwIGFsaWdubWVudC5cbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmUgYFJhZGlvR3JvdXBBbGlnbm1lbnQuaG9yaXpvbnRhbGAgKGRlZmF1bHQpIGFuZCBgUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBhbGlnbm1lbnQgPSBSYWRpb0dyb3VwQWxpZ25tZW50LnZlcnRpY2FsO1xuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBbYWxpZ25tZW50XT1cImFsaWdubWVudFwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgYWxpZ25tZW50KHZhbHVlOiBSYWRpb0dyb3VwQWxpZ25tZW50KSB7XG4gICAgICAgIHRoaXMudmVydGljYWwgPSB2YWx1ZSA9PT0gUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX25hbWUgPSBgaWd4LXJhZGlvLWdyb3VwLSR7bmV4dElkKyt9YDtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdmFsdWU6IGFueSA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkOiBJZ3hSYWRpb0NvbXBvbmVudCB8IG51bGwgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2xhYmVsUG9zaXRpb246IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZyA9ICdhZnRlcic7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIC8vIFRoZSBpbml0aWFsIHZhbHVlIGNhbiBwb3NzaWJseSBiZSBzZXQgYnkgTmdNb2RlbCBhbmQgaXQgaXMgcG9zc2libGUgdGhhdFxuICAgICAgICAvLyB0aGUgT25Jbml0IG9mIHRoZSBOZ01vZGVsIG9jY3VycyBhZnRlciB0aGUgT25Jbml0IG9mIHRoaXMgY2xhc3MuXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5pdFJhZGlvQnV0dG9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBcImNoZWNrZWRcIiBwcm9wZXJ0eSB2YWx1ZSBvbiB0aGUgcmFkaW8gaW5wdXQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGNvbnNpc3RlbnQgdG8gdGhlIGN1cnJlbnQgcmFkaW8gYnV0dG9uLlxuICAgICAqIElmIGl0IGlzLCB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUgd2lsbCBoYXZlIHZhbHVlIGB0cnVlYCBhbmQgc2VsZWN0ZWQgcHJvcGVydHkgd2lsbCBjb250YWluIHRoZSBzZWxlY3RlZCBgSWd4UmFkaW9Db21wb25lbnRgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5yYWRpb0dyb3VwLndyaXRlVmFsdWUoJ3JhZGlvQnV0dG9uVmFsdWUnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29udHJvbCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29udHJvbCBpcyB0b3VjaGVkLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5yZWdpc3Rlck9uVG91Y2hlZChmbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pbml0UmFkaW9CdXR0b25zKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0geyBuYW1lOiB0aGlzLl9uYW1lLCBsYWJlbFBvc2l0aW9uOiB0aGlzLl9sYWJlbFBvc2l0aW9uLCBkaXNhYmxlZDogdGhpcy5fZGlzYWJsZWQsIHJlcXVpcmVkOiB0aGlzLl9yZXF1aXJlZCB9O1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihidXR0b24sIHByb3BzKTtcblxuICAgICAgICAgICAgICAgIGlmIChidXR0b24udmFsdWUgPT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBidXR0b247XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnV0dG9uLmNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChldikgPT4gdGhpcy5fc2VsZWN0ZWRSYWRpb0J1dHRvbkNoYW5nZWQoZXYpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkUmFkaW9CdXR0b25DaGFuZ2VkKGFyZ3M6IElDaGFuZ2VSYWRpb0V2ZW50QXJncykge1xuICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgIGJ1dHRvbi5jaGVja2VkID0gYnV0dG9uLmlkID09PSBhcmdzLnJhZGlvLmlkO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGFyZ3MucmFkaW87XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gYXJncy52YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5faXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0UmFkaW9CdXR0b25OYW1lcygpIHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBidXR0b24ubmFtZSA9IHRoaXMuX25hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RSYWRpb0J1dHRvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gdmFsdWUgLSB1bmNoZWNrIGFsbCByYWRpbyBidXR0b25zXG4gICAgICAgICAgICAgICAgICAgIGlmIChidXR0b24uY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSA9PT0gYnV0dG9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZCAhPT0gYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBidXR0b247XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYnV0dG9uLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub24tc2VsZWN0ZWQgYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnV0dG9uLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0UmFkaW9CdXR0b25MYWJlbFBvc2l0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5sYWJlbFBvc2l0aW9uID0gdGhpcy5fbGFiZWxQb3NpdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldFJhZGlvQnV0dG9uc1JlcXVpcmVkKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5yZXF1aXJlZCA9IHRoaXMuX3JlcXVpcmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneFJhZGlvR3JvdXBEaXJlY3RpdmUsIElneFJhZGlvQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSwgSWd4UmFkaW9Db21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtJZ3hSaXBwbGVNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIElneFJhZGlvTW9kdWxlIHt9XG4iXX0=
@@ -1,12 +1,10 @@
1
1
  import { IGX_DROPDOWN_BASE } from './drop-down.common';
2
2
  import { Directive, Input, HostBinding, HostListener, Optional, Inject, Output, EventEmitter } from '@angular/core';
3
3
  import { IgxSelectionAPIService } from '../core/selection';
4
- import { showMessage } from '../core/deprecateDecorators';
5
4
  import * as i0 from "@angular/core";
6
5
  import * as i1 from "./drop-down-group.component";
7
6
  import * as i2 from "../core/selection";
8
7
  let NEXT_ID = 0;
9
- let warningShown = false;
10
8
  /**
11
9
  * An abstract class defining a drop-down item:
12
10
  * With properties / styles for selection, highlight, height
@@ -71,8 +69,6 @@ export class IgxDropDownItemBaseDirective {
71
69
  */
72
70
  get index() {
73
71
  if (this._index === null) {
74
- warningShown = showMessage('IgxDropDownItemBaseDirective: Automatic index is deprecated.' +
75
- 'Bind in the template instead using `<igx-drop-down-item [index]="i"` instead.`', warningShown);
76
72
  return this.itemIndex;
77
73
  }
78
74
  return this._index;
@@ -333,4 +329,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
333
329
  type: HostListener,
334
330
  args: ['mousedown', ['$event']]
335
331
  }] } });
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1kb3duLWl0ZW0uYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kcm9wLWRvd24vZHJvcC1kb3duLWl0ZW0uYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBYyxRQUFRLEVBQUUsTUFBTSxFQUFXLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekksT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBRzFELElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNoQixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7QUFFekI7Ozs7OztHQU1HO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQWdSckMsWUFDeUMsUUFBdUIsRUFDbEQsVUFBc0IsRUFDVixLQUFnQyxFQUNBLFNBQWtDO1FBSG5ELGFBQVEsR0FBUixRQUFRLENBQWU7UUFDbEQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNWLFVBQUssR0FBTCxLQUFLLENBQTJCO1FBQ0EsY0FBUyxHQUFULFNBQVMsQ0FBeUI7UUFuUjVGOzs7Ozs7Ozs7O1dBVUc7UUFHSSxPQUFFLEdBQUcsc0JBQXNCLE9BQU8sRUFBRSxFQUFFLENBQUM7UUErRzlDOztXQUVHO1FBRUksbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBNkZwRDs7Ozs7O1dBTUc7UUFHSSxTQUFJLEdBQUcsUUFBUSxDQUFDO1FBaUN2Qjs7V0FFRztRQUNPLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsY0FBUyxHQUFHLEtBQUssQ0FB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LFdBQVc7dUJBQUMscUNBQXFDO2dCQWlCM0MsY0FBYztzQkFEcEIsTUFBTTtnQkFXSSxPQUFPO3NCQURqQixXQUFXO3VCQUFDLG9DQUFvQztnQkFxQzFDLFFBQVE7c0JBRmQsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBTy9CLGVBQWU7c0JBRHpCLFdBQVc7dUJBQUMsbUNBQW1DO2dCQVNyQyxrQkFBa0I7c0JBRDVCLFdBQVc7dUJBQUMsc0NBQXNDO2dCQTBCeEMsUUFBUTtzQkFIbEIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxvQkFBb0I7O3NCQUNoQyxXQUFXO3VCQUFDLHFDQUFxQztnQkFrQjNDLElBQUk7c0JBRlYsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxXQUFXO2dCQXNEakIsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTMUIsZUFBZTtzQkFEckIsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRHJvcERvd25CYXNlLCBJR1hfRFJPUERPV05fQkFTRSB9IGZyb20gJy4vZHJvcC1kb3duLmNvbW1vbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBPcHRpb25hbCwgSW5qZWN0LCBEb0NoZWNrLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4U2VsZWN0aW9uQVBJU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VsZWN0aW9uJztcbmltcG9ydCB7IHNob3dNZXNzYWdlIH0gZnJvbSAnLi4vY29yZS9kZXByZWNhdGVEZWNvcmF0b3JzJztcbmltcG9ydCB7IElneERyb3BEb3duR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2Ryb3AtZG93bi1ncm91cC5jb21wb25lbnQnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5sZXQgd2FybmluZ1Nob3duID0gZmFsc2U7XG5cbi8qKlxuICogQW4gYWJzdHJhY3QgY2xhc3MgZGVmaW5pbmcgYSBkcm9wLWRvd24gaXRlbTpcbiAqIFdpdGggcHJvcGVydGllcyAvIHN0eWxlcyBmb3Igc2VsZWN0aW9uLCBoaWdobGlnaHQsIGhlaWdodFxuICogQmluZGFibGUgcHJvcGVydHkgZm9yIHBhc3NpbmcgZGF0YSAoYHZhbHVlOiBhbnlgKVxuICogUGFyZW50IGNvbXBvbmVudCAoaGFzIHRvIGJlIHVzZWQgdW5kZXIgYSBwYXJlbnQgd2l0aCB0eXBlIGBJRHJvcERvd25CYXNlYClcbiAqIE1ldGhvZCBmb3IgaGFuZGxpbmcgY2xpY2sgb24gSG9zdCgpXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneERyb3BEb3duSXRlbUJhc2VdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hEcm9wRG93bkl0ZW1CYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgRG9DaGVjayB7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBpdGVtLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRyb3AtZG93bi1pdGVtIFtpZF0gPSAnaWd4LWRyb3AtZG93bi1pdGVtLTAnPjwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXRlbUlkID0gIHRoaXMuaXRlbS5pZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtZHJvcC1kb3duLWl0ZW0tJHtORVhUX0lEKyt9YDtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGl0ZW1JRCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgaW5kZXggb2YgdGhlIGRyb3Bkb3duIGl0ZW0uXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBkYXRhIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBkcm9wZG93biBpdGVtXG4gICAgICogbGV0IHNlbGVjdGVkSXRlbUluZGV4ID0gdGhpcy5kcm9wZG93bi5zZWxlY3RlZEl0ZW0uaW5kZXhcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuX2luZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICB3YXJuaW5nU2hvd24gPSBzaG93TWVzc2FnZShcbiAgICAgICAgICAgICAgICAnSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZTogQXV0b21hdGljIGluZGV4IGlzIGRlcHJlY2F0ZWQuJyArXG4gICAgICAgICAgICAgICAgJ0JpbmQgaW4gdGhlIHRlbXBsYXRlIGluc3RlYWQgdXNpbmcgYDxpZ3gtZHJvcC1kb3duLWl0ZW0gW2luZGV4XT1cImlcImAgaW5zdGVhZC5gJyxcbiAgICAgICAgICAgICAgICB3YXJuaW5nU2hvd24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGluZGV4KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2luZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHRoZSB2YWx1ZSBvZiB0aGUgaXRlbSBpZiB0aGUgaXRlbSBpcyBkYXRhYm91bmRcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyB1c2FnZSBpbiBJZ3hEcm9wRG93bkl0ZW1Db21wb25lbnRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgbXlTZWxlY3RlZEl0ZW1WYWx1ZSA9IHRoaXMuZHJvcGRvd24uc2VsZWN0ZWRJdGVtLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gc2V0XG4gICAgICogbGV0IG15U2VsZWN0ZWRJdGVtID0gdGhpcy5kcm9wZG93bi5zZWxlY3RlZEl0ZW07XG4gICAgICogbXlTZWxlY3RlZEl0ZW0udmFsdWUgPSB7IGlkOiAxMjMsIG5hbWU6ICdFeGFtcGxlIE5hbWUnIH1cbiAgICAgKlxuICAgICAqIC8vIHVzYWdlIGluIElneENvbWJvSXRlbUNvbXBvbmVudFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvSXRlbVZhbHVlID0gdGhpcy5jb21iby5pdGVtc1swXS52YWx1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kcm9wLWRvd25fX2l0ZW0nKVxuICAgIHB1YmxpYyBnZXQgaXRlbVN0eWxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNIZWFkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kcm9wLWRvd25fX2l0ZW0tLWNvc3knKVxuICAgIHB1YmxpYyBnZXQgaXRlbVN0eWxlQ29zeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJvcERvd24uZGlzcGxheURlbnNpdHkgPT09ICdjb3N5JyAmJiAhdGhpcy5pc0hlYWRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faXRlbS0tY29tcGFjdCcpXG4gICAgcHVibGljIGdldCBpdGVtU3R5bGVDb21wYWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcm9wRG93bi5kaXNwbGF5RGVuc2l0eSA9PT0gJ2NvbXBhY3QnICYmICF0aGlzLmlzSGVhZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvR2V0cyBpZiB0aGUgaXRlbSBpcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9uZSBpbiB0aGUgZHJvcGRvd25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgbGV0IG15U2VsZWN0ZWRJdGVtID0gdGhpcy5kcm9wZG93bi5zZWxlY3RlZEl0ZW07XG4gICAgICogIGxldCBpc015SXRlbVNlbGVjdGVkID0gbXlTZWxlY3RlZEl0ZW0uc2VsZWN0ZWQ7IC8vIHRydWVcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFR3by13YXkgZGF0YSBiaW5kaW5nXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZHJvcC1kb3duLWl0ZW0gWyhzZWxlY3RlZCldPSdtb2RlbC5pc1NlbGVjdGVkJz48L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kcm9wLWRvd25fX2l0ZW0tLXNlbGVjdGVkJylcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5pc0hlYWRlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyBpZiB0aGUgZ2l2ZW4gaXRlbSBpcyBmb2N1c2VkXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBsZXQgbXlTZWxlY3RlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkSXRlbTtcbiAgICAgKiAgbGV0IGlzTXlJdGVtRm9jdXNlZCA9IG15U2VsZWN0ZWRJdGVtLmZvY3VzZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19pdGVtLS1mb2N1c2VkJylcbiAgICBwdWJsaWMgZ2V0IGZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2VsZWN0YWJsZSAmJiB0aGlzLl9mb2N1c2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1kcm9wLWRvd24taXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiIGZvY3VzZWQ9e3shaXRlbS5mb2N1c2VkfX0+XG4gICAgICogICAgICA8ZGl2PlxuICAgICAqICAgICAgICAgIHt7aXRlbS5maWVsZH19XG4gICAgICogICAgICA8L2Rpdj5cbiAgICAgKiAgPC9pZ3gtZHJvcC1kb3duLWl0ZW0+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBmb2N1c2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgaWYgdGhlIGdpdmVuIGl0ZW0gaXMgaGVhZGVyXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAvLyBnZXRcbiAgICAgKiAgbGV0IG15U2VsZWN0ZWRJdGVtID0gdGhpcy5kcm9wZG93bi5zZWxlY3RlZEl0ZW07XG4gICAgICogIGxldCBpc015SXRlbUhlYWRlciA9IG15U2VsZWN0ZWRJdGVtLmlzSGVhZGVyO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8IS0tc2V0LS0+XG4gICAgICogIDxpZ3gtZHJvcC1kb3duLWl0ZW0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cbiAgICAgKiAgICAgIDxkaXYgKm5nSWY9XCJpdGVtcy5pbmRleE9mKGl0ZW0pID09PSA1OyB0aGVuIGl0ZW0uaXNIZWFkZXIgPSB0cnVlXCI+XG4gICAgICogICAgICAgICAge3tpdGVtLmZpZWxkfX1cbiAgICAgKiAgICAgIDwvZGl2PlxuICAgICAqICA8L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faGVhZGVyJylcbiAgICBwdWJsaWMgaXNIZWFkZXI6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faGVhZGVyLS1jb3N5JylcbiAgICBwdWJsaWMgZ2V0IGhlYWRlckNsYXNzQ29zeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNIZWFkZXIgJiYgdGhpcy5kcm9wRG93bi5kaXNwbGF5RGVuc2l0eSA9PT0gJ2Nvc3knO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19oZWFkZXItLWNvbXBhY3QnKVxuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ2xhc3NDb21wYWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0hlYWRlciAmJiB0aGlzLmRyb3BEb3duLmRpc3BsYXlEZW5zaXR5ID09PSAnY29tcGFjdCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIGlmIHRoZSBnaXZlbiBpdGVtIGlzIGRpc2FibGVkXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIC8vIGdldFxuICAgICAqICBsZXQgbXlTZWxlY3RlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkSXRlbTtcbiAgICAgKiAgbGV0IG15SXRlbUlzRGlzYWJsZWQgPSBteVNlbGVjdGVkSXRlbS5kaXNhYmxlZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1kcm9wLWRvd24taXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiIGRpc2FibGVkPXt7IWl0ZW0uZGlzYWJsZWR9fT5cbiAgICAgKiAgICAgIDxkaXY+XG4gICAgICogICAgICAgICAge3tpdGVtLmZpZWxkfX1cbiAgICAgKiAgICAgIDwvZGl2PlxuICAgICAqICA8L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgKiBgYGBcbiAgICAgKiAqKk5PVEU6KiogRHJvcC1kb3duIGl0ZW1zIGluc2lkZSBvZiBhIGRpc2FibGVkIGBJZ3hEcm9wRG93bkdyb3VwYCB3aWxsIGFsd2F5cyBjb3VudCBhcyBkaXNhYmxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGlzYWJsZWQnKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faXRlbS0tZGlzYWJsZWQnKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5kaXNhYmxlZCB8fCB0aGlzLl9kaXNhYmxlZCA6IHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIGByb2xlYCBhdHRyaWJ1dGUgb2YgdGhlIGl0ZW0uIERlZmF1bHQgaXMgJ29wdGlvbicuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZHJvcC1kb3duLWl0ZW0gW3JvbGVdPVwiY3VzdG9tUm9sZVwiPjwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ29wdGlvbic7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGl0ZW0gaW5kZXhcbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBpdGVtSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJvcERvd24uaXRlbXMuaW5kZXhPZih0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGl0ZW0gZWxlbWVudCBoZWlnaHRcbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBlbGVtZW50SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGl0ZW0gaHRtbCBlbGVtZW50XG4gICAgICpcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZWxlbWVudCgpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGhhc0luZGV4KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5kZXggIT09IG51bGwgJiYgdGhpcy5faW5kZXggIT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9mb2N1c2VkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfaW5kZXggPSBudWxsO1xuICAgIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9EUk9QRE9XTl9CQVNFKSBwcm90ZWN0ZWQgZHJvcERvd246IElEcm9wRG93bkJhc2UsXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgZ3JvdXA6IElneERyb3BEb3duR3JvdXBDb21wb25lbnQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSWd4U2VsZWN0aW9uQVBJU2VydmljZSkgcHJvdGVjdGVkIHNlbGVjdGlvbj86IElneFNlbGVjdGlvbkFQSVNlcnZpY2VcbiAgICApIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgY2xpY2tlZChldmVudCk6IHZvaWQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIGhhbmRsZU1vdXNlZG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZHJvcERvd24uYWxsb3dJdGVtc0ZvY3VzKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb25zdCBkcm9wRG93blNlbGVjdGVkSXRlbSA9IHRoaXMuZHJvcERvd24uc2VsZWN0ZWRJdGVtO1xuICAgICAgICAgICAgaWYgKCFkcm9wRG93blNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcERvd24uc2VsZWN0SXRlbSh0aGlzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNJbmRleFxuICAgICAgICAgICAgICAgID8gdGhpcy5faW5kZXggIT09IGRyb3BEb3duU2VsZWN0ZWRJdGVtLmluZGV4IHx8IHRoaXMudmFsdWUgIT09IGRyb3BEb3duU2VsZWN0ZWRJdGVtLnZhbHVlIDpcbiAgICAgICAgICAgICAgICB0aGlzICE9PSBkcm9wRG93blNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcERvd24uc2VsZWN0SXRlbSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGl0ZW1zIGlzIG5vdCBhIGhlYWRlciBvciBkaXNhYmxlZCAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGlzU2VsZWN0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICAhKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5pc0hlYWRlcik7XG4gICAgfVxuXG4gICAgLyoqIElmIGBhbGxvd0l0ZW1zRm9jdXNgIGlzIGVuYWJsZWQsIGtlZXAgdGhlIGJyb3dzZXIgZm9jdXMgb24gdGhlIGFjdGl2ZSBpdGVtICovXG4gICAgcHJvdGVjdGVkIGVuc3VyZUl0ZW1Gb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcERvd24uYWxsb3dJdGVtc0ZvY3VzKSB7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkSXRlbSA9IHRoaXMuZHJvcERvd24uaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5mb2N1c2VkKTtcbiAgICAgICAgICAgIGlmICghZm9jdXNlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb2N1c2VkSXRlbS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1kb3duLWl0ZW0uYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kcm9wLWRvd24vZHJvcC1kb3duLWl0ZW0uYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBYyxRQUFRLEVBQUUsTUFBTSxFQUFXLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekksT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFHM0QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBRWhCOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTyw0QkFBNEI7SUE0UXJDLFlBQ3lDLFFBQXVCLEVBQ2xELFVBQXNCLEVBQ1YsS0FBZ0MsRUFDQSxTQUFrQztRQUhuRCxhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ2xELGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVixVQUFLLEdBQUwsS0FBSyxDQUEyQjtRQUNBLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBL1E1Rjs7Ozs7Ozs7OztXQVVHO1FBR0ksT0FBRSxHQUFHLHNCQUFzQixPQUFPLEVBQUUsRUFBRSxDQUFDO1FBMkc5Qzs7V0FFRztRQUVJLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQTZGcEQ7Ozs7OztXQU1HO1FBR0ksU0FBSSxHQUFHLFFBQVEsQ0FBQztRQWlDdkI7O1dBRUc7UUFDTyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLGNBQVMsR0FBRyxLQUFLLENBQUM7SUFPeEIsQ0FBQztJQWpRTCxJQUVX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QUR6QixXQUFXO3VCQUFDLG1DQUFtQztnQkFTckMsa0JBQWtCO3NCQUQ1QixXQUFXO3VCQUFDLHNDQUFzQztnQkEwQnhDLFFBQVE7c0JBSGxCLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsb0JBQW9COztzQkFDaEMsV0FBVzt1QkFBQyxxQ0FBcUM7Z0JBa0IzQyxJQUFJO3NCQUZWLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsV0FBVztnQkFzRGpCLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUzFCLGVBQWU7c0JBRHJCLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSURyb3BEb3duQmFzZSwgSUdYX0RST1BET1dOX0JBU0UgfSBmcm9tICcuL2Ryb3AtZG93bi5jb21tb24nO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgT3B0aW9uYWwsIEluamVjdCwgRG9DaGVjaywgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneFNlbGVjdGlvbkFQSVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9kcm9wLWRvd24tZ3JvdXAuY29tcG9uZW50JztcblxubGV0IE5FWFRfSUQgPSAwO1xuXG4vKipcbiAqIEFuIGFic3RyYWN0IGNsYXNzIGRlZmluaW5nIGEgZHJvcC1kb3duIGl0ZW06XG4gKiBXaXRoIHByb3BlcnRpZXMgLyBzdHlsZXMgZm9yIHNlbGVjdGlvbiwgaGlnaGxpZ2h0LCBoZWlnaHRcbiAqIEJpbmRhYmxlIHByb3BlcnR5IGZvciBwYXNzaW5nIGRhdGEgKGB2YWx1ZTogYW55YClcbiAqIFBhcmVudCBjb21wb25lbnQgKGhhcyB0byBiZSB1c2VkIHVuZGVyIGEgcGFyZW50IHdpdGggdHlwZSBgSURyb3BEb3duQmFzZWApXG4gKiBNZXRob2QgZm9yIGhhbmRsaW5nIGNsaWNrIG9uIEhvc3QoKVxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hEcm9wRG93bkl0ZW1CYXNlXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RHJvcERvd25JdGVtQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIERvQ2hlY2sge1xuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgaXRlbS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kcm9wLWRvd24taXRlbSBbaWRdID0gJ2lneC1kcm9wLWRvd24taXRlbS0wJz48L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGl0ZW1JZCA9ICB0aGlzLml0ZW0uaWQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4U2VsZWN0SXRlbUNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWRyb3AtZG93bi1pdGVtLSR7TkVYVF9JRCsrfWA7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiB0aGlzLmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBpdGVtSUQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGluZGV4IG9mIHRoZSBkcm9wZG93biBpdGVtLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIC8vIGdldCB0aGUgZGF0YSBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgZHJvcGRvd24gaXRlbVxuICAgICAqIGxldCBzZWxlY3RlZEl0ZW1JbmRleCA9IHRoaXMuZHJvcGRvd24uc2VsZWN0ZWRJdGVtLmluZGV4XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl9pbmRleCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGluZGV4KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2luZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHRoZSB2YWx1ZSBvZiB0aGUgaXRlbSBpZiB0aGUgaXRlbSBpcyBkYXRhYm91bmRcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyB1c2FnZSBpbiBJZ3hEcm9wRG93bkl0ZW1Db21wb25lbnRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgbXlTZWxlY3RlZEl0ZW1WYWx1ZSA9IHRoaXMuZHJvcGRvd24uc2VsZWN0ZWRJdGVtLnZhbHVlO1xuICAgICAqXG4gICAgICogLy8gc2V0XG4gICAgICogbGV0IG15U2VsZWN0ZWRJdGVtID0gdGhpcy5kcm9wZG93bi5zZWxlY3RlZEl0ZW07XG4gICAgICogbXlTZWxlY3RlZEl0ZW0udmFsdWUgPSB7IGlkOiAxMjMsIG5hbWU6ICdFeGFtcGxlIE5hbWUnIH1cbiAgICAgKlxuICAgICAqIC8vIHVzYWdlIGluIElneENvbWJvSXRlbUNvbXBvbmVudFxuICAgICAqIC8vIGdldFxuICAgICAqIGxldCBteUNvbWJvSXRlbVZhbHVlID0gdGhpcy5jb21iby5pdGVtc1swXS52YWx1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kcm9wLWRvd25fX2l0ZW0nKVxuICAgIHB1YmxpYyBnZXQgaXRlbVN0eWxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNIZWFkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kcm9wLWRvd25fX2l0ZW0tLWNvc3knKVxuICAgIHB1YmxpYyBnZXQgaXRlbVN0eWxlQ29zeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJvcERvd24uZGlzcGxheURlbnNpdHkgPT09ICdjb3N5JyAmJiAhdGhpcy5pc0hlYWRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faXRlbS0tY29tcGFjdCcpXG4gICAgcHVibGljIGdldCBpdGVtU3R5bGVDb21wYWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcm9wRG93bi5kaXNwbGF5RGVuc2l0eSA9PT0gJ2NvbXBhY3QnICYmICF0aGlzLmlzSGVhZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvR2V0cyBpZiB0aGUgaXRlbSBpcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9uZSBpbiB0aGUgZHJvcGRvd25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgbGV0IG15U2VsZWN0ZWRJdGVtID0gdGhpcy5kcm9wZG93bi5zZWxlY3RlZEl0ZW07XG4gICAgICogIGxldCBpc015SXRlbVNlbGVjdGVkID0gbXlTZWxlY3RlZEl0ZW0uc2VsZWN0ZWQ7IC8vIHRydWVcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFR3by13YXkgZGF0YSBiaW5kaW5nXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZHJvcC1kb3duLWl0ZW0gWyhzZWxlY3RlZCldPSdtb2RlbC5pc1NlbGVjdGVkJz48L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kcm9wLWRvd25fX2l0ZW0tLXNlbGVjdGVkJylcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5pc0hlYWRlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyBpZiB0aGUgZ2l2ZW4gaXRlbSBpcyBmb2N1c2VkXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBsZXQgbXlTZWxlY3RlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkSXRlbTtcbiAgICAgKiAgbGV0IGlzTXlJdGVtRm9jdXNlZCA9IG15U2VsZWN0ZWRJdGVtLmZvY3VzZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19pdGVtLS1mb2N1c2VkJylcbiAgICBwdWJsaWMgZ2V0IGZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2VsZWN0YWJsZSAmJiB0aGlzLl9mb2N1c2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1kcm9wLWRvd24taXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiIGZvY3VzZWQ9e3shaXRlbS5mb2N1c2VkfX0+XG4gICAgICogICAgICA8ZGl2PlxuICAgICAqICAgICAgICAgIHt7aXRlbS5maWVsZH19XG4gICAgICogICAgICA8L2Rpdj5cbiAgICAgKiAgPC9pZ3gtZHJvcC1kb3duLWl0ZW0+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBmb2N1c2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgaWYgdGhlIGdpdmVuIGl0ZW0gaXMgaGVhZGVyXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAvLyBnZXRcbiAgICAgKiAgbGV0IG15U2VsZWN0ZWRJdGVtID0gdGhpcy5kcm9wZG93bi5zZWxlY3RlZEl0ZW07XG4gICAgICogIGxldCBpc015SXRlbUhlYWRlciA9IG15U2VsZWN0ZWRJdGVtLmlzSGVhZGVyO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8IS0tc2V0LS0+XG4gICAgICogIDxpZ3gtZHJvcC1kb3duLWl0ZW0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cbiAgICAgKiAgICAgIDxkaXYgKm5nSWY9XCJpdGVtcy5pbmRleE9mKGl0ZW0pID09PSA1OyB0aGVuIGl0ZW0uaXNIZWFkZXIgPSB0cnVlXCI+XG4gICAgICogICAgICAgICAge3tpdGVtLmZpZWxkfX1cbiAgICAgKiAgICAgIDwvZGl2PlxuICAgICAqICA8L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faGVhZGVyJylcbiAgICBwdWJsaWMgaXNIZWFkZXI6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faGVhZGVyLS1jb3N5JylcbiAgICBwdWJsaWMgZ2V0IGhlYWRlckNsYXNzQ29zeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNIZWFkZXIgJiYgdGhpcy5kcm9wRG93bi5kaXNwbGF5RGVuc2l0eSA9PT0gJ2Nvc3knO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZHJvcC1kb3duX19oZWFkZXItLWNvbXBhY3QnKVxuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ2xhc3NDb21wYWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0hlYWRlciAmJiB0aGlzLmRyb3BEb3duLmRpc3BsYXlEZW5zaXR5ID09PSAnY29tcGFjdCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIGlmIHRoZSBnaXZlbiBpdGVtIGlzIGRpc2FibGVkXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIC8vIGdldFxuICAgICAqICBsZXQgbXlTZWxlY3RlZEl0ZW0gPSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkSXRlbTtcbiAgICAgKiAgbGV0IG15SXRlbUlzRGlzYWJsZWQgPSBteVNlbGVjdGVkSXRlbS5kaXNhYmxlZDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1kcm9wLWRvd24taXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiIGRpc2FibGVkPXt7IWl0ZW0uZGlzYWJsZWR9fT5cbiAgICAgKiAgICAgIDxkaXY+XG4gICAgICogICAgICAgICAge3tpdGVtLmZpZWxkfX1cbiAgICAgKiAgICAgIDwvZGl2PlxuICAgICAqICA8L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgKiBgYGBcbiAgICAgKiAqKk5PVEU6KiogRHJvcC1kb3duIGl0ZW1zIGluc2lkZSBvZiBhIGRpc2FibGVkIGBJZ3hEcm9wRG93bkdyb3VwYCB3aWxsIGFsd2F5cyBjb3VudCBhcyBkaXNhYmxlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGlzYWJsZWQnKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWRyb3AtZG93bl9faXRlbS0tZGlzYWJsZWQnKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwID8gdGhpcy5ncm91cC5kaXNhYmxlZCB8fCB0aGlzLl9kaXNhYmxlZCA6IHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIGByb2xlYCBhdHRyaWJ1dGUgb2YgdGhlIGl0ZW0uIERlZmF1bHQgaXMgJ29wdGlvbicuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZHJvcC1kb3duLWl0ZW0gW3JvbGVdPVwiY3VzdG9tUm9sZVwiPjwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ29wdGlvbic7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGl0ZW0gaW5kZXhcbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBpdGVtSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJvcERvd24uaXRlbXMuaW5kZXhPZih0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGl0ZW0gZWxlbWVudCBoZWlnaHRcbiAgICAgKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBlbGVtZW50SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGl0ZW0gaHRtbCBlbGVtZW50XG4gICAgICpcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZWxlbWVudCgpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGhhc0luZGV4KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5kZXggIT09IG51bGwgJiYgdGhpcy5faW5kZXggIT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9mb2N1c2VkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfaW5kZXggPSBudWxsO1xuICAgIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9EUk9QRE9XTl9CQVNFKSBwcm90ZWN0ZWQgZHJvcERvd246IElEcm9wRG93bkJhc2UsXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgZ3JvdXA6IElneERyb3BEb3duR3JvdXBDb21wb25lbnQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSWd4U2VsZWN0aW9uQVBJU2VydmljZSkgcHJvdGVjdGVkIHNlbGVjdGlvbj86IElneFNlbGVjdGlvbkFQSVNlcnZpY2VcbiAgICApIHsgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgY2xpY2tlZChldmVudCk6IHZvaWQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIGhhbmRsZU1vdXNlZG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZHJvcERvd24uYWxsb3dJdGVtc0ZvY3VzKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb25zdCBkcm9wRG93blNlbGVjdGVkSXRlbSA9IHRoaXMuZHJvcERvd24uc2VsZWN0ZWRJdGVtO1xuICAgICAgICAgICAgaWYgKCFkcm9wRG93blNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcERvd24uc2VsZWN0SXRlbSh0aGlzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNJbmRleFxuICAgICAgICAgICAgICAgID8gdGhpcy5faW5kZXggIT09IGRyb3BEb3duU2VsZWN0ZWRJdGVtLmluZGV4IHx8IHRoaXMudmFsdWUgIT09IGRyb3BEb3duU2VsZWN0ZWRJdGVtLnZhbHVlIDpcbiAgICAgICAgICAgICAgICB0aGlzICE9PSBkcm9wRG93blNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcERvd24uc2VsZWN0SXRlbSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGl0ZW1zIGlzIG5vdCBhIGhlYWRlciBvciBkaXNhYmxlZCAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGlzU2VsZWN0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICAhKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5pc0hlYWRlcik7XG4gICAgfVxuXG4gICAgLyoqIElmIGBhbGxvd0l0ZW1zRm9jdXNgIGlzIGVuYWJsZWQsIGtlZXAgdGhlIGJyb3dzZXIgZm9jdXMgb24gdGhlIGFjdGl2ZSBpdGVtICovXG4gICAgcHJvdGVjdGVkIGVuc3VyZUl0ZW1Gb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcERvd24uYWxsb3dJdGVtc0ZvY3VzKSB7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkSXRlbSA9IHRoaXMuZHJvcERvd24uaXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5mb2N1c2VkKTtcbiAgICAgICAgICAgIGlmICghZm9jdXNlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb2N1c2VkSXRlbS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -273,7 +273,7 @@ export class IgxColumnActionsComponent {
273
273
  */
274
274
  ngDoCheck() {
275
275
  if (this._differ) {
276
- const changes = this._differ.diff(this.grid?.columns);
276
+ const changes = this._differ.diff(this.grid?.columnList);
277
277
  if (changes) {
278
278
  this.pipeTrigger++;
279
279
  }
@@ -310,10 +310,10 @@ export class IgxColumnActionsComponent {
310
310
  }
311
311
  }
312
312
  IgxColumnActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxColumnActionsComponent, deps: [{ token: i0.IterableDiffers }], target: i0.ɵɵFactoryTarget.Component });
313
- IgxColumnActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxColumnActionsComponent, selector: "igx-column-actions", inputs: { grid: "grid", indentation: "indentation", columnsAreaMaxHeight: "columnsAreaMaxHeight", hideFilter: "hideFilter", title: "title", filterColumnsPrompt: "filterColumnsPrompt", filterCriteria: "filterCriteria", columnDisplayOrder: "columnDisplayOrder", uncheckAllText: "uncheckAllText", checkAllText: "checkAllText", id: "id" }, outputs: { columnToggled: "columnToggled" }, host: { properties: { "attr.class": "this.cssClass", "attr.id": "this.id" } }, viewQueries: [{ propertyName: "columnItems", predicate: IgxCheckboxComponent, descendants: true }], ngImport: i0, template: "<div class=\"igx-column-actions__header\">\n <h4 [attr.id]='titleID' class=\"igx-column-actions__header-title\" *ngIf=\"title\">{{ title }}</h4>\n\n <igx-input-group class=\"igx-column-actions__header-input\" *ngIf=\"!hideFilter\">\n <input igxInput\n type=\"text\"\n [attr.aria-describedby]='titleID'\n [(ngModel)]=\"filterCriteria\"\n [placeholder]=\"filterColumnsPrompt\"\n autocomplete=\"off\" />\n </igx-input-group>\n</div>\n\n<div class=\"igx-column-actions__columns\" tabindex=\"0\"\n [style.max-height]=\"columnsAreaMaxHeight\">\n <igx-checkbox\n *ngFor=\"let column of grid?.columns\n | columnActionEnabled:actionsDirective.actionEnabledColumnsFilter:pipeTrigger\n | filterActionColumns:filterCriteria:pipeTrigger\n | sortActionColumns:columnDisplayOrder:pipeTrigger;\"\n class=\"igx-column-actions__columns-item\"\n [readonly]=\"true\"\n (click)=\"toggleColumn(column)\"\n [checked]=\"actionsDirective.columnChecked(column)\"\n [style.margin-left.px]=\"column.level * indentation\">\n {{ column.header || column.field }}\n </igx-checkbox>\n</div>\n\n<div class=\"igx-column-actions__buttons\">\n <button igxButton igxRipple (click)=\"uncheckAllColumns()\" [disabled]=\"uncheckAllDisabled\">{{ uncheckAllText }}</button>\n <button igxButton igxRipple (click)=\"checkAllColumns()\" [disabled]=\"checkAllDisabled\">{{ checkAllText }}</button>\n</div>\n", components: [{ type: i0.forwardRef(function () { return i1.IgxInputGroupComponent; }), selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { type: i0.forwardRef(function () { return i2.IgxCheckboxComponent; }), selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }], directives: [{ type: i0.forwardRef(function () { return i3.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i4.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i0.forwardRef(function () { return i5.IgxInputDirective; }), selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { type: i0.forwardRef(function () { return i4.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { type: i0.forwardRef(function () { return i4.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i0.forwardRef(function () { return i3.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i0.forwardRef(function () { return i6.IgxButtonDirective; }), selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: i0.forwardRef(function () { return i7.IgxRippleDirective; }), selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }], pipes: { "sortActionColumns": i0.forwardRef(function () { return IgxSortActionColumnsPipe; }), "filterActionColumns": i0.forwardRef(function () { return IgxFilterActionColumnsPipe; }), "columnActionEnabled": i0.forwardRef(function () { return IgxColumnActionEnabledPipe; }) } });
313
+ IgxColumnActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: IgxColumnActionsComponent, selector: "igx-column-actions", inputs: { grid: "grid", indentation: "indentation", columnsAreaMaxHeight: "columnsAreaMaxHeight", hideFilter: "hideFilter", title: "title", filterColumnsPrompt: "filterColumnsPrompt", filterCriteria: "filterCriteria", columnDisplayOrder: "columnDisplayOrder", uncheckAllText: "uncheckAllText", checkAllText: "checkAllText", id: "id" }, outputs: { columnToggled: "columnToggled" }, host: { properties: { "attr.class": "this.cssClass", "attr.id": "this.id" } }, viewQueries: [{ propertyName: "columnItems", predicate: IgxCheckboxComponent, descendants: true }], ngImport: i0, template: "<div class=\"igx-column-actions__header\">\n <h4 [attr.id]='titleID' class=\"igx-column-actions__header-title\" *ngIf=\"title\">{{ title }}</h4>\n\n <igx-input-group class=\"igx-column-actions__header-input\" *ngIf=\"!hideFilter\">\n <input igxInput\n type=\"text\"\n [attr.aria-describedby]='titleID'\n [(ngModel)]=\"filterCriteria\"\n [placeholder]=\"filterColumnsPrompt\"\n autocomplete=\"off\" />\n </igx-input-group>\n</div>\n\n<div class=\"igx-column-actions__columns\" tabindex=\"0\"\n [style.max-height]=\"columnsAreaMaxHeight\">\n <igx-checkbox\n *ngFor=\"let column of $any(grid)?.columnsCollection\n | columnActionEnabled:actionsDirective.actionEnabledColumnsFilter:pipeTrigger\n | filterActionColumns:filterCriteria:pipeTrigger\n | sortActionColumns:columnDisplayOrder:pipeTrigger;\"\n class=\"igx-column-actions__columns-item\"\n [readonly]=\"true\"\n (click)=\"toggleColumn(column)\"\n [checked]=\"actionsDirective.columnChecked(column)\"\n [style.margin-left.px]=\"column.level * indentation\">\n {{ column.header || column.field }}\n </igx-checkbox>\n</div>\n\n<div class=\"igx-column-actions__buttons\">\n <button igxButton igxRipple (click)=\"uncheckAllColumns()\" [disabled]=\"uncheckAllDisabled\">{{ uncheckAllText }}</button>\n <button igxButton igxRipple (click)=\"checkAllColumns()\" [disabled]=\"checkAllDisabled\">{{ checkAllText }}</button>\n</div>\n", components: [{ type: i0.forwardRef(function () { return i1.IgxInputGroupComponent; }), selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { type: i0.forwardRef(function () { return i2.IgxCheckboxComponent; }), selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }], directives: [{ type: i0.forwardRef(function () { return i3.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i4.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i0.forwardRef(function () { return i5.IgxInputDirective; }), selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { type: i0.forwardRef(function () { return i4.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { type: i0.forwardRef(function () { return i4.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i0.forwardRef(function () { return i3.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i0.forwardRef(function () { return i6.IgxButtonDirective; }), selector: "[igxButton]", inputs: ["selected", "igxButton", "igxButtonColor", "igxButtonBackground", "igxLabel", "disabled"], outputs: ["buttonClick", "buttonSelected"] }, { type: i0.forwardRef(function () { return i7.IgxRippleDirective; }), selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }], pipes: { "sortActionColumns": i0.forwardRef(function () { return IgxSortActionColumnsPipe; }), "filterActionColumns": i0.forwardRef(function () { return IgxFilterActionColumnsPipe; }), "columnActionEnabled": i0.forwardRef(function () { return IgxColumnActionEnabledPipe; }) } });
314
314
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: IgxColumnActionsComponent, decorators: [{
315
315
  type: Component,
316
- args: [{ selector: 'igx-column-actions', template: "<div class=\"igx-column-actions__header\">\n <h4 [attr.id]='titleID' class=\"igx-column-actions__header-title\" *ngIf=\"title\">{{ title }}</h4>\n\n <igx-input-group class=\"igx-column-actions__header-input\" *ngIf=\"!hideFilter\">\n <input igxInput\n type=\"text\"\n [attr.aria-describedby]='titleID'\n [(ngModel)]=\"filterCriteria\"\n [placeholder]=\"filterColumnsPrompt\"\n autocomplete=\"off\" />\n </igx-input-group>\n</div>\n\n<div class=\"igx-column-actions__columns\" tabindex=\"0\"\n [style.max-height]=\"columnsAreaMaxHeight\">\n <igx-checkbox\n *ngFor=\"let column of grid?.columns\n | columnActionEnabled:actionsDirective.actionEnabledColumnsFilter:pipeTrigger\n | filterActionColumns:filterCriteria:pipeTrigger\n | sortActionColumns:columnDisplayOrder:pipeTrigger;\"\n class=\"igx-column-actions__columns-item\"\n [readonly]=\"true\"\n (click)=\"toggleColumn(column)\"\n [checked]=\"actionsDirective.columnChecked(column)\"\n [style.margin-left.px]=\"column.level * indentation\">\n {{ column.header || column.field }}\n </igx-checkbox>\n</div>\n\n<div class=\"igx-column-actions__buttons\">\n <button igxButton igxRipple (click)=\"uncheckAllColumns()\" [disabled]=\"uncheckAllDisabled\">{{ uncheckAllText }}</button>\n <button igxButton igxRipple (click)=\"checkAllColumns()\" [disabled]=\"checkAllDisabled\">{{ checkAllText }}</button>\n</div>\n" }]
316
+ args: [{ selector: 'igx-column-actions', template: "<div class=\"igx-column-actions__header\">\n <h4 [attr.id]='titleID' class=\"igx-column-actions__header-title\" *ngIf=\"title\">{{ title }}</h4>\n\n <igx-input-group class=\"igx-column-actions__header-input\" *ngIf=\"!hideFilter\">\n <input igxInput\n type=\"text\"\n [attr.aria-describedby]='titleID'\n [(ngModel)]=\"filterCriteria\"\n [placeholder]=\"filterColumnsPrompt\"\n autocomplete=\"off\" />\n </igx-input-group>\n</div>\n\n<div class=\"igx-column-actions__columns\" tabindex=\"0\"\n [style.max-height]=\"columnsAreaMaxHeight\">\n <igx-checkbox\n *ngFor=\"let column of $any(grid)?.columnsCollection\n | columnActionEnabled:actionsDirective.actionEnabledColumnsFilter:pipeTrigger\n | filterActionColumns:filterCriteria:pipeTrigger\n | sortActionColumns:columnDisplayOrder:pipeTrigger;\"\n class=\"igx-column-actions__columns-item\"\n [readonly]=\"true\"\n (click)=\"toggleColumn(column)\"\n [checked]=\"actionsDirective.columnChecked(column)\"\n [style.margin-left.px]=\"column.level * indentation\">\n {{ column.header || column.field }}\n </igx-checkbox>\n</div>\n\n<div class=\"igx-column-actions__buttons\">\n <button igxButton igxRipple (click)=\"uncheckAllColumns()\" [disabled]=\"uncheckAllDisabled\">{{ uncheckAllText }}</button>\n <button igxButton igxRipple (click)=\"checkAllColumns()\" [disabled]=\"checkAllDisabled\">{{ checkAllText }}</button>\n</div>\n" }]
317
317
  }], ctorParameters: function () { return [{ type: i0.IterableDiffers }]; }, propDecorators: { grid: [{
318
318
  type: Input
319
319
  }], indentation: [{
@@ -425,4 +425,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
425
425
  type: Pipe,
426
426
  args: [{ name: 'sortActionColumns' }]
427
427
  }] });
428
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWFjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbHVtbi1hY3Rpb25zL2NvbHVtbi1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9jb2x1bW4tYWN0aW9ucy9jb2x1bW4tYWN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sSUFBSSxFQUdKLFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7O0FBR3pFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNoQjs7Ozs7R0FLRztBQUtILE1BQU0sT0FBTyx5QkFBeUI7SUEySWxDLFlBQW9CLE9BQXdCO1FBQXhCLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBL0g1Qzs7Ozs7OztXQU9HO1FBRUksZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDeEI7Ozs7Ozs7OztXQVNHO1FBRUksYUFBUSxHQUFHLG9CQUFvQixDQUFDO1FBQ3ZDOzs7Ozs7Ozs7V0FTRztRQUVJLHlCQUFvQixHQUFHLE1BQU0sQ0FBQztRQUNyQzs7Ozs7OztXQU9HO1FBRUksZUFBVSxHQUFHLEtBQUssQ0FBQztRQVcxQjs7Ozs7OztXQU9HO1FBRUksVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVsQjs7Ozs7O1dBTUc7UUFFSSxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUEyQixD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QVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQztZQUNGLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsNERBQTREO1FBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFHLElBQVcsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzt1SEF2QlEsMEJBQTBCLGtCQUVmLHlCQUF5QjtxSEFGcEMsMEJBQTBCOzJGQUExQiwwQkFBMEI7a0JBRHRDLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUU7MERBR3VDLHlCQUF5QjswQkFBcEYsTUFBTTsyQkFBQyx5QkFBeUI7O0FBeUJqRCxNQUFNLE9BQU8sd0JBQXdCO0lBRTFCLFNBQVMsQ0FBQyxVQUF3QixFQUFFLFlBQWdDLEVBQUUsWUFBb0I7UUFDN0YsSUFBSSxZQUFZLEtBQUssa0JBQWtCLENBQUMsWUFBWSxFQUFFO1lBQ2xELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDOUY7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDOztxSEFQUSx3QkFBd0I7bUhBQXhCLHdCQUF3QjsyRkFBeEIsd0JBQXdCO2tCQURwQyxJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRG9DaGVjayxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIEl0ZXJhYmxlRGlmZmVyLFxuICAgIEl0ZXJhYmxlRGlmZmVycyxcbiAgICBPdXRwdXQsXG4gICAgUGlwZSxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2x1bW5EaXNwbGF5T3JkZXIgfSBmcm9tICcuLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSwgR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNvbHVtblRvZ2dsZWRFdmVudEFyZ3MgfSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkFjdGlvbnNCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2x1bW4tYWN0aW9ucy1iYXNlLmRpcmVjdGl2ZSc7XG5cbmxldCBORVhUX0lEID0gMDtcbi8qKlxuICogUHJvdmlkaW5nIHJlZmVyZW5jZSB0byBgSWd4Q29sdW1uQWN0aW9uc0NvbXBvbmVudGA6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgQFZpZXdDaGlsZCgnY29sdW1uQWN0aW9ucycsIHsgcmVhZDogSWd4Q29sdW1uQWN0aW9uc0NvbXBvbmVudCB9KVxuICogIHB1YmxpYyBjb2x1bW5BY3Rpb25zOiBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50O1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jb2x1bW4tYWN0aW9ucycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbHVtbi1hY3Rpb25zLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjayB7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGdyaWQgdG8gcHJvdmlkZSBjb2x1bW4gYWN0aW9ucyBmb3IuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZ3JpZCA9IHRoaXMuY29sdW1uQWN0aW9ucy5ncmlkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgaW5kZW50YXRpb24gb2YgY29sdW1ucyBpbiB0aGUgY29sdW1uIGxpc3QgYmFzZWQgb24gdGhlaXIgaGllcmFyY2h5IGxldmVsLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBcbiAgICAgKiA8aWd4LWNvbHVtbi1hY3Rpb25zIFtpbmRlbnRhdGlvbl09XCIxNVwiPjwvaWd4LWNvbHVtbi1hY3Rpb25zPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGluZGVudGF0aW9uID0gMzA7XG4gICAgLyoqXG4gICAgICogU2V0cy9HZXRzIHRoZSBjc3MgY2xhc3Mgc2VsZWN0b3IuXG4gICAgICogQnkgZGVmYXVsdCB0aGUgdmFsdWUgb2YgdGhlIGBjbGFzc2AgYXR0cmlidXRlIGlzIGBcImlneC1jb2x1bW4tYWN0aW9uc1wiYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNzc0NMYXNzID0gIHRoaXMuY29sdW1uSGlkaW5nVUkuY3NzQ2xhc3M7XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uSGlkaW5nVUkuY3NzQ2xhc3MgPSAnY29sdW1uLWNob29zZXInO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5jbGFzcycpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1jb2x1bW4tYWN0aW9ucyc7XG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHRoZSBtYXggaGVpZ2h0IG9mIHRoZSBjb2x1bW5zIGFyZWEuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSBkZWZhdWx0IG1heCBoZWlnaHQgaXMgMTAwJS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbi1hY3Rpb25zIFtjb2x1bW5zQXJlYU1heEhlaWdodF09XCIyMDBweFwiPjwvaWd4LWNvbHVtbi1hY3Rpb25zPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbnNBcmVhTWF4SGVpZ2h0ID0gJzEwMCUnO1xuICAgIC8qKlxuICAgICAqIFNob3dzL2hpZGVzIHRoZSBjb2x1bW5zIGZpbHRlcmluZyBpbnB1dCBmcm9tIHRoZSBVSS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWNvbHVtbi1hY3Rpb25zIFtoaWRlRmlsdGVyXT1cInRydWVcIj48L2lneC1jb2x1bW4tYWN0aW9ucz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoaWRlRmlsdGVyID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY2hlY2tib3ggY29tcG9uZW50cyByZXByZXNlbnRpbmcgY29sdW1uIGl0ZW1zIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSBkcm9wZG93blxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkl0ZW1zID0gIHRoaXMuY29sdW1uQWN0aW9ucy5jb2x1bW5JdGVtcztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneENoZWNrYm94Q29tcG9uZW50KVxuICAgIHB1YmxpYyBjb2x1bW5JdGVtczogUXVlcnlMaXN0PElneENoZWNrYm94Q29tcG9uZW50PjtcbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIHRpdGxlIG9mIHRoZSBjb2x1bW4gYWN0aW9ucyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbi1hY3Rpb25zIFt0aXRsZV09XCInUGluIENvbHVtbnMnXCI+PC9pZ3gtY29sdW1uLWFjdGlvbnM+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGl0bGUgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciBhIGNvbHVtbidzIGNoZWNrZWQgc3RhdGUgaXMgY2hhbmdlZC5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBgY29sdW1uYCBhbmQgdGhlIGBjaGVja2VkYCBwcm9wZXJ0aWVzIGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtY29sdW1uLWFjdGlvbnMgKGNvbHVtblRvZ2dsZWQpPVwiY29sdW1uVG9nZ2xlZCgkZXZlbnQpXCI+PC9pZ3gtY29sdW1uLWFjdGlvbnM+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNvbHVtblRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5Ub2dnbGVkRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aW9uYWJsZUNvbHVtbnM6IENvbHVtblR5cGVbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyZWRDb2x1bW5zOiBDb2x1bW5UeXBlW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHBpcGVUcmlnZ2VyID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFjdGlvbnNEaXJlY3RpdmU6IElneENvbHVtbkFjdGlvbnNCYXNlRGlyZWN0aXZlO1xuXG4gICAgcHJvdGVjdGVkIF9kaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPGFueT4gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZmlsdGVyQ29sdW1uc1Byb21wdCA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9maWx0ZXJDcml0ZXJpYSA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb2x1bW5EaXNwbGF5T3JkZXI6IENvbHVtbkRpc3BsYXlPcmRlciA9IENvbHVtbkRpc3BsYXlPcmRlci5EaXNwbGF5T3JkZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3VuY2hlY2tBbGxUZXh0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2NoZWNrQWxsVGV4dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pZCA9IGBpZ3gtY29sdW1uLWFjdGlvbnMtJHtORVhUX0lEKyt9YDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzKSB7XG4gICAgICAgIHRoaXMuX2RpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKFtdKS5jcmVhdGUodGhpcy50cmFja0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb21wdCB0aGF0IGlzIGRpc3BsYXllZCBpbiB0aGUgZmlsdGVyIGlucHV0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGZpbHRlckNvbHVtbnNQcm9tcHQgPSB0aGlzLmNvbHVtbkFjdGlvbnMuZmlsdGVyQ29sdW1uc1Byb21wdDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZmlsdGVyQ29sdW1uc1Byb21wdCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyQ29sdW1uc1Byb21wdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcHJvbXB0IHRoYXQgaXMgZGlzcGxheWVkIGluIHRoZSBmaWx0ZXIgaW5wdXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbi1hY3Rpb25zIFtmaWx0ZXJDb2x1bW5zUHJvbXB0XT1cIidUeXBlIGhlcmUgdG8gc2VhcmNoJ1wiPjwvaWd4LWNvbHVtbi1hY3Rpb25zPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgZmlsdGVyQ29sdW1uc1Byb21wdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckNvbHVtbnNQcm9tcHQgPSB2YWx1ZSB8fCAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgd2hpY2ggZmlsdGVycyB0aGUgY29sdW1ucyBsaXN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGZpbHRlckNyaXRlcmlhID0gIHRoaXMuY29sdW1uQWN0aW9ucy5maWx0ZXJDcml0ZXJpYTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZmlsdGVyQ3JpdGVyaWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJDcml0ZXJpYTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgd2hpY2ggZmlsdGVycyB0aGUgY29sdW1ucyBsaXN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtY29sdW1uLWFjdGlvbnMgW2ZpbHRlckNyaXRlcmlhXT1cIidJRCdcIj48L2lneC1jb2x1bW4tYWN0aW9ucz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGZpbHRlckNyaXRlcmlhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSB8fCAnJztcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl9maWx0ZXJDcml0ZXJpYSkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyQ3JpdGVyaWEgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBkaXNwbGF5IG9yZGVyIG9mIHRoZSBjb2x1bW5zLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkRpc3BsYXlPcmRlciA9IHRoaXMuY29sdW1uQWN0aW9ucy5jb2x1bW5EaXNwbGF5T3JkZXI7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkRpc3BsYXlPcmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkRpc3BsYXlPcmRlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzcGxheSBvcmRlciBvZiB0aGUgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uQWN0aW9ucy5jb2x1bW5EaXNwbGF5T3JkZXIgPSBDb2x1bW5EaXNwbGF5T3JkZXIuQWxwaGFiZXRpY2FsO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgY29sdW1uRGlzcGxheU9yZGVyKHZhbHVlOiBDb2x1bW5EaXNwbGF5T3JkZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSB0aGlzLl9jb2x1bW5EaXNwbGF5T3JkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlPcmRlciA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiB0aGF0IHVuY2hlY2tzIGFsbCBjb2x1bW5zLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiB1bnNldCBpdCBpcyBvYnRhaW5lZCBmcm9tIHRoZSBJZ3hDb2x1bW5BY3Rpb25zQmFzZWQgZGVyaXZlZCBkaXJlY3RpdmUgYXBwbGllZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdW5jaGVja0FsbFRleHQgPSB0aGlzLmNvbHVtbkFjdGlvbnMudW5jaGVja0FsbFRleHQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHVuY2hlY2tBbGxUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdW5jaGVja0FsbFRleHQgfHwgdGhpcy5hY3Rpb25zRGlyZWN0aXZlLnVuY2hlY2tBbGxMYWJlbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHRoYXQgdW5jaGVja3MgYWxsIGNvbHVtbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbi1hY3Rpb25zIFt1bmNoZWNrQWxsVGV4dF09XCInU2hvdyBBbGwnXCI+PC9pZ3gtY29sdW1uLWFjdGlvbnM+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCB1bmNoZWNrQWxsVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3VuY2hlY2tBbGxUZXh0ID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiB0aGF0IGNoZWNrcyBhbGwgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgdW5zZXQgaXQgaXMgb2J0YWluZWQgZnJvbSB0aGUgSWd4Q29sdW1uQWN0aW9uc0Jhc2VkIGRlcml2ZWQgZGlyZWN0aXZlIGFwcGxpZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHVuY2hlY2tBbGxUZXh0ID0gdGhpcy5jb2x1bW5BY3Rpb25zLnVuY2hlY2tBbGxUZXh0O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBjaGVja0FsbFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja0FsbFRleHQgfHwgdGhpcy5hY3Rpb25zRGlyZWN0aXZlLmNoZWNrQWxsTGFiZWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiB0aGF0IGNoZWNrcyBhbGwgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgdW5zZXQgaXQgaXMgb2J0YWluZWQgZnJvbSB0aGUgSWd4Q29sdW1uQWN0aW9uc0Jhc2VkIGRlcml2ZWQgZGlyZWN0aXZlIGFwcGxpZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4tYWN0aW9ucyBbY2hlY2tBbGxUZXh0XT1cIidIaWRlIEFsbCdcIj48L2lneC1jb2x1bW4tYWN0aW9ucz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGNoZWNrQWxsVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrQWxsVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBjaGVja0FsbERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25zRGlyZWN0aXZlLmFsbFVuY2hlY2tlZDtcblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdW5jaGVja0FsbERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25zRGlyZWN0aXZlLmFsbENoZWNrZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYGlkYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29sdW1uLWFjdGlvbnMgW2lkXT1cIidpZ3gtYWN0aW9ucy0xJ1wiPjwvaWd4LWNvbHVtbi1hY3Rpb25zPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9XG4gICAgcHVibGljIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2lkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRpdGxlSUQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJ190aXRsZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdHJhY2tDaGFuZ2VzID0gKGluZGV4LCBjb2wpID0+IGNvbC5maWVsZCArICdfJyArIHRoaXMuYWN0aW9uc0RpcmVjdGl2ZS5hY3Rpb25FbmFibGVkQ29sdW1uc0ZpbHRlcihjb2wsIGluZGV4LCBbXSk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLl9kaWZmZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLmdyaWQ/LmNvbHVtbnMpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbmNoZWNrcyBhbGwgY29sdW1ucyBhbmQgcGVyZm9ybXMgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uQWN0aW9ucy51bmNoZWNrQWxsQ29sdW1ucygpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB1bmNoZWNrQWxsQ29sdW1ucygpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zRGlyZWN0aXZlLnVuY2hlY2tBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgYWxsIGNvbHVtbnMgYW5kIHBlcmZvcm1zIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbHVtbkFjdGlvbnMuY2hlY2tBbGxDb2x1bW5zKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNoZWNrQWxsQ29sdW1ucygpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zRGlyZWN0aXZlLmNoZWNrQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlQ29sdW1uKGNvbHVtbjogQ29sdW1uVHlwZSkge1xuICAgICAgICB0aGlzLmFjdGlvbnNEaXJlY3RpdmUudG9nZ2xlQ29sdW1uKGNvbHVtbik7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5Ub2dnbGVkLmVtaXQoeyBjb2x1bW46IGNvbHVtbiBhcyBhbnksIGNoZWNrZWQ6IHRoaXMuYWN0aW9uc0RpcmVjdGl2ZS5jb2x1bW5DaGVja2VkKGNvbHVtbikgfSk7XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdjb2x1bW5BY3Rpb25FbmFibGVkJyB9KVxuZXhwb3J0IGNsYXNzIElneENvbHVtbkFjdGlvbkVuYWJsZWRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHByb3RlY3RlZCBjb2x1bW5BY3Rpb25zOiBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50KSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGNvbGxlY3Rpb246IENvbHVtblR5cGVbXSxcbiAgICAgICAgYWN0aW9uRmlsdGVyOiAodmFsdWU6IENvbHVtblR5cGUsIGluZGV4OiBudW1iZXIsIGFycmF5OiBDb2x1bW5UeXBlW10pID0+IGJvb2xlYW4sXG4gICAgICAgIF9waXBlVHJpZ2dlcjogbnVtYmVyXG4gICAgKTogQ29sdW1uVHlwZVtdIHtcbiAgICAgICAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29weSA9IGNvbGxlY3Rpb24uc2xpY2UoMCk7XG4gICAgICAgIGlmIChjb3B5Lmxlbmd0aCAmJiBjb3B5WzBdLmdyaWQuaGFzQ29sdW1uTGF5b3V0cykge1xuICAgICAgICAgICAgY29weSA9IGNvcHkuZmlsdGVyKGMgPT4gYy5jb2x1bW5MYXlvdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25GaWx0ZXIpIHtcbiAgICAgICAgICAgIGNvcHkgPSBjb3B5LmZpbHRlcihhY3Rpb25GaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXNlcnZlIHRoZSBhY3Rpb25hYmxlIGNvbGxlY3Rpb24gZm9yIHVzZSBpbiB0aGUgY29tcG9uZW50XG4gICAgICAgIHRoaXMuY29sdW1uQWN0aW9ucy5hY3Rpb25hYmxlQ29sdW1ucyA9IGNvcHkgYXMgYW55O1xuICAgICAgICByZXR1cm4gY29weTtcbiAgICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ2ZpbHRlckFjdGlvbkNvbHVtbnMnIH0pXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyQWN0aW9uQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSWd4Q29sdW1uQWN0aW9uc0NvbXBvbmVudCkgcHJvdGVjdGVkIGNvbHVtbkFjdGlvbnM6IElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBDb2x1bW5UeXBlW10sIGZpbHRlckNyaXRlcmlhOiBzdHJpbmcsIF9waXBlVHJpZ2dlcjogbnVtYmVyKTogQ29sdW1uVHlwZVtdIHtcbiAgICAgICAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29weSA9IGNvbGxlY3Rpb24uc2xpY2UoMCk7XG4gICAgICAgIGlmIChmaWx0ZXJDcml0ZXJpYSAmJiBmaWx0ZXJDcml0ZXJpYS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJGdW5jID0gKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJUZXh0ID0gYy5oZWFkZXIgfHwgYy5maWVsZDtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlclRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyVGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyQ3JpdGVyaWEudG9Mb2NhbGVMb3dlckNhc2UoKSkgPj0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAoYy5jaGlsZHJlbj8uc29tZShmaWx0ZXJGdW5jKSA/PyBmYWxzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29weSA9IGNvbGxlY3Rpb24uZmlsdGVyKGZpbHRlckZ1bmMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXNlcnZlIHRoZSBmaWx0ZXJlZCBjb2xsZWN0aW9uIGZvciB1c2UgaW4gdGhlIGNvbXBvbmVudFxuICAgICAgICB0aGlzLmNvbHVtbkFjdGlvbnMuZmlsdGVyZWRDb2x1bW5zID0gY29weSBhcyBhbnk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnc29ydEFjdGlvbkNvbHVtbnMnIH0pXG5leHBvcnQgY2xhc3MgSWd4U29ydEFjdGlvbkNvbHVtbnNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IENvbHVtblR5cGVbXSwgZGlzcGxheU9yZGVyOiBDb2x1bW5EaXNwbGF5T3JkZXIsIF9waXBlVHJpZ2dlcjogbnVtYmVyKTogQ29sdW1uVHlwZVtdIHtcbiAgICAgICAgaWYgKGRpc3BsYXlPcmRlciA9PT0gQ29sdW1uRGlzcGxheU9yZGVyLkFscGhhYmV0aWNhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uc29ydCgoYSwgYikgPT4gKGEuaGVhZGVyIHx8IGEuZmllbGQpLmxvY2FsZUNvbXBhcmUoYi5oZWFkZXIgfHwgYi5maWVsZCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpZ3gtY29sdW1uLWFjdGlvbnNfX2hlYWRlclwiPlxuICAgIDxoNCBbYXR0ci5pZF09J3RpdGxlSUQnIGNsYXNzPVwiaWd4LWNvbHVtbi1hY3Rpb25zX19oZWFkZXItdGl0bGVcIiAqbmdJZj1cInRpdGxlXCI+e3sgdGl0bGUgfX08L2g0PlxuXG4gICAgPGlneC1pbnB1dC1ncm91cCBjbGFzcz1cImlneC1jb2x1bW4tYWN0aW9uc19faGVhZGVyLWlucHV0XCIgKm5nSWY9XCIhaGlkZUZpbHRlclwiPlxuICAgICAgICA8aW5wdXQgaWd4SW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPSd0aXRsZUlEJ1xuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJDcml0ZXJpYVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyQ29sdW1uc1Byb21wdFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxuICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtY29sdW1uLWFjdGlvbnNfX2NvbHVtbnNcIiB0YWJpbmRleD1cIjBcIlxuICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cImNvbHVtbnNBcmVhTWF4SGVpZ2h0XCI+XG4gICAgPGlneC1jaGVja2JveFxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGdyaWQ/LmNvbHVtbnNcbiAgICAgICAgICAgIHwgY29sdW1uQWN0aW9uRW5hYmxlZDphY3Rpb25zRGlyZWN0aXZlLmFjdGlvbkVuYWJsZWRDb2x1bW5zRmlsdGVyOnBpcGVUcmlnZ2VyXG4gICAgICAgICAgICB8IGZpbHRlckFjdGlvbkNvbHVtbnM6ZmlsdGVyQ3JpdGVyaWE6cGlwZVRyaWdnZXJcbiAgICAgICAgICAgIHwgc29ydEFjdGlvbkNvbHVtbnM6Y29sdW1uRGlzcGxheU9yZGVyOnBpcGVUcmlnZ2VyO1wiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNvbHVtbi1hY3Rpb25zX19jb2x1bW5zLWl0ZW1cIlxuICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVDb2x1bW4oY29sdW1uKVwiXG4gICAgICAgIFtjaGVja2VkXT1cImFjdGlvbnNEaXJlY3RpdmUuY29sdW1uQ2hlY2tlZChjb2x1bW4pXCJcbiAgICAgICAgW3N0eWxlLm1hcmdpbi1sZWZ0LnB4XT1cImNvbHVtbi5sZXZlbCAqIGluZGVudGF0aW9uXCI+XG4gICAgICAgIHt7IGNvbHVtbi5oZWFkZXIgfHwgY29sdW1uLmZpZWxkIH19XG4gICAgPC9pZ3gtY2hlY2tib3g+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1jb2x1bW4tYWN0aW9uc19fYnV0dG9uc1wiPlxuICAgIDxidXR0b24gaWd4QnV0dG9uIGlneFJpcHBsZSAoY2xpY2spPVwidW5jaGVja0FsbENvbHVtbnMoKVwiIFtkaXNhYmxlZF09XCJ1bmNoZWNrQWxsRGlzYWJsZWRcIj57eyB1bmNoZWNrQWxsVGV4dCB9fTwvYnV0dG9uPlxuICAgIDxidXR0b24gaWd4QnV0dG9uIGlneFJpcHBsZSAoY2xpY2spPVwiY2hlY2tBbGxDb2x1bW5zKClcIiBbZGlzYWJsZWRdPVwiY2hlY2tBbGxEaXNhYmxlZFwiPnt7IGNoZWNrQWxsVGV4dCB9fTwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
428
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWFjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2NvbHVtbi1hY3Rpb25zL2NvbHVtbi1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9jb2x1bW4tYWN0aW9ucy9jb2x1bW4tYWN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sSUFBSSxFQUdKLFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7O0FBR3pFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNoQjs7Ozs7R0FLRztBQUtILE1BQU0sT0FBTyx5QkFBeUI7SUEySWxDLFlBQW9CLE9BQXdCO1FBQXhCLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBL0g1Qzs7Ozs7OztXQU9HO1FBRUksZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDeEI7Ozs7Ozs7OztXQVNHO1FBRUksYUFBUSxHQUFHLG9CQUFvQixDQUFDO1FBQ3ZDOzs7Ozs7Ozs7V0FTRztRQUVJLHlCQUFvQixHQUFHLE1BQU0sQ0FBQztRQUNyQzs7Ozs7OztXQU9HO1FBRUksZUFBVSxHQUFHLEtBQUssQ0FBQztRQVcxQjs7Ozs7OztXQU9HO1FBRUksVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVsQjs7Ozs7O1dBTUc7UUFFSSxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUEyQixD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QVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQztZQUNGLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsNERBQTREO1FBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFHLElBQVcsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzt1SEF2QlEsMEJBQTBCLGtCQUVmLHlCQUF5QjtxSEFGcEMsMEJBQTBCOzJGQUExQiwwQkFBMEI7a0JBRHRDLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUU7MERBR3VDLHlCQUF5QjswQkFBcEYsTUFBTTsyQkFBQyx5QkFBeUI7O0FBeUJqRCxNQUFNLE9BQU8sd0JBQXdCO0lBRTFCLFNBQVMsQ0FBQyxVQUF3QixFQUFFLFlBQWdDLEVBQUUsWUFBb0I7UUFDN0YsSUFBSSxZQUFZLEtBQUssa0JBQWtCLENBQUMsWUFBWSxFQUFFO1lBQ2xELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDOUY7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDOztxSEFQUSx3QkFBd0I7bUhBQXhCLHdCQUF3QjsyRkFBeEIsd0JBQXdCO2tCQURwQyxJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRG9DaGVjayxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIEl0ZXJhYmxlRGlmZmVyLFxuICAgIEl0ZXJhYmxlRGlmZmVycyxcbiAgICBPdXRwdXQsXG4gICAgUGlwZSxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2x1bW5EaXNwbGF5T3JkZXIgfSBmcm9tICcuLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSwgR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNvbHVtblRvZ2dsZWRFdmVudEFyZ3MgfSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkFjdGlvbnNCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2x1bW4tYWN0aW9ucy1iYXNlLmRpcmVjdGl2ZSc7XG5cbmxldCBORVhUX0lEID0gMDtcbi8qKlxuICogUHJvdmlkaW5nIHJlZmVyZW5jZSB0byBgSWd4Q29sdW1uQWN0aW9uc0NvbXBvbmVudGA6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgQFZpZXdDaGlsZCgnY29sdW1uQWN0aW9ucycsIHsgcmVhZDogSWd4Q29sdW1uQWN0aW9uc0NvbXBvbmVudCB9KVxuICogIHB1YmxpYyBjb2x1bW5BY3Rpb25zOiBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50O1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jb2x1bW4tYWN0aW9ucycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbHVtbi1hY3Rpb25zLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjayB7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGdyaWQgdG8gcHJvdmlkZSBjb2x1bW4gYWN0aW9ucyBmb3IuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZ3JpZCA9IHRoaXMuY29sdW1uQWN0aW9ucy5ncmlkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgaW5kZW50YXRpb24gb2YgY29sdW1ucyBpbiB0aGUgY29sdW1uIGxpc3QgYmFzZWQgb24gdGhlaXIgaGllcmFyY2h5IGxldmVsLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBcbiAgICAgKiA8aWd4LWNvbHVtbi1hY3Rpb25zIFtpbmRlbnRhdGlvbl09XCIxNVwiPjwvaWd4LWNvbHVtbi1hY3Rpb25zPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGluZGVudGF0aW9uID0gMzA7XG4gICAgLyoqXG4gICAgICogU2V0cy9HZXRzIHRoZSBjc3MgY2xhc3Mgc2VsZWN0b3IuXG4gICAgICogQnkgZGVmYXVsdCB0aGUgdmFsdWUgb2YgdGhlIGBjbGFzc2AgYXR0cmlidXRlIGlzIGBcImlneC1jb2x1bW4tYWN0aW9uc1wiYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNzc0NMYXNzID0gIHRoaXMuY29sdW1uSGlkaW5nVUkuY3NzQ2xhc3M7XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uSGlkaW5nVUkuY3NzQ2xhc3MgPSAnY29sdW1uLWNob29zZXInO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5jbGFzcycpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1jb2x1bW4tYWN0aW9ucyc7XG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHRoZSBtYXggaGVpZ2h0IG9mIHRoZSBjb2x1bW5zIGFyZWEuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSBkZWZhdWx0IG1heCBoZWlnaHQgaXMgMTAwJS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbi1hY3Rpb25zIFtjb2x1bW5zQXJlYU1heEhlaWdodF09XCIyMDBweFwiPjwvaWd4LWNvbHVtbi1hY3Rpb25zPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbnNBcmVhTWF4SGVpZ2h0ID0gJzEwMCUnO1xuICAgIC8qKlxuICAgICAqIFNob3dzL2hpZGVzIHRoZSBjb2x1bW5zIGZpbHRlcmluZyBpbnB1dCBmcm9tIHRoZSBVSS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWNvbHVtbi1hY3Rpb25zIFtoaWRlRmlsdGVyXT1cInRydWVcIj48L2lneC1jb2x1bW4tYWN0aW9ucz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoaWRlRmlsdGVyID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY2hlY2tib3ggY29tcG9uZW50cyByZXByZXNlbnRpbmcgY29sdW1uIGl0ZW1zIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSBkcm9wZG93blxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkl0ZW1zID0gIHRoaXMuY29sdW1uQWN0aW9ucy5jb2x1bW5JdGVtcztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneENoZWNrYm94Q29tcG9uZW50KVxuICAgIHB1YmxpYyBjb2x1bW5JdGVtczogUXVlcnlMaXN0PElneENoZWNrYm94Q29tcG9uZW50PjtcbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIHRpdGxlIG9mIHRoZSBjb2x1bW4gYWN0aW9ucyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbi1hY3Rpb25zIFt0aXRsZV09XCInUGluIENvbHVtbnMnXCI+PC9pZ3gtY29sdW1uLWFjdGlvbnM+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGl0bGUgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciBhIGNvbHVtbidzIGNoZWNrZWQgc3RhdGUgaXMgY2hhbmdlZC5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBgY29sdW1uYCBhbmQgdGhlIGBjaGVja2VkYCBwcm9wZXJ0aWVzIGFzIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtY29sdW1uLWFjdGlvbnMgKGNvbHVtblRvZ2dsZWQpPVwiY29sdW1uVG9nZ2xlZCgkZXZlbnQpXCI+PC9pZ3gtY29sdW1uLWFjdGlvbnM+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNvbHVtblRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5Ub2dnbGVkRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aW9uYWJsZUNvbHVtbnM6IENvbHVtblR5cGVbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyZWRDb2x1bW5zOiBDb2x1bW5UeXBlW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHBpcGVUcmlnZ2VyID0gMDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGFjdGlvbnNEaXJlY3RpdmU6IElneENvbHVtbkFjdGlvbnNCYXNlRGlyZWN0aXZlO1xuXG4gICAgcHJvdGVjdGVkIF9kaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPGFueT4gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZmlsdGVyQ29sdW1uc1Byb21wdCA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9maWx0ZXJDcml0ZXJpYSA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb2x1bW5EaXNwbGF5T3JkZXI6IENvbHVtbkRpc3BsYXlPcmRlciA9IENvbHVtbkRpc3BsYXlPcmRlci5EaXNwbGF5T3JkZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3VuY2hlY2tBbGxUZXh0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2NoZWNrQWxsVGV4dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pZCA9IGBpZ3gtY29sdW1uLWFjdGlvbnMtJHtORVhUX0lEKyt9YDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzKSB7XG4gICAgICAgIHRoaXMuX2RpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKFtdKS5jcmVhdGUodGhpcy50cmFja0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb21wdCB0aGF0IGlzIGRpc3BsYXllZCBpbiB0aGUgZmlsdGVyIGlucHV0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGZpbHRlckNvbHVtbnNQcm9tcHQgPSB0aGlzLmNvbHVtbkFjdGlvbnMuZmlsdGVyQ29sdW1uc1Byb21wdDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZmlsdGVyQ29sdW1uc1Byb21wdCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyQ29sdW1uc1Byb21wdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcHJvbXB0IHRoYXQgaXMgZGlzcGxheWVkIGluIHRoZSBmaWx0ZXIgaW5wdXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbi1hY3Rpb25zIFtmaWx0ZXJDb2x1bW5zUHJvbXB0XT1cIidUeXBlIGhlcmUgdG8gc2VhcmNoJ1wiPjwvaWd4LWNvbHVtbi1hY3Rpb25zPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgZmlsdGVyQ29sdW1uc1Byb21wdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckNvbHVtbnNQcm9tcHQgPSB2YWx1ZSB8fCAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgd2hpY2ggZmlsdGVycyB0aGUgY29sdW1ucyBsaXN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGZpbHRlckNyaXRlcmlhID0gIHRoaXMuY29sdW1uQWN0aW9ucy5maWx0ZXJDcml0ZXJpYTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZmlsdGVyQ3JpdGVyaWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJDcml0ZXJpYTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgd2hpY2ggZmlsdGVycyB0aGUgY29sdW1ucyBsaXN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtY29sdW1uLWFjdGlvbnMgW2ZpbHRlckNyaXRlcmlhXT1cIidJRCdcIj48L2lneC1jb2x1bW4tYWN0aW9ucz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGZpbHRlckNyaXRlcmlhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSB8fCAnJztcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl9maWx0ZXJDcml0ZXJpYSkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyQ3JpdGVyaWEgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBkaXNwbGF5IG9yZGVyIG9mIHRoZSBjb2x1bW5zLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkRpc3BsYXlPcmRlciA9IHRoaXMuY29sdW1uQWN0aW9ucy5jb2x1bW5EaXNwbGF5T3JkZXI7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkRpc3BsYXlPcmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbkRpc3BsYXlPcmRlcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzcGxheSBvcmRlciBvZiB0aGUgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uQWN0aW9ucy5jb2x1bW5EaXNwbGF5T3JkZXIgPSBDb2x1bW5EaXNwbGF5T3JkZXIuQWxwaGFiZXRpY2FsO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgY29sdW1uRGlzcGxheU9yZGVyKHZhbHVlOiBDb2x1bW5EaXNwbGF5T3JkZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSB0aGlzLl9jb2x1bW5EaXNwbGF5T3JkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbkRpc3BsYXlPcmRlciA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiB0aGF0IHVuY2hlY2tzIGFsbCBjb2x1bW5zLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiB1bnNldCBpdCBpcyBvYnRhaW5lZCBmcm9tIHRoZSBJZ3hDb2x1bW5BY3Rpb25zQmFzZWQgZGVyaXZlZCBkaXJlY3RpdmUgYXBwbGllZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdW5jaGVja0FsbFRleHQgPSB0aGlzLmNvbHVtbkFjdGlvbnMudW5jaGVja0FsbFRleHQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHVuY2hlY2tBbGxUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdW5jaGVja0FsbFRleHQgfHwgdGhpcy5hY3Rpb25zRGlyZWN0aXZlLnVuY2hlY2tBbGxMYWJlbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHRoYXQgdW5jaGVja3MgYWxsIGNvbHVtbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbi1hY3Rpb25zIFt1bmNoZWNrQWxsVGV4dF09XCInU2hvdyBBbGwnXCI+PC9pZ3gtY29sdW1uLWFjdGlvbnM+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCB1bmNoZWNrQWxsVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3VuY2hlY2tBbGxUZXh0ID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiB0aGF0IGNoZWNrcyBhbGwgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgdW5zZXQgaXQgaXMgb2J0YWluZWQgZnJvbSB0aGUgSWd4Q29sdW1uQWN0aW9uc0Jhc2VkIGRlcml2ZWQgZGlyZWN0aXZlIGFwcGxpZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHVuY2hlY2tBbGxUZXh0ID0gdGhpcy5jb2x1bW5BY3Rpb25zLnVuY2hlY2tBbGxUZXh0O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBjaGVja0FsbFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja0FsbFRleHQgfHwgdGhpcy5hY3Rpb25zRGlyZWN0aXZlLmNoZWNrQWxsTGFiZWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiB0aGF0IGNoZWNrcyBhbGwgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgdW5zZXQgaXQgaXMgb2J0YWluZWQgZnJvbSB0aGUgSWd4Q29sdW1uQWN0aW9uc0Jhc2VkIGRlcml2ZWQgZGlyZWN0aXZlIGFwcGxpZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4tYWN0aW9ucyBbY2hlY2tBbGxUZXh0XT1cIidIaWRlIEFsbCdcIj48L2lneC1jb2x1bW4tYWN0aW9ucz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGNoZWNrQWxsVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrQWxsVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBjaGVja0FsbERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25zRGlyZWN0aXZlLmFsbFVuY2hlY2tlZDtcblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdW5jaGVja0FsbERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25zRGlyZWN0aXZlLmFsbENoZWNrZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYGlkYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29sdW1uLWFjdGlvbnMgW2lkXT1cIidpZ3gtYWN0aW9ucy0xJ1wiPjwvaWd4LWNvbHVtbi1hY3Rpb25zPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9XG4gICAgcHVibGljIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2lkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRpdGxlSUQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkICsgJ190aXRsZSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdHJhY2tDaGFuZ2VzID0gKGluZGV4LCBjb2wpID0+IGNvbC5maWVsZCArICdfJyArIHRoaXMuYWN0aW9uc0RpcmVjdGl2ZS5hY3Rpb25FbmFibGVkQ29sdW1uc0ZpbHRlcihjb2wsIGluZGV4LCBbXSk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLl9kaWZmZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLmdyaWQ/LmNvbHVtbkxpc3QpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbmNoZWNrcyBhbGwgY29sdW1ucyBhbmQgcGVyZm9ybXMgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uQWN0aW9ucy51bmNoZWNrQWxsQ29sdW1ucygpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB1bmNoZWNrQWxsQ29sdW1ucygpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zRGlyZWN0aXZlLnVuY2hlY2tBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgYWxsIGNvbHVtbnMgYW5kIHBlcmZvcm1zIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbHVtbkFjdGlvbnMuY2hlY2tBbGxDb2x1bW5zKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNoZWNrQWxsQ29sdW1ucygpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zRGlyZWN0aXZlLmNoZWNrQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlQ29sdW1uKGNvbHVtbjogQ29sdW1uVHlwZSkge1xuICAgICAgICB0aGlzLmFjdGlvbnNEaXJlY3RpdmUudG9nZ2xlQ29sdW1uKGNvbHVtbik7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5Ub2dnbGVkLmVtaXQoeyBjb2x1bW46IGNvbHVtbiBhcyBhbnksIGNoZWNrZWQ6IHRoaXMuYWN0aW9uc0RpcmVjdGl2ZS5jb2x1bW5DaGVja2VkKGNvbHVtbikgfSk7XG4gICAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdjb2x1bW5BY3Rpb25FbmFibGVkJyB9KVxuZXhwb3J0IGNsYXNzIElneENvbHVtbkFjdGlvbkVuYWJsZWRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHByb3RlY3RlZCBjb2x1bW5BY3Rpb25zOiBJZ3hDb2x1bW5BY3Rpb25zQ29tcG9uZW50KSB7IH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgICAgIGNvbGxlY3Rpb246IENvbHVtblR5cGVbXSxcbiAgICAgICAgYWN0aW9uRmlsdGVyOiAodmFsdWU6IENvbHVtblR5cGUsIGluZGV4OiBudW1iZXIsIGFycmF5OiBDb2x1bW5UeXBlW10pID0+IGJvb2xlYW4sXG4gICAgICAgIF9waXBlVHJpZ2dlcjogbnVtYmVyXG4gICAgKTogQ29sdW1uVHlwZVtdIHtcbiAgICAgICAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29weSA9IGNvbGxlY3Rpb24uc2xpY2UoMCk7XG4gICAgICAgIGlmIChjb3B5Lmxlbmd0aCAmJiBjb3B5WzBdLmdyaWQuaGFzQ29sdW1uTGF5b3V0cykge1xuICAgICAgICAgICAgY29weSA9IGNvcHkuZmlsdGVyKGMgPT4gYy5jb2x1bW5MYXlvdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25GaWx0ZXIpIHtcbiAgICAgICAgICAgIGNvcHkgPSBjb3B5LmZpbHRlcihhY3Rpb25GaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXNlcnZlIHRoZSBhY3Rpb25hYmxlIGNvbGxlY3Rpb24gZm9yIHVzZSBpbiB0aGUgY29tcG9uZW50XG4gICAgICAgIHRoaXMuY29sdW1uQWN0aW9ucy5hY3Rpb25hYmxlQ29sdW1ucyA9IGNvcHkgYXMgYW55O1xuICAgICAgICByZXR1cm4gY29weTtcbiAgICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ2ZpbHRlckFjdGlvbkNvbHVtbnMnIH0pXG5leHBvcnQgY2xhc3MgSWd4RmlsdGVyQWN0aW9uQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSWd4Q29sdW1uQWN0aW9uc0NvbXBvbmVudCkgcHJvdGVjdGVkIGNvbHVtbkFjdGlvbnM6IElneENvbHVtbkFjdGlvbnNDb21wb25lbnQpIHsgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybShjb2xsZWN0aW9uOiBDb2x1bW5UeXBlW10sIGZpbHRlckNyaXRlcmlhOiBzdHJpbmcsIF9waXBlVHJpZ2dlcjogbnVtYmVyKTogQ29sdW1uVHlwZVtdIHtcbiAgICAgICAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29weSA9IGNvbGxlY3Rpb24uc2xpY2UoMCk7XG4gICAgICAgIGlmIChmaWx0ZXJDcml0ZXJpYSAmJiBmaWx0ZXJDcml0ZXJpYS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJGdW5jID0gKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJUZXh0ID0gYy5oZWFkZXIgfHwgYy5maWVsZDtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlclRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyVGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyQ3JpdGVyaWEudG9Mb2NhbGVMb3dlckNhc2UoKSkgPj0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAoYy5jaGlsZHJlbj8uc29tZShmaWx0ZXJGdW5jKSA/PyBmYWxzZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29weSA9IGNvbGxlY3Rpb24uZmlsdGVyKGZpbHRlckZ1bmMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXNlcnZlIHRoZSBmaWx0ZXJlZCBjb2xsZWN0aW9uIGZvciB1c2UgaW4gdGhlIGNvbXBvbmVudFxuICAgICAgICB0aGlzLmNvbHVtbkFjdGlvbnMuZmlsdGVyZWRDb2x1bW5zID0gY29weSBhcyBhbnk7XG4gICAgICAgIHJldHVybiBjb3B5O1xuICAgIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnc29ydEFjdGlvbkNvbHVtbnMnIH0pXG5leHBvcnQgY2xhc3MgSWd4U29ydEFjdGlvbkNvbHVtbnNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKGNvbGxlY3Rpb246IENvbHVtblR5cGVbXSwgZGlzcGxheU9yZGVyOiBDb2x1bW5EaXNwbGF5T3JkZXIsIF9waXBlVHJpZ2dlcjogbnVtYmVyKTogQ29sdW1uVHlwZVtdIHtcbiAgICAgICAgaWYgKGRpc3BsYXlPcmRlciA9PT0gQ29sdW1uRGlzcGxheU9yZGVyLkFscGhhYmV0aWNhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uc29ydCgoYSwgYikgPT4gKGEuaGVhZGVyIHx8IGEuZmllbGQpLmxvY2FsZUNvbXBhcmUoYi5oZWFkZXIgfHwgYi5maWVsZCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpZ3gtY29sdW1uLWFjdGlvbnNfX2hlYWRlclwiPlxuICAgIDxoNCBbYXR0ci5pZF09J3RpdGxlSUQnIGNsYXNzPVwiaWd4LWNvbHVtbi1hY3Rpb25zX19oZWFkZXItdGl0bGVcIiAqbmdJZj1cInRpdGxlXCI+e3sgdGl0bGUgfX08L2g0PlxuXG4gICAgPGlneC1pbnB1dC1ncm91cCBjbGFzcz1cImlneC1jb2x1bW4tYWN0aW9uc19faGVhZGVyLWlucHV0XCIgKm5nSWY9XCIhaGlkZUZpbHRlclwiPlxuICAgICAgICA8aW5wdXQgaWd4SW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPSd0aXRsZUlEJ1xuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJDcml0ZXJpYVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyQ29sdW1uc1Byb21wdFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxuICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtY29sdW1uLWFjdGlvbnNfX2NvbHVtbnNcIiB0YWJpbmRleD1cIjBcIlxuICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cImNvbHVtbnNBcmVhTWF4SGVpZ2h0XCI+XG4gICAgPGlneC1jaGVja2JveFxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mICRhbnkoZ3JpZCk/LmNvbHVtbnNDb2xsZWN0aW9uXG4gICAgICAgICAgICB8IGNvbHVtbkFjdGlvbkVuYWJsZWQ6YWN0aW9uc0RpcmVjdGl2ZS5hY3Rpb25FbmFibGVkQ29sdW1uc0ZpbHRlcjpwaXBlVHJpZ2dlclxuICAgICAgICAgICAgfCBmaWx0ZXJBY3Rpb25Db2x1bW5zOmZpbHRlckNyaXRlcmlhOnBpcGVUcmlnZ2VyXG4gICAgICAgICAgICB8IHNvcnRBY3Rpb25Db2x1bW5zOmNvbHVtbkRpc3BsYXlPcmRlcjpwaXBlVHJpZ2dlcjtcIlxuICAgICAgICBjbGFzcz1cImlneC1jb2x1bW4tYWN0aW9uc19fY29sdW1ucy1pdGVtXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29sdW1uKGNvbHVtbilcIlxuICAgICAgICBbY2hlY2tlZF09XCJhY3Rpb25zRGlyZWN0aXZlLmNvbHVtbkNoZWNrZWQoY29sdW1uKVwiXG4gICAgICAgIFtzdHlsZS5tYXJnaW4tbGVmdC5weF09XCJjb2x1bW4ubGV2ZWwgKiBpbmRlbnRhdGlvblwiPlxuICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIHx8IGNvbHVtbi5maWVsZCB9fVxuICAgIDwvaWd4LWNoZWNrYm94PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtY29sdW1uLWFjdGlvbnNfX2J1dHRvbnNcIj5cbiAgICA8YnV0dG9uIGlneEJ1dHRvbiBpZ3hSaXBwbGUgKGNsaWNrKT1cInVuY2hlY2tBbGxDb2x1bW5zKClcIiBbZGlzYWJsZWRdPVwidW5jaGVja0FsbERpc2FibGVkXCI+e3sgdW5jaGVja0FsbFRleHQgfX08L2J1dHRvbj5cbiAgICA8YnV0dG9uIGlneEJ1dHRvbiBpZ3hSaXBwbGUgKGNsaWNrKT1cImNoZWNrQWxsQ29sdW1ucygpXCIgW2Rpc2FibGVkXT1cImNoZWNrQWxsRGlzYWJsZWRcIj57eyBjaGVja0FsbFRleHQgfX08L2J1dHRvbj5cbjwvZGl2PlxuIl19
@@ -81,14 +81,14 @@ export class IgxColumnLayoutComponent extends IgxColumnGroupComponent {
81
81
  set hidden(value) {
82
82
  this._hidden = value;
83
83
  this.children.forEach(child => child.hidden = value);
84
- if (this.grid && this.grid.columns && this.grid.columns.length > 0) {
84
+ if (this.grid && this.grid.columnList && this.grid.columnList.length > 0) {
85
85
  // reset indexes in case columns are hidden/shown runtime
86
86
  const columns = this.grid && this.grid.pinnedColumns && this.grid.unpinnedColumns ?
87
87
  this.grid.pinnedColumns.concat(this.grid.unpinnedColumns) : [];
88
88
  if (!this._hidden && !columns.find(c => c.field === this.field)) {
89
89
  this.grid.resetColumnCollections();
90
90
  }
91
- this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
91
+ this.grid.columnList.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());
92
92
  }
93
93
  }
94
94
  /**
@@ -160,4 +160,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImpor
160
160
  }], propDecorators: { hidden: [{
161
161
  type: Input
162
162
  }] } });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29sdW1ucy9jb2x1bW4tbGF5b3V0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULHVCQUF1QixFQUN2QixVQUFVLEVBQ1YsS0FBSyxFQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQVNuRSxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsdUJBQXVCO0lBTnJFOztRQU9XLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztLQTJKdEM7SUExSkc7Ozs7Ozs7T0FPRztJQUNILElBQVcsS0FBSztRQUNaLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0csT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELElBQVcsS0FBSyxDQUFDLEdBQVEsSUFBSSxDQUFDO0lBRTlCLElBQVcsWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFO1lBQy9ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJ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RSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O3FIQTNKUSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwwRUFKdEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxpREFFM0YsRUFBRTsyRkFFSCx3QkFBd0I7a0JBTnBDLFNBQVM7bUJBQUM7b0JBQ1AsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztvQkFDckcsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7OEJBd0VjLE1BQU07c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbi1ncm91cC5jb21wb25lbnQnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4Q29sdW1uQ29tcG9uZW50LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hDb2x1bW5MYXlvdXRDb21wb25lbnQpIH1dLFxuICAgIHNlbGVjdG9yOiAnaWd4LWNvbHVtbi1sYXlvdXQnLFxuICAgIHRlbXBsYXRlOiBgYFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDb2x1bW5MYXlvdXRDb21wb25lbnQgZXh0ZW5kcyBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICAgIHB1YmxpYyBjaGlsZHJlblZpc2libGVJbmRleGVzID0gW107XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBsYXlvdXQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5Hcm91cFdpZHRoID0gdGhpcy5jb2x1bW5Hcm91cC53aWR0aDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgd2lkdGgoKTogYW55IHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldEZpbGxlZENoaWxkQ29sdW1uU2l6ZXModGhpcy5jaGlsZHJlbikucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgcGFyc2VJbnQodmFsLCAxMCksIDApO1xuICAgICAgICByZXR1cm4gd2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB3aWR0aCh2YWw6IGFueSkgeyB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkxheW91dCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYWxjV2lkdGgoKTogYW55IHtcbiAgICAgICAgbGV0IGJvcmRlcldpZHRoID0gMDtcblxuICAgICAgICBpZiAodGhpcy5oZWFkZXJHcm91cCAmJiB0aGlzLmhlYWRlckdyb3VwLmhhc0xhc3RQaW5uZWRDaGlsZENvbHVtbikge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyU3R5bGVzID0gdGhpcy5ncmlkLmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy5oZWFkZXJHcm91cC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdKTtcbiAgICAgICAgICAgIGJvcmRlcldpZHRoID0gcGFyc2VJbnQoaGVhZGVyU3R5bGVzLmJvcmRlclJpZ2h0V2lkdGgsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdXBlci5nZXRDYWxjV2lkdGgoKSArIGJvcmRlcldpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbHVtbiB2aXNpYmxlIGluZGV4LlxuICAgICAqIElmIHRoZSBjb2x1bW4gaXMgbm90IHZpc2libGUsIHJldHVybnMgYC0xYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHZpc2libGVDb2x1bW5JbmRleCA9ICB0aGlzLmNvbHVtbi52aXNpYmxlSW5kZXg7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCB2aXNpYmxlSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFpc05hTih0aGlzLl92SW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdkluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5waW5uZWRDb2x1bW5zID0gdGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucy5maWx0ZXIoYyA9PiBjLmNvbHVtbkxheW91dCAmJiAhYy5oaWRkZW4pO1xuICAgICAgICBjb25zdCBwaW5uZWRDb2x1bW5zID0gdGhpcy5ncmlkLnBpbm5lZENvbHVtbnMuZmlsdGVyKGMgPT4gYy5jb2x1bW5MYXlvdXQgJiYgIWMuaGlkZGVuKTtcbiAgICAgICAgbGV0IHZJbmRleCA9IC0xO1xuXG4gICAgICAgIGlmICghdGhpcy5waW5uZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4SW5Db2xsZWN0aW9uID0gdW5waW5uZWRDb2x1bW5zLmluZGV4T2YodGhpcyk7XG4gICAgICAgICAgICB2SW5kZXggPSBpbmRleEluQ29sbGVjdGlvbiA9PT0gLTEgPyAtMSA6IHBpbm5lZENvbHVtbnMubGVuZ3RoICsgaW5kZXhJbkNvbGxlY3Rpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2SW5kZXggPSBwaW5uZWRDb2x1bW5zLmluZGV4T2YodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdkluZGV4ID0gdkluZGV4O1xuICAgICAgICByZXR1cm4gdkluZGV4O1xuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBjb2x1bW4gbGF5b3V0IGlzIGhpZGRlbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzSGlkZGVuID0gdGhpcy5jb2x1bW5Hcm91cC5oaWRkZW47XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGhpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGRlbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW4gbGF5b3V0IGhpZGRlbiBwcm9wZXJ0eS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogPGlneC1jb2x1bW4tbGF5b3V0IFtoaWRkZW5dID0gXCJ0cnVlXCI+PC9pZ3gtY29sdW1uLT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgaGlkZGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hpZGRlbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQuaGlkZGVuID0gdmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5ncmlkICYmIHRoaXMuZ3JpZC5jb2x1bW5zICYmIHRoaXMuZ3JpZC5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIHJlc2V0IGluZGV4ZXMgaW4gY2FzZSBjb2x1bW5zIGFyZSBoaWRkZW4vc2hvd24gcnVudGltZVxuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ3JpZCAmJiB0aGlzLmdyaWQucGlubmVkQ29sdW1ucyAmJiB0aGlzLmdyaWQudW5waW5uZWRDb2x1bW5zID9cbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQucGlubmVkQ29sdW1ucy5jb25jYXQodGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucykgOiBbXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5faGlkZGVuICYmICFjb2x1bW5zLmZpbmQoYyA9PiBjLmZpZWxkID09PSB0aGlzLmZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yZXNldENvbHVtbkNvbGxlY3Rpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdyaWQuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmNvbHVtbkxheW91dCkuZm9yRWFjaCh4ID0+IHgucG9wdWxhdGVWaXNpYmxlSW5kZXhlcygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5oaWRkZW4gPSB0aGlzLmFsbENoaWxkcmVuLnNvbWUoeCA9PiB4LmhpZGRlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQuaGlkZGVuID0gdGhpcy5oaWRkZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGNoaWxkLm1vdmFibGUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGdyb3VwIGNvbnRhaW5zIHRoZSBsYXN0IHBpbm5lZCBjaGlsZCBjb2x1bW4gb2YgdGhlIGNvbHVtbiBsYXlvdXQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bXNIYXNMYXN0UGlubmVkID0gdGhpcy5jb2x1bW5MYXlvdXQuaGFzTGFzdFBpbm5lZENoaWxkQ29sdW1uO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5MYXlvdXRDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0xhc3RQaW5uZWRDaGlsZENvbHVtbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uc29tZShjaGlsZCA9PiBjaGlsZC5pc0xhc3RQaW5uZWQpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBncm91cCBjb250YWlucyB0aGUgZmlyc3QgcGlubmVkIGNoaWxkIGNvbHVtbiBvZiB0aGUgY29sdW1uIGxheW91dC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhhc0ZpcnN0UGlubmVkQ2hpbGRDb2x1bW4gPSB0aGlzLmNvbHVtbkxheW91dC5oYXNGaXJzdFBpbm5lZENoaWxkQ29sdW1uO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5MYXlvdXRDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0ZpcnN0UGlubmVkQ2hpbGRDb2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQuaXNGaXJzdFBpbm5lZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBwb3B1bGF0ZVZpc2libGVJbmRleGVzKCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuVmlzaWJsZUluZGV4ZXMgPSBbXTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ3JpZD8ucGlubmVkQ29sdW1ucyAmJiB0aGlzLmdyaWQ/LnVucGlubmVkQ29sdW1uc1xuICAgICAgICAgICAgPyB0aGlzLmdyaWQucGlubmVkQ29sdW1ucy5jb25jYXQodGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucylcbiAgICAgICAgICAgIDogW107XG4gICAgICAgIGNvbnN0IG9yZGVyZWRDb2xzID0gY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcih4ID0+ICF4LmNvbHVtbkdyb3VwICYmICF4LmhpZGRlbilcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnJvd1N0YXJ0IC0gYi5yb3dTdGFydCB8fCBjb2x1bW5zLmluZGV4T2YoYS5wYXJlbnQpIC0gY29sdW1ucy5pbmRleE9mKGIucGFyZW50KSB8fCBhLmNvbFN0YXJ0IC0gYi5jb2xTdGFydCk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBycyA9IGNoaWxkLnJvd1N0YXJ0IHx8IDE7XG4gICAgICAgICAgICBsZXQgdkluZGV4ID0gMDtcbiAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgYWxsIGNvbHMgd2l0aCBsYXJnZXIgcm93U3RhcnRcbiAgICAgICAgICAgIGNvbnN0IGNvbHMgPSBvcmRlcmVkQ29scy5maWx0ZXIoYyA9PlxuICAgICAgICAgICAgICAgICFjLmNvbHVtbkdyb3VwICYmIChjLnJvd1N0YXJ0IHx8IDEpIDw9IHJzKTtcbiAgICAgICAgICAgIHZJbmRleCA9IGNvbHMuaW5kZXhPZihjaGlsZCk7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuVmlzaWJsZUluZGV4ZXMucHVzaCh7IGNvbHVtbjogY2hpbGQsIGluZGV4OiB2SW5kZXggfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29sdW1ucy9jb2x1bW4tbGF5b3V0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULHVCQUF1QixFQUN2QixVQUFVLEVBQ1YsS0FBSyxFQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQVNuRSxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsdUJBQXVCO0lBTnJFOztRQU9XLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztLQTJKdEM7SUExSkc7Ozs7Ozs7T0FPRztJQUNILElBQVcsS0FBSztRQUNaLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0csT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELElBQVcsS0FBSyxDQUFDLEdBQVEsSUFBSSxDQUFDO0lBRTlCLElBQVcsWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFO1lBQy9ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJ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RSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O3FIQTNKUSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwwRUFKdEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxpREFFM0YsRUFBRTsyRkFFSCx3QkFBd0I7a0JBTnBDLFNBQVM7bUJBQUM7b0JBQ1AsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDLEVBQUUsQ0FBQztvQkFDckcsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7OEJBd0VjLE1BQU07c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbi1ncm91cC5jb21wb25lbnQnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4Q29sdW1uQ29tcG9uZW50LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hDb2x1bW5MYXlvdXRDb21wb25lbnQpIH1dLFxuICAgIHNlbGVjdG9yOiAnaWd4LWNvbHVtbi1sYXlvdXQnLFxuICAgIHRlbXBsYXRlOiBgYFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hDb2x1bW5MYXlvdXRDb21wb25lbnQgZXh0ZW5kcyBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICAgIHB1YmxpYyBjaGlsZHJlblZpc2libGVJbmRleGVzID0gW107XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBsYXlvdXQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5Hcm91cFdpZHRoID0gdGhpcy5jb2x1bW5Hcm91cC53aWR0aDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgd2lkdGgoKTogYW55IHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldEZpbGxlZENoaWxkQ29sdW1uU2l6ZXModGhpcy5jaGlsZHJlbikucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgcGFyc2VJbnQodmFsLCAxMCksIDApO1xuICAgICAgICByZXR1cm4gd2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB3aWR0aCh2YWw6IGFueSkgeyB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbkxheW91dCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYWxjV2lkdGgoKTogYW55IHtcbiAgICAgICAgbGV0IGJvcmRlcldpZHRoID0gMDtcblxuICAgICAgICBpZiAodGhpcy5oZWFkZXJHcm91cCAmJiB0aGlzLmhlYWRlckdyb3VwLmhhc0xhc3RQaW5uZWRDaGlsZENvbHVtbikge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyU3R5bGVzID0gdGhpcy5ncmlkLmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy5oZWFkZXJHcm91cC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdKTtcbiAgICAgICAgICAgIGJvcmRlcldpZHRoID0gcGFyc2VJbnQoaGVhZGVyU3R5bGVzLmJvcmRlclJpZ2h0V2lkdGgsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdXBlci5nZXRDYWxjV2lkdGgoKSArIGJvcmRlcldpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbHVtbiB2aXNpYmxlIGluZGV4LlxuICAgICAqIElmIHRoZSBjb2x1bW4gaXMgbm90IHZpc2libGUsIHJldHVybnMgYC0xYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHZpc2libGVDb2x1bW5JbmRleCA9ICB0aGlzLmNvbHVtbi52aXNpYmxlSW5kZXg7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldCB2aXNpYmxlSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFpc05hTih0aGlzLl92SW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdkluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5waW5uZWRDb2x1bW5zID0gdGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucy5maWx0ZXIoYyA9PiBjLmNvbHVtbkxheW91dCAmJiAhYy5oaWRkZW4pO1xuICAgICAgICBjb25zdCBwaW5uZWRDb2x1bW5zID0gdGhpcy5ncmlkLnBpbm5lZENvbHVtbnMuZmlsdGVyKGMgPT4gYy5jb2x1bW5MYXlvdXQgJiYgIWMuaGlkZGVuKTtcbiAgICAgICAgbGV0IHZJbmRleCA9IC0xO1xuXG4gICAgICAgIGlmICghdGhpcy5waW5uZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4SW5Db2xsZWN0aW9uID0gdW5waW5uZWRDb2x1bW5zLmluZGV4T2YodGhpcyk7XG4gICAgICAgICAgICB2SW5kZXggPSBpbmRleEluQ29sbGVjdGlvbiA9PT0gLTEgPyAtMSA6IHBpbm5lZENvbHVtbnMubGVuZ3RoICsgaW5kZXhJbkNvbGxlY3Rpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2SW5kZXggPSBwaW5uZWRDb2x1bW5zLmluZGV4T2YodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdkluZGV4ID0gdkluZGV4O1xuICAgICAgICByZXR1cm4gdkluZGV4O1xuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBjb2x1bW4gbGF5b3V0IGlzIGhpZGRlbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzSGlkZGVuID0gdGhpcy5jb2x1bW5Hcm91cC5oaWRkZW47XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGhpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGRlbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW4gbGF5b3V0IGhpZGRlbiBwcm9wZXJ0eS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogPGlneC1jb2x1bW4tbGF5b3V0IFtoaWRkZW5dID0gXCJ0cnVlXCI+PC9pZ3gtY29sdW1uLT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgaGlkZGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hpZGRlbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQuaGlkZGVuID0gdmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5ncmlkICYmIHRoaXMuZ3JpZC5jb2x1bW5MaXN0ICYmIHRoaXMuZ3JpZC5jb2x1bW5MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIHJlc2V0IGluZGV4ZXMgaW4gY2FzZSBjb2x1bW5zIGFyZSBoaWRkZW4vc2hvd24gcnVudGltZVxuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ3JpZCAmJiB0aGlzLmdyaWQucGlubmVkQ29sdW1ucyAmJiB0aGlzLmdyaWQudW5waW5uZWRDb2x1bW5zID9cbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQucGlubmVkQ29sdW1ucy5jb25jYXQodGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucykgOiBbXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5faGlkZGVuICYmICFjb2x1bW5zLmZpbmQoYyA9PiBjLmZpZWxkID09PSB0aGlzLmZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yZXNldENvbHVtbkNvbGxlY3Rpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5maWx0ZXIoeCA9PiB4LmNvbHVtbkxheW91dCkuZm9yRWFjaCh4ID0+IHgucG9wdWxhdGVWaXNpYmxlSW5kZXhlcygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5oaWRkZW4gPSB0aGlzLmFsbENoaWxkcmVuLnNvbWUoeCA9PiB4LmhpZGRlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQuaGlkZGVuID0gdGhpcy5oaWRkZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGNoaWxkLm1vdmFibGUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGdyb3VwIGNvbnRhaW5zIHRoZSBsYXN0IHBpbm5lZCBjaGlsZCBjb2x1bW4gb2YgdGhlIGNvbHVtbiBsYXlvdXQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bXNIYXNMYXN0UGlubmVkID0gdGhpcy5jb2x1bW5MYXlvdXQuaGFzTGFzdFBpbm5lZENoaWxkQ29sdW1uO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5MYXlvdXRDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0xhc3RQaW5uZWRDaGlsZENvbHVtbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uc29tZShjaGlsZCA9PiBjaGlsZC5pc0xhc3RQaW5uZWQpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBncm91cCBjb250YWlucyB0aGUgZmlyc3QgcGlubmVkIGNoaWxkIGNvbHVtbiBvZiB0aGUgY29sdW1uIGxheW91dC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhhc0ZpcnN0UGlubmVkQ2hpbGRDb2x1bW4gPSB0aGlzLmNvbHVtbkxheW91dC5oYXNGaXJzdFBpbm5lZENoaWxkQ29sdW1uO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5MYXlvdXRDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc0ZpcnN0UGlubmVkQ2hpbGRDb2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQuaXNGaXJzdFBpbm5lZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBwb3B1bGF0ZVZpc2libGVJbmRleGVzKCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuVmlzaWJsZUluZGV4ZXMgPSBbXTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ3JpZD8ucGlubmVkQ29sdW1ucyAmJiB0aGlzLmdyaWQ/LnVucGlubmVkQ29sdW1uc1xuICAgICAgICAgICAgPyB0aGlzLmdyaWQucGlubmVkQ29sdW1ucy5jb25jYXQodGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucylcbiAgICAgICAgICAgIDogW107XG4gICAgICAgIGNvbnN0IG9yZGVyZWRDb2xzID0gY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcih4ID0+ICF4LmNvbHVtbkdyb3VwICYmICF4LmhpZGRlbilcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnJvd1N0YXJ0IC0gYi5yb3dTdGFydCB8fCBjb2x1bW5zLmluZGV4T2YoYS5wYXJlbnQpIC0gY29sdW1ucy5pbmRleE9mKGIucGFyZW50KSB8fCBhLmNvbFN0YXJ0IC0gYi5jb2xTdGFydCk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBycyA9IGNoaWxkLnJvd1N0YXJ0IHx8IDE7XG4gICAgICAgICAgICBsZXQgdkluZGV4ID0gMDtcbiAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgYWxsIGNvbHMgd2l0aCBsYXJnZXIgcm93U3RhcnRcbiAgICAgICAgICAgIGNvbnN0IGNvbHMgPSBvcmRlcmVkQ29scy5maWx0ZXIoYyA9PlxuICAgICAgICAgICAgICAgICFjLmNvbHVtbkdyb3VwICYmIChjLnJvd1N0YXJ0IHx8IDEpIDw9IHJzKTtcbiAgICAgICAgICAgIHZJbmRleCA9IGNvbHMuaW5kZXhPZihjaGlsZCk7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuVmlzaWJsZUluZGV4ZXMucHVzaCh7IGNvbHVtbjogY2hpbGQsIGluZGV4OiB2SW5kZXggfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==