@fundamental-ngx/platform 0.43.41 → 0.43.43

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 (59) hide show
  1. package/esm2020/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +1 -1
  2. package/esm2020/form/form-generator/form-generator/form-generator.component.mjs +1 -1
  3. package/esm2020/list/free-content-list-item/free-content-list-item.component.mjs +8 -6
  4. package/esm2020/list/list.component.mjs +1 -1
  5. package/esm2020/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +1 -1
  6. package/esm2020/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
  7. package/esm2020/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +3 -3
  8. package/esm2020/table/components/table-row/table-row.component.mjs +1 -1
  9. package/esm2020/table/table.component.mjs +9 -5
  10. package/esm2020/table-helpers/directives/table-cell-resizable.directive.mjs +30 -24
  11. package/esm2020/table-helpers/directives/table-virtual-scroll.directive.mjs +13 -5
  12. package/esm2020/table-helpers/services/table-column-resize.service.mjs +3 -4
  13. package/esm2020/table-helpers/table.mjs +1 -1
  14. package/esm2020/upload-collection/upload-collection/upload-collection.component.mjs +1 -1
  15. package/esm2020/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +1 -1
  16. package/esm2020/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +1 -1
  17. package/fesm2015/fundamental-ngx-platform-approval-flow.mjs +1 -1
  18. package/fesm2015/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  19. package/fesm2015/fundamental-ngx-platform-form.mjs +1 -1
  20. package/fesm2015/fundamental-ngx-platform-form.mjs.map +1 -1
  21. package/fesm2015/fundamental-ngx-platform-list.mjs +7 -5
  22. package/fesm2015/fundamental-ngx-platform-list.mjs.map +1 -1
  23. package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs +2 -2
  24. package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  25. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +42 -28
  26. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  27. package/fesm2015/fundamental-ngx-platform-table.mjs +11 -7
  28. package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
  29. package/fesm2015/fundamental-ngx-platform-upload-collection.mjs +1 -1
  30. package/fesm2015/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  31. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
  32. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  33. package/fesm2015/fundamental-ngx-platform-variant-management.mjs +1 -1
  34. package/fesm2015/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  35. package/fesm2020/fundamental-ngx-platform-approval-flow.mjs +1 -1
  36. package/fesm2020/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  37. package/fesm2020/fundamental-ngx-platform-form.mjs +1 -1
  38. package/fesm2020/fundamental-ngx-platform-form.mjs.map +1 -1
  39. package/fesm2020/fundamental-ngx-platform-list.mjs +7 -5
  40. package/fesm2020/fundamental-ngx-platform-list.mjs.map +1 -1
  41. package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs +2 -2
  42. package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  43. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +42 -28
  44. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  45. package/fesm2020/fundamental-ngx-platform-table.mjs +11 -7
  46. package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
  47. package/fesm2020/fundamental-ngx-platform-upload-collection.mjs +1 -1
  48. package/fesm2020/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  49. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
  50. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  51. package/fesm2020/fundamental-ngx-platform-variant-management.mjs +1 -1
  52. package/fesm2020/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  53. package/fundamental-ngx-platform-v0.43.43.tgz +0 -0
  54. package/list/free-content-list-item/free-content-list-item.component.d.ts +3 -1
  55. package/package.json +4 -4
  56. package/schematics/ng-add/index.js +1 -1
  57. package/table/table.component.d.ts +3 -1
  58. package/table-helpers/table.d.ts +1 -0
  59. package/fundamental-ngx-platform-v0.43.41.tgz +0 -0
@@ -4,7 +4,7 @@ import { TableCellDirective } from '@fundamental-ngx/core/table';
4
4
  import equal from 'fast-deep-equal';
5
5
  import { TableColumnResizeService } from '../services/table-column-resize.service';
6
6
  import { fromEvent } from 'rxjs';
7
- import { distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';
7
+ import { debounceTime, distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';
8
8
  import * as i0 from "@angular/core";
9
9
  export const TABLE_CELL_RESIZABLE_THRESHOLD_PX = 4;
10
10
  /**
@@ -38,7 +38,7 @@ export class PlatformTableCellResizableDirective extends TableCellDirective {
38
38
  ngOnInit() {
39
39
  this._zone.runOutsideAngular(() => {
40
40
  fromEvent(this.elementRef.nativeElement, 'mousemove')
41
- .pipe(filter(() => this._tableColumnResizeService?.resizeInProgress !== true), map((event) => this._getResizer(event) || { resizerPosition: 0, resizedColumn: this.columnName }), distinctUntilChanged((prev, curr) => equal(prev, curr)), takeUntil(this._destroy$))
41
+ .pipe(filter(() => this._tableColumnResizeService?.resizeInProgress !== true), debounceTime(5), map((event) => this._getResizer(event) || { resizerPosition: 0, resizedColumn: this.columnName }), distinctUntilChanged((prev, curr) => equal(prev, curr)), takeUntil(this._destroy$))
42
42
  .subscribe((data) => {
43
43
  this._tableColumnResizeService.setInitialResizerPosition(data.resizerPosition, data.resizedColumn);
44
44
  });
@@ -64,30 +64,36 @@ export class PlatformTableCellResizableDirective extends TableCellDirective {
64
64
  _getResizer(event) {
65
65
  const el = this.elementRef.nativeElement;
66
66
  const elPosition = el.getBoundingClientRect();
67
- let resizerPosition;
68
- let resizedColumn;
69
- const pointerOnLeft = this._isRtl
70
- ? elPosition.right - event.clientX < TABLE_CELL_RESIZABLE_THRESHOLD_PX
71
- : event.clientX - elPosition.left < TABLE_CELL_RESIZABLE_THRESHOLD_PX;
72
- if (pointerOnLeft && this._resizableSide !== 'end') {
73
- resizerPosition = this._isRtl
74
- ? el.parentElement.offsetWidth - (el.offsetLeft + el.offsetWidth)
75
- : el.offsetLeft;
76
- resizedColumn = this._tableColumnResizeService.getPreviousColumnName(this.columnName);
67
+ // check if mouse is within 5px of cell border
68
+ if (event.clientX > elPosition.x + elPosition.width - 5 || event.clientX < elPosition.x + 5) {
69
+ let resizerPosition;
70
+ let resizedColumn;
71
+ const pointerOnLeft = this._isRtl
72
+ ? elPosition.right - event.clientX < TABLE_CELL_RESIZABLE_THRESHOLD_PX
73
+ : event.clientX - elPosition.left < TABLE_CELL_RESIZABLE_THRESHOLD_PX;
74
+ if (pointerOnLeft && this._resizableSide !== 'end') {
75
+ resizerPosition = this._isRtl
76
+ ? el.parentElement.offsetWidth - (el.offsetLeft + el.offsetWidth)
77
+ : el.offsetLeft;
78
+ resizedColumn = this._tableColumnResizeService.getPreviousColumnName(this.columnName);
79
+ }
80
+ const pointerOnRight = this._isRtl
81
+ ? event.clientX - elPosition.left < TABLE_CELL_RESIZABLE_THRESHOLD_PX
82
+ : elPosition.right - event.clientX < TABLE_CELL_RESIZABLE_THRESHOLD_PX;
83
+ if (pointerOnRight && this._resizableSide !== 'start') {
84
+ resizerPosition = this._isRtl
85
+ ? el.parentElement.offsetWidth - el.offsetLeft
86
+ : el.offsetLeft + el.offsetWidth;
87
+ resizedColumn = this.columnName;
88
+ }
89
+ if (!resizedColumn) {
90
+ return null;
91
+ }
92
+ return { resizerPosition: resizerPosition, resizedColumn };
77
93
  }
78
- const pointerOnRight = this._isRtl
79
- ? event.clientX - elPosition.left < TABLE_CELL_RESIZABLE_THRESHOLD_PX
80
- : elPosition.right - event.clientX < TABLE_CELL_RESIZABLE_THRESHOLD_PX;
81
- if (pointerOnRight && this._resizableSide !== 'start') {
82
- resizerPosition = this._isRtl
83
- ? el.parentElement.offsetWidth - el.offsetLeft
84
- : el.offsetLeft + el.offsetWidth;
85
- resizedColumn = this.columnName;
86
- }
87
- if (!resizedColumn) {
94
+ else {
88
95
  return null;
89
96
  }
90
- return { resizerPosition: resizerPosition, resizedColumn };
91
97
  }
92
98
  }
93
99
  PlatformTableCellResizableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PlatformTableCellResizableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
@@ -131,4 +137,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
131
137
  }], columnName: [{
132
138
  type: Input
133
139
  }] } });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY2VsbC1yZXNpemFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlLWhlbHBlcnMvZGlyZWN0aXZlcy90YWJsZS1jZWxsLXJlc2l6YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFM0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBSTlFLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQUMsQ0FBQztBQUVuRDs7R0FFRztBQW1CSCxNQUFNLE9BQU8sbUNBQ1QsU0FBUSxrQkFBa0I7SUFHMUIsa0RBQWtEO0lBQ2xELElBQ0ksYUFBYSxDQUFDLEtBQStCO1FBQzdDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBU0QsY0FBYztJQUNkLElBQVksTUFBTTtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksS0FBSyxDQUFDO0lBQ3JELENBQUM7SUFVRCxj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QUUsa0JBQWtCO1lBQzNCLFdBQVcsRUFBRSxtQ0FBbUM7U0FDbkQ7S0FDSjsyRkFFUSxtQ0FBbUM7a0JBbEIvQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLDRCQUE0Qjs0QkFDckMsV0FBVyxxQ0FBcUM7eUJBQ25EO3dCQUNEOzRCQUNJLE9BQU8sRUFBRSxzQkFBc0I7NEJBQy9CLFdBQVcscUNBQXFDO3lCQUNuRDt3QkFDRDs0QkFDSSxPQUFPLEVBQUUsa0JBQWtCOzRCQUMzQixXQUFXLHFDQUFxQzt5QkFDbkQ7cUJBQ0o7aUJBQ0o7MEVBT08sYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyx1QkFBdUI7Z0JBVzlCLFVBQVU7c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRkRLX0ZPQ1VTQUJMRV9JVEVNX0RJUkVDVElWRSwgRm9jdXNhYmxlSXRlbURpcmVjdGl2ZSwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFRhYmxlQ2VsbERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90YWJsZSc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uUmVzaXplU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RhYmxlLWNvbHVtbi1yZXNpemUuc2VydmljZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtblJlc2l6YWJsZVNpZGUgPSAnc3RhcnQnIHwgJ2VuZCcgfCAnYm90aCc7XG5cbmV4cG9ydCBjb25zdCBUQUJMRV9DRUxMX1JFU0laQUJMRV9USFJFU0hPTERfUFggPSA0O1xuXG4vKipcbiAqIFRyYWNrcyBtb3VzZSBtb3ZlbWVudCBvdmVyIHRoZSBjZWxsIGlmIHRoZSBtb3VzZSBwb2ludGVyIG5lYXIgdGhlIHNpZGUgb2YgdGhlIGNlbGwsIGluZm9ybXMgcmVzaXplIHNlcnZpY2UuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkcFRhYmxlQ2VsbFJlc2l6YWJsZV0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZES19GT0NVU0FCTEVfSVRFTV9ESVJFQ1RJVkUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogUGxhdGZvcm1UYWJsZUNlbGxSZXNpemFibGVEaXJlY3RpdmVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRm9jdXNhYmxlSXRlbURpcmVjdGl2ZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBQbGF0Zm9ybVRhYmxlQ2VsbFJlc2l6YWJsZURpcmVjdGl2ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUYWJsZUNlbGxEaXJlY3RpdmUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogUGxhdGZvcm1UYWJsZUNlbGxSZXNpemFibGVEaXJlY3RpdmVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1UYWJsZUNlbGxSZXNpemFibGVEaXJlY3RpdmVcbiAgICBleHRlbmRzIFRhYmxlQ2VsbERpcmVjdGl2ZVxuICAgIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgICAvKiogRmlyc3QgY29sdW1uIGNhbiBiZSByZXNpemVkIG9ubHkgYnkgaXRzIGVuZCAqL1xuICAgIEBJbnB1dCgnZmRwVGFibGVDZWxsUmVzaXphYmxlJylcbiAgICBzZXQgcmVzaXphYmxlU2lkZSh2YWx1ZTogVGFibGVDb2x1bW5SZXNpemFibGVTaWRlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Jlc2l6YWJsZVNpZGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQ29sdW1uIG5hbWUgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbHVtbk5hbWU6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzaXphYmxlU2lkZTogVGFibGVDb2x1bW5SZXNpemFibGVTaWRlID0gJ2JvdGgnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfaXNSdGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuZ2V0VmFsdWUoKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZSA9IGluamVjdChUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlID0gaW5qZWN0KFJ0bFNlcnZpY2UsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZW1vdmUnKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlPy5yZXNpemVJblByb2dyZXNzICE9PSB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKChldmVudCkgPT4gdGhpcy5fZ2V0UmVzaXplcihldmVudCkgfHwgeyByZXNpemVyUG9zaXRpb246IDAsIHJlc2l6ZWRDb2x1bW46IHRoaXMuY29sdW1uTmFtZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IGVxdWFsKHByZXYsIGN1cnIpKSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5zZXRJbml0aWFsUmVzaXplclBvc2l0aW9uKGRhdGEucmVzaXplclBvc2l0aW9uLCBkYXRhLnJlc2l6ZWRDb2x1bW4pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZnJvbUV2ZW50PEZvY3VzRXZlbnQ+KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZm9jdXMnKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5zZXRJbml0aWFsUmVzaXplclBvc2l0aW9uKDAsIHRoaXMuY29sdW1uTmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5OYW1lID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZT8ucmVnaXN0ZXJDb2x1bW5DZWxsKHRoaXMuY29sdW1uTmFtZSwgdGhpcy5lbGVtZW50UmVmKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2U/LnVucmVnaXN0ZXJDb2x1bW5DZWxsKHRoaXMuY29sdW1uTmFtZSwgdGhpcy5lbGVtZW50UmVmKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFJlc2l6ZXIoZXZlbnQ6IE1vdXNlRXZlbnQpOiB7IHJlc2l6ZXJQb3NpdGlvbjogbnVtYmVyOyByZXNpemVkQ29sdW1uOiBzdHJpbmcgfSB8IG51bGwge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBlbFBvc2l0aW9uID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgbGV0IHJlc2l6ZXJQb3NpdGlvbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcmVzaXplZENvbHVtbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IHBvaW50ZXJPbkxlZnQgPSB0aGlzLl9pc1J0bFxuICAgICAgICAgICAgPyBlbFBvc2l0aW9uLnJpZ2h0IC0gZXZlbnQuY2xpZW50WCA8IFRBQkxFX0NFTExfUkVTSVpBQkxFX1RIUkVTSE9MRF9QWFxuICAgICAgICAgICAgOiBldmVudC5jbGllbnRYIC0gZWxQb3NpdGlvbi5sZWZ0IDwgVEFCTEVfQ0VMTF9SRVNJWkFCTEVfVEhSRVNIT0xEX1BYO1xuXG4gICAgICAgIGlmIChwb2ludGVyT25MZWZ0ICYmIHRoaXMuX3Jlc2l6YWJsZVNpZGUgIT09ICdlbmQnKSB7XG4gICAgICAgICAgICByZXNpemVyUG9zaXRpb24gPSB0aGlzLl9pc1J0bFxuICAgICAgICAgICAgICAgID8gZWwucGFyZW50RWxlbWVudCEub2Zmc2V0V2lkdGggLSAoZWwub2Zmc2V0TGVmdCArIGVsLm9mZnNldFdpZHRoKVxuICAgICAgICAgICAgICAgIDogZWwub2Zmc2V0TGVmdDtcblxuICAgICAgICAgICAgcmVzaXplZENvbHVtbiA9IHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5nZXRQcmV2aW91c0NvbHVtbk5hbWUodGhpcy5jb2x1bW5OYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvaW50ZXJPblJpZ2h0ID0gdGhpcy5faXNSdGxcbiAgICAgICAgICAgID8gZXZlbnQuY2xpZW50WCAtIGVsUG9zaXRpb24ubGVmdCA8IFRBQkxFX0NFTExfUkVTSVpBQkxFX1RIUkVTSE9MRF9QWFxuICAgICAgICAgICAgOiBlbFBvc2l0aW9uLnJpZ2h0IC0gZXZlbnQuY2xpZW50WCA8IFRBQkxFX0NFTExfUkVTSVpBQkxFX1RIUkVTSE9MRF9QWDtcblxuICAgICAgICBpZiAocG9pbnRlck9uUmlnaHQgJiYgdGhpcy5fcmVzaXphYmxlU2lkZSAhPT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgcmVzaXplclBvc2l0aW9uID0gdGhpcy5faXNSdGxcbiAgICAgICAgICAgICAgICA/IGVsLnBhcmVudEVsZW1lbnQhLm9mZnNldFdpZHRoIC0gZWwub2Zmc2V0TGVmdFxuICAgICAgICAgICAgICAgIDogZWwub2Zmc2V0TGVmdCArIGVsLm9mZnNldFdpZHRoO1xuXG4gICAgICAgICAgICByZXNpemVkQ29sdW1uID0gdGhpcy5jb2x1bW5OYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXNpemVkQ29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHJlc2l6ZXJQb3NpdGlvbjogcmVzaXplclBvc2l0aW9uISwgcmVzaXplZENvbHVtbiB9O1xuICAgIH1cbn1cbiJdfQ==
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY2VsbC1yZXNpemFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlLWhlbHBlcnMvZGlyZWN0aXZlcy90YWJsZS1jZWxsLXJlc2l6YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFM0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUk1RixNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7QUFFbkQ7O0dBRUc7QUFtQkgsTUFBTSxPQUFPLG1DQUNULFNBQVEsa0JBQWtCO0lBRzFCLGtEQUFrRDtJQUNsRCxJQUNJLGFBQWEsQ0FBQyxLQUErQjtRQUM3QyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQVNELGNBQWM7SUFDZCxJQUFZLE1BQU07UUFDZCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEtBQUssQ0FBQztJQUNyRCxD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YSxFQUFFLENBQUM7U0FDL0Q7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDTCxDQUFDOztnSUFwSFEsbUNBQW1DO29IQUFuQyxtQ0FBbUMsdUtBZmpDO1FBQ1A7WUFDSSxPQUFPLEVBQUUsNEJBQTRCO1lBQ3JDLFdBQVcsRUFBRSxtQ0FBbUM7U0FDbkQ7UUFDRDtZQUNJLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsV0FBVyxFQUFFLG1DQUFtQztTQUNuRDtRQUNEO1lBQ0ksT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixXQUFXLEVBQUUsbUNBQW1DO1NBQ25EO0tBQ0o7MkZBRVEsbUNBQW1DO2tCQWxCL0MsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSw0QkFBNEI7NEJBQ3JDLFdBQVcscUNBQXFDO3lCQUNuRDt3QkFDRDs0QkFDSSxPQUFPLEVBQUUsc0JBQXNCOzRCQUMvQixXQUFXLHFDQUFxQzt5QkFDbkQ7d0JBQ0Q7NEJBQ0ksT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsV0FBVyxxQ0FBcUM7eUJBQ25EO3FCQUNKO2lCQUNKOzBFQU9PLGFBQWE7c0JBRGhCLEtBQUs7dUJBQUMsdUJBQXVCO2dCQVc5QixVQUFVO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEZES19GT0NVU0FCTEVfSVRFTV9ESVJFQ1RJVkUsIEZvY3VzYWJsZUl0ZW1EaXJlY3RpdmUsIFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBUYWJsZUNlbGxEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGFibGUnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90YWJsZS1jb2x1bW4tcmVzaXplLnNlcnZpY2UnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtblJlc2l6YWJsZVNpZGUgPSAnc3RhcnQnIHwgJ2VuZCcgfCAnYm90aCc7XG5cbmV4cG9ydCBjb25zdCBUQUJMRV9DRUxMX1JFU0laQUJMRV9USFJFU0hPTERfUFggPSA0O1xuXG4vKipcbiAqIFRyYWNrcyBtb3VzZSBtb3ZlbWVudCBvdmVyIHRoZSBjZWxsIGlmIHRoZSBtb3VzZSBwb2ludGVyIG5lYXIgdGhlIHNpZGUgb2YgdGhlIGNlbGwsIGluZm9ybXMgcmVzaXplIHNlcnZpY2UuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkcFRhYmxlQ2VsbFJlc2l6YWJsZV0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZES19GT0NVU0FCTEVfSVRFTV9ESVJFQ1RJVkUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogUGxhdGZvcm1UYWJsZUNlbGxSZXNpemFibGVEaXJlY3RpdmVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRm9jdXNhYmxlSXRlbURpcmVjdGl2ZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBQbGF0Zm9ybVRhYmxlQ2VsbFJlc2l6YWJsZURpcmVjdGl2ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUYWJsZUNlbGxEaXJlY3RpdmUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogUGxhdGZvcm1UYWJsZUNlbGxSZXNpemFibGVEaXJlY3RpdmVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1UYWJsZUNlbGxSZXNpemFibGVEaXJlY3RpdmVcbiAgICBleHRlbmRzIFRhYmxlQ2VsbERpcmVjdGl2ZVxuICAgIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgICAvKiogRmlyc3QgY29sdW1uIGNhbiBiZSByZXNpemVkIG9ubHkgYnkgaXRzIGVuZCAqL1xuICAgIEBJbnB1dCgnZmRwVGFibGVDZWxsUmVzaXphYmxlJylcbiAgICBzZXQgcmVzaXphYmxlU2lkZSh2YWx1ZTogVGFibGVDb2x1bW5SZXNpemFibGVTaWRlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Jlc2l6YWJsZVNpZGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQ29sdW1uIG5hbWUgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbHVtbk5hbWU6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzaXphYmxlU2lkZTogVGFibGVDb2x1bW5SZXNpemFibGVTaWRlID0gJ2JvdGgnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfaXNSdGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuZ2V0VmFsdWUoKSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZSA9IGluamVjdChUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlID0gaW5qZWN0KFJ0bFNlcnZpY2UsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZW1vdmUnKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlPy5yZXNpemVJblByb2dyZXNzICE9PSB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUpLFxuICAgICAgICAgICAgICAgICAgICBtYXAoKGV2ZW50KSA9PiB0aGlzLl9nZXRSZXNpemVyKGV2ZW50KSB8fCB7IHJlc2l6ZXJQb3NpdGlvbjogMCwgcmVzaXplZENvbHVtbjogdGhpcy5jb2x1bW5OYW1lIH0pLFxuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gZXF1YWwocHJldiwgY3VycikpLFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLnNldEluaXRpYWxSZXNpemVyUG9zaXRpb24oZGF0YS5yZXNpemVyUG9zaXRpb24sIGRhdGEucmVzaXplZENvbHVtbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmcm9tRXZlbnQ8Rm9jdXNFdmVudD4odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1cycpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLnNldEluaXRpYWxSZXNpemVyUG9zaXRpb24oMCwgdGhpcy5jb2x1bW5OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbk5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlPy5yZWdpc3RlckNvbHVtbkNlbGwodGhpcy5jb2x1bW5OYW1lLCB0aGlzLmVsZW1lbnRSZWYpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZT8udW5yZWdpc3RlckNvbHVtbkNlbGwodGhpcy5jb2x1bW5OYW1lLCB0aGlzLmVsZW1lbnRSZWYpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0UmVzaXplcihldmVudDogTW91c2VFdmVudCk6IHsgcmVzaXplclBvc2l0aW9uOiBudW1iZXI7IHJlc2l6ZWRDb2x1bW46IHN0cmluZyB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVsUG9zaXRpb24gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgLy8gY2hlY2sgaWYgbW91c2UgaXMgd2l0aGluIDVweCBvZiBjZWxsIGJvcmRlclxuICAgICAgICBpZiAoZXZlbnQuY2xpZW50WCA+IGVsUG9zaXRpb24ueCArIGVsUG9zaXRpb24ud2lkdGggLSA1IHx8IGV2ZW50LmNsaWVudFggPCBlbFBvc2l0aW9uLnggKyA1KSB7XG4gICAgICAgICAgICBsZXQgcmVzaXplclBvc2l0aW9uOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsZXQgcmVzaXplZENvbHVtbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCBwb2ludGVyT25MZWZ0ID0gdGhpcy5faXNSdGxcbiAgICAgICAgICAgICAgICA/IGVsUG9zaXRpb24ucmlnaHQgLSBldmVudC5jbGllbnRYIDwgVEFCTEVfQ0VMTF9SRVNJWkFCTEVfVEhSRVNIT0xEX1BYXG4gICAgICAgICAgICAgICAgOiBldmVudC5jbGllbnRYIC0gZWxQb3NpdGlvbi5sZWZ0IDwgVEFCTEVfQ0VMTF9SRVNJWkFCTEVfVEhSRVNIT0xEX1BYO1xuXG4gICAgICAgICAgICBpZiAocG9pbnRlck9uTGVmdCAmJiB0aGlzLl9yZXNpemFibGVTaWRlICE9PSAnZW5kJykge1xuICAgICAgICAgICAgICAgIHJlc2l6ZXJQb3NpdGlvbiA9IHRoaXMuX2lzUnRsXG4gICAgICAgICAgICAgICAgICAgID8gZWwucGFyZW50RWxlbWVudCEub2Zmc2V0V2lkdGggLSAoZWwub2Zmc2V0TGVmdCArIGVsLm9mZnNldFdpZHRoKVxuICAgICAgICAgICAgICAgICAgICA6IGVsLm9mZnNldExlZnQ7XG5cbiAgICAgICAgICAgICAgICByZXNpemVkQ29sdW1uID0gdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmdldFByZXZpb3VzQ29sdW1uTmFtZSh0aGlzLmNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwb2ludGVyT25SaWdodCA9IHRoaXMuX2lzUnRsXG4gICAgICAgICAgICAgICAgPyBldmVudC5jbGllbnRYIC0gZWxQb3NpdGlvbi5sZWZ0IDwgVEFCTEVfQ0VMTF9SRVNJWkFCTEVfVEhSRVNIT0xEX1BYXG4gICAgICAgICAgICAgICAgOiBlbFBvc2l0aW9uLnJpZ2h0IC0gZXZlbnQuY2xpZW50WCA8IFRBQkxFX0NFTExfUkVTSVpBQkxFX1RIUkVTSE9MRF9QWDtcblxuICAgICAgICAgICAgaWYgKHBvaW50ZXJPblJpZ2h0ICYmIHRoaXMuX3Jlc2l6YWJsZVNpZGUgIT09ICdzdGFydCcpIHtcbiAgICAgICAgICAgICAgICByZXNpemVyUG9zaXRpb24gPSB0aGlzLl9pc1J0bFxuICAgICAgICAgICAgICAgICAgICA/IGVsLnBhcmVudEVsZW1lbnQhLm9mZnNldFdpZHRoIC0gZWwub2Zmc2V0TGVmdFxuICAgICAgICAgICAgICAgICAgICA6IGVsLm9mZnNldExlZnQgKyBlbC5vZmZzZXRXaWR0aDtcblxuICAgICAgICAgICAgICAgIHJlc2l6ZWRDb2x1bW4gPSB0aGlzLmNvbHVtbk5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcmVzaXplZENvbHVtbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyByZXNpemVyUG9zaXRpb246IHJlc2l6ZXJQb3NpdGlvbiEsIHJlc2l6ZWRDb2x1bW4gfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -143,6 +143,12 @@ export class TableVirtualScrollDirective extends TableVirtualScroll {
143
143
  /** @hidden */
144
144
  ngOnDestroy() {
145
145
  this._focusableGridSubscription?.unsubscribe();
146
+ if (this.scrollWholeRows) {
147
+ this._table.tableContainer.nativeElement.removeEventListener('wheel', this._wheelScrollListenerFunction, {
148
+ passive: false
149
+ });
150
+ this._table.tableScrollMockContainer.nativeElement.removeEventListener('scroll', this._mockScrollbarListenerFunction, { passive: false });
151
+ }
146
152
  }
147
153
  /** Sets table reference. */
148
154
  setTable(table) {
@@ -171,7 +177,7 @@ export class TableVirtualScrollDirective extends TableVirtualScroll {
171
177
  }
172
178
  }
173
179
  const totalNodeCount = this._table._tableRowsVisible.length;
174
- let visibleNodeCount = Math.floor(this._table.tableContainer.nativeElement.clientHeight / this.rowHeight);
180
+ let visibleNodeCount = this._getNumberOfRowsToDisplay();
175
181
  visibleNodeCount = Math.min(totalNodeCount - startNodeIndex, visibleNodeCount);
176
182
  this.virtualScrollTotalHeight = totalNodeCount * this.rowHeight - visibleNodeCount * this.rowHeight;
177
183
  this._setRows(startNodeIndex);
@@ -235,13 +241,15 @@ export class TableVirtualScrollDirective extends TableVirtualScroll {
235
241
  const tableContainer = this._table.tableContainer.nativeElement;
236
242
  let tableHeight = tableContainer.clientHeight;
237
243
  tableHeight = tableHeight - tableContainer.querySelector('thead').clientHeight;
238
- const numberOfRows = Math.floor(tableHeight / (this.rowHeight + 2));
244
+ const numberOfRows = Math.floor(tableHeight / this.rowHeight);
245
+ let retVal;
239
246
  if (this._table._tableRowsVisible.length < numberOfRows) {
240
- return this._table._tableRowsVisible.length;
247
+ retVal = this._table._tableRowsVisible.length;
241
248
  }
242
249
  else {
243
- return numberOfRows;
250
+ retVal = numberOfRows;
244
251
  }
252
+ return retVal;
245
253
  }
246
254
  /**
247
255
  * @hidden
@@ -326,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
326
334
  type: HostListener,
327
335
  args: ['keydown', ['$event']]
328
336
  }] } });
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdmlydHVhbC1zY3JvbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlLWhlbHBlcnMvZGlyZWN0aXZlcy90YWJsZS12aXJ0dWFsLXNjcm9sbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGdCQUFnQixFQUF5QixPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRTNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWM5RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsa0JBQWtCO0lBWm5FOztRQWFJOztXQUVHO1FBRUgsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFtQnRCLHdFQUF3RTtRQUV4RSxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQU1qQjs7O1dBR0c7UUFFSCxjQUFT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dmUsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGVzdHJveWVkU2VydmljZSwgRm9jdXNhYmxlSXRlbVBvc2l0aW9uLCBLZXlVdGlsIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlNb2RlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZpbHRlciwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGRFBfVEFCTEVfVklSVFVBTF9TQ1JPTExfRElSRUNUSVZFLCBST1dfSEVJR0hUIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFRhYmxlVmlydHVhbFNjcm9sbCB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGFibGUtc2Nyb2xsLWRpc3BhdGNoZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7IERPV05fQVJST1csIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IFRhYmxlUm93U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RhYmxlLXJvdy5zZXJ2aWNlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbkBEaXJlY3RpdmUoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdmZHAtdGFibGVbdmlydHVhbFNjcm9sbF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIERlc3Ryb3llZFNlcnZpY2UsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEUF9UQUJMRV9WSVJUVUFMX1NDUk9MTF9ESVJFQ1RJVkUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVGFibGVWaXJ0dWFsU2Nyb2xsRGlyZWN0aXZlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlVmlydHVhbFNjcm9sbERpcmVjdGl2ZSBleHRlbmRzIFRhYmxlVmlydHVhbFNjcm9sbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAgIC8qKiBXaGV0aGVyIHRvIHNob3cgb25seSB2aXNpYmxlIHJvd3MgaW4gbWF0dGVyIG9mIHBlcmZvcm1hbmNlXG4gICAgICogZmFsc2UgYnkgZGVmYXVsdCwgd2hlbiB0cnVlIHNldHRpbmcgYm9keUhlaWdodCBhbmQgcm93SGVpZ2h0IGlzIHJlcXVpcmVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBzY3JvbGwgd2hvbGUgcm93cyByYXRoZXIgdGhhbiBwaXhlbCBieSBwaXhlbCB3aGVuIHRoZSB1c2VyIHBlcmZvcm1zIGEgc2Nyb2xsLlxuICAgICAqIFRoaXMgZ2l2ZXMgZ3JlYXRlciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgYnV0IGFsc28gbGVuZHMgdG8gc29tZSBwb3RlbnRpYWxseSB1bmRlc2lyYWJsZSBVWCBjaGFuZ2VzLlxuICAgICAqIEEgXCJyb3dIZWlnaHRcIiBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gdXNpbmcgdGhpcyBmZWF0dXJlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNjcm9sbFdob2xlUm93cyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zY3JvbGxXaG9sZVJvd3MgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsV2hvbGVSb3dzKSB7XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNjcm9sbFdob2xlUm93cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbFdob2xlUm93cztcbiAgICB9XG5cbiAgICAvKiogQ2FjaGUgc2l6ZSBmb3IgdGhlIHZpcnR1YWxTY3JvbGwsIGRlZmF1bHQgaXMgNDAgaW4gZWFjaCBkaXJlY3Rpb24gKi9cbiAgICBASW5wdXQoKVxuICAgIHJlbmRlckFoZWFkID0gNDA7XG5cbiAgICAvKiogQm9keSBoZWlnaHQuICovXG4gICAgQElucHV0KClcbiAgICBib2R5SGVpZ2h0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIHJvdywgcmVxdWlyZWQgZm9yIHRoZSB2aXJ0dWFsU2Nyb2xsLFxuICAgICAqIGRlZmF1bHQgaXMgNDRweCBpbiBjb3p5LCAzMnB4IGluIGNvbXBhY3QgYW5kIDI0cHggaW4gY29uZGVuc2VkIChzZXQgYXV0b21hdGljYWxseSlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0hlaWdodCA9IFJPV19IRUlHSFQuZ2V0KENvbnRlbnREZW5zaXR5TW9kZS5DT1pZKSE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHZpcnR1YWxTY3JvbGxUb3RhbEhlaWdodCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHZpcnR1YWxTY3JvbGxUcmFuc2Zvcm0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90YWJsZTogVGFibGU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZpcnR1YWxTY3JvbGxDYWNoZSA9IHsgc3RhcnROb2RlSW5kZXg6IC0xLCB2aXNpYmxlTm9kZUNvdW50OiAtMSwgdG90YWxOb2RlQ291bnQ6IC0xIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlU2Nyb2xsRGlzcGF0Y2hlciA9IGluamVjdChUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVSb3dTZXJ2aWNlID0gaW5qZWN0KFRhYmxlUm93U2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3llZFNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF93aGVlbFRpbWVvdXQ6IGFueTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2Nyb2xsTW9ja1RpbWVvdXQ6IGFueTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdE1vY2tTY3JvbGxQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzYWJsZUdyaWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNlZENlbGw6IEZvY3VzYWJsZUl0ZW1Qb3NpdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldmlvdXNTdGFydE5vZGVJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Njcm9sbFdob2xlUm93cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBfa2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsV2hvbGVSb3dzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZm9jdXNlZENlbGw/LnJvd0luZGV4ID09PSAwICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0cicpWzFdLmFyaWFSb3dJbmRleCAhPT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxUb0ZvY3VzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sSW5kZXg6IHRoaXMuX2ZvY3VzZWRDZWxsLmNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgcm93SW5kZXg6IDFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGUuX2ZvY3VzYWJsZUdyaWQuZm9jdXNDZWxsKGNlbGxUb0ZvY3VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsUm93KC0xKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNlZENlbGw/LnJvd0luZGV4ID09PSB0aGlzLl9nZXROdW1iZXJPZlJvd3NUb0Rpc3BsYXkoKSAmJlxuICAgICAgICAgICAgICAgIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsUm93KDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsV2hvbGVSb3dzICYmICF0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YWJsZS50YWJsZVNjcm9sbGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIChjaGFuZ2VzWydyb3dIZWlnaHQnXSB8fCBjaGFuZ2VzWyd2aXJ0dWFsU2Nyb2xsJ10gfHwgY2hhbmdlc1sncmVuZGVyQWhlYWQnXSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlVmlydHVhbFNjcm9sbFJvd3MoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzYWJsZUdyaWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgdGFibGUgcmVmZXJlbmNlLiAqL1xuICAgIHNldFRhYmxlKHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZSA9IHRhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBob3cgbWFueSByb3dzIGNhbiBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlLCBhbmQgc2V0cyB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmFzZWQgb24gdGhlXG4gICAgICogc3RhcnQgbm9kZSBpbmRleCwgd2hpY2ggbWF5IGNvbWUgZnJvbSB0aGUgdGFibGUgc3RhdGVcbiAgICAgKi9cbiAgICBjYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsV2hvbGVSb3dzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2ZvY3VzYWJsZUdyaWRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c2FibGVHcmlkU3Vic2NyaXB0aW9uID0gdGhpcy5fdGFibGUuX2ZvY3VzYWJsZUdyaWQuaXRlbUZvY3VzZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c2VkQ2VsbCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwgfHwgIXRoaXMuYm9keUhlaWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHN0YXJ0Tm9kZUluZGV4ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuX3RhYmxlLmdldFRhYmxlU3RhdGUoKS5zY3JvbGxUb3BQb3NpdGlvbjtcbiAgICAgICAgICAgIGlmIChzY3JvbGxUb3AgIT09IDApIHtcbiAgICAgICAgICAgICAgICBzdGFydE5vZGVJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydE5vZGVJbmRleCA+IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydE5vZGVJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0b3RhbE5vZGVDb3VudCA9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aDtcbiAgICAgICAgICAgIGxldCB2aXNpYmxlTm9kZUNvdW50ID0gTWF0aC5mbG9vcih0aGlzLl90YWJsZS50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgICAgICAgICAgIHZpc2libGVOb2RlQ291bnQgPSBNYXRoLm1pbih0b3RhbE5vZGVDb3VudCAtIHN0YXJ0Tm9kZUluZGV4LCB2aXNpYmxlTm9kZUNvdW50KTtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFRvdGFsSGVpZ2h0ID0gdG90YWxOb2RlQ291bnQgKiB0aGlzLnJvd0hlaWdodCAtIHZpc2libGVOb2RlQ291bnQgKiB0aGlzLnJvd0hlaWdodDtcblxuICAgICAgICAgICAgdGhpcy5fc2V0Um93cyhzdGFydE5vZGVJbmRleCk7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxNb2NrQ29udGFpbmVyID0gdGhpcy5fdGFibGUudGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBzY3JvbGxNb2NrQ29udGFpbmVyLnN0eWxlLm1heEhlaWdodCA9IHRoaXMuYm9keUhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsIHx8ICF0aGlzLmJvZHlIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMucm93SGVpZ2h0ICsgMTtcblxuICAgICAgICAgICAgY29uc3Qgcm93c1Zpc2libGUgPSB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHJvd3NJblZpZXdQb3J0ID0gdGhpcy5fdGFibGUuZ2V0Um93c0luVmlld3BvcnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsTm9kZUNvdW50ID0gcm93c1Zpc2libGUubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5fdGFibGUudGFibGVTY3JvbGxhYmxlLmdldFNjcm9sbFRvcCgpO1xuXG4gICAgICAgICAgICBsZXQgc3RhcnROb2RlSW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHJvd0hlaWdodCkgLSB0aGlzLnJlbmRlckFoZWFkO1xuICAgICAgICAgICAgc3RhcnROb2RlSW5kZXggPSBNYXRoLm1heCgwLCBzdGFydE5vZGVJbmRleCk7XG5cbiAgICAgICAgICAgIGxldCB2aXNpYmxlTm9kZUNvdW50ID1cbiAgICAgICAgICAgICAgICBNYXRoLmNlaWwodGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgLyByb3dIZWlnaHQpICsgMiAqIHRoaXMucmVuZGVyQWhlYWQ7XG4gICAgICAgICAgICB2aXNpYmxlTm9kZUNvdW50ID0gTWF0aC5taW4odG90YWxOb2RlQ291bnQgLSBzdGFydE5vZGVJbmRleCwgdmlzaWJsZU5vZGVDb3VudCk7XG5cbiAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFRyYW5zZm9ybSQubmV4dChzdGFydE5vZGVJbmRleCAqIHJvd0hlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIFNpbXBsZSBjYWNoaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcmluZ3NcbiAgICAgICAgICAgIGNvbnN0IGlzQ2FjaGVkID1cbiAgICAgICAgICAgICAgICBzdGFydE5vZGVJbmRleCA9PT0gdGhpcy5fdmlydHVhbFNjcm9sbENhY2hlLnN0YXJ0Tm9kZUluZGV4ICYmXG4gICAgICAgICAgICAgICAgdmlzaWJsZU5vZGVDb3VudCA9PT0gdGhpcy5fdmlydHVhbFNjcm9sbENhY2hlLnZpc2libGVOb2RlQ291bnQgJiZcbiAgICAgICAgICAgICAgICB0b3RhbE5vZGVDb3VudCA9PT0gdGhpcy5fdmlydHVhbFNjcm9sbENhY2hlLnRvdGFsTm9kZUNvdW50ICYmXG4gICAgICAgICAgICAgICAgLy8gT24gcm93cyBjaGFuZ2UsIGV2ZW4gaWYgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGlzIHRoZSBzYW1lLCB0aGUgcm93IG9iamVjdCB3aWxsIGJlIGRpZmZlcmVudFxuICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZUluZGV4ID09PSByb3dzSW5WaWV3UG9ydFswXTtcblxuICAgICAgICAgICAgaWYgKGlzQ2FjaGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsQ2FjaGUgPSB7IHN0YXJ0Tm9kZUluZGV4LCB2aXNpYmxlTm9kZUNvdW50LCB0b3RhbE5vZGVDb3VudCB9O1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHQgPSB0b3RhbE5vZGVDb3VudCAqIHJvd0hlaWdodCAtIHZpc2libGVOb2RlQ291bnQgKiByb3dIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl90YWJsZS5zZXRSb3dzSW5WaWV3cG9ydChcbiAgICAgICAgICAgICAgICBzdGFydE5vZGVJbmRleCxcbiAgICAgICAgICAgICAgICByb3dzVmlzaWJsZS5zbGljZShzdGFydE5vZGVJbmRleCwgc3RhcnROb2RlSW5kZXggKyB2aXNpYmxlTm9kZUNvdW50KS5sZW5ndGhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSW5pdGlhbGlzZXMgc2Nyb2xsIGxpc3RlbmVycy5cbiAgICAgKi9cbiAgICBsaXN0ZW5PblZpcnR1YWxTY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFdob2xlUm93cykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIHRoaXMuX3doZWVsU2Nyb2xsTGlzdGVuZXJGdW5jdGlvbiwge1xuICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlLnRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9ja1Njcm9sbGJhckxpc3RlbmVyRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgeyBwYXNzaXZlOiBmYWxzZSB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVTY3JvbGxEaXNwYXRjaGVyXG4gICAgICAgICAgICAgICAgLnZlcnRpY2FsbHlTY3JvbGxlZCgpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnZpcnR1YWxTY3JvbGwgJiYgISF0aGlzLmJvZHlIZWlnaHQpLFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNjcm9sbGFibGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZS5zZXRUYWJsZVN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX3RhYmxlLmdldFRhYmxlU3RhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcFBvc2l0aW9uOiBzY3JvbGxhYmxlLmdldFNjcm9sbFRvcCgpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXROdW1iZXJPZlJvd3NUb0Rpc3BsYXkoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdGFibGVDb250YWluZXIgPSB0aGlzLl90YWJsZS50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICBsZXQgdGFibGVIZWlnaHQgPSB0YWJsZUNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICAgIHRhYmxlSGVpZ2h0ID0gdGFibGVIZWlnaHQgLSB0YWJsZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpLmNsaWVudEhlaWdodDtcbiAgICAgICAgY29uc3QgbnVtYmVyT2ZSb3dzID0gTWF0aC5mbG9vcih0YWJsZUhlaWdodCAvICh0aGlzLnJvd0hlaWdodCArIDIpKTtcbiAgICAgICAgaWYgKHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCA8IG51bWJlck9mUm93cykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXJPZlJvd3M7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBwZXJmb3JtcyBhIHdoZWVsIGV2ZW50LiBJdCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGhhcyBzY3JvbGxlZFxuICAgICAqIHVwIG9yIGRvd24gdXNpbmcgdGhlIGV2ZW50J3MgZGVsdGFYIHByb3BlcnR5LCBhbmQgc2Nyb2xscyB0aGUgdGFibGUgYnkgb25lIHJvdy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF93aGVlbFNjcm9sbExpc3RlbmVyRnVuY3Rpb24gPSAoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKE1hdGguYWJzKGV2ZW50LmRlbHRhWCkgPCBNYXRoLmFicyhldmVudC5kZWx0YVkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fd2hlZWxUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3doZWVsVGltZW91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBldmVudC5kZWx0YVk7XG4gICAgICAgICAgICBpZiAoZGVsdGFZKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2hlZWxUaW1lb3V0ID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbFJvdyhkZWx0YVkgPiAwID8gMSA6IC0xKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgbW9jayBzY3JvbGxiYXIgKHdoZW4gdXNpbmcgJ3Njcm9sbFdob2xlUm93cycpIGlzIG1vdmVkLiBJdCBkZXRlcm1pbmVzIGlmIHRoZVxuICAgICAqIHNjcm9sbCB3YXMgdXAgb3IgZG93biBieSBjb21wYXJpbmcgdGhlIGN1cnJlbnQgc2Nyb2xsIHRvcCB0byB0aGUgcHJldmlvdXMgc2Nyb2xsIHRvcCBhbmQgc2Nyb2xscyByb3dzIGFjY29yZGluZ2x5LlxuICAgICAqL1xuICAgIHByaXZhdGUgX21vY2tTY3JvbGxiYXJMaXN0ZW5lckZ1bmN0aW9uID0gKGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbE1vY2tUaW1lb3V0KSB7XG4gICAgICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fc2Nyb2xsTW9ja1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lciA9IHRoaXMuX3RhYmxlLnRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICBsZXQgZGVsdGFZID0gdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLnNjcm9sbFRvcCAtIHRoaXMuX2xhc3RNb2NrU2Nyb2xsUG9zaXRpb247XG4gICAgICAgIGRlbHRhWSA9IE1hdGguY2VpbChkZWx0YVkgLyB0aGlzLnJvd0hlaWdodCk7XG4gICAgICAgIHRoaXMuX3Njcm9sbE1vY2tUaW1lb3V0ID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxSb3coZGVsdGFZLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RNb2NrU2Nyb2xsUG9zaXRpb24gPSB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgaWYgKHRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5zY3JvbGxUb3AgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBBbHdheXMgZGlzcGxheSB0aGUgZmlyc3Qgcm93IG9mIHRoZSB0YWJsZSB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgYWxsIHRoZSB3YXkgdG8gdGhlIHRvcFxuICAgICAgICAgICAgICAgIHRoaXMuX3NldFJvd3MoMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLnNjcm9sbFRvcCArIHRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgPT09XG4gICAgICAgICAgICAgICAgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLnNjcm9sbEhlaWdodFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gQWx3YXlzIGRpc3BsYXkgdGhlIGxhc3Qgcm93cyBvZiB0aGUgdGFibGUgd2hlbiB0aGUgdXNlciBzY3JvbGxzIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b21cbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydGluZ05vZGVJbmRleCA9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCAtIHRoaXMuX2dldE51bWJlck9mUm93c1RvRGlzcGxheSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFJvd3Moc3RhcnRpbmdOb2RlSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRoaXMgZnVuY3Rpb24sIHVzZWQgb25seSB3aGVuICdzY3JvbGxXaG9sZVJvd3MnIGlzIHRydXRoeSwgY2FsY3VsYXRlcyB3aGF0IHNob3VsZCBiZSB0aGUgbmV3IHN0YXJ0aW5nIG5vZGUsIGJhc2VkXG4gICAgICogb2ZmIHRoZSBwcmV2aW91cyBzdGFydGluZyBub2RlIGFuZCB0aGUgcHJvdmlkZWQgJ2NvdW50JyBwYXJhbWV0ZXIuIEZvciBleGFtcGxlIGlmIHRoZSBwcmV2aW91cyBzdGFydCBub2RlIHdhcyAxMFxuICAgICAqIGFuZCB0aGUgY291bnQgcGFyYW1ldGVyIGlzIC0yLCB0aGUgbmV3IHN0YXJ0aW5nIG5vZGUgd2lsbCBiZSA4LiBUaGlzIGZ1bmN0aW9uIGFsc28gcHJvZ3JhbW1hdGljYWxseSBtb3ZlcyB0aGVcbiAgICAgKiBtb2NrIHNjcm9sbGJhci5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zY3JvbGxSb3coY291bnQ6IG51bWJlciwgZnJvbU1vY2tTY3JvbGxiYXJMaXN0ZW5lciA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGxldCBzdGFydGluZ05vZGUgPSAwO1xuICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNTdGFydE5vZGVJbmRleCAhPT0gbnVsbCAmJiB0aGlzLl9wcmV2aW91c1N0YXJ0Tm9kZUluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHN0YXJ0aW5nTm9kZSA9IHRoaXMuX3ByZXZpb3VzU3RhcnROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3RhcnRpbmdOb2RlICsgY291bnQgKyB0aGlzLl9nZXROdW1iZXJPZlJvd3NUb0Rpc3BsYXkoKSA8PSB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGggfHxcbiAgICAgICAgICAgIGNvdW50IDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHN0YXJ0aW5nTm9kZSA9IE1hdGguY2VpbChzdGFydGluZ05vZGUgKyBjb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0aW5nTm9kZSA8IDApIHtcbiAgICAgICAgICAgIHN0YXJ0aW5nTm9kZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhpcyBuZXh0ICdpZicgc3RhdGVtZW50IGlzIGZvciB0cmlnZ2VyaW5nIG5ldyBwYWdlIGxvYWRzIHdoZW4gJ3BhZ2VTY3JvbGxpbmcnIGlzIHRydWVcbiAgICAgICAgaWYgKGNvdW50ID4gMCAmJiBzdGFydGluZ05vZGUgPT09IHRoaXMuX3ByZXZpb3VzU3RhcnROb2RlSW5kZXggJiYgdGhpcy5fdGFibGUucGFnZVNjcm9sbGluZykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGUuX29uU3B5SW50ZXJzZWN0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldFJvd3Moc3RhcnRpbmdOb2RlKTtcbiAgICAgICAgY29uc3QgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyID0gdGhpcy5fdGFibGUudGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICghZnJvbU1vY2tTY3JvbGxiYXJMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLnNjcm9sbEJ5KHsgdG9wOiBjb3VudCAqIHRoaXMucm93SGVpZ2h0IH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RNb2NrU2Nyb2xsUG9zaXRpb24gPSB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICBpZiAodGhpcy5fdGFibGUucGFnZVNjcm9sbGluZykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGUudGFibGVTY3JvbGxlZC5lbWl0KHRoaXMuX2xhc3RNb2NrU2Nyb2xsUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2V0cyByb3dzIGluIHRoZSB0YWJsZSdzIHZpZXdwb3J0IGRlcGVuZGluZyBvbiB0aGUgcHJvdmlkZWQgc3RhcnRpbmcgbm9kZS4gSXQgYWxzbyBzZXRzIHRoZSB0YWJsZVxuICAgICAqIHN0YXRlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldFJvd3Moc3RhcnRpbmdOb2RlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUuc2V0Um93c0luVmlld3BvcnQoc3RhcnRpbmdOb2RlLCB0aGlzLl9nZXROdW1iZXJPZlJvd3NUb0Rpc3BsYXkoKSk7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3RhcnROb2RlSW5kZXggPSBzdGFydGluZ05vZGU7XG4gICAgICAgIHRoaXMuX3RhYmxlLnNldFRhYmxlU3RhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5fdGFibGUuZ2V0VGFibGVTdGF0ZSgpLFxuICAgICAgICAgICAgc2Nyb2xsVG9wUG9zaXRpb246IHRoaXMucm93SGVpZ2h0ICogc3RhcnRpbmdOb2RlXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdmlydHVhbC1zY3JvbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlLWhlbHBlcnMvZGlyZWN0aXZlcy90YWJsZS12aXJ0dWFsLXNjcm9sbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGdCQUFnQixFQUF5QixPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRTNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWM5RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsa0JBQWtCO0lBWm5FOztRQWFJOztXQUVHO1FBRUgsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFtQnRCLHdFQUF3RTtRQUV4RSxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQU1qQjs7O1dBR0c7UUFFSCxjQUFT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T0FBTyxFQUFFLGtDQUFrQzs0QkFDM0MsV0FBVyw2QkFBNkI7eUJBQzNDO3FCQUNKO2lCQUNKOzhCQU1HLGFBQWE7c0JBRFosS0FBSztnQkFTRixlQUFlO3NCQURsQixLQUFLO2dCQWNOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBUU4sU0FBUztzQkFEUixLQUFLO2dCQStDTixlQUFlO3NCQURkLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlc3Ryb3llZFNlcnZpY2UsIEZvY3VzYWJsZUl0ZW1Qb3NpdGlvbiwgS2V5VXRpbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5TW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRkRQX1RBQkxFX1ZJUlRVQUxfU0NST0xMX0RJUkVDVElWRSwgUk9XX0hFSUdIVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUYWJsZVZpcnR1YWxTY3JvbGwgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RhYmxlLXNjcm9sbC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBUYWJsZVJvd1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90YWJsZS1yb3cuc2VydmljZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuXG5ARGlyZWN0aXZlKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnZmRwLXRhYmxlW3ZpcnR1YWxTY3JvbGxdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBEZXN0cm95ZWRTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRFBfVEFCTEVfVklSVFVBTF9TQ1JPTExfRElSRUNUSVZFLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRhYmxlVmlydHVhbFNjcm9sbERpcmVjdGl2ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgZXh0ZW5kcyBUYWJsZVZpcnR1YWxTY3JvbGwgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogV2hldGhlciB0byBzaG93IG9ubHkgdmlzaWJsZSByb3dzIGluIG1hdHRlciBvZiBwZXJmb3JtYW5jZVxuICAgICAqIGZhbHNlIGJ5IGRlZmF1bHQsIHdoZW4gdHJ1ZSBzZXR0aW5nIGJvZHlIZWlnaHQgYW5kIHJvd0hlaWdodCBpcyByZXF1aXJlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc2Nyb2xsIHdob2xlIHJvd3MgcmF0aGVyIHRoYW4gcGl4ZWwgYnkgcGl4ZWwgd2hlbiB0aGUgdXNlciBwZXJmb3JtcyBhIHNjcm9sbC5cbiAgICAgKiBUaGlzIGdpdmVzIGdyZWF0ZXIgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGJ1dCBhbHNvIGxlbmRzIHRvIHNvbWUgcG90ZW50aWFsbHkgdW5kZXNpcmFibGUgVVggY2hhbmdlcy5cbiAgICAgKiBBIFwicm93SGVpZ2h0XCIgbXVzdCBiZSBwcm92aWRlZCB3aGVuIHVzaW5nIHRoaXMgZmVhdHVyZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzY3JvbGxXaG9sZVJvd3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2Nyb2xsV2hvbGVSb3dzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbFdob2xlUm93cykge1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBzY3JvbGxXaG9sZVJvd3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxXaG9sZVJvd3M7XG4gICAgfVxuXG4gICAgLyoqIENhY2hlIHNpemUgZm9yIHRoZSB2aXJ0dWFsU2Nyb2xsLCBkZWZhdWx0IGlzIDQwIGluIGVhY2ggZGlyZWN0aW9uICovXG4gICAgQElucHV0KClcbiAgICByZW5kZXJBaGVhZCA9IDQwO1xuXG4gICAgLyoqIEJvZHkgaGVpZ2h0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYm9keUhlaWdodDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSByb3csIHJlcXVpcmVkIGZvciB0aGUgdmlydHVhbFNjcm9sbCxcbiAgICAgKiBkZWZhdWx0IGlzIDQ0cHggaW4gY296eSwgMzJweCBpbiBjb21wYWN0IGFuZCAyNHB4IGluIGNvbmRlbnNlZCAoc2V0IGF1dG9tYXRpY2FsbHkpXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dIZWlnaHQgPSBST1dfSEVJR0hULmdldChDb250ZW50RGVuc2l0eU1vZGUuQ09aWSkhO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB2aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHQgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB2aXJ0dWFsU2Nyb2xsVHJhbnNmb3JtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdGFibGU6IFRhYmxlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aXJ0dWFsU2Nyb2xsQ2FjaGUgPSB7IHN0YXJ0Tm9kZUluZGV4OiAtMSwgdmlzaWJsZU5vZGVDb3VudDogLTEsIHRvdGFsTm9kZUNvdW50OiAtMSB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZVNjcm9sbERpc3BhdGNoZXIgPSBpbmplY3QoVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlUm93U2VydmljZSA9IGluamVjdChUYWJsZVJvd1NlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGluamVjdChEZXN0cm95ZWRTZXJ2aWNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfd2hlZWxUaW1lb3V0OiBhbnk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Njcm9sbE1vY2tUaW1lb3V0OiBhbnk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhc3RNb2NrU2Nyb2xsUG9zaXRpb24gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c2FibGVHcmlkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzZWRDZWxsOiBGb2N1c2FibGVJdGVtUG9zaXRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZXZpb3VzU3RhcnROb2RlSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zY3JvbGxXaG9sZVJvd3MgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgX2tleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFdob2xlUm93cykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZvY3VzZWRDZWxsPy5yb3dJbmRleCA9PT0gMCAmJiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhYmxlLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndHInKVsxXS5hcmlhUm93SW5kZXggIT09ICcwJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsVG9Gb2N1cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbEluZGV4OiB0aGlzLl9mb2N1c2VkQ2VsbC5jb2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiAxXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlLl9mb2N1c2FibGVHcmlkLmZvY3VzQ2VsbChjZWxsVG9Gb2N1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbFJvdygtMSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzZWRDZWxsPy5yb3dJbmRleCA9PT0gdGhpcy5fZ2V0TnVtYmVyT2ZSb3dzVG9EaXNwbGF5KCkgJiZcbiAgICAgICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbFJvdygxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFdob2xlUm93cyAmJiAhdGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fdGFibGUudGFibGVTY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiAoY2hhbmdlc1sncm93SGVpZ2h0J10gfHwgY2hhbmdlc1sndmlydHVhbFNjcm9sbCddIHx8IGNoYW5nZXNbJ3JlbmRlckFoZWFkJ10pKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVZpcnR1YWxTY3JvbGxSb3dzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c2FibGVHcmlkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxXaG9sZVJvd3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCB0aGlzLl93aGVlbFNjcm9sbExpc3RlbmVyRnVuY3Rpb24sIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl90YWJsZS50YWJsZVNjcm9sbE1vY2tDb250YWluZXIubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICAgICdzY3JvbGwnLFxuICAgICAgICAgICAgICAgIHRoaXMuX21vY2tTY3JvbGxiYXJMaXN0ZW5lckZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIHsgcGFzc2l2ZTogZmFsc2UgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTZXRzIHRhYmxlIHJlZmVyZW5jZS4gKi9cbiAgICBzZXRUYWJsZSh0YWJsZTogVGFibGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaG93IG1hbnkgcm93cyBjYW4gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZSwgYW5kIHNldHMgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJhc2VkIG9uIHRoZVxuICAgICAqIHN0YXJ0IG5vZGUgaW5kZXgsIHdoaWNoIG1heSBjb21lIGZyb20gdGhlIHRhYmxlIHN0YXRlXG4gICAgICovXG4gICAgY2FsY3VsYXRlVmlydHVhbFNjcm9sbFJvd3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFdob2xlUm93cykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9mb2N1c2FibGVHcmlkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNhYmxlR3JpZFN1YnNjcmlwdGlvbiA9IHRoaXMuX3RhYmxlLl9mb2N1c2FibGVHcmlkLml0ZW1Gb2N1c2VkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNlZENlbGwgPSBldmVudDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsIHx8ICF0aGlzLmJvZHlIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzdGFydE5vZGVJbmRleCA9IDA7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLl90YWJsZS5nZXRUYWJsZVN0YXRlKCkuc2Nyb2xsVG9wUG9zaXRpb247XG4gICAgICAgICAgICBpZiAoc2Nyb2xsVG9wICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgc3RhcnROb2RlSW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnROb2RlSW5kZXggPiB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnROb2RlSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdG90YWxOb2RlQ291bnQgPSB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGg7XG4gICAgICAgICAgICBsZXQgdmlzaWJsZU5vZGVDb3VudCA9IHRoaXMuX2dldE51bWJlck9mUm93c1RvRGlzcGxheSgpO1xuICAgICAgICAgICAgdmlzaWJsZU5vZGVDb3VudCA9IE1hdGgubWluKHRvdGFsTm9kZUNvdW50IC0gc3RhcnROb2RlSW5kZXgsIHZpc2libGVOb2RlQ291bnQpO1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHQgPSB0b3RhbE5vZGVDb3VudCAqIHRoaXMucm93SGVpZ2h0IC0gdmlzaWJsZU5vZGVDb3VudCAqIHRoaXMucm93SGVpZ2h0O1xuXG4gICAgICAgICAgICB0aGlzLl9zZXRSb3dzKHN0YXJ0Tm9kZUluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbE1vY2tDb250YWluZXIgPSB0aGlzLl90YWJsZS50YWJsZVNjcm9sbE1vY2tDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIHNjcm9sbE1vY2tDb250YWluZXIuc3R5bGUubWF4SGVpZ2h0ID0gdGhpcy5ib2R5SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwgfHwgIXRoaXMuYm9keUhlaWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQgKyAxO1xuXG4gICAgICAgICAgICBjb25zdCByb3dzVmlzaWJsZSA9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlO1xuICAgICAgICAgICAgY29uc3Qgcm93c0luVmlld1BvcnQgPSB0aGlzLl90YWJsZS5nZXRSb3dzSW5WaWV3cG9ydCgpO1xuICAgICAgICAgICAgY29uc3QgdG90YWxOb2RlQ291bnQgPSByb3dzVmlzaWJsZS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLl90YWJsZS50YWJsZVNjcm9sbGFibGUuZ2V0U2Nyb2xsVG9wKCk7XG5cbiAgICAgICAgICAgIGxldCBzdGFydE5vZGVJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gcm93SGVpZ2h0KSAtIHRoaXMucmVuZGVyQWhlYWQ7XG4gICAgICAgICAgICBzdGFydE5vZGVJbmRleCA9IE1hdGgubWF4KDAsIHN0YXJ0Tm9kZUluZGV4KTtcblxuICAgICAgICAgICAgbGV0IHZpc2libGVOb2RlQ291bnQgPVxuICAgICAgICAgICAgICAgIE1hdGguY2VpbCh0aGlzLl90YWJsZS50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCAvIHJvd0hlaWdodCkgKyAyICogdGhpcy5yZW5kZXJBaGVhZDtcbiAgICAgICAgICAgIHZpc2libGVOb2RlQ291bnQgPSBNYXRoLm1pbih0b3RhbE5vZGVDb3VudCAtIHN0YXJ0Tm9kZUluZGV4LCB2aXNpYmxlTm9kZUNvdW50KTtcblxuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVHJhbnNmb3JtJC5uZXh0KHN0YXJ0Tm9kZUluZGV4ICogcm93SGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gU2ltcGxlIGNhY2hpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyaW5nc1xuICAgICAgICAgICAgY29uc3QgaXNDYWNoZWQgPVxuICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZUluZGV4ID09PSB0aGlzLl92aXJ0dWFsU2Nyb2xsQ2FjaGUuc3RhcnROb2RlSW5kZXggJiZcbiAgICAgICAgICAgICAgICB2aXNpYmxlTm9kZUNvdW50ID09PSB0aGlzLl92aXJ0dWFsU2Nyb2xsQ2FjaGUudmlzaWJsZU5vZGVDb3VudCAmJlxuICAgICAgICAgICAgICAgIHRvdGFsTm9kZUNvdW50ID09PSB0aGlzLl92aXJ0dWFsU2Nyb2xsQ2FjaGUudG90YWxOb2RlQ291bnQgJiZcbiAgICAgICAgICAgICAgICAvLyBPbiByb3dzIGNoYW5nZSwgZXZlbiBpZiB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgaXMgdGhlIHNhbWUsIHRoZSByb3cgb2JqZWN0IHdpbGwgYmUgZGlmZmVyZW50XG4gICAgICAgICAgICAgICAgc3RhcnROb2RlSW5kZXggPT09IHJvd3NJblZpZXdQb3J0WzBdO1xuXG4gICAgICAgICAgICBpZiAoaXNDYWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxDYWNoZSA9IHsgc3RhcnROb2RlSW5kZXgsIHZpc2libGVOb2RlQ291bnQsIHRvdGFsTm9kZUNvdW50IH07XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxUb3RhbEhlaWdodCA9IHRvdGFsTm9kZUNvdW50ICogcm93SGVpZ2h0IC0gdmlzaWJsZU5vZGVDb3VudCAqIHJvd0hlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlLnNldFJvd3NJblZpZXdwb3J0KFxuICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZUluZGV4LFxuICAgICAgICAgICAgICAgIHJvd3NWaXNpYmxlLnNsaWNlKHN0YXJ0Tm9kZUluZGV4LCBzdGFydE5vZGVJbmRleCArIHZpc2libGVOb2RlQ291bnQpLmxlbmd0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBJbml0aWFsaXNlcyBzY3JvbGwgbGlzdGVuZXJzLlxuICAgICAqL1xuICAgIGxpc3Rlbk9uVmlydHVhbFNjcm9sbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsV2hvbGVSb3dzKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZS50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgdGhpcy5fd2hlZWxTY3JvbGxMaXN0ZW5lckZ1bmN0aW9uLCB7XG4gICAgICAgICAgICAgICAgcGFzc2l2ZTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fdGFibGUudGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2NrU2Nyb2xsYmFyTGlzdGVuZXJGdW5jdGlvbixcbiAgICAgICAgICAgICAgICB7IHBhc3NpdmU6IGZhbHNlIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZVNjcm9sbERpc3BhdGNoZXJcbiAgICAgICAgICAgICAgICAudmVydGljYWxseVNjcm9sbGVkKClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMudmlydHVhbFNjcm9sbCAmJiAhIXRoaXMuYm9keUhlaWdodCksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVZpcnR1YWxTY3JvbGxSb3dzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlLnNldFRhYmxlU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fdGFibGUuZ2V0VGFibGVTdGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wUG9zaXRpb246IHNjcm9sbGFibGUuZ2V0U2Nyb2xsVG9wKClcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE51bWJlck9mUm93c1RvRGlzcGxheSgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0YWJsZUNvbnRhaW5lciA9IHRoaXMuX3RhYmxlLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCB0YWJsZUhlaWdodCA9IHRhYmxlQ29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgICAgICAgdGFibGVIZWlnaHQgPSB0YWJsZUhlaWdodCAtIHRhYmxlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJykuY2xpZW50SGVpZ2h0O1xuICAgICAgICBjb25zdCBudW1iZXJPZlJvd3MgPSBNYXRoLmZsb29yKHRhYmxlSGVpZ2h0IC8gdGhpcy5yb3dIZWlnaHQpO1xuICAgICAgICBsZXQgcmV0VmFsOiBudW1iZXI7XG4gICAgICAgIGlmICh0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGggPCBudW1iZXJPZlJvd3MpIHtcbiAgICAgICAgICAgIHJldFZhbCA9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFZhbCA9IG51bWJlck9mUm93cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0VmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHBlcmZvcm1zIGEgd2hlZWwgZXZlbnQuIEl0IGRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIHVzZXIgaGFzIHNjcm9sbGVkXG4gICAgICogdXAgb3IgZG93biB1c2luZyB0aGUgZXZlbnQncyBkZWx0YVggcHJvcGVydHksIGFuZCBzY3JvbGxzIHRoZSB0YWJsZSBieSBvbmUgcm93LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3doZWVsU2Nyb2xsTGlzdGVuZXJGdW5jdGlvbiA9IChldmVudDogV2hlZWxFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoTWF0aC5hYnMoZXZlbnQuZGVsdGFYKSA8IE1hdGguYWJzKGV2ZW50LmRlbHRhWSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl93aGVlbFRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fd2hlZWxUaW1lb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWSA9IGV2ZW50LmRlbHRhWTtcbiAgICAgICAgICAgIGlmIChkZWx0YVkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93aGVlbFRpbWVvdXQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsUm93KGRlbHRhWSA+IDAgPyAxIDogLTEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBtb2NrIHNjcm9sbGJhciAod2hlbiB1c2luZyAnc2Nyb2xsV2hvbGVSb3dzJykgaXMgbW92ZWQuIEl0IGRldGVybWluZXMgaWYgdGhlXG4gICAgICogc2Nyb2xsIHdhcyB1cCBvciBkb3duIGJ5IGNvbXBhcmluZyB0aGUgY3VycmVudCBzY3JvbGwgdG9wIHRvIHRoZSBwcmV2aW91cyBzY3JvbGwgdG9wIGFuZCBzY3JvbGxzIHJvd3MgYWNjb3JkaW5nbHkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbW9ja1Njcm9sbGJhckxpc3RlbmVyRnVuY3Rpb24gPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsTW9ja1RpbWVvdXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9zY3JvbGxNb2NrVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyID0gdGhpcy5fdGFibGUudGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBkZWx0YVkgPSB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsVG9wIC0gdGhpcy5fbGFzdE1vY2tTY3JvbGxQb3NpdGlvbjtcbiAgICAgICAgZGVsdGFZID0gTWF0aC5jZWlsKGRlbHRhWSAvIHRoaXMucm93SGVpZ2h0KTtcbiAgICAgICAgdGhpcy5fc2Nyb2xsTW9ja1RpbWVvdXQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFJvdyhkZWx0YVksIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fbGFzdE1vY2tTY3JvbGxQb3NpdGlvbiA9IHRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgICAgICBpZiAodGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBkaXNwbGF5IHRoZSBmaXJzdCByb3cgb2YgdGhlIHRhYmxlIHdoZW4gdGhlIHVzZXIgc2Nyb2xscyBhbGwgdGhlIHdheSB0byB0aGUgdG9wXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Um93cygwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsVG9wICsgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA9PT1cbiAgICAgICAgICAgICAgICB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBBbHdheXMgZGlzcGxheSB0aGUgbGFzdCByb3dzIG9mIHRoZSB0YWJsZSB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0aW5nTm9kZUluZGV4ID0gdGhpcy5fdGFibGUuX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoIC0gdGhpcy5fZ2V0TnVtYmVyT2ZSb3dzVG9EaXNwbGF5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Um93cyhzdGFydGluZ05vZGVJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhpcyBmdW5jdGlvbiwgdXNlZCBvbmx5IHdoZW4gJ3Njcm9sbFdob2xlUm93cycgaXMgdHJ1dGh5LCBjYWxjdWxhdGVzIHdoYXQgc2hvdWxkIGJlIHRoZSBuZXcgc3RhcnRpbmcgbm9kZSwgYmFzZWRcbiAgICAgKiBvZmYgdGhlIHByZXZpb3VzIHN0YXJ0aW5nIG5vZGUgYW5kIHRoZSBwcm92aWRlZCAnY291bnQnIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUgaWYgdGhlIHByZXZpb3VzIHN0YXJ0IG5vZGUgd2FzIDEwXG4gICAgICogYW5kIHRoZSBjb3VudCBwYXJhbWV0ZXIgaXMgLTIsIHRoZSBuZXcgc3RhcnRpbmcgbm9kZSB3aWxsIGJlIDguIFRoaXMgZnVuY3Rpb24gYWxzbyBwcm9ncmFtbWF0aWNhbGx5IG1vdmVzIHRoZVxuICAgICAqIG1vY2sgc2Nyb2xsYmFyLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3Njcm9sbFJvdyhjb3VudDogbnVtYmVyLCBmcm9tTW9ja1Njcm9sbGJhckxpc3RlbmVyID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgbGV0IHN0YXJ0aW5nTm9kZSA9IDA7XG4gICAgICAgIGlmICh0aGlzLl9wcmV2aW91c1N0YXJ0Tm9kZUluZGV4ICE9PSBudWxsICYmIHRoaXMuX3ByZXZpb3VzU3RhcnROb2RlSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgc3RhcnRpbmdOb2RlID0gdGhpcy5fcHJldmlvdXNTdGFydE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdGFydGluZ05vZGUgKyBjb3VudCArIHRoaXMuX2dldE51bWJlck9mUm93c1RvRGlzcGxheSgpIDw9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCB8fFxuICAgICAgICAgICAgY291bnQgPCAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgc3RhcnRpbmdOb2RlID0gTWF0aC5jZWlsKHN0YXJ0aW5nTm9kZSArIGNvdW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRpbmdOb2RlIDwgMCkge1xuICAgICAgICAgICAgc3RhcnRpbmdOb2RlID0gMDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIG5leHQgJ2lmJyBzdGF0ZW1lbnQgaXMgZm9yIHRyaWdnZXJpbmcgbmV3IHBhZ2UgbG9hZHMgd2hlbiAncGFnZVNjcm9sbGluZycgaXMgdHJ1ZVxuICAgICAgICBpZiAoY291bnQgPiAwICYmIHN0YXJ0aW5nTm9kZSA9PT0gdGhpcy5fcHJldmlvdXNTdGFydE5vZGVJbmRleCAmJiB0aGlzLl90YWJsZS5wYWdlU2Nyb2xsaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZS5fb25TcHlJbnRlcnNlY3QodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0Um93cyhzdGFydGluZ05vZGUpO1xuICAgICAgICBjb25zdCB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIgPSB0aGlzLl90YWJsZS50YWJsZVNjcm9sbE1vY2tDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKCFmcm9tTW9ja1Njcm9sbGJhckxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsQnkoeyB0b3A6IGNvdW50ICogdGhpcy5yb3dIZWlnaHQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGFzdE1vY2tTY3JvbGxQb3NpdGlvbiA9IHRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgIGlmICh0aGlzLl90YWJsZS5wYWdlU2Nyb2xsaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZS50YWJsZVNjcm9sbGVkLmVtaXQodGhpcy5fbGFzdE1vY2tTY3JvbGxQb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHJvd3MgaW4gdGhlIHRhYmxlJ3Mgdmlld3BvcnQgZGVwZW5kaW5nIG9uIHRoZSBwcm92aWRlZCBzdGFydGluZyBub2RlLiBJdCBhbHNvIHNldHMgdGhlIHRhYmxlXG4gICAgICogc3RhdGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0Um93cyhzdGFydGluZ05vZGU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5zZXRSb3dzSW5WaWV3cG9ydChzdGFydGluZ05vZGUsIHRoaXMuX2dldE51bWJlck9mUm93c1RvRGlzcGxheSgpKTtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNTdGFydE5vZGVJbmRleCA9IHN0YXJ0aW5nTm9kZTtcbiAgICAgICAgdGhpcy5fdGFibGUuc2V0VGFibGVTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLl90YWJsZS5nZXRUYWJsZVN0YXRlKCksXG4gICAgICAgICAgICBzY3JvbGxUb3BQb3NpdGlvbjogdGhpcy5yb3dIZWlnaHQgKiBzdGFydGluZ05vZGVcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -3,7 +3,6 @@ import { BehaviorSubject, Subject, Subscription, fromEvent } from 'rxjs';
3
3
  import { debounceTime, takeUntil } from 'rxjs/operators';
4
4
  import { SELECTION_COLUMN_WIDTH } from '../constants';
5
5
  import { RtlService } from '@fundamental-ngx/cdk/utils';
6
- import { TABLE_COLUMN_MIN_WIDTH } from '../constants';
7
6
  import { TableScrollDispatcherService } from './table-scroll-dispatcher.service';
8
7
  import * as i0 from "@angular/core";
9
8
  import * as i1 from "./table-scroll-dispatcher.service";
@@ -247,8 +246,8 @@ export class TableColumnResizeService {
247
246
  if (!columnWidth || !resizedElement) {
248
247
  return;
249
248
  }
250
- if (diffX < 0 && columnWidth + diffX < TABLE_COLUMN_MIN_WIDTH) {
251
- diffX = TABLE_COLUMN_MIN_WIDTH - columnWidth;
249
+ if (diffX < 0 && columnWidth + diffX < this._tableRef.minimumColumnWidth) {
250
+ diffX = this._tableRef.minimumColumnWidth - columnWidth;
252
251
  }
253
252
  if (!this.fixedWidth) {
254
253
  for (const [columnName, cells] of this._columnsCellMap.entries()) {
@@ -326,4 +325,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
326
325
  }], ctorParameters: function () { return [{ type: i1.TableScrollDispatcherService }, { type: i2.RtlService, decorators: [{
327
326
  type: Optional
328
327
  }] }]; } });
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLXJlc2l6ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlLWhlbHBlcnMvc2VydmljZXMvdGFibGUtY29sdW1uLXJlc2l6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQWEsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7OztBQUVqRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUM7QUFFNUM7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sd0JBQXdCO0lBeURqQyxnREFBZ0Q7SUFDaEQsSUFBSSxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEMsQ0FBQztJQVFELHVDQUF1QztJQUN2QyxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUtELHFDQUFxQztJQUNyQyxJQUFJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELDZEQUE2RDtJQUM3RCxJQUFJLFVBQVU7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LE1BQU0sY0FBYyxHQUFHLE9BQU8sRUFBRSxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsZ0JBQWdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRTFHLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbkMsT0FBTztTQUNWO1FBQ0QsYUFBYSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztJQUM5RSxDQUFDOztxSEEvWFEsd0JBQXdCO3lIQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVTs7MEJBK0ZGLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNFTEVDVElPTl9DT0xVTU5fV0lEVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgVEFCTEVfQ09MVU1OX01JTl9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAnLi4vdGFibGUnO1xuaW1wb3J0IHsgVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4vdGFibGUtc2Nyb2xsLWRpc3BhdGNoZXIuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBUQUJMRV9SRVNJWkVSX0JPUkRFUl9XSURUSCA9IDM7XG5cbi8qKlxuICogU2VydmljZSB0byBoYW5kbGUgYWxsIHRoaW5ncyByZWxhdGVkIHRvIGNvbHVtbiByZXNpemluZzpcbiAqIC0gU2V0dGluZyByZXNpemVyXG4gKiAtIFByb2Nlc3NpbmcgcmVzaXplXG4gKiAtIENhbGN1bGF0aW5nIHRoZSByZWFsIGNvbHVtbnMgd2lkdGhcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uUmVzaXplU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLyoqIFN1YmplY3QgdGhhdCBlbWl0cyBuZXcgbWFwIG9mIGZpeGVkIGNvbHVtbnMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgd2lkdGguICovXG4gICAgcmVhZG9ubHkgZml4ZWRDb2x1bXNXaWR0aENoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwPHN0cmluZywgc3RyaW5nPj4obmV3IE1hcCgpKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpeGVkQ29sdW1uc1dpZHRoTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29sdW1uc0NlbGxNYXAgPSBuZXcgTWFwPHN0cmluZywgRWxlbWVudFJlZjxIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQ+W10+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Zpc2libGVDb2x1bW5OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlzaWJsZUNvbHVtbkxlZnROZWlnaGJvdXJNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aXNpYmxlQ29sdW1uUmlnaHROZWlnaGJvdXJNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aXNpYmxlQ29sdW1uTGVmdE9mZnNldFB4TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlzaWJsZUNvbHVtblJpZ2h0T2Zmc2V0UHhNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGFydFg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jbGllbnRTdGFydFg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNpemVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2l6ZWRDb2x1bW46IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzaXplclBvc2l0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2Nyb2xsTGVmdCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21hcmtGb3JDaGVjayA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2l6ZXJNb3ZlU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90YWJsZVJlZjogVGFibGU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxUYWJsZVdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBJbmRpY2F0ZSBpZiByZXNpemluZyBwcm9jZXNzIGluIHByb2dyZXNzLiAqL1xuICAgIGdldCByZXNpemVJblByb2dyZXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzaXplSW5Qcm9ncmVzcztcbiAgICB9XG5cbiAgICAvKiogUmVzaXplIHByb2dyZXNzIHN0cmVhbS4gKi9cbiAgICByZWFkb25seSByZXNpemVJblByb2dyZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fcmVzaXplSW5Qcm9ncmVzcyk7XG5cbiAgICAvKiogV2hldGhlciBjZWxsIG1vY2sgc2hvdWxkIGJlIHZpc2libGUuICovXG4gICAgcmVhZG9ubHkgY2VsbE1vY2tWaXNpYmxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEN1cnJlbnQgY29sdW1uIHJlc2l6ZXIgcG9zaXRpb24uICovXG4gICAgZ2V0IHJlc2l6ZXJQb3NpdGlvbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzaXplclBvc2l0aW9uID8/IDA7XG4gICAgfVxuXG4gICAgLyoqIFJlc2l6ZXIgcG9zaXRpb24gc3RyZWFtLiAqL1xuICAgIHJlYWRvbmx5IHJlc2l6ZXJQb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG5cbiAgICAvKiogT2JzZXJ2YWJsZSB0byBub3RpZnkgdG8gcnVuIENEICovXG4gICAgZ2V0IG1hcmtGb3JDaGVjaygpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcmtGb3JDaGVjay5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKiogdGFibGUgaGFzIGZpeGVkIHdpZHRoIGlmIGFsbCBvZiBpdCdzIGNvbHVtbnMgYXJlIGZpeGVkICovXG4gICAgZ2V0IGZpeGVkV2lkdGgoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maXhlZENvbHVtbnNXaWR0aE1hcC5zaXplID09PSB0aGlzLl92aXNpYmxlQ29sdW1uTmFtZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX3J0bCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2U6IFRhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fdGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZVxuICAgICAgICAgICAgPy5ob3Jpem9udGFsbHlTY3JvbGxlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNjcm9sbGFibGUpID0+ICh0aGlzLl9zY3JvbGxMZWZ0ID0gc2Nyb2xsYWJsZS5nZXRTY3JvbGxMZWZ0KCkpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZXNpemVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzaXplSW5Qcm9ncmVzcyQubmV4dChmYWxzZSk7XG5cbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgdGhpcy5fcmVzaXplck1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldFRhYmxlUmVmKHJlZjogVGFibGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVSZWYgPSByZWY7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gaW5pdGlhbGl6ZXMgc2VydmljZSB3aXRoIGRhdGEsIHRyaWdnZXIgY29sdW1ucyB3aWR0aCBjYWxjdWxhdGlvbi4gKi9cbiAgICBzZXRDb2x1bW5OYW1lcyh2aXNpYmxlQ29sdW1uTmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDb2x1bW5MZWZ0TmVpZ2hib3VyTWFwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDb2x1bW5SaWdodE5laWdoYm91ck1hcC5jbGVhcigpO1xuICAgICAgICB2aXNpYmxlQ29sdW1uTmFtZXMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdmlzaWJsZUNvbHVtbkxlZnROZWlnaGJvdXJNYXAuc2V0KGNvbHVtbiwgdmlzaWJsZUNvbHVtbk5hbWVzW2luZGV4IC0gMV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdmlzaWJsZUNvbHVtbk5hbWVzLnJldmVyc2UoKS5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlQ29sdW1uUmlnaHROZWlnaGJvdXJNYXAuc2V0KGNvbHVtbiwgdmlzaWJsZUNvbHVtbk5hbWVzW2luZGV4IC0gMV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdmlzaWJsZUNvbHVtbk5hbWVzID0gWy4uLnZpc2libGVDb2x1bW5OYW1lc107XG4gICAgICAgIHRoaXMudXBkYXRlRnJvemVuQ29sdW1uc1dpZHRoKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB1cGRhdGVGcm96ZW5Db2x1bW5zV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGxldCBhbGxQcmV2aW91c1dpZHRocyA9IDAsXG4gICAgICAgICAgICBhbGxOZXh0V2lkdGhzID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBbY29sdW1uLCBwcmV2Q29sdW1uXSBvZiB0aGlzLl92aXNpYmxlQ29sdW1uTGVmdE5laWdoYm91ck1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGFsbFByZXZpb3VzV2lkdGhzICs9XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1uc0NlbGxNYXAuZ2V0KHByZXZDb2x1bW4gYXMgc3RyaW5nKT8uWzBdPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID8/IDA7XG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlQ29sdW1uTGVmdE9mZnNldFB4TWFwLnNldChjb2x1bW4sIGFsbFByZXZpb3VzV2lkdGhzKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIG5leHRDb2x1bW5dIG9mIHRoaXMuX3Zpc2libGVDb2x1bW5SaWdodE5laWdoYm91ck1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGFsbE5leHRXaWR0aHMgKz1cbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zQ2VsbE1hcC5nZXQobmV4dENvbHVtbiBhcyBzdHJpbmcpPy5bMF0/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPz8gMDtcbiAgICAgICAgICAgIHRoaXMuX3Zpc2libGVDb2x1bW5SaWdodE9mZnNldFB4TWFwLnNldChjb2x1bW4sIGFsbE5leHRXaWR0aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB1cGRhdGVGcm96ZW5Db2x1bW5zV2lkdGhBZnRlclJlc2l6ZShjb2x1bW5OYW1lOiBzdHJpbmcsIGRpZmZYOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW2NvbHVtbiwgd2lkdGhdIG9mIHRoaXMuX3Zpc2libGVDb2x1bW5MZWZ0T2Zmc2V0UHhNYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uID09PSBjb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Zpc2libGVDb2x1bW5MZWZ0T2Zmc2V0UHhNYXAuc2V0KGNvbHVtbiwgd2lkdGggKyBkaWZmWCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmV0cmlldmVzIGN1c3RvbSBjb2x1bW4gdmFsdWUgb3IgcmV0dXJucyBgdW5zZXRgICovXG4gICAgZ2V0Q29sdW1uV2lkdGhTdHlsZShjb2x1bW5OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fdGFibGVSZWYuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnNjcm9sbFdob2xlUm93cykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsVGFibGVXaWR0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxUYWJsZVdpZHRoID0gdGhpcy5fdGFibGVSZWYuX3RhYmxlV2lkdGhQeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbHVtbldpZHRoID0gU0VMRUNUSU9OX0NPTFVNTl9XSURUSC5nZXQodGhpcy5fdGFibGVSZWYuY29udGVudERlbnNpdHlPYnNlcnZlci52YWx1ZSkgPz8gMDtcbiAgICAgICAgICAgIGxldCBzaXplRGl2aWRlZEJ5Q29sdW1uc0NvdW50ID1cbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsVGFibGVXaWR0aCAvIHRoaXMuX3RhYmxlUmVmLmdldFZpc2libGVUYWJsZUNvbHVtbnMoKS5sZW5ndGggLVxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNvbHVtbldpZHRoIC8gdGhpcy5fdGFibGVSZWYuZ2V0VmlzaWJsZVRhYmxlQ29sdW1ucygpLmxlbmd0aDtcbiAgICAgICAgICAgIC8vIEluIHRoZSBldmVudCBvZiB0YWJsZXMgd2l0aCBhIHZlcnkgaGlnaCBudW1iZXIgb2YgY29sdW1ucywgbmVlZCB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdoaWNoXG4gICAgICAgICAgICAvLyB3b3VsZCBtYWtlIGVhY2ggY29sdW1uIG5vdCB3aWRlIGVub3VnaCB0byBiZSB1c2FibGUgYW5kIGluc3RlYWQgdXNlIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIuXG4gICAgICAgICAgICBpZiAoc2l6ZURpdmlkZWRCeUNvbHVtbnNDb3VudCA8IDE3Nikge1xuICAgICAgICAgICAgICAgIHNpemVEaXZpZGVkQnlDb2x1bW5zQ291bnQgPSAxNzY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZml4ZWRDb2x1bW5zV2lkdGhNYXAuZ2V0KGNvbHVtbk5hbWUpIHx8IHNpemVEaXZpZGVkQnlDb2x1bW5zQ291bnQgKyAncHgnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFdpZHRoID0gdGhpcy5fZml4ZWRDb2x1bW5zV2lkdGhNYXAuZ2V0KGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZWRXaWR0aCB8fCAndW5zZXQnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFByZXZpb3VzIGNvbHVtbiBuYW1lICovXG4gICAgZ2V0UHJldmlvdXNDb2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlQ29sdW1uTGVmdE5laWdoYm91ck1hcC5nZXQoY29sdW1uTmFtZSk7XG4gICAgfVxuXG4gICAgLyoqIFByZXZpb3VzIGNvbHVtbiBuYW1lICovXG4gICAgZ2V0TmV4dENvbHVtbk5hbWUoY29sdW1uTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVDb2x1bW5SaWdodE5laWdoYm91ck1hcC5nZXQoY29sdW1uTmFtZSk7XG4gICAgfVxuXG4gICAgLyoqIE92ZXJhbGwgcHJldmlvdXMgY29sdW1ucyB3aWR0aC4gVXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0IGZvciB0aGUgYWJzb2x1dGUgcG9zaXRpb25lZCBjZWxscy4gKi9cbiAgICBnZXRQcmV2Q29sdW1uc1dpZHRoKGNvbHVtbk5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlQ29sdW1uTGVmdE9mZnNldFB4TWFwLmdldChjb2x1bW5OYW1lKSA/PyAwO1xuICAgIH1cblxuICAgIC8qKiBPdmVyYWxsIG5leHQgY29sdW1ucyB3aWR0aC4gVXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0IGZvciB0aGUgYWJzb2x1dGUgcG9zaXRpb25lZCBjZWxscy4gKi9cbiAgICBnZXROZXh0Q29sdW1uc1dpZHRoKGNvbHVtbk5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlQ29sdW1uUmlnaHRPZmZzZXRQeE1hcC5nZXQoY29sdW1uTmFtZSkgPz8gMDtcbiAgICB9XG5cbiAgICAvKiogUmVnaXN0ZXIgY29sdW1uJ3MgY2VsbCB0byBnZXQgaXRzIGRpbWVuc2lvbnMgaW4gZnVydGhlci4gKi9cbiAgICByZWdpc3RlckNvbHVtbkNlbGwoY29sdW1uTmFtZTogc3RyaW5nLCBjZWxsRWxSZWY6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1uQ2VsbHMgPSB0aGlzLl9jb2x1bW5zQ2VsbE1hcC5nZXQoY29sdW1uTmFtZSkgfHwgW107XG4gICAgICAgIHRoaXMuX2NvbHVtbnNDZWxsTWFwLnNldChjb2x1bW5OYW1lLCBbY2VsbEVsUmVmLCAuLi5jb2x1bW5DZWxsc10pO1xuICAgIH1cblxuICAgIC8qKiBVbnJlZ2lzdGVyIGNvbHVtbidzIGNlbGwuICovXG4gICAgdW5yZWdpc3RlckNvbHVtbkNlbGwoY29sdW1uTmFtZTogc3RyaW5nLCBjZWxsRWxSZWY6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1uQ2VsbHMgPSB0aGlzLl9jb2x1bW5zQ2VsbE1hcC5nZXQoY29sdW1uTmFtZSkgfHwgW107XG4gICAgICAgIGNvbnN0IGVsbUluZGV4ID0gY29sdW1uQ2VsbHMuZmluZEluZGV4KChlKSA9PiBlLm5hdGl2ZUVsZW1lbnQgPT09IGNlbGxFbFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICBpZiAoZWxtSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb2x1bW5DZWxscy5zcGxpY2UoZWxtSW5kZXgsIDEpO1xuXG4gICAgICAgIHRoaXMuX2NvbHVtbnNDZWxsTWFwLnNldChjb2x1bW5OYW1lLCBjb2x1bW5DZWxscyk7XG4gICAgfVxuXG4gICAgLyoqIFJlZ2lzdGVyIHRoZSB2YWx1ZSBvZiBjb2x1bW4gd2lkdGggdGhhdCBjaGFuZ2VkIGZyb20gIGlucHV0ICovXG4gICAgc2V0Q3VzdG9tV2lkdGgoY29sdW1uTmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZpeGVkQ29sdW1uc1dpZHRoTWFwLnNldChjb2x1bW5OYW1lLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuZml4ZWRDb2x1bXNXaWR0aENoYW5nZS5uZXh0KHRoaXMuX2ZpeGVkQ29sdW1uc1dpZHRoTWFwKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IHRoZSBhcHByb3ByaWF0ZSBjb2x1bW4gcmVzaXplciBwb3NpdGlvbi4gKi9cbiAgICBzZXRJbml0aWFsUmVzaXplclBvc2l0aW9uKHJlc2l6ZXJQb3NpdGlvbjogbnVtYmVyLCByZXNpemVkQ29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVzaXplSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVzaXplZENvbHVtbiA9IHJlc2l6ZWRDb2x1bW47XG4gICAgICAgIHRoaXMuX3Jlc2l6ZXJQb3NpdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMucmVzaXplclBvc2l0aW9uJC5uZXh0KHRoaXMucmVzaXplclBvc2l0aW9uKTtcblxuICAgICAgICBpZiAocmVzaXplclBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbExlZnRPZmZzZXQgPSB0aGlzLl9zY3JvbGxMZWZ0ICogKHRoaXMuX3J0bCA/IDEgOiAtMSk7XG4gICAgICAgICAgICB0aGlzLl9yZXNpemVyUG9zaXRpb24gPSByZXNpemVyUG9zaXRpb24gLSBUQUJMRV9SRVNJWkVSX0JPUkRFUl9XSURUSCArIHNjcm9sbExlZnRPZmZzZXQ7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZXJQb3NpdGlvbiQubmV4dCh0aGlzLnJlc2l6ZXJQb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSGlkZSB0aGUgY29sdW1uIHJlc2l6ZXIuICovXG4gICAgaGlkZVJlc2l6ZXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9yZXNpemVJblByb2dyZXNzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZXNpemVyUG9zaXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLnJlc2l6ZXJQb3NpdGlvbiQubmV4dCh0aGlzLnJlc2l6ZXJQb3NpdGlvbik7XG4gICAgICAgIHRoaXMuX21hcmtGb3JDaGVjay5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZSBzdGFydCByZXNpemluZy4gKi9cbiAgICBzdGFydFJlc2l6ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdGFydFggPSB0aGlzLnJlc2l6ZXJQb3NpdGlvbjtcbiAgICAgICAgdGhpcy5fY2xpZW50U3RhcnRYID0gZXZlbnQuY2xpZW50WDtcblxuICAgICAgICB0aGlzLl91cGRhdGVSZXNpemVyUG9zaXRpb25Pbk1vdXNlTW92ZSgpO1xuXG4gICAgICAgIHRoaXMuX3Jlc2l6ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2l6ZUluUHJvZ3Jlc3MkLm5leHQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZSBlbmQgcmVzaXppbmcuICovXG4gICAgZmluaXNoUmVzaXplKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZXJNb3ZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5fcmVzaXplSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc2l6ZUluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLl9yZXNpemVyUG9zaXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLnJlc2l6ZXJQb3NpdGlvbiQubmV4dCh0aGlzLnJlc2l6ZXJQb3NpdGlvbik7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXJ0WCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBjbGllbnRTdGFydFggPSB0aGlzLl9jbGllbnRTdGFydFggPz8gMDtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZYID0gdGhpcy5fcnRsID8gY2xpZW50U3RhcnRYIC0gZXZlbnQuY2xpZW50WCA6IGV2ZW50LmNsaWVudFggLSBjbGllbnRTdGFydFg7XG5cbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NSZXNpemUoZGlmZlgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RhcnRYID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2xpZW50U3RhcnRYID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9tYXJrRm9yQ2hlY2submV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBVcGRhdGUgY29sdW1ucyB3aWR0aCBhZnRlciByZXNpemluZywgcHJldmVudCBmcm9tIGhhdmluZyB0b28gc21hbGwgY29sdW1ucy4gKi9cbiAgICBfcHJvY2Vzc1Jlc2l6ZShkaWZmWDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc2l6ZWRFbGVtZW50ID0gdGhpcy5fY29sdW1uc0NlbGxNYXAuZ2V0KHRoaXMuX3Jlc2l6ZWRDb2x1bW4pPy5bMF0/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gcmVzaXplZEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG4gICAgICAgIGlmICghY29sdW1uV2lkdGggfHwgIXJlc2l6ZWRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlmZlggPCAwICYmIGNvbHVtbldpZHRoICsgZGlmZlggPCBUQUJMRV9DT0xVTU5fTUlOX1dJRFRIKSB7XG4gICAgICAgICAgICBkaWZmWCA9IFRBQkxFX0NPTFVNTl9NSU5fV0lEVEggLSBjb2x1bW5XaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5maXhlZFdpZHRoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtjb2x1bW5OYW1lLCBjZWxsc10gb2YgdGhpcy5fY29sdW1uc0NlbGxNYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maXhlZENvbHVtbnNXaWR0aE1hcC5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbHNbMF0ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArICdweCdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpeGVkQ29sdW1zV2lkdGhDaGFuZ2UubmV4dCh0aGlzLl9maXhlZENvbHVtbnNXaWR0aE1hcCk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluIGNhc2UgXCJfcmVzaXplZENvbHVtblwiIGlzIGZyZWV6YWJsZSwgbWFrZSBzdXJlIHRoZSBvdmVyYWxsIHdpZHRoIG9mIGZyZWV6YWJsZSBjb2x1bW5zIGRvZXMgbm90IGV4Y2VlZCB0aGUgd2lkdGggb2YgdGhlIHRhYmxlLlxuICAgICAgICAgKiBJZiBpdCBkb2VzLCBjb2x1bW5zIHdpbGwgYmUgbWFkZSB1bmZyb3plbi5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRpZmZYID4gMCAmJlxuICAgICAgICAgICAgKHRoaXMuX3RhYmxlUmVmLl9mcmVlemFibGVDb2x1bW5zLmhhcyh0aGlzLl9yZXNpemVkQ29sdW1uKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlUmVmLl9mcmVlemFibGVFbmRDb2x1bW5zPy5oYXModGhpcy5fcmVzaXplZENvbHVtbikpXG4gICAgICAgICkge1xuICAgICAgICAgICAgbGV0IGFjdHVhbFdpZHRoID0gdGhpcy5nZXRQcmV2Q29sdW1uc1dpZHRoKHRoaXMuX3Jlc2l6ZWRDb2x1bW4pICsgY29sdW1uV2lkdGg7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGFibGVSZWYuX2ZyZWV6YWJsZUVuZENvbHVtbnM/Lmhhcyh0aGlzLl9yZXNpemVkQ29sdW1uKSkge1xuICAgICAgICAgICAgICAgIGFjdHVhbFdpZHRoID0gdGhpcy5nZXROZXh0Q29sdW1uc1dpZHRoKHRoaXMuX3Jlc2l6ZWRDb2x1bW4pICsgY29sdW1uV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdXaWR0aCA9IGFjdHVhbFdpZHRoICsgZGlmZlg7XG4gICAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuX3RhYmxlUmVmLmdldE1heEFsbG93ZWRGcmVlemFibGVDb2x1bW5zV2lkdGgoKTtcbiAgICAgICAgICAgIGlmIChuZXdXaWR0aCA+PSBtYXhXaWR0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlUmVmLl9mcmVlemFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJlZi51bmZyZWV6ZShjb2x1bW4udG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cGRhdGVkV2lkdGggPSBjb2x1bW5XaWR0aCArIGRpZmZYO1xuICAgICAgICB0aGlzLl9maXhlZENvbHVtbnNXaWR0aE1hcC5zZXQodGhpcy5fcmVzaXplZENvbHVtbiwgdXBkYXRlZFdpZHRoICsgJ3B4Jyk7XG4gICAgICAgIHRoaXMuZml4ZWRDb2x1bXNXaWR0aENoYW5nZS5uZXh0KHRoaXMuX2ZpeGVkQ29sdW1uc1dpZHRoTWFwKTtcbiAgICAgICAgdGhpcy51cGRhdGVGcm96ZW5Db2x1bW5zV2lkdGhBZnRlclJlc2l6ZSh0aGlzLl9yZXNpemVkQ29sdW1uLCBkaWZmWCk7XG5cbiAgICAgICAgY29uc3QgY29tcHV0ZWQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyZXNpemVkRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBwYXJzZUludChjb21wdXRlZC5wYWRkaW5nTGVmdCwgMTApICsgcGFyc2VJbnQoY29tcHV0ZWQucGFkZGluZ1JpZ2h0LCAxMCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUhlYWRlck92ZXJmbG93U3RhdGUodXBkYXRlZFdpZHRoIC0gcGFkZGluZyk7XG4gICAgICAgIHRoaXMuX21hcmtGb3JDaGVjay5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2V0SW5pdGlhbFRhYmxlV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxUYWJsZVdpZHRoID0gdGhpcy5fdGFibGVSZWYuX3RhYmxlV2lkdGhQeDtcbiAgICB9XG5cbiAgICAvKiogVXBkYXRlIGNvbHVtbiByZXNpemVyIHBvc2l0aW9uLiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZVJlc2l6ZXJQb3NpdGlvbk9uTW91c2VNb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZXNpemVyTW92ZVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlbW92ZScpXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTApKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRTdGFydFggPSB0aGlzLl9jbGllbnRTdGFydFggPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmWCA9IHRoaXMuX3J0bCA/IGNsaWVudFN0YXJ0WCAtIGV2ZW50LmNsaWVudFggOiBldmVudC5jbGllbnRYIC0gY2xpZW50U3RhcnRYO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzaXplclBvc2l0aW9uID0gKHRoaXMuX3N0YXJ0WCA/PyAwKSArIGRpZmZYO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplclBvc2l0aW9uJC5uZXh0KHRoaXMucmVzaXplclBvc2l0aW9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBoZWFkZXIgdGV4dCBsZW5ndGggZ29lcyBvdmVyIHRoZSBjb2x1bW4gd2lkdGguIEluIHN1Y2ggY2FzZSBhcHBsaWVzIHRleHQgdHJ1bmNhdGlvbiB3aXRoXG4gICAgICogZWxsaXBzaXMgYW5kIG1ha2Ugc3VyZSB3ZSBhbHNvIHNob3cgYSB0b29sdGlwLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVIZWFkZXJPdmVyZmxvd1N0YXRlKHVwZGF0ZWRXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9jb2x1bW5zQ2VsbE1hcFxuICAgICAgICAgICAgLmdldCh0aGlzLl9yZXNpemVkQ29sdW1uKVxuICAgICAgICAgICAgPy5maW5kKChjKSA9PiBjPy5uYXRpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdUSCcpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB2aXNpYmxlQ29sdW1uID0gdGhpcy5fdGFibGVSZWYuZ2V0VmlzaWJsZVRhYmxlQ29sdW1ucygpLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gdGhpcy5fcmVzaXplZENvbHVtbik7XG4gICAgICAgIGNvbnN0IGhlYWRlclRleHRFbGVtID0gZWxlbWVudD8ucXVlcnlTZWxlY3RvcihgIyR7dGhpcy5fdGFibGVSZWYuaWR9LWhlYWRlci1jZWxsLSR7dGhpcy5fcmVzaXplZENvbHVtbn1gKTtcblxuICAgICAgICBpZiAoIWhlYWRlclRleHRFbGVtIHx8ICF2aXNpYmxlQ29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmlzaWJsZUNvbHVtbi5oZWFkZXJPdmVyZmxvd3MgPSBoZWFkZXJUZXh0RWxlbS5zY3JvbGxXaWR0aCA+IHVwZGF0ZWRXaWR0aDtcbiAgICB9XG59XG4iXX0=
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLXJlc2l6ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlLWhlbHBlcnMvc2VydmljZXMvdGFibGUtY29sdW1uLXJlc2l6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQWEsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3hELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7O0FBRWpGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQztBQUU1Qzs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyx3QkFBd0I7SUF5RGpDLGdEQUFnRDtJQUNoRCxJQUFJLGdCQUFnQjtRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNsQyxDQUFDO0lBUUQsdUNBQXVDO0lBQ3ZDLElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBS0QscUNBQXFDO0lBQ3JDLElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsNkRBQTZEO0lBQzdELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO0lBQy9FLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBWSxJQUFJO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsY0FBYztJQUNkLFlBQ3FCLDZCQUEyRCxFQUMvQyxXQUF1QjtRQURuQyxrQ0FBNkIsR0FBN0IsNkJBQTZCLENBQThCO1FBQy9DLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBN0Z4RCw4RUFBOEU7UUFDckUsMkJBQXNCLEdBQUcsSUFBSSxlQUFlLENBQXNCLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0RixjQUFjO1FBQ04sMEJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFFMUQsY0FBYztRQUNOLG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQWtELENBQUM7UUFFcEYsY0FBYztRQUNOLHdCQUFtQixHQUFhLEVBQUUsQ0FBQztRQUUzQyxjQUFjO1FBQ04sbUNBQThCLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFFL0UsY0FBYztRQUNOLG9DQUErQixHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBRWhGLGNBQWM7UUFDTixrQ0FBNkIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUVsRSxjQUFjO1FBQ04sbUNBQThCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFFbkUsY0FBYztRQUNOLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBRXRDLGNBQWM7UUFDTixrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFFNUMsY0FBYztRQUNOLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUtsQyxjQUFjO1FBQ04scUJBQWdCLEdBQWtCLElBQUksQ0FBQztRQUUvQyxjQUFjO1FBQ04sZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFeEIsY0FBYztRQUNOLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU1QyxjQUFjO1FBQ04sZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFekMsY0FBYztRQUNOLDZCQUF3QixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFLdEQsY0FBYztRQUNOLHVCQUFrQixHQUFrQixJQUFJLENBQUM7UUFPakQsOEJBQThCO1FBQ3JCLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWxGLDJDQUEyQztRQUNsQyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQU9oRSwrQkFBK0I7UUFDdEIscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFzQnZELElBQUksQ0FBQyw2QkFBNkI7WUFDOUIsRUFBRSxvQkFBb0IsRUFBRTthQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNoQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxjQUFjO0lBQ2QsV0FBVztRQUNQLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxjQUFjO0lBQ2QsV0FBVyxDQUFDLEdBQVU7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7SUFDekIsQ0FBQztJQUVELGdGQUFnRjtJQUNoRixjQUFjLENBQUMsa0JBQTRCO1FBQ3ZDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsK0JBQStCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0Msa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25GLENBQUMsQ0FBQyxDQUFDO1FBQ0gsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxjQUFjO0lBQ2Qsd0JBQXdCO1FBQ3BCLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxFQUNyQixhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsOEJBQThCLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDOUUsaUJBQWlCO2dCQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQW9CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDMUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztTQUNyRTtRQUNELEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsK0JBQStCLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDL0UsYUFBYTtnQkFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQzFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ2xFO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxtQ0FBbUMsQ0FBQyxVQUFrQixFQUFFLEtBQWE7UUFDakUsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsNkJBQTZCLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEUsSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFO2dCQUN2QixLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ2hCO2lCQUFNLElBQUksS0FBSyxFQUFFO2dCQUNkLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQzthQUNqRTtTQUNKO0lBQ0wsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCxtQkFBbUIsQ0FBQyxVQUFrQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsZUFBZSxFQUFFO1lBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQzthQUMxRDtZQUNELE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFHLElBQUkseUJBQXlCLEdBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUMsTUFBTTtnQkFDeEUsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUMxRSx3R0FBd0c7WUFDeEcsOEZBQThGO1lBQzlGLElBQUkseUJBQXlCLEdBQUcsR0FBRyxFQUFFO2dCQUNqQyx5QkFBeUIsR0FBRyxHQUFHLENBQUM7YUFDbkM7WUFDRCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUkseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1NBQ3pGO2FBQU07WUFDSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25FLE9BQU8sZUFBZSxJQUFJLE9BQU8sQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFRCwyQkFBMkI7SUFDM0IscUJBQXFCLENBQUMsVUFBa0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsaUJBQWlCLENBQUMsVUFBa0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxrR0FBa0c7SUFDbEcsbUJBQW1CLENBQUMsVUFBa0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsOEZBQThGO0lBQzlGLG1CQUFtQixDQUFDLFVBQWtCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxrQkFBa0IsQ0FBQyxVQUFrQixFQUFFLFNBQXFCO1FBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsb0JBQW9CLENBQUMsVUFBa0IsRUFBRSxTQUFxQjtRQUMxRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFM0YsSUFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDakIsT0FBTztTQUNWO1FBRUQsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsY0FBYyxDQUFDLFVBQWtCLEVBQUUsS0FBYTtRQUM1QyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQseUJBQXlCLENBQUMsZUFBdUIsRUFBRSxhQUFxQjtRQUNwRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWpELElBQUksZUFBZSxJQUFJLElBQUksRUFBRTtZQUN6QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsR0FBRywwQkFBMEIsR0FBRyxnQkFBZ0IsQ0FBQztZQUN4RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNwRDtJQUNMLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLFdBQVcsQ0FBQyxLQUFpQjtRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBRW5DLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBRXpDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLFlBQVksQ0FBQyxLQUFpQjtRQUMxQixJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFakQsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUN0QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztZQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7WUFFdEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTFCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGtGQUFrRjtJQUNsRixjQUFjLENBQUMsS0FBYTtRQUN4QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUM7UUFDekYsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO1FBRWxFLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakMsT0FBTztTQUNWO1FBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRTtZQUN0RSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUM7U0FDM0Q7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNsQixLQUFLLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDOUQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO29CQUNkLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQzFCLFVBQVUsRUFDVixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FDOUQsQ0FBQztpQkFDTDthQUNKO1NBQ0o7UUFFRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRTdEOzs7V0FHRztRQUNILElBQ0ksS0FBSyxHQUFHLENBQUM7WUFDVCxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUNwRTtZQUNFLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxDQUFDO1lBQzlFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUMvRCxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLENBQUM7YUFDN0U7WUFDRCxNQUFNLFFBQVEsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztZQUNyRSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDLENBQUMsQ0FBQzthQUNOO1NBQ0o7UUFFRCxNQUFNLFlBQVksR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsbUNBQW1DLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVyRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxjQUFjO0lBQ2QscUJBQXFCO1FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztJQUMzRCxDQUFDO0lBRUQsc0NBQXNDO0lBQzlCLGlDQUFpQztRQUNyQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsU0FBUyxDQUFhLFFBQVEsRUFBRSxXQUFXLENBQUM7YUFDdkUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN0QixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztZQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7WUFFdEYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSywwQkFBMEIsQ0FBQyxZQUFvQjtRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZTthQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN6QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUUsYUFBYSxDQUFDO1FBQ3BFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFHLE1BQU0sY0FBYyxHQUFHLE9BQU8sRUFBRSxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsZ0JBQWdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRTFHLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbkMsT0FBTztTQUNWO1FBQ0QsYUFBYSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztJQUM5RSxDQUFDOztxSEEvWFEsd0JBQXdCO3lIQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVTs7MEJBK0ZGLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNFTEVDVElPTl9DT0xVTU5fV0lEVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7IFRhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuL3RhYmxlLXNjcm9sbC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgVEFCTEVfUkVTSVpFUl9CT1JERVJfV0lEVEggPSAzO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gaGFuZGxlIGFsbCB0aGluZ3MgcmVsYXRlZCB0byBjb2x1bW4gcmVzaXppbmc6XG4gKiAtIFNldHRpbmcgcmVzaXplclxuICogLSBQcm9jZXNzaW5nIHJlc2l6ZVxuICogLSBDYWxjdWxhdGluZyB0aGUgcmVhbCBjb2x1bW5zIHdpZHRoXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKiBTdWJqZWN0IHRoYXQgZW1pdHMgbmV3IG1hcCBvZiBmaXhlZCBjb2x1bW5zIGFuZCB0aGVpciByZXNwZWN0aXZlIHdpZHRoLiAqL1xuICAgIHJlYWRvbmx5IGZpeGVkQ29sdW1zV2lkdGhDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcDxzdHJpbmcsIHN0cmluZz4+KG5ldyBNYXAoKSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maXhlZENvbHVtbnNXaWR0aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbHVtbnNDZWxsTWFwID0gbmV3IE1hcDxzdHJpbmcsIEVsZW1lbnRSZWY8SFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50PltdPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aXNpYmxlQ29sdW1uTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Zpc2libGVDb2x1bW5MZWZ0TmVpZ2hib3VyTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlzaWJsZUNvbHVtblJpZ2h0TmVpZ2hib3VyTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlzaWJsZUNvbHVtbkxlZnRPZmZzZXRQeE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Zpc2libGVDb2x1bW5SaWdodE9mZnNldFB4TWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3RhcnRYOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2xpZW50U3RhcnRYOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzaXplSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNpemVkQ29sdW1uOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2l6ZXJQb3NpdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Njcm9sbExlZnQgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYXJrRm9yQ2hlY2sgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNpemVyTW92ZVN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdGFibGVSZWY6IFRhYmxlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsVGFibGVXaWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogSW5kaWNhdGUgaWYgcmVzaXppbmcgcHJvY2VzcyBpbiBwcm9ncmVzcy4gKi9cbiAgICBnZXQgcmVzaXplSW5Qcm9ncmVzcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc2l6ZUluUHJvZ3Jlc3M7XG4gICAgfVxuXG4gICAgLyoqIFJlc2l6ZSBwcm9ncmVzcyBzdHJlYW0uICovXG4gICAgcmVhZG9ubHkgcmVzaXplSW5Qcm9ncmVzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Jlc2l6ZUluUHJvZ3Jlc3MpO1xuXG4gICAgLyoqIFdoZXRoZXIgY2VsbCBtb2NrIHNob3VsZCBiZSB2aXNpYmxlLiAqL1xuICAgIHJlYWRvbmx5IGNlbGxNb2NrVmlzaWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKiBDdXJyZW50IGNvbHVtbiByZXNpemVyIHBvc2l0aW9uLiAqL1xuICAgIGdldCByZXNpemVyUG9zaXRpb24oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc2l6ZXJQb3NpdGlvbiA/PyAwO1xuICAgIH1cblxuICAgIC8qKiBSZXNpemVyIHBvc2l0aW9uIHN0cmVhbS4gKi9cbiAgICByZWFkb25seSByZXNpemVyUG9zaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuXG4gICAgLyoqIE9ic2VydmFibGUgdG8gbm90aWZ5IHRvIHJ1biBDRCAqL1xuICAgIGdldCBtYXJrRm9yQ2hlY2soKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXJrRm9yQ2hlY2suYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqIHRhYmxlIGhhcyBmaXhlZCB3aWR0aCBpZiBhbGwgb2YgaXQncyBjb2x1bW5zIGFyZSBmaXhlZCAqL1xuICAgIGdldCBmaXhlZFdpZHRoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZml4ZWRDb2x1bW5zV2lkdGhNYXAuc2l6ZSA9PT0gdGhpcy5fdmlzaWJsZUNvbHVtbk5hbWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9ydGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlOiBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2VcbiAgICAgICAgICAgID8uaG9yaXpvbnRhbGx5U2Nyb2xsZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzY3JvbGxhYmxlKSA9PiAodGhpcy5fc2Nyb2xsTGVmdCA9IHNjcm9sbGFibGUuZ2V0U2Nyb2xsTGVmdCgpKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzaXplSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc2l6ZUluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpO1xuXG4gICAgICAgIHRoaXMuX3Jlc2l6ZXJNb3ZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXRUYWJsZVJlZihyZWY6IFRhYmxlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUmVmID0gcmVmO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIGluaXRpYWxpemVzIHNlcnZpY2Ugd2l0aCBkYXRhLCB0cmlnZ2VyIGNvbHVtbnMgd2lkdGggY2FsY3VsYXRpb24uICovXG4gICAgc2V0Q29sdW1uTmFtZXModmlzaWJsZUNvbHVtbk5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl92aXNpYmxlQ29sdW1uTGVmdE5laWdoYm91ck1hcC5jbGVhcigpO1xuICAgICAgICB0aGlzLl92aXNpYmxlQ29sdW1uUmlnaHROZWlnaGJvdXJNYXAuY2xlYXIoKTtcbiAgICAgICAgdmlzaWJsZUNvbHVtbk5hbWVzLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Zpc2libGVDb2x1bW5MZWZ0TmVpZ2hib3VyTWFwLnNldChjb2x1bW4sIHZpc2libGVDb2x1bW5OYW1lc1tpbmRleCAtIDFdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZpc2libGVDb2x1bW5OYW1lcy5yZXZlcnNlKCkuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdmlzaWJsZUNvbHVtblJpZ2h0TmVpZ2hib3VyTWFwLnNldChjb2x1bW4sIHZpc2libGVDb2x1bW5OYW1lc1tpbmRleCAtIDFdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDb2x1bW5OYW1lcyA9IFsuLi52aXNpYmxlQ29sdW1uTmFtZXNdO1xuICAgICAgICB0aGlzLnVwZGF0ZUZyb3plbkNvbHVtbnNXaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdXBkYXRlRnJvemVuQ29sdW1uc1dpZHRoKCk6IHZvaWQge1xuICAgICAgICBsZXQgYWxsUHJldmlvdXNXaWR0aHMgPSAwLFxuICAgICAgICAgICAgYWxsTmV4dFdpZHRocyA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgW2NvbHVtbiwgcHJldkNvbHVtbl0gb2YgdGhpcy5fdmlzaWJsZUNvbHVtbkxlZnROZWlnaGJvdXJNYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICBhbGxQcmV2aW91c1dpZHRocyArPVxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNDZWxsTWFwLmdldChwcmV2Q29sdW1uIGFzIHN0cmluZyk/LlswXT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCA/PyAwO1xuICAgICAgICAgICAgdGhpcy5fdmlzaWJsZUNvbHVtbkxlZnRPZmZzZXRQeE1hcC5zZXQoY29sdW1uLCBhbGxQcmV2aW91c1dpZHRocyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbY29sdW1uLCBuZXh0Q29sdW1uXSBvZiB0aGlzLl92aXNpYmxlQ29sdW1uUmlnaHROZWlnaGJvdXJNYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICBhbGxOZXh0V2lkdGhzICs9XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1uc0NlbGxNYXAuZ2V0KG5leHRDb2x1bW4gYXMgc3RyaW5nKT8uWzBdPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID8/IDA7XG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlQ29sdW1uUmlnaHRPZmZzZXRQeE1hcC5zZXQoY29sdW1uLCBhbGxOZXh0V2lkdGhzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdXBkYXRlRnJvemVuQ29sdW1uc1dpZHRoQWZ0ZXJSZXNpemUoY29sdW1uTmFtZTogc3RyaW5nLCBkaWZmWDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIHdpZHRoXSBvZiB0aGlzLl92aXNpYmxlQ29sdW1uTGVmdE9mZnNldFB4TWFwLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKGNvbHVtbiA9PT0gY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92aXNpYmxlQ29sdW1uTGVmdE9mZnNldFB4TWFwLnNldChjb2x1bW4sIHdpZHRoICsgZGlmZlgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHJpZXZlcyBjdXN0b20gY29sdW1uIHZhbHVlIG9yIHJldHVybnMgYHVuc2V0YCAqL1xuICAgIGdldENvbHVtbldpZHRoU3R5bGUoY29sdW1uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYmxlUmVmLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy5zY3JvbGxXaG9sZVJvd3MpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbFRhYmxlV2lkdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsVGFibGVXaWR0aCA9IHRoaXMuX3RhYmxlUmVmLl90YWJsZVdpZHRoUHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Db2x1bW5XaWR0aCA9IFNFTEVDVElPTl9DT0xVTU5fV0lEVEguZ2V0KHRoaXMuX3RhYmxlUmVmLmNvbnRlbnREZW5zaXR5T2JzZXJ2ZXIudmFsdWUpID8/IDA7XG4gICAgICAgICAgICBsZXQgc2l6ZURpdmlkZWRCeUNvbHVtbnNDb3VudCA9XG4gICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbFRhYmxlV2lkdGggLyB0aGlzLl90YWJsZVJlZi5nZXRWaXNpYmxlVGFibGVDb2x1bW5zKCkubGVuZ3RoIC1cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db2x1bW5XaWR0aCAvIHRoaXMuX3RhYmxlUmVmLmdldFZpc2libGVUYWJsZUNvbHVtbnMoKS5sZW5ndGg7XG4gICAgICAgICAgICAvLyBJbiB0aGUgZXZlbnQgb2YgdGFibGVzIHdpdGggYSB2ZXJ5IGhpZ2ggbnVtYmVyIG9mIGNvbHVtbnMsIG5lZWQgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGljaFxuICAgICAgICAgICAgLy8gd291bGQgbWFrZSBlYWNoIGNvbHVtbiBub3Qgd2lkZSBlbm91Z2ggdG8gYmUgdXNhYmxlIGFuZCBpbnN0ZWFkIHVzZSBhIGhvcml6b250YWwgc2Nyb2xsYmFyLlxuICAgICAgICAgICAgaWYgKHNpemVEaXZpZGVkQnlDb2x1bW5zQ291bnQgPCAxNzYpIHtcbiAgICAgICAgICAgICAgICBzaXplRGl2aWRlZEJ5Q29sdW1uc0NvdW50ID0gMTc2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpeGVkQ29sdW1uc1dpZHRoTWFwLmdldChjb2x1bW5OYW1lKSB8fCBzaXplRGl2aWRlZEJ5Q29sdW1uc0NvdW50ICsgJ3B4JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRXaWR0aCA9IHRoaXMuX2ZpeGVkQ29sdW1uc1dpZHRoTWFwLmdldChjb2x1bW5OYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVkV2lkdGggfHwgJ3Vuc2V0JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBQcmV2aW91cyBjb2x1bW4gbmFtZSAqL1xuICAgIGdldFByZXZpb3VzQ29sdW1uTmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbHVtbkxlZnROZWlnaGJvdXJNYXAuZ2V0KGNvbHVtbk5hbWUpO1xuICAgIH1cblxuICAgIC8qKiBQcmV2aW91cyBjb2x1bW4gbmFtZSAqL1xuICAgIGdldE5leHRDb2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlQ29sdW1uUmlnaHROZWlnaGJvdXJNYXAuZ2V0KGNvbHVtbk5hbWUpO1xuICAgIH1cblxuICAgIC8qKiBPdmVyYWxsIHByZXZpb3VzIGNvbHVtbnMgd2lkdGguIFVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldCBmb3IgdGhlIGFic29sdXRlIHBvc2l0aW9uZWQgY2VsbHMuICovXG4gICAgZ2V0UHJldkNvbHVtbnNXaWR0aChjb2x1bW5OYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbHVtbkxlZnRPZmZzZXRQeE1hcC5nZXQoY29sdW1uTmFtZSkgPz8gMDtcbiAgICB9XG5cbiAgICAvKiogT3ZlcmFsbCBuZXh0IGNvbHVtbnMgd2lkdGguIFVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldCBmb3IgdGhlIGFic29sdXRlIHBvc2l0aW9uZWQgY2VsbHMuICovXG4gICAgZ2V0TmV4dENvbHVtbnNXaWR0aChjb2x1bW5OYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbHVtblJpZ2h0T2Zmc2V0UHhNYXAuZ2V0KGNvbHVtbk5hbWUpID8/IDA7XG4gICAgfVxuXG4gICAgLyoqIFJlZ2lzdGVyIGNvbHVtbidzIGNlbGwgdG8gZ2V0IGl0cyBkaW1lbnNpb25zIGluIGZ1cnRoZXIuICovXG4gICAgcmVnaXN0ZXJDb2x1bW5DZWxsKGNvbHVtbk5hbWU6IHN0cmluZywgY2VsbEVsUmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkNlbGxzID0gdGhpcy5fY29sdW1uc0NlbGxNYXAuZ2V0KGNvbHVtbk5hbWUpIHx8IFtdO1xuICAgICAgICB0aGlzLl9jb2x1bW5zQ2VsbE1hcC5zZXQoY29sdW1uTmFtZSwgW2NlbGxFbFJlZiwgLi4uY29sdW1uQ2VsbHNdKTtcbiAgICB9XG5cbiAgICAvKiogVW5yZWdpc3RlciBjb2x1bW4ncyBjZWxsLiAqL1xuICAgIHVucmVnaXN0ZXJDb2x1bW5DZWxsKGNvbHVtbk5hbWU6IHN0cmluZywgY2VsbEVsUmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkNlbGxzID0gdGhpcy5fY29sdW1uc0NlbGxNYXAuZ2V0KGNvbHVtbk5hbWUpIHx8IFtdO1xuICAgICAgICBjb25zdCBlbG1JbmRleCA9IGNvbHVtbkNlbGxzLmZpbmRJbmRleCgoZSkgPT4gZS5uYXRpdmVFbGVtZW50ID09PSBjZWxsRWxSZWYubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKGVsbUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29sdW1uQ2VsbHMuc3BsaWNlKGVsbUluZGV4LCAxKTtcblxuICAgICAgICB0aGlzLl9jb2x1bW5zQ2VsbE1hcC5zZXQoY29sdW1uTmFtZSwgY29sdW1uQ2VsbHMpO1xuICAgIH1cblxuICAgIC8qKiBSZWdpc3RlciB0aGUgdmFsdWUgb2YgY29sdW1uIHdpZHRoIHRoYXQgY2hhbmdlZCBmcm9tICBpbnB1dCAqL1xuICAgIHNldEN1c3RvbVdpZHRoKGNvbHVtbk5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXhlZENvbHVtbnNXaWR0aE1hcC5zZXQoY29sdW1uTmFtZSwgdmFsdWUpO1xuICAgICAgICB0aGlzLmZpeGVkQ29sdW1zV2lkdGhDaGFuZ2UubmV4dCh0aGlzLl9maXhlZENvbHVtbnNXaWR0aE1hcCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCB0aGUgYXBwcm9wcmlhdGUgY29sdW1uIHJlc2l6ZXIgcG9zaXRpb24uICovXG4gICAgc2V0SW5pdGlhbFJlc2l6ZXJQb3NpdGlvbihyZXNpemVyUG9zaXRpb246IG51bWJlciwgcmVzaXplZENvbHVtbjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Jlc2l6ZWRDb2x1bW4gPSByZXNpemVkQ29sdW1uO1xuICAgICAgICB0aGlzLl9yZXNpemVyUG9zaXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLnJlc2l6ZXJQb3NpdGlvbiQubmV4dCh0aGlzLnJlc2l6ZXJQb3NpdGlvbik7XG5cbiAgICAgICAgaWYgKHJlc2l6ZXJQb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxMZWZ0T2Zmc2V0ID0gdGhpcy5fc2Nyb2xsTGVmdCAqICh0aGlzLl9ydGwgPyAxIDogLTEpO1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplclBvc2l0aW9uID0gcmVzaXplclBvc2l0aW9uIC0gVEFCTEVfUkVTSVpFUl9CT1JERVJfV0lEVEggKyBzY3JvbGxMZWZ0T2Zmc2V0O1xuICAgICAgICAgICAgdGhpcy5yZXNpemVyUG9zaXRpb24kLm5leHQodGhpcy5yZXNpemVyUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEhpZGUgdGhlIGNvbHVtbiByZXNpemVyLiAqL1xuICAgIGhpZGVSZXNpemVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcmVzaXplSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVzaXplclBvc2l0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXNpemVyUG9zaXRpb24kLm5leHQodGhpcy5yZXNpemVyUG9zaXRpb24pO1xuICAgICAgICB0aGlzLl9tYXJrRm9yQ2hlY2submV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGUgc3RhcnQgcmVzaXppbmcuICovXG4gICAgc3RhcnRSZXNpemUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3RhcnRYID0gdGhpcy5yZXNpemVyUG9zaXRpb247XG4gICAgICAgIHRoaXMuX2NsaWVudFN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlUmVzaXplclBvc2l0aW9uT25Nb3VzZU1vdmUoKTtcblxuICAgICAgICB0aGlzLl9yZXNpemVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXNpemVJblByb2dyZXNzJC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGUgZW5kIHJlc2l6aW5nLiAqL1xuICAgIGZpbmlzaFJlc2l6ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZXNpemVyTW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgIHRoaXMuX3Jlc2l6ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNpemVJblByb2dyZXNzJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5fcmVzaXplclBvc2l0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXNpemVyUG9zaXRpb24kLm5leHQodGhpcy5yZXNpemVyUG9zaXRpb24pO1xuXG4gICAgICAgIGlmICh0aGlzLl9zdGFydFggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2xpZW50U3RhcnRYID0gdGhpcy5fY2xpZW50U3RhcnRYID8/IDA7XG4gICAgICAgICAgICBjb25zdCBkaWZmWCA9IHRoaXMuX3J0bCA/IGNsaWVudFN0YXJ0WCAtIGV2ZW50LmNsaWVudFggOiBldmVudC5jbGllbnRYIC0gY2xpZW50U3RhcnRYO1xuXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzUmVzaXplKGRpZmZYKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0YXJ0WCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NsaWVudFN0YXJ0WCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fbWFya0ZvckNoZWNrLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogVXBkYXRlIGNvbHVtbnMgd2lkdGggYWZ0ZXIgcmVzaXppbmcsIHByZXZlbnQgZnJvbSBoYXZpbmcgdG9vIHNtYWxsIGNvbHVtbnMuICovXG4gICAgX3Byb2Nlc3NSZXNpemUoZGlmZlg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNpemVkRWxlbWVudCA9IHRoaXMuX2NvbHVtbnNDZWxsTWFwLmdldCh0aGlzLl9yZXNpemVkQ29sdW1uKT8uWzBdPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IHJlc2l6ZWRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuICAgICAgICBpZiAoIWNvbHVtbldpZHRoIHx8ICFyZXNpemVkRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpZmZYIDwgMCAmJiBjb2x1bW5XaWR0aCArIGRpZmZYIDwgdGhpcy5fdGFibGVSZWYubWluaW11bUNvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICBkaWZmWCA9IHRoaXMuX3RhYmxlUmVmLm1pbmltdW1Db2x1bW5XaWR0aCAtIGNvbHVtbldpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmZpeGVkV2lkdGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2NvbHVtbk5hbWUsIGNlbGxzXSBvZiB0aGlzLl9jb2x1bW5zQ2VsbE1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpeGVkQ29sdW1uc1dpZHRoTWFwLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsc1swXS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICsgJ3B4J1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZml4ZWRDb2x1bXNXaWR0aENoYW5nZS5uZXh0KHRoaXMuX2ZpeGVkQ29sdW1uc1dpZHRoTWFwKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogSW4gY2FzZSBcIl9yZXNpemVkQ29sdW1uXCIgaXMgZnJlZXphYmxlLCBtYWtlIHN1cmUgdGhlIG92ZXJhbGwgd2lkdGggb2YgZnJlZXphYmxlIGNvbHVtbnMgZG9lcyBub3QgZXhjZWVkIHRoZSB3aWR0aCBvZiB0aGUgdGFibGUuXG4gICAgICAgICAqIElmIGl0IGRvZXMsIGNvbHVtbnMgd2lsbCBiZSBtYWRlIHVuZnJvemVuLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGlmZlggPiAwICYmXG4gICAgICAgICAgICAodGhpcy5fdGFibGVSZWYuX2ZyZWV6YWJsZUNvbHVtbnMuaGFzKHRoaXMuX3Jlc2l6ZWRDb2x1bW4pIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSZWYuX2ZyZWV6YWJsZUVuZENvbHVtbnM/Lmhhcyh0aGlzLl9yZXNpemVkQ29sdW1uKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgYWN0dWFsV2lkdGggPSB0aGlzLmdldFByZXZDb2x1bW5zV2lkdGgodGhpcy5fcmVzaXplZENvbHVtbikgKyBjb2x1bW5XaWR0aDtcbiAgICAgICAgICAgIGlmICh0aGlzLl90YWJsZVJlZi5fZnJlZXphYmxlRW5kQ29sdW1ucz8uaGFzKHRoaXMuX3Jlc2l6ZWRDb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgYWN0dWFsV2lkdGggPSB0aGlzLmdldE5leHRDb2x1bW5zV2lkdGgodGhpcy5fcmVzaXplZENvbHVtbikgKyBjb2x1bW5XaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld1dpZHRoID0gYWN0dWFsV2lkdGggKyBkaWZmWDtcbiAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5fdGFibGVSZWYuZ2V0TWF4QWxsb3dlZEZyZWV6YWJsZUNvbHVtbnNXaWR0aCgpO1xuICAgICAgICAgICAgaWYgKG5ld1dpZHRoID49IG1heFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSZWYuX2ZyZWV6YWJsZUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlUmVmLnVuZnJlZXplKGNvbHVtbi50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRXaWR0aCA9IGNvbHVtbldpZHRoICsgZGlmZlg7XG4gICAgICAgIHRoaXMuX2ZpeGVkQ29sdW1uc1dpZHRoTWFwLnNldCh0aGlzLl9yZXNpemVkQ29sdW1uLCB1cGRhdGVkV2lkdGggKyAncHgnKTtcbiAgICAgICAgdGhpcy5maXhlZENvbHVtc1dpZHRoQ2hhbmdlLm5leHQodGhpcy5fZml4ZWRDb2x1bW5zV2lkdGhNYXApO1xuICAgICAgICB0aGlzLnVwZGF0ZUZyb3plbkNvbHVtbnNXaWR0aEFmdGVyUmVzaXplKHRoaXMuX3Jlc2l6ZWRDb2x1bW4sIGRpZmZYKTtcblxuICAgICAgICBjb25zdCBjb21wdXRlZCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHJlc2l6ZWRFbGVtZW50KTtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IHBhcnNlSW50KGNvbXB1dGVkLnBhZGRpbmdMZWZ0LCAxMCkgKyBwYXJzZUludChjb21wdXRlZC5wYWRkaW5nUmlnaHQsIDEwKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlSGVhZGVyT3ZlcmZsb3dTdGF0ZSh1cGRhdGVkV2lkdGggLSBwYWRkaW5nKTtcbiAgICAgICAgdGhpcy5fbWFya0ZvckNoZWNrLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRJbml0aWFsVGFibGVXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbFRhYmxlV2lkdGggPSB0aGlzLl90YWJsZVJlZi5fdGFibGVXaWR0aFB4O1xuICAgIH1cblxuICAgIC8qKiBVcGRhdGUgY29sdW1uIHJlc2l6ZXIgcG9zaXRpb24uICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlUmVzaXplclBvc2l0aW9uT25Nb3VzZU1vdmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZXJNb3ZlU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudFN0YXJ0WCA9IHRoaXMuX2NsaWVudFN0YXJ0WCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmZYID0gdGhpcy5fcnRsID8gY2xpZW50U3RhcnRYIC0gZXZlbnQuY2xpZW50WCA6IGV2ZW50LmNsaWVudFggLSBjbGllbnRTdGFydFg7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNpemVyUG9zaXRpb24gPSAodGhpcy5fc3RhcnRYID8/IDApICsgZGlmZlg7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVyUG9zaXRpb24kLm5leHQodGhpcy5yZXNpemVyUG9zaXRpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGhlYWRlciB0ZXh0IGxlbmd0aCBnb2VzIG92ZXIgdGhlIGNvbHVtbiB3aWR0aC4gSW4gc3VjaCBjYXNlIGFwcGxpZXMgdGV4dCB0cnVuY2F0aW9uIHdpdGhcbiAgICAgKiBlbGxpcHNpcyBhbmQgbWFrZSBzdXJlIHdlIGFsc28gc2hvdyBhIHRvb2x0aXAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUhlYWRlck92ZXJmbG93U3RhdGUodXBkYXRlZFdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2NvbHVtbnNDZWxsTWFwXG4gICAgICAgICAgICAuZ2V0KHRoaXMuX3Jlc2l6ZWRDb2x1bW4pXG4gICAgICAgICAgICA/LmZpbmQoKGMpID0+IGM/Lm5hdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ1RIJyk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHZpc2libGVDb2x1bW4gPSB0aGlzLl90YWJsZVJlZi5nZXRWaXNpYmxlVGFibGVDb2x1bW5zKCkuZmluZCgoYykgPT4gYy5uYW1lID09PSB0aGlzLl9yZXNpemVkQ29sdW1uKTtcbiAgICAgICAgY29uc3QgaGVhZGVyVGV4dEVsZW0gPSBlbGVtZW50Py5xdWVyeVNlbGVjdG9yKGAjJHt0aGlzLl90YWJsZVJlZi5pZH0taGVhZGVyLWNlbGwtJHt0aGlzLl9yZXNpemVkQ29sdW1ufWApO1xuXG4gICAgICAgIGlmICghaGVhZGVyVGV4dEVsZW0gfHwgIXZpc2libGVDb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2aXNpYmxlQ29sdW1uLmhlYWRlck92ZXJmbG93cyA9IGhlYWRlclRleHRFbGVtLnNjcm9sbFdpZHRoID4gdXBkYXRlZFdpZHRoO1xuICAgIH1cbn1cbiJdfQ==
@@ -12,4 +12,4 @@ export class Table {
12
12
  this.openTableColumnSettings = new EventEmitter();
13
13
  }
14
14
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvdGFibGUtaGVscGVycy90YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFjLFlBQVksRUFBWSxNQUFNLGVBQWUsQ0FBQztBQWlCbkUsTUFBTSxPQUFnQixLQUFLO0lBQTNCO1FBMktJLCtDQUErQztRQUN0QywwQkFBcUIsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU5RSxpREFBaUQ7UUFDeEMsNEJBQXVCLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFaEYsZ0RBQWdEO1FBQ3ZDLDJCQUFzQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9FLGlEQUFpRDtRQUN4Qyw0QkFBdUIsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQWFwRixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQgeyBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IFByZXNldE1hbmFnZWRDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZvY3VzYWJsZUdyaWREaXJlY3RpdmUsIE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi9kb21haW4nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkZpbHRlciB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb2xsZWN0aW9uLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkdyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbGxlY3Rpb24tZ3JvdXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbGxlY3Rpb25Tb3J0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbGxlY3Rpb24tc29ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVTdGF0ZSB9IGZyb20gJy4vaW50ZXJmYWNlcy90YWJsZS1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQsIFNhdmVSb3dzRXZlbnQsIFRhYmxlSW5pdGlhbFN0YXRlLCBUYWJsZVJvdywgVGFibGVWaXJ0dWFsU2Nyb2xsIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVTY3JvbGxhYmxlIH0gZnJvbSAnLi9zZXJ2aWNlcy90YWJsZS1zY3JvbGwtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZVZhbHVlIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUYWJsZTxUID0gYW55PiBpbXBsZW1lbnRzIFByZXNldE1hbmFnZWRDb21wb25lbnQ8UGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQ+IHtcbiAgICBhYnN0cmFjdCByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICBhYnN0cmFjdCByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gICAgYWJzdHJhY3QgX2xvYWRQcmV2aW91c1BhZ2VzOiBib29sZWFuO1xuXG4gICAgYWJzdHJhY3QgcGFnZVNjcm9sbGluZzogYm9vbGVhbjtcblxuICAgIGFic3RyYWN0IGxvYWRQYWdlc0JlZm9yZTogYm9vbGVhbjtcblxuICAgIGFic3RyYWN0IHBhZ2VTaXplOiBOdWxsYWJsZTxudW1iZXI+O1xuXG4gICAgYWJzdHJhY3QgZnJlZXplQ29sdW1uc1RvOiBzdHJpbmc7XG5cbiAgICBhYnN0cmFjdCBmcmVlemVFbmRDb2x1bW5zVG86IHN0cmluZztcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIGFic3RyYWN0IHByZXNldENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldD47XG5cbiAgICAvKiogU3VtIG9mIHdpZHRocyBvZiBmaXhlZCBjb2x1bW5zIChzZW1hbnRpYyBoaWdobGlnaHRpbmcsIHNlbGVjdGlvbikgKi9cbiAgICBhYnN0cmFjdCBnZXQgX2ZpeGVkQ29sdW1uc1BhZGRpbmcoKTogbnVtYmVyO1xuXG4gICAgLyoqIEZyZWV6YWJsZSBjb2x1bW4gbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaW5kZXhlcyAqL1xuICAgIGFic3RyYWN0IGdldCBfZnJlZXphYmxlQ29sdW1ucygpOiBSZWFkb25seU1hcDxzdHJpbmcsIG51bWJlcj47XG5cbiAgICAvKiogRnJlZXphYmxlIGNvbHVtbiBuYW1lcyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBpbmRleGVzICovXG4gICAgYWJzdHJhY3QgZ2V0IF9mcmVlemFibGVFbmRDb2x1bW5zKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgbnVtYmVyPjtcblxuICAgIC8qKiBXaWR0aCBvZiB0aGUgdGFibGUgZWxlbWVudCBpbiBweCAqL1xuICAgIGFic3RyYWN0IGdldCBfdGFibGVXaWR0aFB4KCk6IG51bWJlcjtcblxuICAgIGFic3RyYWN0IGdldCBsb2FkaW5nU3RhdGUoKTogYm9vbGVhbjtcblxuICAgIGFic3RyYWN0IGluaXRpYWxTdGF0ZTogVGFibGVJbml0aWFsU3RhdGUgfCBudWxsO1xuXG4gICAgLyoqIFRhYmxlIGNvbHVtbnMgZGVmaW5pdGlvbiBsaXN0ICovXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVDb2x1bW5zU3RyZWFtOiBPYnNlcnZhYmxlPFRhYmxlQ29sdW1uW10+O1xuXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yO1xuXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBhYnN0cmFjdCByZWFkb25seSB0YWJsZVNjcm9sbE1vY2tDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBhYnN0cmFjdCByZWFkb25seSB0YWJsZVNjcm9sbGFibGU6IFRhYmxlU2Nyb2xsYWJsZTtcblxuICAgIGFic3RyYWN0IF92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlOiBUYWJsZVZpcnR1YWxTY3JvbGwgfCBudWxsO1xuXG4gICAgYWJzdHJhY3QgX3RhYmxlUm93c1Zpc2libGU6IFRhYmxlUm93PFQ+W107XG5cbiAgICBhYnN0cmFjdCBfdGFibGVSb3dzOiBUYWJsZVJvdzxUPltdO1xuXG4gICAgYWJzdHJhY3QgX3RhYmxlUm93c0luVmlld1BvcnRQbGFjZWhvbGRlcjogbnVtYmVyW107XG5cbiAgICBhYnN0cmFjdCBfZm9jdXNhYmxlR3JpZDogRm9jdXNhYmxlR3JpZERpcmVjdGl2ZTtcblxuICAgIGFic3RyYWN0IF9zZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25Nb2RlVmFsdWU7XG5cbiAgICBhYnN0cmFjdCBjb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyO1xuXG4gICAgLyoqIEdldCB0YWJsZSBzdGF0ZSAqL1xuICAgIGFic3RyYWN0IGdldFRhYmxlU3RhdGUoKTogVGFibGVTdGF0ZTtcblxuICAgIC8qKiBTZXQgdGFibGUgc3RhdGUgKi9cbiAgICBhYnN0cmFjdCBzZXRUYWJsZVN0YXRlKHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUpOiB2b2lkO1xuXG4gICAgLyoqIEdldCB0YWJsZSBjb2x1bW5zIGRlZmluaXRpb24gbGlzdCAqL1xuICAgIGFic3RyYWN0IGdldFRhYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdO1xuXG4gICAgLyoqIEdldCBhIGxpc3Qgb2YgdmlzaWJsZSB0YWJsZSBjb2x1bW5zLiAqL1xuICAgIGFic3RyYWN0IGdldFZpc2libGVUYWJsZUNvbHVtbnMoKTogVGFibGVDb2x1bW5bXTtcblxuICAgIC8qKiBTZXQgU29ydGluZyBydWxlcyAqL1xuICAgIGFic3RyYWN0IHNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZDtcblxuICAgIC8qKiBBZGQgU29ydGluZyBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFic3RyYWN0IGFkZFNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZDtcblxuICAgIC8qKiBTZXQgRmlsdGVyaW5nIHJ1bGVzICovXG4gICAgYWJzdHJhY3QgZmlsdGVyKGZpbHRlclJ1bGVzOiBDb2xsZWN0aW9uRmlsdGVyW10pOiB2b2lkO1xuXG4gICAgLyoqIEFkZCBGaWx0ZXIgcnVsZXMgdG8gdGhlIGV4aXN0aW5nIG9uZXMgKi9cbiAgICBhYnN0cmFjdCBhZGRGaWx0ZXIoZmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSk6IHZvaWQ7XG5cbiAgICAvKiogU2V0IGdyb3VwaW5nIHJ1bGVzICovXG4gICAgYWJzdHJhY3QgZ3JvdXAoZ3JvdXBSdWxlczogQ29sbGVjdGlvbkdyb3VwW10pOiB2b2lkO1xuXG4gICAgLyoqIEFkZCBHcm91cCBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFic3RyYWN0IGFkZEdyb3VwKGdyb3VwUnVsZXM6IENvbGxlY3Rpb25Hcm91cFtdKTogdm9pZDtcblxuICAgIC8qKiBTZXQgdGFibGUgY29sdW1ucyAqL1xuICAgIGFic3RyYWN0IHNldENvbHVtbnMoY29sdW1uczogc3RyaW5nW10pOiB2b2lkO1xuXG4gICAgLyoqIFRvZ2dsZSByb3cgY2hlY2tlZCBzdGF0ZS4gKi9cbiAgICBhYnN0cmFjdCB0b2dnbGVTZWxlY3RhYmxlUm93KHJvd0luZGV4OiBudW1iZXIpOiB2b2lkO1xuXG4gICAgLyoqIEZyZWV6ZSB0YWJsZSBjb2x1bW5zIHRvIGluY2x1ZGluZyAqL1xuICAgIGFic3RyYWN0IGZyZWV6ZVRvQ29sdW1uKGNvbHVtbktleTogc3RyaW5nLCBlbmQ/OiBib29sZWFuKTogdm9pZDtcblxuICAgIC8qKiBVbmZyZWV6ZSBjb2x1bW4gKi9cbiAgICBhYnN0cmFjdCB1bmZyZWV6ZShjb2x1bW5LZXk6IHN0cmluZywgZW5kPzogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAvKiogU2VhcmNoIGluIGFsbCB0YWJsZSBjb2x1bW5zICovXG4gICAgYWJzdHJhY3Qgc2VhcmNoKHNlYXJjaElucHV0OiBTZWFyY2hJbnB1dCk6IHZvaWQ7XG5cbiAgICAvKiogVG9vbGJhciBTb3J0IFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgYWJzdHJhY3Qgc2hvd1NvcnRTZXR0aW5nc0luVG9vbGJhcihzaG93U29ydFNldHRpbmdzOiBib29sZWFuKTogdm9pZDtcblxuICAgIC8qKiBUb29sYmFyIEZpbHRlciBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIGFic3RyYWN0IHNob3dGaWx0ZXJTZXR0aW5nc0luVG9vbGJhcihzaG93RmlsdGVyU2V0dGluZ3M6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgLyoqIFRvb2xiYXIgR3JvdXAgU2V0dGluZ3MgYnV0dG9uIHZpc2liaWxpdHkgKi9cbiAgICBhYnN0cmFjdCBzaG93R3JvdXBTZXR0aW5nc0luVG9vbGJhcihzaG93R3JvdXBTZXR0aW5nczogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAvKiogVG9vbGJhciBDb2x1bW5zIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgYWJzdHJhY3Qgc2hvd0NvbHVtblNldHRpbmdzSW5Ub29sYmFyKHNob3dDb2x1bW5TZXR0aW5nczogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAvKiogRGlzYWJsZSBmaWx0ZXJpbmcgYnkgaGVhZGVyIGNvbHVtbiBtZW51ICovXG4gICAgYWJzdHJhY3Qgc2V0SGVhZGVyQ29sdW1uRmlsdGVyaW5nRGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgLyoqIFNldCBjdXJyZW50IHBhZ2UgKi9cbiAgICBhYnN0cmFjdCBzZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZTogbnVtYmVyKTogdm9pZDtcblxuICAgIC8qKiBHZXRzIHRoZSBtYXggYWxsb3dlZCB3aWR0aCBmb3IgYWxsIGZyZWV6YWJsZSBjb2x1bW5zICovXG4gICAgYWJzdHJhY3QgZ2V0TWF4QWxsb3dlZEZyZWV6YWJsZUNvbHVtbnNXaWR0aCgpOiBudW1iZXI7XG5cbiAgICAvKiogR2V0IHRhYmxlIGRhdGEgc291cmNlICovXG4gICAgYWJzdHJhY3QgZ2V0RGF0YVNvdXJjZSgpOiBUYWJsZURhdGFTb3VyY2U8VD47XG5cbiAgICAvKiogTWFudWFsbHkgdHJpZ2dlcnMgY29sdW1ucyB3aWR0aCByZWNhbGN1bGF0aW9uICovXG4gICAgYWJzdHJhY3QgcmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk6IHZvaWQ7XG5cbiAgICAvKiogRmV0Y2ggZGF0YSBzb3VyY2UgZGF0YS4gKi9cbiAgICBhYnN0cmFjdCBmZXRjaCgpOiB2b2lkO1xuXG4gICAgLyoqIEFkZHMgZW1wdHkgcm93IGZvciBlZGl0aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJvd3MgYXJyYXkuICovXG4gICAgYWJzdHJhY3QgYWRkUm93KCk6IHZvaWQ7XG5cbiAgICAvKiogRW1pdHMgc2F2ZSBldmVudCBhbmQgcmVzZXRzIGVkaXRhYmxlIHJvd3MgYXJyYXkuICovXG4gICAgYWJzdHJhY3Qgc2F2ZVJvd3MoKTogdm9pZDtcblxuICAgIC8qKiBDYW5jZWxzIGVkaXRpbmcgYW5kIGRpc2NhcmRzIG5ld2x5IGFkZGVkIHJvd3MgKi9cbiAgICBhYnN0cmFjdCBjYW5jZWxFZGl0aW5nKCk6IHZvaWQ7XG5cbiAgICAvKiogRXhwYW5kIGFsbCB0aGUgcm93cyBvZiB0aGUgdGFibGUgKi9cbiAgICBhYnN0cmFjdCBleHBhbmRBbGwoKTogdm9pZDtcblxuICAgIC8qKiBDb2xsYXBzZSBhbGwgdGhlIHJvd3Mgb2YgdGhlIHRhYmxlICovXG4gICAgYWJzdHJhY3QgY29sbGFwc2VBbGwoKTogdm9pZDtcblxuICAgIC8qKiBTZXRzIHNlbGVjdGVkIHByZXNldC4gKi9cbiAgICBhYnN0cmFjdCBzZXRQcmVzZXQoZGF0YTogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQpOiB2b2lkO1xuXG4gICAgLyoqIFJldHVybnMgY3VycmVudCBwcmVzZXQuICovXG4gICAgYWJzdHJhY3QgZ2V0Q3VycmVudFByZXNldCgpOiBQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldDtcblxuICAgIGFic3RyYWN0IGdldFJvd3NJblZpZXdwb3J0KCk6IG51bWJlcltdO1xuXG4gICAgYWJzdHJhY3Qgc2V0Um93c0luVmlld3BvcnQoc3RhcnRJbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IHZvaWQ7XG5cbiAgICBhYnN0cmFjdCB0b2dnbGVFeHBhbmRhYmxlVGFibGVSb3cocm93OiBUYWJsZVJvdzxUPiwgZm9yY2VGZXRjaD86IGJvb2xlYW4pO1xuXG4gICAgYWJzdHJhY3Qgb25UYWJsZVJvd3NDaGFuZ2VkKCk6IHZvaWQ7XG5cbiAgICBhYnN0cmFjdCByZWZyZXNoRG5kTGlzdCgpOiB2b2lkO1xuXG4gICAgYWJzdHJhY3QgY2xlYXJUYWJsZVJvd3MoKTogdm9pZDtcblxuICAgIGFic3RyYWN0IF9vblNweUludGVyc2VjdChpbnRlcnNlY3RlZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAvKiogVG9vbGJhciBTb3J0IFNldHRpbmdzIGJ1dHRvbiBjbGljayBldmVudCAqL1xuICAgIHJlYWRvbmx5IG9wZW5UYWJsZVNvcnRTZXR0aW5nczogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIFRvb2xiYXIgRmlsdGVyIFNldHRpbmdzIGJ1dHRvbiBjbGljayBldmVudCAqL1xuICAgIHJlYWRvbmx5IG9wZW5UYWJsZUZpbHRlclNldHRpbmdzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogVG9vbGJhciBHcm91cCBTZXR0aW5ncyBidXR0b24gY2xpY2sgZXZlbnQgKi9cbiAgICByZWFkb25seSBvcGVuVGFibGVHcm91cFNldHRpbmdzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogVG9vbGJhciBDb2x1bW4gU2V0dGluZ3MgYnV0dG9uIGNsaWNrIGV2ZW50ICovXG4gICAgcmVhZG9ubHkgb3BlblRhYmxlQ29sdW1uU2V0dGluZ3M6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGVtcHR5IHJvdyBhZGRlZC4gKi9cbiAgICByZWFkb25seSBlbXB0eVJvd0FkZGVkOiBFdmVudEVtaXR0ZXI8dm9pZD47XG5cbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBzYXZlIGJ1dHRvbiBwcmVzc2VkLiAqL1xuICAgIHJlYWRvbmx5IHNhdmU6IEV2ZW50RW1pdHRlcjxTYXZlUm93c0V2ZW50PFQ+PjtcblxuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGNhbmNlbCBidXR0b24gcHJlc3NlZC4gKi9cbiAgICByZWFkb25seSBjYW5jZWw6IEV2ZW50RW1pdHRlcjx2b2lkPjtcblxuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRhYmxlIGlzIHNjcm9sbGVkIHdoaWxlIHVzaW5nIHBhZ2VTY3JvbGxpbmcuICovXG4gICAgcmVhZG9ubHkgdGFibGVTY3JvbGxlZDogRXZlbnRFbWl0dGVyPG51bWJlcj47XG59XG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvdGFibGUtaGVscGVycy90YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFjLFlBQVksRUFBWSxNQUFNLGVBQWUsQ0FBQztBQWlCbkUsTUFBTSxPQUFnQixLQUFLO0lBQTNCO1FBNktJLCtDQUErQztRQUN0QywwQkFBcUIsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU5RSxpREFBaUQ7UUFDeEMsNEJBQXVCLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFaEYsZ0RBQWdEO1FBQ3ZDLDJCQUFzQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9FLGlEQUFpRDtRQUN4Qyw0QkFBdUIsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQWFwRixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQgeyBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IFByZXNldE1hbmFnZWRDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZvY3VzYWJsZUdyaWREaXJlY3RpdmUsIE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi9kb21haW4nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkZpbHRlciB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb2xsZWN0aW9uLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkdyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbGxlY3Rpb24tZ3JvdXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbGxlY3Rpb25Tb3J0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbGxlY3Rpb24tc29ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVTdGF0ZSB9IGZyb20gJy4vaW50ZXJmYWNlcy90YWJsZS1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQsIFNhdmVSb3dzRXZlbnQsIFRhYmxlSW5pdGlhbFN0YXRlLCBUYWJsZVJvdywgVGFibGVWaXJ0dWFsU2Nyb2xsIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVTY3JvbGxhYmxlIH0gZnJvbSAnLi9zZXJ2aWNlcy90YWJsZS1zY3JvbGwtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZVZhbHVlIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUYWJsZTxUID0gYW55PiBpbXBsZW1lbnRzIFByZXNldE1hbmFnZWRDb21wb25lbnQ8UGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQ+IHtcbiAgICBhYnN0cmFjdCByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICBhYnN0cmFjdCByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gICAgYWJzdHJhY3QgX2xvYWRQcmV2aW91c1BhZ2VzOiBib29sZWFuO1xuXG4gICAgYWJzdHJhY3QgcGFnZVNjcm9sbGluZzogYm9vbGVhbjtcblxuICAgIGFic3RyYWN0IGxvYWRQYWdlc0JlZm9yZTogYm9vbGVhbjtcblxuICAgIGFic3RyYWN0IHBhZ2VTaXplOiBOdWxsYWJsZTxudW1iZXI+O1xuXG4gICAgYWJzdHJhY3QgZnJlZXplQ29sdW1uc1RvOiBzdHJpbmc7XG5cbiAgICBhYnN0cmFjdCBmcmVlemVFbmRDb2x1bW5zVG86IHN0cmluZztcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIGFic3RyYWN0IHByZXNldENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldD47XG5cbiAgICAvKiogU3VtIG9mIHdpZHRocyBvZiBmaXhlZCBjb2x1bW5zIChzZW1hbnRpYyBoaWdobGlnaHRpbmcsIHNlbGVjdGlvbikgKi9cbiAgICBhYnN0cmFjdCBnZXQgX2ZpeGVkQ29sdW1uc1BhZGRpbmcoKTogbnVtYmVyO1xuXG4gICAgLyoqIEZyZWV6YWJsZSBjb2x1bW4gbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaW5kZXhlcyAqL1xuICAgIGFic3RyYWN0IGdldCBfZnJlZXphYmxlQ29sdW1ucygpOiBSZWFkb25seU1hcDxzdHJpbmcsIG51bWJlcj47XG5cbiAgICAvKiogRnJlZXphYmxlIGNvbHVtbiBuYW1lcyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBpbmRleGVzICovXG4gICAgYWJzdHJhY3QgZ2V0IF9mcmVlemFibGVFbmRDb2x1bW5zKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgbnVtYmVyPjtcblxuICAgIC8qKiBXaWR0aCBvZiB0aGUgdGFibGUgZWxlbWVudCBpbiBweCAqL1xuICAgIGFic3RyYWN0IGdldCBfdGFibGVXaWR0aFB4KCk6IG51bWJlcjtcblxuICAgIGFic3RyYWN0IGdldCBsb2FkaW5nU3RhdGUoKTogYm9vbGVhbjtcblxuICAgIGFic3RyYWN0IGluaXRpYWxTdGF0ZTogVGFibGVJbml0aWFsU3RhdGUgfCBudWxsO1xuXG4gICAgLyoqIFRhYmxlIGNvbHVtbnMgZGVmaW5pdGlvbiBsaXN0ICovXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVDb2x1bW5zU3RyZWFtOiBPYnNlcnZhYmxlPFRhYmxlQ29sdW1uW10+O1xuXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yO1xuXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBhYnN0cmFjdCByZWFkb25seSB0YWJsZVNjcm9sbE1vY2tDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBhYnN0cmFjdCByZWFkb25seSB0YWJsZVNjcm9sbGFibGU6IFRhYmxlU2Nyb2xsYWJsZTtcblxuICAgIGFic3RyYWN0IF92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlOiBUYWJsZVZpcnR1YWxTY3JvbGwgfCBudWxsO1xuXG4gICAgYWJzdHJhY3QgX3RhYmxlUm93c1Zpc2libGU6IFRhYmxlUm93PFQ+W107XG5cbiAgICBhYnN0cmFjdCBfdGFibGVSb3dzOiBUYWJsZVJvdzxUPltdO1xuXG4gICAgYWJzdHJhY3QgX3RhYmxlUm93c0luVmlld1BvcnRQbGFjZWhvbGRlcjogbnVtYmVyW107XG5cbiAgICBhYnN0cmFjdCBfZm9jdXNhYmxlR3JpZDogRm9jdXNhYmxlR3JpZERpcmVjdGl2ZTtcblxuICAgIGFic3RyYWN0IF9zZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25Nb2RlVmFsdWU7XG5cbiAgICBhYnN0cmFjdCBjb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyO1xuXG4gICAgLyoqIEdldCB0YWJsZSBzdGF0ZSAqL1xuICAgIGFic3RyYWN0IGdldFRhYmxlU3RhdGUoKTogVGFibGVTdGF0ZTtcblxuICAgIC8qKiBTZXQgdGFibGUgc3RhdGUgKi9cbiAgICBhYnN0cmFjdCBzZXRUYWJsZVN0YXRlKHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUpOiB2b2lkO1xuXG4gICAgLyoqIEdldCB0YWJsZSBjb2x1bW5zIGRlZmluaXRpb24gbGlzdCAqL1xuICAgIGFic3RyYWN0IGdldFRhYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdO1xuXG4gICAgLyoqIEdldCBhIGxpc3Qgb2YgdmlzaWJsZSB0YWJsZSBjb2x1bW5zLiAqL1xuICAgIGFic3RyYWN0IGdldFZpc2libGVUYWJsZUNvbHVtbnMoKTogVGFibGVDb2x1bW5bXTtcblxuICAgIC8qKiBTZXQgU29ydGluZyBydWxlcyAqL1xuICAgIGFic3RyYWN0IHNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZDtcblxuICAgIC8qKiBBZGQgU29ydGluZyBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFic3RyYWN0IGFkZFNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZDtcblxuICAgIC8qKiBTZXQgRmlsdGVyaW5nIHJ1bGVzICovXG4gICAgYWJzdHJhY3QgZmlsdGVyKGZpbHRlclJ1bGVzOiBDb2xsZWN0aW9uRmlsdGVyW10pOiB2b2lkO1xuXG4gICAgLyoqIEFkZCBGaWx0ZXIgcnVsZXMgdG8gdGhlIGV4aXN0aW5nIG9uZXMgKi9cbiAgICBhYnN0cmFjdCBhZGRGaWx0ZXIoZmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSk6IHZvaWQ7XG5cbiAgICAvKiogU2V0IGdyb3VwaW5nIHJ1bGVzICovXG4gICAgYWJzdHJhY3QgZ3JvdXAoZ3JvdXBSdWxlczogQ29sbGVjdGlvbkdyb3VwW10pOiB2b2lkO1xuXG4gICAgLyoqIEFkZCBHcm91cCBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFic3RyYWN0IGFkZEdyb3VwKGdyb3VwUnVsZXM6IENvbGxlY3Rpb25Hcm91cFtdKTogdm9pZDtcblxuICAgIC8qKiBTZXQgdGFibGUgY29sdW1ucyAqL1xuICAgIGFic3RyYWN0IHNldENvbHVtbnMoY29sdW1uczogc3RyaW5nW10pOiB2b2lkO1xuXG4gICAgLyoqIFRvZ2dsZSByb3cgY2hlY2tlZCBzdGF0ZS4gKi9cbiAgICBhYnN0cmFjdCB0b2dnbGVTZWxlY3RhYmxlUm93KHJvd0luZGV4OiBudW1iZXIpOiB2b2lkO1xuXG4gICAgLyoqIEZyZWV6ZSB0YWJsZSBjb2x1bW5zIHRvIGluY2x1ZGluZyAqL1xuICAgIGFic3RyYWN0IGZyZWV6ZVRvQ29sdW1uKGNvbHVtbktleTogc3RyaW5nLCBlbmQ/OiBib29sZWFuKTogdm9pZDtcblxuICAgIC8qKiBVbmZyZWV6ZSBjb2x1bW4gKi9cbiAgICBhYnN0cmFjdCB1bmZyZWV6ZShjb2x1bW5LZXk6IHN0cmluZywgZW5kPzogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAvKiogU2VhcmNoIGluIGFsbCB0YWJsZSBjb2x1bW5zICovXG4gICAgYWJzdHJhY3Qgc2VhcmNoKHNlYXJjaElucHV0OiBTZWFyY2hJbnB1dCk6IHZvaWQ7XG5cbiAgICAvKiogVG9vbGJhciBTb3J0IFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgYWJzdHJhY3Qgc2hvd1NvcnRTZXR0aW5nc0luVG9vbGJhcihzaG93U29ydFNldHRpbmdzOiBib29sZWFuKTogdm9pZDtcblxuICAgIC8qKiBUb29sYmFyIEZpbHRlciBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIGFic3RyYWN0IHNob3dGaWx0ZXJTZXR0aW5nc0luVG9vbGJhcihzaG93RmlsdGVyU2V0dGluZ3M6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgLyoqIFRvb2xiYXIgR3JvdXAgU2V0dGluZ3MgYnV0dG9uIHZpc2liaWxpdHkgKi9cbiAgICBhYnN0cmFjdCBzaG93R3JvdXBTZXR0aW5nc0luVG9vbGJhcihzaG93R3JvdXBTZXR0aW5nczogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAvKiogVG9vbGJhciBDb2x1bW5zIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgYWJzdHJhY3Qgc2hvd0NvbHVtblNldHRpbmdzSW5Ub29sYmFyKHNob3dDb2x1bW5TZXR0aW5nczogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICAvKiogRGlzYWJsZSBmaWx0ZXJpbmcgYnkgaGVhZGVyIGNvbHVtbiBtZW51ICovXG4gICAgYWJzdHJhY3Qgc2V0SGVhZGVyQ29sdW1uRmlsdGVyaW5nRGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgLyoqIFNldCBjdXJyZW50IHBhZ2UgKi9cbiAgICBhYnN0cmFjdCBzZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZTogbnVtYmVyKTogdm9pZDtcblxuICAgIC8qKiBHZXRzIHRoZSBtYXggYWxsb3dlZCB3aWR0aCBmb3IgYWxsIGZyZWV6YWJsZSBjb2x1bW5zICovXG4gICAgYWJzdHJhY3QgZ2V0TWF4QWxsb3dlZEZyZWV6YWJsZUNvbHVtbnNXaWR0aCgpOiBudW1iZXI7XG5cbiAgICAvKiogR2V0IHRhYmxlIGRhdGEgc291cmNlICovXG4gICAgYWJzdHJhY3QgZ2V0RGF0YVNvdXJjZSgpOiBUYWJsZURhdGFTb3VyY2U8VD47XG5cbiAgICAvKiogTWFudWFsbHkgdHJpZ2dlcnMgY29sdW1ucyB3aWR0aCByZWNhbGN1bGF0aW9uICovXG4gICAgYWJzdHJhY3QgcmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk6IHZvaWQ7XG5cbiAgICAvKiogRmV0Y2ggZGF0YSBzb3VyY2UgZGF0YS4gKi9cbiAgICBhYnN0cmFjdCBmZXRjaCgpOiB2b2lkO1xuXG4gICAgLyoqIEFkZHMgZW1wdHkgcm93IGZvciBlZGl0aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJvd3MgYXJyYXkuICovXG4gICAgYWJzdHJhY3QgYWRkUm93KCk6IHZvaWQ7XG5cbiAgICAvKiogRW1pdHMgc2F2ZSBldmVudCBhbmQgcmVzZXRzIGVkaXRhYmxlIHJvd3MgYXJyYXkuICovXG4gICAgYWJzdHJhY3Qgc2F2ZVJvd3MoKTogdm9pZDtcblxuICAgIC8qKiBDYW5jZWxzIGVkaXRpbmcgYW5kIGRpc2NhcmRzIG5ld2x5IGFkZGVkIHJvd3MgKi9cbiAgICBhYnN0cmFjdCBjYW5jZWxFZGl0aW5nKCk6IHZvaWQ7XG5cbiAgICAvKiogRXhwYW5kIGFsbCB0aGUgcm93cyBvZiB0aGUgdGFibGUgKi9cbiAgICBhYnN0cmFjdCBleHBhbmRBbGwoKTogdm9pZDtcblxuICAgIC8qKiBDb2xsYXBzZSBhbGwgdGhlIHJvd3Mgb2YgdGhlIHRhYmxlICovXG4gICAgYWJzdHJhY3QgY29sbGFwc2VBbGwoKTogdm9pZDtcblxuICAgIC8qKiBTZXRzIHNlbGVjdGVkIHByZXNldC4gKi9cbiAgICBhYnN0cmFjdCBzZXRQcmVzZXQoZGF0YTogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQpOiB2b2lkO1xuXG4gICAgLyoqIFJldHVybnMgY3VycmVudCBwcmVzZXQuICovXG4gICAgYWJzdHJhY3QgZ2V0Q3VycmVudFByZXNldCgpOiBQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldDtcblxuICAgIGFic3RyYWN0IGdldFJvd3NJblZpZXdwb3J0KCk6IG51bWJlcltdO1xuXG4gICAgYWJzdHJhY3Qgc2V0Um93c0luVmlld3BvcnQoc3RhcnRJbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IHZvaWQ7XG5cbiAgICBhYnN0cmFjdCB0b2dnbGVFeHBhbmRhYmxlVGFibGVSb3cocm93OiBUYWJsZVJvdzxUPiwgZm9yY2VGZXRjaD86IGJvb2xlYW4pO1xuXG4gICAgYWJzdHJhY3Qgb25UYWJsZVJvd3NDaGFuZ2VkKCk6IHZvaWQ7XG5cbiAgICBhYnN0cmFjdCByZWZyZXNoRG5kTGlzdCgpOiB2b2lkO1xuXG4gICAgYWJzdHJhY3QgY2xlYXJUYWJsZVJvd3MoKTogdm9pZDtcblxuICAgIGFic3RyYWN0IF9vblNweUludGVyc2VjdChpbnRlcnNlY3RlZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgICBhYnN0cmFjdCBtaW5pbXVtQ29sdW1uV2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBUb29sYmFyIFNvcnQgU2V0dGluZ3MgYnV0dG9uIGNsaWNrIGV2ZW50ICovXG4gICAgcmVhZG9ubHkgb3BlblRhYmxlU29ydFNldHRpbmdzOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogVG9vbGJhciBGaWx0ZXIgU2V0dGluZ3MgYnV0dG9uIGNsaWNrIGV2ZW50ICovXG4gICAgcmVhZG9ubHkgb3BlblRhYmxlRmlsdGVyU2V0dGluZ3M6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBUb29sYmFyIEdyb3VwIFNldHRpbmdzIGJ1dHRvbiBjbGljayBldmVudCAqL1xuICAgIHJlYWRvbmx5IG9wZW5UYWJsZUdyb3VwU2V0dGluZ3M6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBUb29sYmFyIENvbHVtbiBTZXR0aW5ncyBidXR0b24gY2xpY2sgZXZlbnQgKi9cbiAgICByZWFkb25seSBvcGVuVGFibGVDb2x1bW5TZXR0aW5nczogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gZW1wdHkgcm93IGFkZGVkLiAqL1xuICAgIHJlYWRvbmx5IGVtcHR5Um93QWRkZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPjtcblxuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHNhdmUgYnV0dG9uIHByZXNzZWQuICovXG4gICAgcmVhZG9ubHkgc2F2ZTogRXZlbnRFbWl0dGVyPFNhdmVSb3dzRXZlbnQ8VD4+O1xuXG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gY2FuY2VsIGJ1dHRvbiBwcmVzc2VkLiAqL1xuICAgIHJlYWRvbmx5IGNhbmNlbDogRXZlbnRFbWl0dGVyPHZvaWQ+O1xuXG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGFibGUgaXMgc2Nyb2xsZWQgd2hpbGUgdXNpbmcgcGFnZVNjcm9sbGluZy4gKi9cbiAgICByZWFkb25seSB0YWJsZVNjcm9sbGVkOiBFdmVudEVtaXR0ZXI8bnVtYmVyPjtcbn1cbiJdfQ==