@ecodev/natural 60.0.2 → 60.1.1

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 (87) hide show
  1. package/esm2022/lib/classes/abstract-controller.mjs +3 -3
  2. package/esm2022/lib/classes/abstract-detail.mjs +8 -15
  3. package/esm2022/lib/classes/abstract-editable-list.mjs +3 -3
  4. package/esm2022/lib/classes/abstract-list.mjs +7 -4
  5. package/esm2022/lib/classes/abstract-navigable-list.mjs +3 -3
  6. package/esm2022/lib/directives/http-prefix.directive.mjs +3 -3
  7. package/esm2022/lib/modules/alert/alert.service.mjs +3 -3
  8. package/esm2022/lib/modules/alert/confirm.component.mjs +3 -3
  9. package/esm2022/lib/modules/avatar/component/avatar.component.mjs +3 -3
  10. package/esm2022/lib/modules/avatar/service/avatar.service.mjs +3 -3
  11. package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +4 -4
  12. package/esm2022/lib/modules/common/directives/background-density.directive.mjs +65 -0
  13. package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +6 -4
  14. package/esm2022/lib/modules/common/directives/src-density.directive.mjs +28 -18
  15. package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +3 -3
  16. package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +3 -3
  17. package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +3 -3
  18. package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +3 -3
  19. package/esm2022/lib/modules/common/public-api.mjs +2 -1
  20. package/esm2022/lib/modules/common/services/memory-storage.mjs +3 -3
  21. package/esm2022/lib/modules/common/services/seo.service.mjs +5 -5
  22. package/esm2022/lib/modules/detail-header/detail-header.component.mjs +5 -5
  23. package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +3 -3
  24. package/esm2022/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +3 -3
  25. package/esm2022/lib/modules/dropdown-components/type-boolean/type-boolean.component.mjs +3 -3
  26. package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +3 -3
  27. package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +3 -3
  28. package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +3 -3
  29. package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +3 -3
  30. package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +3 -3
  31. package/esm2022/lib/modules/dropdown-components/type-options/type-options.component.mjs +3 -3
  32. package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +3 -3
  33. package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +5 -5
  34. package/esm2022/lib/modules/file/abstract-file.mjs +3 -3
  35. package/esm2022/lib/modules/file/component/file.component.mjs +17 -17
  36. package/esm2022/lib/modules/file/file-drop.directive.mjs +3 -3
  37. package/esm2022/lib/modules/file/file-select.directive.mjs +3 -3
  38. package/esm2022/lib/modules/file/file.service.mjs +3 -3
  39. package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +3 -3
  40. package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +3 -3
  41. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +5 -5
  42. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +3 -3
  43. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +3 -3
  44. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +3 -3
  45. package/esm2022/lib/modules/icon/icon.directive.mjs +3 -3
  46. package/esm2022/lib/modules/logger/error-handler.mjs +3 -3
  47. package/esm2022/lib/modules/matomo/matomo.service.mjs +3 -3
  48. package/esm2022/lib/modules/panels/abstract-panel.mjs +3 -3
  49. package/esm2022/lib/modules/panels/panels.component.mjs +3 -3
  50. package/esm2022/lib/modules/panels/panels.service.mjs +3 -3
  51. package/esm2022/lib/modules/relations/relations.component.mjs +7 -4
  52. package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +3 -3
  53. package/esm2022/lib/modules/search/dropdown-container/dropdown.service.mjs +3 -3
  54. package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +5 -5
  55. package/esm2022/lib/modules/search/group/group.component.mjs +5 -5
  56. package/esm2022/lib/modules/search/input/input.component.mjs +3 -3
  57. package/esm2022/lib/modules/search/search/search.component.mjs +5 -5
  58. package/esm2022/lib/modules/select/abstract-select.component.mjs +3 -3
  59. package/esm2022/lib/modules/select/select/select.component.mjs +9 -9
  60. package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +5 -5
  61. package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +17 -8
  62. package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +3 -3
  63. package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +3 -3
  64. package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +3 -3
  65. package/esm2022/lib/modules/sidenav/sidenav-stack.service.mjs +3 -3
  66. package/esm2022/lib/modules/sidenav/sidenav.service.mjs +3 -3
  67. package/esm2022/lib/modules/stamp/stamp.component.mjs +3 -3
  68. package/esm2022/lib/modules/table-button/table-button.component.mjs +3 -3
  69. package/esm2022/lib/services/debounce.service.mjs +3 -3
  70. package/esm2022/lib/services/enum.service.mjs +3 -3
  71. package/esm2022/lib/services/link-mutation.service.mjs +3 -3
  72. package/esm2022/lib/services/persistence.service.mjs +3 -3
  73. package/esm2022/lib/services/swiss-parsing-date-adapter.service.mjs +3 -3
  74. package/fesm2022/ecodev-natural.mjs +347 -266
  75. package/fesm2022/ecodev-natural.mjs.map +1 -1
  76. package/lib/classes/abstract-detail.d.ts +2 -10
  77. package/lib/classes/abstract-list.d.ts +3 -0
  78. package/lib/modules/common/directives/background-density.directive.d.ts +39 -0
  79. package/lib/modules/common/directives/linkable-tab.directive.d.ts +2 -0
  80. package/lib/modules/common/directives/src-density.directive.d.ts +2 -1
  81. package/lib/modules/common/public-api.d.ts +1 -0
  82. package/lib/modules/detail-header/detail-header.component.d.ts +2 -2
  83. package/lib/modules/file/component/file.component.d.ts +3 -5
  84. package/lib/modules/relations/relations.component.d.ts +3 -0
  85. package/lib/modules/select/select/select.component.d.ts +4 -4
  86. package/lib/modules/select/select-hierarchic/select-hierarchic.component.d.ts +13 -4
  87. package/package.json +1 -1
@@ -21,10 +21,10 @@ export class NaturalAbstractController {
21
21
  this.ngUnsubscribe.next(); // unsubscribe everybody
22
22
  this.ngUnsubscribe.complete(); // complete the stream, because we will never emit again
23
23
  }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAbstractController, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
25
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: NaturalAbstractController, isStandalone: true, ngImport: i0 }); }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractController, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
25
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalAbstractController, isStandalone: true, ngImport: i0 }); }
26
26
  }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAbstractController, decorators: [{
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractController, decorators: [{
28
28
  type: Directive,
29
29
  args: [{ standalone: true }]
30
30
  }] });
@@ -1,4 +1,4 @@
1
- import { Directive, inject } from '@angular/core';
1
+ import { DestroyRef, Directive, inject } from '@angular/core';
2
2
  import { UntypedFormGroup } from '@angular/forms';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
4
  import { kebabCase } from 'lodash-es';
@@ -8,6 +8,7 @@ import { EMPTY, endWith, finalize, last, Observable, switchMap, tap } from 'rxjs
8
8
  import { ifValid, validateAllFormControls } from './validators';
9
9
  import { CumulativeChanges } from './cumulative-changes';
10
10
  import { MAT_DIALOG_DATA } from '@angular/material/dialog';
11
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
12
  import * as i0 from "@angular/core";
12
13
  function isNaturalDialogTriggerProvidedData(dialogData) {
13
14
  return (!!dialogData &&
@@ -43,19 +44,11 @@ export class NaturalAbstractDetail extends NaturalAbstractPanel {
43
44
  * semantic of data on other tab, like relations that list other objects)
44
45
  */
45
46
  this.showFabButton = true;
46
- /**
47
- * Injected service
48
- */
49
47
  this.alertService = inject(NaturalAlertService);
50
- /**
51
- * Injected service
52
- */
53
48
  this.router = inject(Router);
54
- /**
55
- * Injected service
56
- */
57
49
  this.route = inject(ActivatedRoute);
58
50
  this._dialogData = inject(MAT_DIALOG_DATA, { optional: true });
51
+ this.destroyRef = inject(DestroyRef);
59
52
  /**
60
53
  * Once set, this must not change anymore, especially not right after the creation mutation,
61
54
  * so the form does not switch from creation mode to update mode without an actual reload of
@@ -99,7 +92,7 @@ export class NaturalAbstractDetail extends NaturalAbstractPanel {
99
92
  this.initForm();
100
93
  }
101
94
  }));
102
- }))
95
+ }), takeUntilDestroyed(this.destroyRef))
103
96
  .subscribe();
104
97
  }
105
98
  /**
@@ -223,11 +216,11 @@ export class NaturalAbstractDetail extends NaturalAbstractPanel {
223
216
  this.form = this.service.getFormGroup(this.data.model);
224
217
  this.changes.initialize(this.form.getRawValue());
225
218
  }
226
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAbstractDetail, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
227
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: NaturalAbstractDetail, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractDetail, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
220
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalAbstractDetail, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
228
221
  }
229
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAbstractDetail, decorators: [{
222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractDetail, decorators: [{
230
223
  type: Directive,
231
224
  args: [{ standalone: true }]
232
225
  }], ctorParameters: () => [{ type: undefined }, { type: undefined }] });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZGV0YWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2NsYXNzZXMvYWJzdHJhY3QtZGV0YWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUd0RSxPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFHOUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOztBQVN6RCxTQUFTLGtDQUFrQyxDQUN2QyxVQUFtQjtJQUVuQixPQUFPLENBQ0gsQ0FBQyxDQUFDLFVBQVU7UUFDWixPQUFPLFVBQVUsS0FBSyxRQUFRO1FBQzlCLGdCQUFnQixJQUFJLFVBQVU7UUFDOUIsVUFBVSxDQUFDLGNBQWMsWUFBWSxjQUFjLENBQ3RELENBQUM7QUFDTixDQUFDO0FBRUQsV0FBVztBQUVYLE1BQU0sT0FBTyxxQkFlVCxTQUFRLG9CQUFvQjtJQXFENUIsWUFDdUIs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QkFEakMsU0FBUzttQkFBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgaW5qZWN0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVbnR5cGVkRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2tlYmFiQ2FzZX0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7TmF0dXJhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vbW9kdWxlcy9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0UGFuZWx9IGZyb20gJy4uL21vZHVsZXMvcGFuZWxzL2Fic3RyYWN0LXBhbmVsJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlLCBXaXRoSWR9IGZyb20gJy4uL3NlcnZpY2VzL2Fic3RyYWN0LW1vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHtFeHRyYWN0UmVzb2x2ZSwgRXh0cmFjdFRjcmVhdGUsIEV4dHJhY3RUb25lLCBFeHRyYWN0VHVwZGF0ZSwgTGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtFTVBUWSwgZW5kV2l0aCwgZmluYWxpemUsIGxhc3QsIE9ic2VydmFibGUsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7aWZWYWxpZCwgdmFsaWRhdGVBbGxGb3JtQ29udHJvbHN9IGZyb20gJy4vdmFsaWRhdG9ycyc7XG5pbXBvcnQge1BhZ2luYXRlZERhdGF9IGZyb20gJy4vZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7Q3VtdWxhdGl2ZUNoYW5nZXN9IGZyb20gJy4vY3VtdWxhdGl2ZS1jaGFuZ2VzJztcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtOYXR1cmFsRGlhbG9nVHJpZ2dlclByb3ZpZGVkRGF0YX0gZnJvbSAnLi4vbW9kdWxlcy9kaWFsb2ctdHJpZ2dlci9kaWFsb2ctdHJpZ2dlci5jb21wb25lbnQnO1xuXG4vKipcbiAqIGBEYXRhYCBjb250YWlucyBpbiBgbW9kZWxgIGVpdGhlciB0aGUgbW9kZWwgZmV0Y2hlZCBmcm9tIERCIG9yIGRlZmF1bHQgdmFsdWVzICh3aXRob3V0IElEKS4gQW5kIGJlc2lkZXMgYG1vZGVsYCxcbiAqIGFueSBvdGhlciBleHRyYSBrZXlzIGRlZmluZWQgYnkgRXh0cmEuXG4gKi9cbnR5cGUgRGF0YTxUU2VydmljZSwgRXh0cmE+ID0ge21vZGVsOiB7aWQ/OiBzdHJpbmd9ICYgRXh0cmFjdFJlc29sdmU8VFNlcnZpY2U+fSAmIEV4dHJhO1xuXG5mdW5jdGlvbiBpc05hdHVyYWxEaWFsb2dUcmlnZ2VyUHJvdmlkZWREYXRhKFxuICAgIGRpYWxvZ0RhdGE6IHVua25vd24sXG4pOiBkaWFsb2dEYXRhIGlzIE5hdHVyYWxEaWFsb2dUcmlnZ2VyUHJvdmlkZWREYXRhPG5ldmVyPiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgISFkaWFsb2dEYXRhICYmXG4gICAgICAgIHR5cGVvZiBkaWFsb2dEYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAnYWN0aXZhdGVkUm91dGUnIGluIGRpYWxvZ0RhdGEgJiZcbiAgICAgICAgZGlhbG9nRGF0YS5hY3RpdmF0ZWRSb3V0ZSBpbnN0YW5jZW9mIEFjdGl2YXRlZFJvdXRlXG4gICAgKTtcbn1cblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoe3N0YW5kYWxvbmU6IHRydWV9KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdERldGFpbDxcbiAgICAgICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgICAgICB7aWQ6IHN0cmluZ30sXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBQYWdpbmF0ZWREYXRhPExpdGVyYWw+LFxuICAgICAgICAgICAgUXVlcnlWYXJpYWJsZXMsXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICB1bmtub3duLFxuICAgICAgICAgICAgYW55XG4gICAgICAgID4sXG4gICAgICAgIEV4dHJhUmVzb2x2ZSBleHRlbmRzIExpdGVyYWwgPSBSZWNvcmQ8bmV2ZXIsIG5ldmVyPixcbiAgICA+XG4gICAgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RQYW5lbFxuICAgIGltcGxlbWVudHMgT25Jbml0XG57XG4gICAgLyoqXG4gICAgICogRGF0YSByZXRyaWV2ZWQgYnkgdGhlIHNlcnZlciB2aWEgcm91dGUgcmVzb2x2ZXJzLlxuICAgICAqXG4gICAgICogVGhlIGtleSBgbW9kZWxgIGlzIHNwZWNpYWwuIEl0IGlzIHJlYWRvbmx5IGFuZCByZXByZXNlbnRzIHRoZSBtb2RlbCBiZWluZyB1cGRhdGVkXG4gICAgICogYXMgaXQgZXhpc3RzIG9uIHNlcnZlci4gVGhlIHZhbHVlIGlzIGtlcHQgdXAgdG8gZGF0ZSB3aGVuIEFwb2xsbyBtdXRhdGVzIGl0IG9uIHNlcnZlci5cbiAgICAgKlxuICAgICAqIFRoZSBvbmx5IHRpbWUgd2hlbiBgbW9kZWxgIGlzIG5vdCByZWFkb25seSBpcyBkdXJpbmcgY3JlYXRpb24uIE9ubHkgdGhlbiBjYW4gd2UgbW9kaWZ5IHRoZSBtb2RlbCB2YWx1ZXMgZGlyZWN0bHkuXG4gICAgICpcbiAgICAgKiBPdGhlciBrZXlzLCBpZiBwcmVzZW50LCBhcmUgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgZnJvbSByb3V0ZSByZXNvbHZlcnMgYXMtaXMuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGRhdGE6IERhdGE8VFNlcnZpY2UsIEV4dHJhUmVzb2x2ZT4gPSB7XG4gICAgICAgIG1vZGVsOiB0aGlzLnNlcnZpY2UuZ2V0RGVmYXVsdEZvclNlcnZlcigpLFxuICAgIH0gYXMgRGF0YTxUU2VydmljZSwgRXh0cmFSZXNvbHZlPjtcblxuICAgIC8qKlxuICAgICAqIEZvcm0gdGhhdCBtYW5hZ2VzIHRoZSBkYXRhIGZyb20gdGhlIGNvbnRyb2xsZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybTogVW50eXBlZEZvcm1Hcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KTtcblxuICAgIC8qKlxuICAgICAqIFNob3cgLyBoaWRlcyB0aGUgYm90dG9tIGZhYiBidXR0b24gKG1vc3RseSB0byBoaWRlIGl0IHdoZW4gd2UgYXJlIG9uIG90aGVyIHRhYnMgd2hlcmUgc2VtYW50aWMgb2YgYnV0dG9uIGNhbiBjb25mbGljdCB3aXRoIC4uLlxuICAgICAqIHNlbWFudGljIG9mIGRhdGEgb24gb3RoZXIgdGFiLCBsaWtlIHJlbGF0aW9ucyB0aGF0IGxpc3Qgb3RoZXIgb2JqZWN0cylcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd0ZhYkJ1dHRvbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJbmplY3RlZCBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0U2VydmljZSA9IGluamVjdChOYXR1cmFsQWxlcnRTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqIEluamVjdGVkIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgICAvKipcbiAgICAgKiBJbmplY3RlZCBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcblxuICAgIHByaXZhdGUgX2RpYWxvZ0RhdGE6IHVua25vd24gPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBLCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIC8qKlxuICAgICAqIE9uY2Ugc2V0LCB0aGlzIG11c3Qgbm90IGNoYW5nZSBhbnltb3JlLCBlc3BlY2lhbGx5IG5vdCByaWdodCBhZnRlciB0aGUgY3JlYXRpb24gbXV0YXRpb24sXG4gICAgICogc28gdGhlIGZvcm0gZG9lcyBub3Qgc3dpdGNoIGZyb20gY3JlYXRpb24gbW9kZSB0byB1cGRhdGUgbW9kZSB3aXRob3V0IGFuIGFjdHVhbCByZWxvYWQgb2ZcbiAgICAgKiBtb2RlbCBmcm9tIERCIChieSBuYXZpZ2F0aW5nIHRvIHVwZGF0ZSBwYWdlKS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc1VwZGF0ZVBhZ2UgPSBmYWxzZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZXMgPSBuZXcgQ3VtdWxhdGl2ZUNoYW5nZXM8dHlwZW9mIHRoaXMuZm9ybS5nZXRSYXdWYWx1ZT4oKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGtleTogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogVFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogWW91IHByb2JhYmx5IHNob3VsZCBub3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QuIEluc3RlYWQsIGNvbnNpZGVyIG92ZXJyaWRpbmcgYGluaXRGb3JtKClgLlxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm91dGUgPSBpc05hdHVyYWxEaWFsb2dUcmlnZ2VyUHJvdmlkZWREYXRhKHRoaXMuX2RpYWxvZ0RhdGEpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9kaWFsb2dEYXRhLmFjdGl2YXRlZFJvdXRlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnJvdXRlO1xuICAgICAgICAgICAgdGhpcy4jc3Vic2NyaWJlVG9Nb2RlbEZyb21SZXNvbHZlZERhdGEocm91dGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZVRhYihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0ZhYkJ1dHRvbiA9IGluZGV4ID09PSAwO1xuICAgIH1cblxuICAgICNzdWJzY3JpYmVUb01vZGVsRnJvbVJlc29sdmVkRGF0YShyb3V0ZTogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcbiAgICAgICAgbGV0IHByZXZpb3VzSWQgPSAtMTtcbiAgICAgICAgcm91dGUuZGF0YVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShkYXRhLm1vZGVsIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVzb2x2ZWQgZGF0YSBtdXN0IGluY2x1ZGUgdGhlIGtleSBgbW9kZWxgLCBhbmQgaXQgbXVzdCBiZSBhbiBvYnNlcnZhYmxlICh1c3VhbGx5IG9uZSBmcm9tIEFwb2xsbykuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gbW9kZWwgdG8ga25vdyB3aGVuIEFwb2xsbyBjYWNoZSBpcyBjaGFuZ2VkLCBzbyB3ZSBjYW4gcmVmbGVjdCBpdCBpbnRvIGBkYXRhLm1vZGVsYFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5tb2RlbC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFwKChtb2RlbDogRXh0cmFjdFJlc29sdmU8VFNlcnZpY2U+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogbW9kZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBEYXRhPFRTZXJ2aWNlLCBFeHRyYVJlc29sdmU+O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzSWQgIT09IG1vZGVsLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzSWQgPSBtb2RlbC5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciBgZGF0YS5tb2RlbGAgd2FzIGZldGNoZWQgZnJvbSBEQiwgc28gd2UgYXJlIG9uIGFuIHVwZGF0ZSBwYWdlLCBvciBpZiBpdCBpcyBhIG5ldyBvYmplY3RcbiAgICAgKiB3aXRoIChvbmx5KSBkZWZhdWx0IHZhbHVlcywgc28gd2UgYXJlIG9uIGEgY3JlYXRpb24gcGFnZS5cbiAgICAgKlxuICAgICAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBjaGVja2luZyBgZGF0YS5tb2RlbC5pZGAgZGlyZWN0bHksIGluIG9yZGVyIHRvIHR5cGUgZ3VhcmQgYW5kIGdldCBwcm9wZXIgdHlwaW5nXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzVXBkYXRlUGFnZSgpOiB0aGlzIGlzIHtkYXRhOiB7bW9kZWw6IEV4dHJhY3RUb25lPFRTZXJ2aWNlPn19IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVXBkYXRlUGFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhlIG9iamVjdCBvbiB0aGUgc2VydmVyIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSBmb3JtIGZpZWxkcyB0aGF0IHdlcmUgbW9kaWZpZWQgc2luY2VcbiAgICAgKiB0aGUgaW5pdGlhbGl6YXRpb24sIG9yIHNpbmNlIHRoZSBwcmV2aW91cyBzdWNjZXNzZnVsIHVwZGF0ZS5cbiAgICAgKlxuICAgICAqIEZvcm0gZmllbGRzIHRoYXQgYXJlIG5ldmVyIG1vZGlmaWVkIGFyZSAqKm5vdCoqIHNlbnQgdG8gdGhlIHNlcnZlciwgdW5sZXNzIGlmIHlvdSBzcGVjaWZ5IGBzdWJtaXRBbGxGaWVsZHNgLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUobm93ID0gZmFsc2UsIHN1Ym1pdEFsbEZpZWxkcyA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0ZVBhZ2UoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsaWRhdGVBbGxGb3JtQ29udHJvbHModGhpcy5mb3JtKTtcblxuICAgICAgICBpZlZhbGlkKHRoaXMuZm9ybSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHN1Ym1pdEFsbEZpZWxkcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5pbml0aWFsaXplKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdG9TdWJtaXQgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuZGF0YS5tb2RlbC5pZCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNoYW5nZXMuZGlmZmVyZW5jZXMobmV3VmFsdWVzKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IG5vdyA/IHRoaXMuc2VydmljZS51cGRhdGVOb3codG9TdWJtaXQpIDogdGhpcy5zZXJ2aWNlLnVwZGF0ZSh0b1N1Ym1pdCk7XG4gICAgICAgICAgICB1cGRhdGUuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZXMuY29tbWl0KG5ld1ZhbHVlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbygkbG9jYWxpemVgTWlzIMOgIGpvdXJgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RVcGRhdGUobW9kZWwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGUocmVkaXJlY3QgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHZhbGlkYXRlQWxsRm9ybUNvbnRyb2xzKHRoaXMuZm9ybSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICB0aGlzLmZvcm0uZGlzYWJsZSgpO1xuXG4gICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLmNyZWF0ZShuZXdWYWx1ZXMpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobW9kZWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKCRsb2NhbGl6ZWBDcsOpw6lgKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0Q3JlYXRlKG1vZGVsKS5waXBlKGVuZFdpdGgobW9kZWwpLCBsYXN0KCkpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgobW9kZWw6IFdpdGhJZDxvYmplY3Q+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZFVybCA9IHRoaXMucm91dGVyLnVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VXJsOiBzdHJpbmcgPSB0aGlzLnBhbmVsRGF0YT8uY29uZmlnLnBhcmFtcy5uZXh0Um91dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VXJsID0gb2xkVXJsLnJlcGxhY2UoJy9uZXcnLCAnLycgKyBtb2RlbC5pZCkgKyAobmV4dFVybCA/ICcvJyArIG5leHRVcmwgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobmV3VXJsKTsgLy8gcmVwbGFjZSAvbmV3IGJ5IC8xMjNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nLCBtb2RlbC5pZF0sIHtyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5mb3JtLmVuYWJsZSgpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBgY29uZmlybWVyYCBjYW4gYmUgdXNlZCB0byBvcGVuIGEgY3VzdG9tIGRpYWxvZywgb3IgYW55dGhpbmcgZWxzZSwgdG8gY29uZmlybSB0aGUgZGVsZXRpb24sIGluc3RlYWQgb2YgdGhlIHN0YW5kYXJkIGRpYWxvZ1xuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGUocmVkaXJlY3Rpb25Sb3V0ZT86IHVua25vd25bXSwgY29uZmlybWVyPzogT2JzZXJ2YWJsZTxib29sZWFuIHwgdW5kZWZpbmVkPik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZGlzYWJsZSgpO1xuXG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbmZpcm1lciA/P1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgICAgICAgICAkbG9jYWxpemVgU3VwcHJlc3Npb25gLFxuICAgICAgICAgICAgICAgICRsb2NhbGl6ZWBWb3VsZXotdm91cyBzdXBwcmltZXIgZMOpZmluaXRpdmVtZW50IGNldCDDqWzDqW1lbnQgP2AsXG4gICAgICAgICAgICAgICAgJGxvY2FsaXplYFN1cHByaW1lciBkw6lmaW5pdGl2ZW1lbnRgLFxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoY29uZmlybWVkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maXJtZWQgfHwgIXRoaXMuaXNVcGRhdGVQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlRGVsZXRlKHRoaXMuZGF0YS5tb2RlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5kZWxldGUoW3RoaXMuZGF0YS5tb2RlbF0pLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oJGxvY2FsaXplYFN1cHByaW3DqWApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVsU2VydmljZT8uZ29Ub1BlbnVsdGltYXRlUGFuZWwoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFJvdXRlID0gWycuLi8uLi8nICsga2ViYWJDYXNlKHRoaXMua2V5KV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShyZWRpcmVjdGlvblJvdXRlID8gcmVkaXJlY3Rpb25Sb3V0ZSA6IGRlZmF1bHRSb3V0ZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5mb3JtLmVuYWJsZSgpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHJvdGVjdGVkIHBvc3RVcGRhdGUobW9kZWw6IEV4dHJhY3RUdXBkYXRlPFRTZXJ2aWNlPik6IHZvaWQge1xuICAgICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgd2lsbCBiZSBzdWJzY3JpYmVkIHRvIGltbWVkaWF0ZWx5IGFuZCB0aGVcbiAgICAgKiByZWRpcmVjdCBuYXZpZ2F0aW9uIHdpbGwgb25seSBoYXBwZW4gYWZ0ZXIgdGhlIG9ic2VydmFibGUgY29tcGxldGVzLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgcG9zdENyZWF0ZShtb2RlbDogRXh0cmFjdFRjcmVhdGU8VFNlcnZpY2U+KTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHJvdGVjdGVkIHByZURlbGV0ZShtb2RlbDogRXh0cmFjdFRvbmU8VFNlcnZpY2U+KTogdm9pZCB7XG4gICAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIHRoZSBmb3JtIHdoZW5ldmVyIGl0IGlzIG5lZWRlZC5cbiAgICAgKlxuICAgICAqIFlvdSBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QsIGFuZCBub3QgYG5nT25Jbml0KClgIGlmIHlvdSBuZWVkIHRvIGN1c3RvbWl6ZSB0aGUgZm9ybS4gQmVjYXVzZSB0aGlzIHdpbGxcbiAgICAgKiBjb3JyZWN0bHkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmUgdGltZSBwZXIgY29tcG9uZW50IGluc3RhbmNlIGlmIG5lZWRlZCwgd2hlbiB0aGUgcm91dGUgY2hhbmdlcy4gQnV0IGBuZ09uSW5pdCgpYFxuICAgICAqIHdpbGwgaW5jb3JyZWN0bHkgYmUgY2FsbGVkIGV4YWN0bHkgMSB0aW1lIHBlciBjb21wb25lbnQgaW5zdGFuY2UsIGV2ZW4gaWYgdGhlIG9iamVjdCBjaGFuZ2VzIHZpYSByb3V0ZSBuYXZpZ2F0aW9uLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNVcGRhdGVQYWdlID0gISF0aGlzLmRhdGEubW9kZWwuaWQ7XG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuc2VydmljZS5nZXRGb3JtR3JvdXAodGhpcy5kYXRhLm1vZGVsKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLmluaXRpYWxpemUodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIH1cbn1cbiJdfQ==
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZGV0YWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2NsYXNzZXMvYWJzdHJhY3QtZGV0YWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsY0FBYyxFQUFFLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFHdEUsT0FBTyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRixPQUFPLEVBQUMsT0FBTyxFQUFFLHVCQUF1QixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRzlELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQzs7QUFROUQsU0FBUyxrQ0FBa0MsQ0FDdkMsVUFBbUI7SUFFbkIsT0FBTyxDQUNILENBQUMsQ0FBQyxVQUFVO1FBQ1osT0FBTyxVQUFVLEtBQUssUUFBUTtRQUM5QixnQkFBZ0IsSUFBSSxVQUFVO1FBQzlCLFVBQVUsQ0FBQyxjQUFjLFlBQVksY0FBYyxDQUN0RCxDQUFDO0FBQ04sQ0FBQztB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QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQzs4R0EvUVEscUJBQXFCO2tHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFNBQVM7bUJBQUMsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZXN0cm95UmVmLCBEaXJlY3RpdmUsIGluamVjdCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VW50eXBlZEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtrZWJhYkNhc2V9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge05hdHVyYWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL21vZHVsZXMvYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdFBhbmVsfSBmcm9tICcuLi9tb2R1bGVzL3BhbmVscy9hYnN0cmFjdC1wYW5lbCc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZSwgV2l0aElkfSBmcm9tICcuLi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlJztcbmltcG9ydCB7RXh0cmFjdFJlc29sdmUsIEV4dHJhY3RUY3JlYXRlLCBFeHRyYWN0VG9uZSwgRXh0cmFjdFR1cGRhdGUsIExpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7RU1QVFksIGVuZFdpdGgsIGZpbmFsaXplLCBsYXN0LCBPYnNlcnZhYmxlLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2lmVmFsaWQsIHZhbGlkYXRlQWxsRm9ybUNvbnRyb2xzfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtQYWdpbmF0ZWREYXRhfSBmcm9tICcuL2RhdGEtc291cmNlJztcbmltcG9ydCB7UXVlcnlWYXJpYWJsZXN9IGZyb20gJy4vcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge0N1bXVsYXRpdmVDaGFuZ2VzfSBmcm9tICcuL2N1bXVsYXRpdmUtY2hhbmdlcyc7XG5pbXBvcnQge01BVF9ESUFMT0dfREFUQX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7TmF0dXJhbERpYWxvZ1RyaWdnZXJQcm92aWRlZERhdGF9IGZyb20gJy4uL21vZHVsZXMvZGlhbG9nLXRyaWdnZXIvZGlhbG9nLXRyaWdnZXIuY29tcG9uZW50JztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbi8qKlxuICogYERhdGFgIGNvbnRhaW5zIGluIGBtb2RlbGAgZWl0aGVyIHRoZSBtb2RlbCBmZXRjaGVkIGZyb20gREIgb3IgZGVmYXVsdCB2YWx1ZXMgKHdpdGhvdXQgSUQpLiBBbmQgYmVzaWRlcyBgbW9kZWxgLFxuICogYW55IG90aGVyIGV4dHJhIGtleXMgZGVmaW5lZCBieSBFeHRyYS5cbiAqL1xudHlwZSBEYXRhPFRTZXJ2aWNlLCBFeHRyYT4gPSB7bW9kZWw6IHtpZD86IHN0cmluZ30gJiBFeHRyYWN0UmVzb2x2ZTxUU2VydmljZT59ICYgRXh0cmE7XG5cbmZ1bmN0aW9uIGlzTmF0dXJhbERpYWxvZ1RyaWdnZXJQcm92aWRlZERhdGEoXG4gICAgZGlhbG9nRGF0YTogdW5rbm93bixcbik6IGRpYWxvZ0RhdGEgaXMgTmF0dXJhbERpYWxvZ1RyaWdnZXJQcm92aWRlZERhdGE8bmV2ZXI+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICAhIWRpYWxvZ0RhdGEgJiZcbiAgICAgICAgdHlwZW9mIGRpYWxvZ0RhdGEgPT09ICdvYmplY3QnICYmXG4gICAgICAgICdhY3RpdmF0ZWRSb3V0ZScgaW4gZGlhbG9nRGF0YSAmJlxuICAgICAgICBkaWFsb2dEYXRhLmFjdGl2YXRlZFJvdXRlIGluc3RhbmNlb2YgQWN0aXZhdGVkUm91dGVcbiAgICApO1xufVxuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSh7c3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEFic3RyYWN0RGV0YWlsPFxuICAgICAgICBUU2VydmljZSBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxcbiAgICAgICAgICAgIHtpZDogc3RyaW5nfSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIFBhZ2luYXRlZERhdGE8TGl0ZXJhbD4sXG4gICAgICAgICAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIHVua25vd24sXG4gICAgICAgICAgICBhbnlcbiAgICAgICAgPixcbiAgICAgICAgRXh0cmFSZXNvbHZlIGV4dGVuZHMgTGl0ZXJhbCA9IFJlY29yZDxuZXZlciwgbmV2ZXI+LFxuICAgID5cbiAgICBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdFBhbmVsXG4gICAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgICAvKipcbiAgICAgKiBEYXRhIHJldHJpZXZlZCBieSB0aGUgc2VydmVyIHZpYSByb3V0ZSByZXNvbHZlcnMuXG4gICAgICpcbiAgICAgKiBUaGUga2V5IGBtb2RlbGAgaXMgc3BlY2lhbC4gSXQgaXMgcmVhZG9ubHkgYW5kIHJlcHJlc2VudHMgdGhlIG1vZGVsIGJlaW5nIHVwZGF0ZWRcbiAgICAgKiBhcyBpdCBleGlzdHMgb24gc2VydmVyLiBUaGUgdmFsdWUgaXMga2VwdCB1cCB0byBkYXRlIHdoZW4gQXBvbGxvIG11dGF0ZXMgaXQgb24gc2VydmVyLlxuICAgICAqXG4gICAgICogVGhlIG9ubHkgdGltZSB3aGVuIGBtb2RlbGAgaXMgbm90IHJlYWRvbmx5IGlzIGR1cmluZyBjcmVhdGlvbi4gT25seSB0aGVuIGNhbiB3ZSBtb2RpZnkgdGhlIG1vZGVsIHZhbHVlcyBkaXJlY3RseS5cbiAgICAgKlxuICAgICAqIE90aGVyIGtleXMsIGlmIHByZXNlbnQsIGFyZSB3aGF0ZXZlciBpcyByZXR1cm5lZCBmcm9tIHJvdXRlIHJlc29sdmVycyBhcy1pcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZGF0YTogRGF0YTxUU2VydmljZSwgRXh0cmFSZXNvbHZlPiA9IHtcbiAgICAgICAgbW9kZWw6IHRoaXMuc2VydmljZS5nZXREZWZhdWx0Rm9yU2VydmVyKCksXG4gICAgfSBhcyBEYXRhPFRTZXJ2aWNlLCBFeHRyYVJlc29sdmU+O1xuXG4gICAgLyoqXG4gICAgICogRm9ybSB0aGF0IG1hbmFnZXMgdGhlIGRhdGEgZnJvbSB0aGUgY29udHJvbGxlclxuICAgICAqL1xuICAgIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyAvIGhpZGVzIHRoZSBib3R0b20gZmFiIGJ1dHRvbiAobW9zdGx5IHRvIGhpZGUgaXQgd2hlbiB3ZSBhcmUgb24gb3RoZXIgdGFicyB3aGVyZSBzZW1hbnRpYyBvZiBidXR0b24gY2FuIGNvbmZsaWN0IHdpdGggLi4uXG4gICAgICogc2VtYW50aWMgb2YgZGF0YSBvbiBvdGhlciB0YWIsIGxpa2UgcmVsYXRpb25zIHRoYXQgbGlzdCBvdGhlciBvYmplY3RzKVxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93RmFiQnV0dG9uID0gdHJ1ZTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBhbGVydFNlcnZpY2UgPSBpbmplY3QoTmF0dXJhbEFsZXJ0U2VydmljZSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nRGF0YTogdW5rbm93biA9IGluamVjdChNQVRfRElBTE9HX0RBVEEsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqXG4gICAgICogT25jZSBzZXQsIHRoaXMgbXVzdCBub3QgY2hhbmdlIGFueW1vcmUsIGVzcGVjaWFsbHkgbm90IHJpZ2h0IGFmdGVyIHRoZSBjcmVhdGlvbiBtdXRhdGlvbixcbiAgICAgKiBzbyB0aGUgZm9ybSBkb2VzIG5vdCBzd2l0Y2ggZnJvbSBjcmVhdGlvbiBtb2RlIHRvIHVwZGF0ZSBtb2RlIHdpdGhvdXQgYW4gYWN0dWFsIHJlbG9hZCBvZlxuICAgICAqIG1vZGVsIGZyb20gREIgKGJ5IG5hdmlnYXRpbmcgdG8gdXBkYXRlIHBhZ2UpLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2lzVXBkYXRlUGFnZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlcyA9IG5ldyBDdW11bGF0aXZlQ2hhbmdlczx0eXBlb2YgdGhpcy5mb3JtLmdldFJhd1ZhbHVlPigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkga2V5OiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlOiBUU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBZb3UgcHJvYmFibHkgc2hvdWxkIG5vdCBvdmVycmlkZSB0aGlzIG1ldGhvZC4gSW5zdGVhZCwgY29uc2lkZXIgb3ZlcnJpZGluZyBgaW5pdEZvcm0oKWAuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZSA9IGlzTmF0dXJhbERpYWxvZ1RyaWdnZXJQcm92aWRlZERhdGEodGhpcy5fZGlhbG9nRGF0YSlcbiAgICAgICAgICAgICAgICA/IHRoaXMuX2RpYWxvZ0RhdGEuYWN0aXZhdGVkUm91dGVcbiAgICAgICAgICAgICAgICA6IHRoaXMucm91dGU7XG4gICAgICAgICAgICB0aGlzLiNzdWJzY3JpYmVUb01vZGVsRnJvbVJlc29sdmVkRGF0YShyb3V0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlVGFiKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93RmFiQnV0dG9uID0gaW5kZXggPT09IDA7XG4gICAgfVxuXG4gICAgI3N1YnNjcmliZVRvTW9kZWxGcm9tUmVzb2x2ZWREYXRhKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xuICAgICAgICBsZXQgcHJldmlvdXNJZCA9IC0xO1xuICAgICAgICByb3V0ZS5kYXRhXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGRhdGEubW9kZWwgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZXNvbHZlZCBkYXRhIG11c3QgaW5jbHVkZSB0aGUga2V5IGBtb2RlbGAsIGFuZCBpdCBtdXN0IGJlIGFuIG9ic2VydmFibGUgKHVzdWFsbHkgb25lIGZyb20gQXBvbGxvKS4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBtb2RlbCB0byBrbm93IHdoZW4gQXBvbGxvIGNhY2hlIGlzIGNoYW5nZWQsIHNvIHdlIGNhbiByZWZsZWN0IGl0IGludG8gYGRhdGEubW9kZWxgXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1vZGVsLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXAoKG1vZGVsOiBFeHRyYWN0UmVzb2x2ZTxUU2VydmljZT4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiBtb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIERhdGE8VFNlcnZpY2UsIEV4dHJhUmVzb2x2ZT47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNJZCAhPT0gbW9kZWwuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNJZCA9IG1vZGVsLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGBkYXRhLm1vZGVsYCB3YXMgZmV0Y2hlZCBmcm9tIERCLCBzbyB3ZSBhcmUgb24gYW4gdXBkYXRlIHBhZ2UsIG9yIGlmIGl0IGlzIGEgbmV3IG9iamVjdFxuICAgICAqIHdpdGggKG9ubHkpIGRlZmF1bHQgdmFsdWVzLCBzbyB3ZSBhcmUgb24gYSBjcmVhdGlvbiBwYWdlLlxuICAgICAqXG4gICAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGNoZWNraW5nIGBkYXRhLm1vZGVsLmlkYCBkaXJlY3RseSwgaW4gb3JkZXIgdG8gdHlwZSBndWFyZCBhbmQgZ2V0IHByb3BlciB0eXBpbmdcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNVcGRhdGVQYWdlKCk6IHRoaXMgaXMge2RhdGE6IHttb2RlbDogRXh0cmFjdFRvbmU8VFNlcnZpY2U+fX0ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVcGRhdGVQYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgb2JqZWN0IG9uIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgdmFsdWVzIGZyb20gdGhlIGZvcm0gZmllbGRzIHRoYXQgd2VyZSBtb2RpZmllZCBzaW5jZVxuICAgICAqIHRoZSBpbml0aWFsaXphdGlvbiwgb3Igc2luY2UgdGhlIHByZXZpb3VzIHN1Y2Nlc3NmdWwgdXBkYXRlLlxuICAgICAqXG4gICAgICogRm9ybSBmaWVsZHMgdGhhdCBhcmUgbmV2ZXIgbW9kaWZpZWQgYXJlICoqbm90Kiogc2VudCB0byB0aGUgc2VydmVyLCB1bmxlc3MgaWYgeW91IHNwZWNpZnkgYHN1Ym1pdEFsbEZpZWxkc2AuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZShub3cgPSBmYWxzZSwgc3VibWl0QWxsRmllbGRzID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRlUGFnZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YWxpZGF0ZUFsbEZvcm1Db250cm9scyh0aGlzLmZvcm0pO1xuXG4gICAgICAgIGlmVmFsaWQodGhpcy5mb3JtKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoc3VibWl0QWxsRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VzLmluaXRpYWxpemUoe30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0b1N1Ym1pdCA9IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5kYXRhLm1vZGVsLmlkLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuY2hhbmdlcy5kaWZmZXJlbmNlcyhuZXdWYWx1ZXMpLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgdXBkYXRlID0gbm93ID8gdGhpcy5zZXJ2aWNlLnVwZGF0ZU5vdyh0b1N1Ym1pdCkgOiB0aGlzLnNlcnZpY2UudXBkYXRlKHRvU3VibWl0KTtcbiAgICAgICAgICAgIHVwZGF0ZS5zdWJzY3JpYmUobW9kZWwgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5jb21taXQobmV3VmFsdWVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKCRsb2NhbGl6ZWBNaXMgw6Agam91cmApO1xuICAgICAgICAgICAgICAgIHRoaXMucG9zdFVwZGF0ZShtb2RlbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZShyZWRpcmVjdCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdmFsaWRhdGVBbGxGb3JtQ29udHJvbHModGhpcy5mb3JtKTtcblxuICAgICAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWVzID0gdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHRoaXMuZm9ybS5kaXNhYmxlKCk7XG5cbiAgICAgICAgdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAuY3JlYXRlKG5ld1ZhbHVlcylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChtb2RlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oJGxvY2FsaXplYENyw6nDqWApO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3RDcmVhdGUobW9kZWwpLnBpcGUoZW5kV2l0aChtb2RlbCksIGxhc3QoKSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChtb2RlbDogV2l0aElkPG9iamVjdD4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkVXJsID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRVcmw6IHN0cmluZyA9IHRoaXMucGFuZWxEYXRhPy5jb25maWcucGFyYW1zLm5leHRSb3V0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdVcmwgPSBvbGRVcmwucmVwbGFjZSgnL25ldycsICcvJyArIG1vZGVsLmlkKSArIChuZXh0VXJsID8gJy8nICsgbmV4dFVybCA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChuZXdVcmwpOyAvLyByZXBsYWNlIC9uZXcgYnkgLzEyM1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIG1vZGVsLmlkXSwge3JlbGF0aXZlVG86IHRoaXMucm91dGV9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmZvcm0uZW5hYmxlKCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGBjb25maXJtZXJgIGNhbiBiZSB1c2VkIHRvIG9wZW4gYSBjdXN0b20gZGlhbG9nLCBvciBhbnl0aGluZyBlbHNlLCB0byBjb25maXJtIHRoZSBkZWxldGlvbiwgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgZGlhbG9nXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZShyZWRpcmVjdGlvblJvdXRlPzogdW5rbm93bltdLCBjb25maXJtZXI/OiBPYnNlcnZhYmxlPGJvb2xlYW4gfCB1bmRlZmluZWQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5kaXNhYmxlKCk7XG5cbiAgICAgICAgKFxuICAgICAgICAgICAgY29uZmlybWVyID8/XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5jb25maXJtKFxuICAgICAgICAgICAgICAgICRsb2NhbGl6ZWBTdXBwcmVzc2lvbmAsXG4gICAgICAgICAgICAgICAgJGxvY2FsaXplYFZvdWxlei12b3VzIHN1cHByaW1lciBkw6lmaW5pdGl2ZW1lbnQgY2V0IMOpbMOpbWVudCA/YCxcbiAgICAgICAgICAgICAgICAkbG9jYWxpemVgU3VwcHJpbWVyIGTDqWZpbml0aXZlbWVudGAsXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChjb25maXJtZWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpcm1lZCB8fCAhdGhpcy5pc1VwZGF0ZVBhZ2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVEZWxldGUodGhpcy5kYXRhLm1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmRlbGV0ZShbdGhpcy5kYXRhLm1vZGVsXSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbygkbG9jYWxpemVgU3VwcHJpbcOpYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZWxTZXJ2aWNlPy5nb1RvUGVudWx0aW1hdGVQYW5lbCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0Um91dGUgPSBbJy4uLy4uLycgKyBrZWJhYkNhc2UodGhpcy5rZXkpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKHJlZGlyZWN0aW9uUm91dGUgPyByZWRpcmVjdGlvblJvdXRlIDogZGVmYXVsdFJvdXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmZvcm0uZW5hYmxlKCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgcG9zdFVwZGF0ZShtb2RlbDogRXh0cmFjdFR1cGRhdGU8VFNlcnZpY2U+KTogdm9pZCB7XG4gICAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIGJlIHN1YnNjcmliZWQgdG8gaW1tZWRpYXRlbHkgYW5kIHRoZVxuICAgICAqIHJlZGlyZWN0IG5hdmlnYXRpb24gd2lsbCBvbmx5IGhhcHBlbiBhZnRlciB0aGUgb2JzZXJ2YWJsZSBjb21wbGV0ZXMuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByb3RlY3RlZCBwb3N0Q3JlYXRlKG1vZGVsOiBFeHRyYWN0VGNyZWF0ZTxUU2VydmljZT4pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgcHJlRGVsZXRlKG1vZGVsOiBFeHRyYWN0VG9uZTxUU2VydmljZT4pOiB2b2lkIHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhlIGZvcm0gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkLlxuICAgICAqXG4gICAgICogWW91IHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCwgYW5kIG5vdCBgbmdPbkluaXQoKWAgaWYgeW91IG5lZWQgdG8gY3VzdG9taXplIHRoZSBmb3JtLiBCZWNhdXNlIHRoaXMgd2lsbFxuICAgICAqIGNvcnJlY3RseSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uZSB0aW1lIHBlciBjb21wb25lbnQgaW5zdGFuY2UgaWYgbmVlZGVkLCB3aGVuIHRoZSByb3V0ZSBjaGFuZ2VzLiBCdXQgYG5nT25Jbml0KClgXG4gICAgICogd2lsbCBpbmNvcnJlY3RseSBiZSBjYWxsZWQgZXhhY3RseSAxIHRpbWUgcGVyIGNvbXBvbmVudCBpbnN0YW5jZSwgZXZlbiBpZiB0aGUgb2JqZWN0IGNoYW5nZXMgdmlhIHJvdXRlIG5hdmlnYXRpb24uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGluaXRGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1VwZGF0ZVBhZ2UgPSAhIXRoaXMuZGF0YS5tb2RlbC5pZDtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5zZXJ2aWNlLmdldEZvcm1Hcm91cCh0aGlzLmRhdGEubW9kZWwpO1xuICAgICAgICB0aGlzLmNoYW5nZXMuaW5pdGlhbGl6ZSh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgfVxufVxuIl19
@@ -89,10 +89,10 @@ export class NaturalAbstractEditableList extends NaturalAbstractController {
89
89
  validateForm() {
90
90
  validateAllFormControls(this.form);
91
91
  }
92
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAbstractEditableList, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
93
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: NaturalAbstractEditableList, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
92
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractEditableList, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
93
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalAbstractEditableList, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
94
94
  }
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAbstractEditableList, decorators: [{
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractEditableList, decorators: [{
96
96
  type: Directive,
97
97
  args: [{ standalone: true }]
98
98
  }], ctorParameters: () => [{ type: undefined }] });
@@ -26,7 +26,10 @@ function unwrapNavigable(item) {
26
26
  * Components inheriting from this class can be used as standalone with input attributes.
27
27
  *
28
28
  * Usage :
29
+ *
30
+ * ```html
29
31
  * <natural-my-listing [forcedVariables]="{filter:...}" [selectedColumns]="['col1']" [persistSearch]="false">
32
+ * ```
30
33
  */
31
34
  // @dynamic
32
35
  export class NaturalAbstractList extends NaturalAbstractPanel {
@@ -418,10 +421,10 @@ export class NaturalAbstractList extends NaturalAbstractPanel {
418
421
  this.persistenceService.persist('col', value, this.route, this.getStorageKey());
419
422
  }
420
423
  }
421
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAbstractList, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
422
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: NaturalAbstractList, isStandalone: true, inputs: { persistSearch: "persistSearch", availableColumns: "availableColumns", selectedColumns: "selectedColumns", forcedVariables: "forcedVariables" }, usesInheritance: true, ngImport: i0 }); }
424
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractList, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
425
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalAbstractList, isStandalone: true, inputs: { persistSearch: "persistSearch", availableColumns: "availableColumns", selectedColumns: "selectedColumns", forcedVariables: "forcedVariables" }, usesInheritance: true, ngImport: i0 }); }
423
426
  }
424
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAbstractList, decorators: [{
427
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractList, decorators: [{
425
428
  type: Directive,
426
429
  args: [{ standalone: true }]
427
430
  }], ctorParameters: () => [{ type: undefined }], propDecorators: { persistSearch: [{
@@ -433,4 +436,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
433
436
  }], forcedVariables: [{
434
437
  type: Input
435
438
  }] } });
436
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL2Fic3RyYWN0LWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFHMUUsT0FBTyxFQUFDLGNBQWMsRUFBUSxhQUFhLEVBQW9CLGVBQWUsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRyxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDbkYsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUk3RCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsaUJBQWlCLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFDSCw0QkFBNEIsRUFJNUIsWUFBWSxHQUNmLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBQyxNQUFNLFdBQVcsQ0FBQzs7QUFJ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QU8sRUFBMEIsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7SUFDTCxDQUFDO0lBRU0sYUFBYSxDQUFDLE9BQWlCO1FBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBRS9CLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QyxPQUFPO1FBQ1gsQ0FBQztRQUVELHVGQUF1RjtRQUN2RixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQztRQUMxQyxDQUFDO2FBQU0sQ0FBQztZQUNKLHNFQUFzRTtZQUN0RSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztJQUNMLENBQUM7OEdBOWhCUSxtQkFBbUI7a0dBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsU0FBUzttQkFBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUM7MkVBeUJULGFBQWE7c0JBQTVCLEtBQUs7Z0JBS1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQWlCVSxlQUFlO3NCQUE5QixLQUFLO2dCQXVFSyxlQUFlO3NCQUR6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb25Nb2RlbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7RGlyZWN0aXZlLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BhZ2VFdmVudH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7U29ydH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBEYXRhLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXh0cmFzLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7ZGVmYXVsdHMsIGlzRW1wdHksIGlzRXF1YWwsIHBpY2t9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtOYXR1cmFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9tb2R1bGVzL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RQYW5lbH0gZnJvbSAnLi4vbW9kdWxlcy9wYW5lbHMvYWJzdHJhY3QtcGFuZWwnO1xuaW1wb3J0IHt0b0dyYXBoUUxEb2N0cmluZUZpbHRlcn0gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvY2xhc3Nlcy9ncmFwaHFsLWRvY3RyaW5lJztcbmltcG9ydCB7ZnJvbVVybCwgdG9Vcmx9IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL2NsYXNzZXMvdXJsJztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaEZhY2V0c30gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvdHlwZXMvZmFjZXQnO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoU2VsZWN0aW9uc30gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvdHlwZXMvdmFsdWVzJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbFBlcnNpc3RlbmNlU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvcGVyc2lzdGVuY2Uuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxEYXRhU291cmNlLCBQYWdpbmF0ZWREYXRhfSBmcm9tICcuL2RhdGEtc291cmNlJztcbmltcG9ydCB7XG4gICAgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcixcbiAgICBQYWdpbmF0aW9uSW5wdXQsXG4gICAgUXVlcnlWYXJpYWJsZXMsXG4gICAgU29ydGluZyxcbiAgICBTb3J0aW5nT3JkZXIsXG59IGZyb20gJy4vcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge0V4dHJhY3RUYWxsLCBFeHRyYWN0VmFsbCwgTGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtOYXZpZ2FibGVJdGVtfSBmcm9tICcuL2Fic3RyYWN0LW5hdmlnYWJsZS1saXN0JztcbmltcG9ydCB7ZmlsdGVyLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QXZhaWxhYmxlQ29sdW1ufSBmcm9tICcuLi9tb2R1bGVzL2NvbHVtbnMtcGlja2VyL3R5cGVzJztcbmltcG9ydCB7dmFsaWRhdGVDb2x1bW5zLCB2YWxpZGF0ZVBhZ2luYXRpb24sIHZhbGlkYXRlU29ydGluZ30gZnJvbSAnLi91dGlsaXR5JztcblxudHlwZSBNYXliZU5hdmlnYWJsZSA9IExpdGVyYWwgfCBOYXZpZ2FibGVJdGVtPExpdGVyYWw+O1xuXG5mdW5jdGlvbiB1bndyYXBOYXZpZ2FibGUoaXRlbTogTWF5YmVOYXZpZ2FibGUpOiBMaXRlcmFsIHtcbiAgICBpZiAoJ2l0ZW0nIGluIGl0ZW0gJiYgJ2hhc05hdmlnYXRpb24nIGluIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhlbHBzIG1hbmFnaW5nIGEgbGlzdCBvZiBwYWdpbmF0ZWQgaXRlbXMgdGhhdCBjYW4gYmUgZmlsdGVyZWQsXG4gKiBzZWxlY3RlZCwgYW5kIHRoZW4gYnVsayBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQgb24gc2VsZWN0aW9uLlxuICpcbiAqIENvbXBvbmVudHMgaW5oZXJpdGluZyBmcm9tIHRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgYXMgc3RhbmRhbG9uZSB3aXRoIGlucHV0IGF0dHJpYnV0ZXMuXG4gKlxuICogVXNhZ2UgOlxuICogPG5hdHVyYWwtbXktbGlzdGluZyBbZm9yY2VkVmFyaWFibGVzXT1cIntmaWx0ZXI6Li4ufVwiIFtzZWxlY3RlZENvbHVtbnNdPVwiWydjb2wxJ11cIiBbcGVyc2lzdFNlYXJjaF09XCJmYWxzZVwiPlxuICovXG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKHtzdGFuZGFsb25lOiB0cnVlfSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsQWJzdHJhY3RMaXN0PFxuICAgICAgICBUU2VydmljZSBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIFBhZ2luYXRlZERhdGE8TGl0ZXJhbD4sXG4gICAgICAgICAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueVxuICAgICAgICA+LFxuICAgICAgICAvLyBJbiBtb3N0IGNhc2UgdGhpcyBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBieSBpbmhlcml0aW5nIGNsYXNzZXMuXG4gICAgICAgIC8vIEl0IHNob3VsZCBvbmx5IGJlIHNwZWNpZmllZCB0byBvdmVycmlkZSBkZWZhdWx0IGlmIHRoZSBzZXJ2aWNlIGl0ZW1zIGFyZVxuICAgICAgICAvLyBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgc3RydWN0dXJlIGxpa2UgaW4gTmF0dXJhbEFic3RyYWN0TmF2aWdhYmxlTGlzdFxuICAgICAgICBUYWxsIGV4dGVuZHMgUGFnaW5hdGVkRGF0YTxNYXliZU5hdmlnYWJsZT4gPSBFeHRyYWN0VGFsbDxUU2VydmljZT4sXG4gICAgPlxuICAgIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0UGFuZWxcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgLyoqXG4gICAgICogV2hldGhlciBzZWFyY2ggc2hvdWxkIGJlIGxvYWRlZCBmcm9tIHVybC9zdG9yYWdlIGFuZCBwZXJzaXN0ZWQgaW4gaXQgdG9vLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwZXJzaXN0U2VhcmNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgY29sdW1ucyB0aGF0IGFyZSBhdmFpbGFibGUgdG8gdGhlIGVuZC11c2VyIHRvIHNlbGVjdCBmcm9tLCB2aWEgYDxuYXR1cmFsLWNvbHVtbnMtcGlja2VyPmBcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYXZhaWxhYmxlQ29sdW1uczogQXZhaWxhYmxlQ29sdW1uW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIENvbHVtbnMgbGlzdCBhZnRlciBpbnRlcmFjdGlvbiB3aXRoIGA8bmF0dXJhbC1jb2x1bW5zLXBpY2tlcj5gXG4gICAgICovXG4gICAgcHVibGljIGNvbHVtbnNGb3JUYWJsZTogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNvbHVtbiBzZWxlY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IGhhcHBlbmVkIGFmdGVyIGA8bmF0dXJhbC1jb2x1bW5zLXBpY2tlcj5gIGluaXRpYWxpemF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0ZWRDb2x1bW5zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVmlzaWJsZSAoY2hlY2tlZCkgY29sdW1uc1xuICAgICAqXG4gICAgICogSW5zdGVhZCBvZiB1c2luZyB0aGlzLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIGNvcnJlY3RseSBjb25maWd1cmluZyBgQXZhaWxhYmxlQ29sdW1uLmNoZWNrZWRgLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZENvbHVtbnM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFNvdXJjZSBvZiB0aGUgbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyBkYXRhU291cmNlOiBOYXR1cmFsRGF0YVNvdXJjZTxUYWxsPiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGlvbiBmb3IgYnVsayBhY3Rpb25zXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxFeHRyYWN0VGFsbDxUU2VydmljZT5bJ2l0ZW1zJ11bMF0+KHRydWUsIFtdKTtcblxuICAgIC8qKlxuICAgICAqIE5leHQgZXhlY3V0ZWQgYWN0aW9uIGZyb20gYnVsayBtZW51XG4gICAgICovXG4gICAgcHVibGljIGJ1bGtBY3Rpb25TZWxlY3RlZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBDZW50cmFsaXNhdGlvbiBvZiBxdWVyeSB2YXJpYWJsZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgdmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxFeHRyYWN0VmFsbDxUU2VydmljZT4+ID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8XG4gICAgICAgIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPlxuICAgID4oKTtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIG5hdHVyYWwtc2VhcmNoIGZhY2V0c1xuICAgICAqL1xuICAgIHB1YmxpYyBuYXR1cmFsU2VhcmNoRmFjZXRzOiBOYXR1cmFsU2VhcmNoRmFjZXRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBSZXN1bHQgb2YgYSBzZWFyY2ggKGNhbiBiZSBwcm92aWRlZCBhcyBpbnB1dCBmb3IgaW5pdGlhbGlzYXRpb24pXG4gICAgICovXG4gICAgcHVibGljIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IFtbXV07XG5cbiAgICAvKipcbiAgICAgKiBEYXRhIGF0dHJpYnV0ZSBwcm92aWRlZCBieSBhY3RpdmF0ZWQgcm91dGUgc25hcHNob3RcbiAgICAgKi9cbiAgICBwdWJsaWMgcm91dGVEYXRhPzogRGF0YTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgcGFnZSBzaXplc1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMjUsIDUwLCAxMDAsIDIwMF07XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIHBhZ2luYXRpb24gc2V0dXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFBhZ2luYXRpb246IFJlcXVpcmVkPFBhZ2luYXRpb25JbnB1dD4gPSB7XG4gICAgICAgIG9mZnNldDogbnVsbCxcbiAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICBwYWdlU2l6ZTogMjUsXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgc29ydGluZ1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWZhdWx0U29ydGluZz86IFNvcnRpbmdbXTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhbGVydFNlcnZpY2UgPSBpbmplY3QoTmF0dXJhbEFsZXJ0U2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBlcnNpc3RlbmNlU2VydmljZSA9IGluamVjdChOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogVFNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYXJpYWJsZXMgdGhhdCBhcmUgYWx3YXlzIGZvcmNlZCBvbiBhIGxpc3QsIGluIGFkZGl0aW9uIHRvIHdoYXRldmVyIHRoZSBlbmQtdXNlciBtaWdodCBzZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZm9yY2VkVmFyaWFibGVzKHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JjZWRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGNoYW5nZSwgY2hlY2sgRG9jdW1lbnRzQ29tcG9uZW50IHRoYXQgb3ZlcnJpZGVzIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBjYWxsaW5nIHN1cGVyLm5nT25Jbml0KCkuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvdXRlRGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcblxuICAgICAgICB0aGlzLmluaXRGcm9tUm91dGUoKTtcbiAgICAgICAgdGhpcy5pbml0RnJvbVBlcnNpc3RlZCgpO1xuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5kZWZhdWx0cygncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9uOiB0aGlzLmRlZmF1bHRQYWdpbmF0aW9ufSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuZGVmYXVsdHMoJ3NvcnRpbmcnLCB7c29ydGluZzogdGhpcy5kZWZhdWx0U29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTmF0dXJhbERhdGFTb3VyY2U8VGFsbD4odGhpcy5nZXREYXRhT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcblxuICAgICAgICAvLyBVcGRhdGUgbmF0dXJhbCBzZWFyY2ggd2hlbiBoaXN0b3J5IGNoYW5nZXMgKGJhY2svZm9yd2FyZCBidXR0b25zKVxuICAgICAgICAvLyBIaXN0b3J5IHN0YXRlIGlzIGRldGVjdGFibGUgb25seSBvbiBOYXZpZ2F0aW9uU3RhcnQgKHBvcHN0YXRlIHRyaWdnZXIpXG4gICAgICAgIC8vIEJ1dCB3ZSBuZWVkIHBhcmFtZXRlcnMgZnJvbSB1cmwgYWZ0ZXIgTmF2aWdhdGlvbkVuZC4gU28gcHJvY2VlZCBpbiB0d28gc3RlcHMgd2l0aCBhIGZsYWcuXG4gICAgICAgIGxldCBpc1BvcFN0YXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0ICYmIGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlzUG9wU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kICYmIGlzUG9wU3RhdGUpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNQb3BTdGF0ZSA9IGZhbHNlOyAvLyByZXNldCBmbGFnXG4gICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IGZyb21VcmwodGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0RnJvbVVybCgnbnMnLCB0aGlzLnJvdXRlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJzaXN0IHNlYXJjaCBhbmQgdGhlbiBsYXVuY2ggd2hhdGV2ZXIgaXMgcmVxdWlyZWQgdG8gcmVmcmVzaCB0aGUgbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWFyY2goXG4gICAgICAgIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyxcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgICAgIHJlc2V0UGFnaW5hdGlvbiA9IHRydWUsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2UgaW5kZXggdG8gcmVzdGFydCB0aGUgcGFnaW5hdGlvbiAocHJlc2VydmUgcGFnZVNpemUpXG5cbiAgICAgICAgaWYgKHJlc2V0UGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCdwYWdpbmF0aW9uJywge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHBpY2sodGhpcy5kZWZhdWx0UGFnaW5hdGlvbiwgWydvZmZzZXQnLCAncGFnZUluZGV4J10pLFxuICAgICAgICAgICAgfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyc2lzdCBpZiBhY3RpdmF0ZWRcbiAgICAgICAgLy8gVHdvIHBhcmFsbGVsIG5hdmlnYXRpb25zIGNvbmZsaWN0LiBXZSBmaXJzdCBwZXJzaXN0IHRoZSBzZWFyY2gsIHRoZW4gdGhlIHBhZ2luYXRpb25cbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdChcbiAgICAgICAgICAgICAgICAnbnMnLFxuICAgICAgICAgICAgICAgIHRvVXJsKG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmFnZUtleSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uKHBhZ2luYXRpb24sIHByb21pc2UsIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdChuYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHNvcnRpbmcgdmFyaWFibGVzIGZvciBxdWVyeSBhbmQgcGVyc2lzdCB0aGUgbmV3IHZhbHVlIGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZVxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5vdCBwZXJzaXN0ZWRcbiAgICAgKiBAcGFyYW0gc29ydGluZ0V2ZW50cyBMaXN0IG9mIG1hdGVyaWFsIHNvcnRpbmcgZXZlbnRzXG4gICAgICovXG4gICAgcHVibGljIHNvcnRpbmcoc29ydGluZ0V2ZW50czogKFNvcnQgJiBQYXJ0aWFsPFBpY2s8U29ydGluZywgJ251bGxBc0hpZ2hlc3QnIHwgJ2VtcHR5U3RyaW5nQXNIaWdoZXN0Jz4+KVtdKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2UgaW5kZXggdG8gcmVzdGFydCB0aGUgcGFnaW5hdGlvbiAocHJlc2VydmUgcGFnZVNpemUpXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5tZXJnZSgncGFnaW5hdGlvbicsIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHBpY2sodGhpcy5kZWZhdWx0UGFnaW5hdGlvbiwgWydvZmZzZXQnLCAncGFnZUluZGV4J10pLFxuICAgICAgICB9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG5cbiAgICAgICAgLy8gUHJlc2VydmUgb25seSBzb3J0aW5nIGV2ZW50cyB3aXRoIGRpcmVjdGlvbiBhbmQgY29udmVydCBpbnRvIG5hdHVyYWwvZ3JhcGhxbCBTb3J0aW5nIHR5cGVcbiAgICAgICAgbGV0IHNvcnRpbmc6IFNvcnRpbmdbXSA9IHNvcnRpbmdFdmVudHNcbiAgICAgICAgICAgIC5maWx0ZXIoZSA9PiAhIWUuZGlyZWN0aW9uKVxuICAgICAgICAgICAgLm1hcChzb3J0aW5nRXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHM6IFNvcnRpbmcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzb3J0aW5nRXZlbnQuYWN0aXZlLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoc29ydGluZ0V2ZW50LmRpcmVjdGlvbiA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5vcmRlciA9IFNvcnRpbmdPcmRlci5BU0M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3J0aW5nRXZlbnQuZGlyZWN0aW9uID09PSAnZGVzYycpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5vcmRlciA9IFNvcnRpbmdPcmRlci5ERVNDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgnbnVsbEFzSGlnaGVzdCcgaW4gc29ydGluZ0V2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHMubnVsbEFzSGlnaGVzdCA9IHNvcnRpbmdFdmVudC5udWxsQXNIaWdoZXN0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgnZW1wdHlTdHJpbmdBc0hpZ2hlc3QnIGluIHNvcnRpbmdFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICBzLmVtcHR5U3RyaW5nQXNIaWdoZXN0ID0gc29ydGluZ0V2ZW50LmVtcHR5U3RyaW5nQXNIaWdoZXN0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRW1wdHkgc29ydGluZyBmYWxsYmFja3Mgb24gZGVmYXVsdFxuICAgICAgICBpZiAoc29ydGluZy5sZW5ndGggPT09IDAgJiYgdGhpcy5kZWZhdWx0U29ydGluZykge1xuICAgICAgICAgICAgc29ydGluZyA9IHRoaXMuZGVmYXVsdFNvcnRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgc29ydGluZyBhcyBzZWFyY2ggdmFyaWFibGVcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnc29ydGluZycsIHtzb3J0aW5nOiBzb3J0aW5nfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuXG4gICAgICAgIGlmICh0aGlzLnBlcnNpc3RTZWFyY2ggJiYgIXRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgLy8gSWYgc29ydGluZyBpcyBlcXVhbCB0byBkZWZhdWx0IHNvcnRpbmcsIG51bGxpZnkgaXQgdG8gcmVtb3ZlIGZyb20gcGVyc2lzdGVuY2UgKHVybCBhbmQgc2Vzc2lvbiBzdG9yYWdlKVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3QoXG4gICAgICAgICAgICAgICAgJ3NvJyxcbiAgICAgICAgICAgICAgICBpc0VxdWFsKHNvcnRpbmcsIHRoaXMuZGVmYXVsdFNvcnRpbmcpID8gbnVsbCA6IHNvcnRpbmcsXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0b3JhZ2VLZXkoKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLmdldFBhZ2luYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbihwYWdpbmF0aW9uLCBwcm9taXNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBjdXJyZW50IHBhZ2luYXRpb24sIGVpdGhlciB0aGUgdXNlciBkZWZpbmVkIG9uZSwgb3IgdGhlIGRlZmF1bHQgb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQYWdpbmF0aW9uKCk6IFBhZ2luYXRpb25JbnB1dCB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25DaGFubmVsOiBQYXJ0aWFsPEV4dHJhY3RWYWxsPFRTZXJ2aWNlPj4gfCB1bmRlZmluZWQgPSB0aGlzLnZhcmlhYmxlc01hbmFnZXIuZ2V0KCdwYWdpbmF0aW9uJyk7XG5cbiAgICAgICAgaWYgKHBhZ2luYXRpb25DaGFubmVsICYmIHBhZ2luYXRpb25DaGFubmVsLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIC8vIFRoZSBjYXN0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgVHlwZXNjcmlwdCBjb3JyZWN0bHkgbmFycm93IGRvd24gdGhlIHR5cGUgdG8gYFBhZ2luYXRpb25JbnB1dGBcbiAgICAgICAgICAgIC8vIGJ1dCBzb21laG93IHN0aWxsIGdldCBjb25mdXNlZCB3aGVuIHJldHVybmluZyBpdFxuICAgICAgICAgICAgcmV0dXJuIHBhZ2luYXRpb25DaGFubmVsLnBhZ2luYXRpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGFnaW5hdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgcGFnaW5hdGlvbiB2YXJpYWJsZXMgZm9yIHF1ZXJ5IGFuZCBwZXJzaXN0IGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZSB0aGUgbmV3IHZhbHVlXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgbm90IHBlcnNpc3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IE5hdHVyYWwgb3IgUGFnaW5hdG9yIFBhZ2VFdmVudFxuICAgICAqIEBwYXJhbSBkZWZlciBQcm9taXNlICh1c3VhbGx5IGEgcm91dGUgcHJvbWlzZSkgdGhhdCBkZWZlcnMgdGhlIHJlZGlyZWN0aW9uIGZyb20gdGhpcyBjYWxsIHRvIHByZXZlbnQgcm91dGUgbmF2aWdhdGlvbiBjb2xsaXNpb25cbiAgICAgKiBAcGFyYW0gbmF2aWdhdGlvbkV4dHJhcyBBbmd1bGFyIHJvdXRlciBuYXZpZ2F0aW9uIG9wdGlvbnMuIElzIHJlbGV2YW50IG9ubHkgaWYgcGVyc2lzdFNlYXJjaCBpcyB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHBhZ2luYXRpb24oXG4gICAgICAgIGV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgfCBQYWdlRXZlbnQsXG4gICAgICAgIGRlZmVyPzogUHJvbWlzZTx1bmtub3duPixcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGxldCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgPSB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uO1xuICAgICAgICBsZXQgZm9yUGVyc2lzdGVuY2U6IFBhZ2luYXRpb25JbnB1dCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gbmF0dXJhbC9ncmFwaHFsIGZvcm1hdCwgYWRkaW5nIG1pc3NpbmcgYXR0cmlidXRlc1xuICAgICAgICBsZXQgbmF0dXJhbEV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgPSBwaWNrKGV2ZW50LCBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKSk7IC8vIG9iamVjdCB3aXRoIG9ubHkgUGFnaW5hdGlvbklucHV0IGF0dHJpYnV0ZXNcbiAgICAgICAgbmF0dXJhbEV2ZW50ID0gZGVmYXVsdHMobmF0dXJhbEV2ZW50LCB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKTsgLy8gRGVmYXVsdCB3aXRoIGNvbnRyb2xsZXIgdmFsdWVzXG5cbiAgICAgICAgaWYgKCFpc0VxdWFsKG5hdHVyYWxFdmVudCwgdGhpcy5kZWZhdWx0UGFnaW5hdGlvbikpIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb24gPSBmb3JQZXJzaXN0ZW5jZSA9IG5hdHVyYWxFdmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbn0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLnBlcnNpc3RQYWdpbmF0aW9uKGZvclBlcnNpc3RlbmNlLCBkZWZlciwgbmF2aWdhdGlvbkV4dHJhcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHBlcnNpc3RQYWdpbmF0aW9uKFxuICAgICAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgfCBudWxsLFxuICAgICAgICBkZWZlcj86IFByb21pc2U8dW5rbm93bj4sXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wZXJzaXN0U2VhcmNoICYmICF0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgIC8vIERlY2xhcmUgcGVyc2lzdCBmdW5jdGlvblxuICAgICAgICAgICAgY29uc3QgcGVyc2lzdCA9ICh2YWx1ZTogUGFnaW5hdGlvbklucHV0IHwgbnVsbCk6IFByb21pc2U8Ym9vbGVhbj4gPT5cbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KCdwYScsIHZhbHVlLCB0aGlzLnJvdXRlLCB0aGlzLmdldFN0b3JhZ2VLZXkoKSwgbmF2aWdhdGlvbkV4dHJhcyk7XG5cbiAgICAgICAgICAgIC8vIENhbGwgZnVuY3Rpb24gZGlyZWN0bHkgb3Igd2hlbiBwcm9taXNlIGlzIHJlc29sdmVkXG4gICAgICAgICAgICBpZiAoZGVmZXIpIHtcbiAgICAgICAgICAgICAgICBkZWZlci50aGVuKCgpID0+IHBlcnNpc3QocGFnaW5hdGlvbikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZXJzaXN0KHBhZ2luYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIG1hc3RlclRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5pdGVtcy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW53cmFwcGVkID0gdW53cmFwTmF2aWdhYmxlKHJvdyk7XG4gICAgICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodW53cmFwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBlbGVtZW50cyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93c1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICAgICAgbGV0IG51bVJvd3MgPSAwO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/Lml0ZW1zLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcE5hdmlnYWJsZShyb3cpO1xuICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgIG51bVJvd3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgYnVsayBhY3Rpb24gaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgYnVsa0FjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gZXhlY3V0ZSBhIGJ1bGsgYWN0aW9uIHdpdGhvdXQgc2VsZWN0aW5nIG9uZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGV4ZWN1dGUgYSBidWxrIGFjdGlvbiB0aGF0IGRvZXMgbm90IGV4aXN0OiAnICsgdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMgYXMgYW55KVt0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZF0oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbiBub24tcGFuZWwgY29udGV4dCwgaGVhZGVyIGlzIGFsd2F5cyB2aXNpYmxlLlxuICAgICAqIEluIHBhbmVsIGNvbnRleHQsIGhlYWRlciBpcyBoaWRkZW4gd2hlbiBubyByZXN1bHRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbCB8fCAodGhpcy5pc1BhbmVsICYmIHRoaXMuc2hvd1RhYmxlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBpcyB2aXNpYmxlIGluIG1vc3QgY2FzZXMsIGJ1dCBoaWRkZW4gb24gYSBwYW5lbFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93U2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWJsZSBzaG91bGQgYmUgc2hvd24gb25seSB3aGVuIHRoZXJlIGlzIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1RhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRhdGFTb3VyY2UgJiYgISF0aGlzLmRhdGFTb3VyY2UuZGF0YSAmJiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vIHJlc3VsdHMgaXMgc2hvd24gd2hlbiB0aGVyZSBpcyBubyBpdGVtcywgYnV0IG9ubHkgaW4gbm9uLXBhbmVsIGNvbnRleHQgb25seS5cbiAgICAgKiBJbiBwYW5lbHMgd2Ugd2FudCBkaXNjcmV0ZSBtb2RlLCB0aGVyZSBpcyBubyBzZWFyY2ggYW5kIG5vIFwibm8tcmVzdWx0c1wiXG4gICAgICovXG4gICAgcHVibGljIHNob3dOb1Jlc3VsdHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc1BhbmVsICYmICEhdGhpcy5kYXRhU291cmNlICYmICEhdGhpcy5kYXRhU291cmNlLmRhdGEgJiYgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgZnJvbSByb3V0ZS5cbiAgICAgKlxuICAgICAqIFVzZXMgZGF0YSBwcm92aWRlZCBieSByb3V0ZXIgc3VjaCBhczpcbiAgICAgKlxuICAgICAqIC0gYHJvdXRlLmRhdGEuZm9yY2VkVmFyaWFibGVzYFxuICAgICAqIC0gYHJvdXRlLmRhdGEuYXZhaWxhYmxlQ29sdW1uc2BcbiAgICAgKiAtIGByb3V0ZS5kYXRhLnNlbGVjdGVkQ29sdW1uc2BcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaW5pdEZyb21Sb3V0ZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gVmFyaWFibGVzXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZm9yY2VkVmFyaWFibGVzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Rm9yY2VkVmFyaWFibGVzKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5mb3JjZWRWYXJpYWJsZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXZhaWxhYmxlIGNvbHVtbnNcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5hdmFpbGFibGVDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUNvbHVtbnMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuYXZhaWxhYmxlQ29sdW1ucztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbHVtbnNcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5zZWxlY3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnNlbGVjdGVkQ29sdW1ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXREYXRhT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPFRhbGw+IHtcbiAgICAgICAgLy8gSGVyZSB0aGUgY2FzdGluZyBpcyBhIGJpdCB1bmZvcnR1bmF0ZSBidXQgcmVxdWlyZWQgYmVjYXVzZSBOYXR1cmFsQWJzdHJhY3ROYXZpZ2FibGVMaXN0XG4gICAgICAgIC8vIGJyZWFrcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgY29udmVudGlvbiAoYnkgd3JhcHBpbmcgaXRlbXMgaW4gYSBzdHJ1Y3R1cmUpLiBJZGVhbGx5IHdlIHNob3VsZCByZW1vdmVcbiAgICAgICAgLy8gdGhlIGNhc3RpbmcgYW5kIHJlc29sdmUgdGhpbmdzIGluIGEgYmV0dGVyIHdheSwgYnV0IHRoYXQncyB0b28gbXVjaCB3b3JrIGZvciBub3dcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLndhdGNoQWxsKHRoaXMudmFyaWFibGVzTWFuYWdlciBhcyB1bmtub3duIGFzIGFueSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKSBhcyB1bmtub3duIGFzIE9ic2VydmFibGU8VGFsbD47XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluaXRGcm9tUGVyc2lzdGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucGVyc2lzdFNlYXJjaCB8fCB0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSB0aGlzLmdldFN0b3JhZ2VLZXkoKTtcblxuICAgICAgICAvLyBQYWdpbmF0aW9uIDogcGFcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHZhbGlkYXRlUGFnaW5hdGlvbih0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ3BhJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSkpO1xuICAgICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9ufSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydGluZyA6IHNvXG4gICAgICAgIGNvbnN0IHNvcnRpbmcgPSB2YWxpZGF0ZVNvcnRpbmcodGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0KCdzbycsIHRoaXMucm91dGUsIHN0b3JhZ2VLZXkpKTtcbiAgICAgICAgaWYgKHNvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3NvcnRpbmcnLCB7c29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbHVtbnNcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkQ29sdW1ucyA9IHZhbGlkYXRlQ29sdW1ucyh0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ2NvbCcsIHRoaXMucm91dGUsIHN0b3JhZ2VLZXkpKTtcbiAgICAgICAgaWYgKHBlcnNpc3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcGVyc2lzdGVkQ29sdW1ucztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5hdHVyYWwgc2VhcmNoIDogbnNcbiAgICAgICAgdGhpcy5uYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IGZyb21VcmwodGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0KCducycsIHRoaXMucm91dGUsIHN0b3JhZ2VLZXkpKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdCh0aGlzLm5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VhcmNoQW5kUmVmcmVzaExpc3QoXG4gICAgICAgIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyxcbiAgICAgICAgaWdub3JlRW1wdHlGaWx0ZXIgPSBmYWxzZSxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdG9HcmFwaFFMRG9jdHJpbmVGaWx0ZXIodGhpcy5uYXR1cmFsU2VhcmNoRmFjZXRzLCBuYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk7XG5cbiAgICAgICAgaWYgKGlnbm9yZUVtcHR5RmlsdGVyICYmIGlzRW1wdHkoZmlsdGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnbmF0dXJhbC1zZWFyY2gnLCB7ZmlsdGVyfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBjdXJyZW50IHVybCBleGNsdWRpbmcgbGFzdCByb3V0ZSBwYXJhbWV0ZXJzO1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRTdG9yYWdlS2V5KCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICB1cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50c1t1cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50cy5sZW5ndGggLSAxXS5wYXJhbWV0ZXJzID0ge307XG4gICAgICAgIHJldHVybiB1cmxUcmVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGJ1bGtkRGVsZXRlQ29uZmlybWF0aW9uKCk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGVydFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgICAgICRsb2NhbGl6ZWBTdXBwcmVzc2lvbmAsXG4gICAgICAgICAgICAkbG9jYWxpemVgVm91bGV6LXZvdXMgc3VwcHJpbWVyIGTDqWZpbml0aXZlbWVudCBsZXMgw6lsw6ltZW50cyBzw6lsZWN0aW9ubsOpcyA/YCxcbiAgICAgICAgICAgICRsb2NhbGl6ZWBTdXBwcmltZXIgZMOpZmluaXRpdmVtZW50YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGUgbXVsdGlwbGUgaXRlbXMgYXQgb25jZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBidWxrRGVsZXRlKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgICAgdGhpcy5idWxrZERlbGV0ZUNvbmZpcm1hdGlvbigpLnN1YnNjcmliZShjb25maXJtZWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IG91ciBvYmplY3RzIGhhdmUgSUQuIFRoaXMgaXMgdHJ1ZSBpbiBhbG1vc3QgYWxsIGNhc2VzLiBCdXQgaWZcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyBub3QsIGxpa2UgQXR0cmlidXRlUmVwb3J0Q29tcG9uZW50LCB0aGVuIHRoZSBpbmhlcml0aW5nIGNsYXNzIG11c3RcbiAgICAgICAgICAgICAgICAvLyBuZXZlciBjYWxsIHRoaXMgbWV0aG9kLlxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkIGFzIHtpZDogc3RyaW5nfVtdO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmRlbGV0ZShzZWxlY3Rpb24pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oJGxvY2FsaXplYFN1cHByaW3DqWApO1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5Rm9yY2VkVmFyaWFibGVzKHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhcmlhYmxlcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ2ZvcmNlZC1maWx0ZXInLCB7ZmlsdGVyOiB2YXJpYWJsZXMuZmlsdGVyfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhcmlhYmxlcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdwYWdpbmF0aW9uJywge3BhZ2luYXRpb246IHZhcmlhYmxlcy5wYWdpbmF0aW9ufSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhcmlhYmxlcy5zb3J0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdzb3J0aW5nJywge3NvcnRpbmc6IHZhcmlhYmxlcy5zb3J0aW5nfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdENvbHVtbnMoY29sdW1uczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zRm9yVGFibGUgPSBjb2x1bW5zO1xuXG4gICAgICAgIGlmICghdGhpcy5wZXJzaXN0U2VhcmNoIHx8IHRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZpcnN0IHNlbGVjdGlvbiB3ZSByZWNlaXZlIGlzIHRoZSBkZWZhdWx0IG9uZSBtYWRlIGJ5IGA8bmF0dXJhbC1jb2x1bW5zLXBpY2tlcj5gXG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0U2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZENvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUGVyc2lzdCBvbmx5IGlmIHdhbnRlZCBjb2x1bW5zIGFyZSBkaWZmZXJlbnQgZnJvbSBkZWZhdWx0IHNlbGVjdGlvblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpc0VxdWFsKHRoaXMuZGVmYXVsdFNlbGVjdGVkQ29sdW1ucywgY29sdW1ucykgPyBudWxsIDogY29sdW1ucy5qb2luKCcsJyk7XG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KCdjb2wnLCB2YWx1ZSwgdGhpcy5yb3V0ZSwgdGhpcy5nZXRTdG9yYWdlS2V5KCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
439
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL2Fic3RyYWN0LWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFHMUUsT0FBTyxFQUFDLGNBQWMsRUFBUSxhQUFhLEVBQW9CLGVBQWUsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRyxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDbkYsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUk3RCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsaUJBQWlCLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFDSCw0QkFBNEIsRUFJNUIsWUFBWSxHQUNmLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBQyxNQUFNLFdBQVcsQ0FBQzs7QUFJ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LE9BQU8sRUFBMEIsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7SUFDTCxDQUFDO0lBRU0sYUFBYSxDQUFDLE9BQWlCO1FBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBRS9CLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QyxPQUFPO1FBQ1gsQ0FBQztRQUVELHVGQUF1RjtRQUN2RixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQztRQUMxQyxDQUFDO2FBQU0sQ0FBQztZQUNKLHNFQUFzRTtZQUN0RSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztJQUNMLENBQUM7OEdBOWhCUSxtQkFBbUI7a0dBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsU0FBUzttQkFBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUM7MkVBeUJULGFBQWE7c0JBQTVCLEtBQUs7Z0JBS1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQWlCVSxlQUFlO3NCQUE5QixLQUFLO2dCQXVFSyxlQUFlO3NCQUR6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb25Nb2RlbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7RGlyZWN0aXZlLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BhZ2VFdmVudH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7U29ydH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBEYXRhLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXh0cmFzLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7ZGVmYXVsdHMsIGlzRW1wdHksIGlzRXF1YWwsIHBpY2t9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtOYXR1cmFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9tb2R1bGVzL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RQYW5lbH0gZnJvbSAnLi4vbW9kdWxlcy9wYW5lbHMvYWJzdHJhY3QtcGFuZWwnO1xuaW1wb3J0IHt0b0dyYXBoUUxEb2N0cmluZUZpbHRlcn0gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvY2xhc3Nlcy9ncmFwaHFsLWRvY3RyaW5lJztcbmltcG9ydCB7ZnJvbVVybCwgdG9Vcmx9IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL2NsYXNzZXMvdXJsJztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaEZhY2V0c30gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvdHlwZXMvZmFjZXQnO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoU2VsZWN0aW9uc30gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvdHlwZXMvdmFsdWVzJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbFBlcnNpc3RlbmNlU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvcGVyc2lzdGVuY2Uuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxEYXRhU291cmNlLCBQYWdpbmF0ZWREYXRhfSBmcm9tICcuL2RhdGEtc291cmNlJztcbmltcG9ydCB7XG4gICAgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcixcbiAgICBQYWdpbmF0aW9uSW5wdXQsXG4gICAgUXVlcnlWYXJpYWJsZXMsXG4gICAgU29ydGluZyxcbiAgICBTb3J0aW5nT3JkZXIsXG59IGZyb20gJy4vcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge0V4dHJhY3RUYWxsLCBFeHRyYWN0VmFsbCwgTGl0ZXJhbH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtOYXZpZ2FibGVJdGVtfSBmcm9tICcuL2Fic3RyYWN0LW5hdmlnYWJsZS1saXN0JztcbmltcG9ydCB7ZmlsdGVyLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QXZhaWxhYmxlQ29sdW1ufSBmcm9tICcuLi9tb2R1bGVzL2NvbHVtbnMtcGlja2VyL3R5cGVzJztcbmltcG9ydCB7dmFsaWRhdGVDb2x1bW5zLCB2YWxpZGF0ZVBhZ2luYXRpb24sIHZhbGlkYXRlU29ydGluZ30gZnJvbSAnLi91dGlsaXR5JztcblxudHlwZSBNYXliZU5hdmlnYWJsZSA9IExpdGVyYWwgfCBOYXZpZ2FibGVJdGVtPExpdGVyYWw+O1xuXG5mdW5jdGlvbiB1bndyYXBOYXZpZ2FibGUoaXRlbTogTWF5YmVOYXZpZ2FibGUpOiBMaXRlcmFsIHtcbiAgICBpZiAoJ2l0ZW0nIGluIGl0ZW0gJiYgJ2hhc05hdmlnYXRpb24nIGluIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhlbHBzIG1hbmFnaW5nIGEgbGlzdCBvZiBwYWdpbmF0ZWQgaXRlbXMgdGhhdCBjYW4gYmUgZmlsdGVyZWQsXG4gKiBzZWxlY3RlZCwgYW5kIHRoZW4gYnVsayBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQgb24gc2VsZWN0aW9uLlxuICpcbiAqIENvbXBvbmVudHMgaW5oZXJpdGluZyBmcm9tIHRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgYXMgc3RhbmRhbG9uZSB3aXRoIGlucHV0IGF0dHJpYnV0ZXMuXG4gKlxuICogVXNhZ2UgOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxuYXR1cmFsLW15LWxpc3RpbmcgW2ZvcmNlZFZhcmlhYmxlc109XCJ7ZmlsdGVyOi4uLn1cIiBbc2VsZWN0ZWRDb2x1bW5zXT1cIlsnY29sMSddXCIgW3BlcnNpc3RTZWFyY2hdPVwiZmFsc2VcIj5cbiAqIGBgYFxuICovXG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKHtzdGFuZGFsb25lOiB0cnVlfSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsQWJzdHJhY3RMaXN0PFxuICAgICAgICBUU2VydmljZSBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIFBhZ2luYXRlZERhdGE8TGl0ZXJhbD4sXG4gICAgICAgICAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueVxuICAgICAgICA+LFxuICAgICAgICAvLyBJbiBtb3N0IGNhc2UgdGhpcyBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBieSBpbmhlcml0aW5nIGNsYXNzZXMuXG4gICAgICAgIC8vIEl0IHNob3VsZCBvbmx5IGJlIHNwZWNpZmllZCB0byBvdmVycmlkZSBkZWZhdWx0IGlmIHRoZSBzZXJ2aWNlIGl0ZW1zIGFyZVxuICAgICAgICAvLyBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgc3RydWN0dXJlIGxpa2UgaW4gTmF0dXJhbEFic3RyYWN0TmF2aWdhYmxlTGlzdFxuICAgICAgICBUYWxsIGV4dGVuZHMgUGFnaW5hdGVkRGF0YTxNYXliZU5hdmlnYWJsZT4gPSBFeHRyYWN0VGFsbDxUU2VydmljZT4sXG4gICAgPlxuICAgIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0UGFuZWxcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgLyoqXG4gICAgICogV2hldGhlciBzZWFyY2ggc2hvdWxkIGJlIGxvYWRlZCBmcm9tIHVybC9zdG9yYWdlIGFuZCBwZXJzaXN0ZWQgaW4gaXQgdG9vLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwZXJzaXN0U2VhcmNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgY29sdW1ucyB0aGF0IGFyZSBhdmFpbGFibGUgdG8gdGhlIGVuZC11c2VyIHRvIHNlbGVjdCBmcm9tLCB2aWEgYDxuYXR1cmFsLWNvbHVtbnMtcGlja2VyPmBcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYXZhaWxhYmxlQ29sdW1uczogQXZhaWxhYmxlQ29sdW1uW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIENvbHVtbnMgbGlzdCBhZnRlciBpbnRlcmFjdGlvbiB3aXRoIGA8bmF0dXJhbC1jb2x1bW5zLXBpY2tlcj5gXG4gICAgICovXG4gICAgcHVibGljIGNvbHVtbnNGb3JUYWJsZTogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGNvbHVtbiBzZWxlY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IGhhcHBlbmVkIGFmdGVyIGA8bmF0dXJhbC1jb2x1bW5zLXBpY2tlcj5gIGluaXRpYWxpemF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0ZWRDb2x1bW5zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVmlzaWJsZSAoY2hlY2tlZCkgY29sdW1uc1xuICAgICAqXG4gICAgICogSW5zdGVhZCBvZiB1c2luZyB0aGlzLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIGNvcnJlY3RseSBjb25maWd1cmluZyBgQXZhaWxhYmxlQ29sdW1uLmNoZWNrZWRgLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZENvbHVtbnM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFNvdXJjZSBvZiB0aGUgbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyBkYXRhU291cmNlOiBOYXR1cmFsRGF0YVNvdXJjZTxUYWxsPiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGlvbiBmb3IgYnVsayBhY3Rpb25zXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxFeHRyYWN0VGFsbDxUU2VydmljZT5bJ2l0ZW1zJ11bMF0+KHRydWUsIFtdKTtcblxuICAgIC8qKlxuICAgICAqIE5leHQgZXhlY3V0ZWQgYWN0aW9uIGZyb20gYnVsayBtZW51XG4gICAgICovXG4gICAgcHVibGljIGJ1bGtBY3Rpb25TZWxlY3RlZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBDZW50cmFsaXNhdGlvbiBvZiBxdWVyeSB2YXJpYWJsZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgdmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxFeHRyYWN0VmFsbDxUU2VydmljZT4+ID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8XG4gICAgICAgIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPlxuICAgID4oKTtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIG5hdHVyYWwtc2VhcmNoIGZhY2V0c1xuICAgICAqL1xuICAgIHB1YmxpYyBuYXR1cmFsU2VhcmNoRmFjZXRzOiBOYXR1cmFsU2VhcmNoRmFjZXRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBSZXN1bHQgb2YgYSBzZWFyY2ggKGNhbiBiZSBwcm92aWRlZCBhcyBpbnB1dCBmb3IgaW5pdGlhbGlzYXRpb24pXG4gICAgICovXG4gICAgcHVibGljIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IFtbXV07XG5cbiAgICAvKipcbiAgICAgKiBEYXRhIGF0dHJpYnV0ZSBwcm92aWRlZCBieSBhY3RpdmF0ZWQgcm91dGUgc25hcHNob3RcbiAgICAgKi9cbiAgICBwdWJsaWMgcm91dGVEYXRhPzogRGF0YTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgcGFnZSBzaXplc1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMjUsIDUwLCAxMDAsIDIwMF07XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIHBhZ2luYXRpb24gc2V0dXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFBhZ2luYXRpb246IFJlcXVpcmVkPFBhZ2luYXRpb25JbnB1dD4gPSB7XG4gICAgICAgIG9mZnNldDogbnVsbCxcbiAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICBwYWdlU2l6ZTogMjUsXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgc29ydGluZ1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWZhdWx0U29ydGluZz86IFNvcnRpbmdbXTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhbGVydFNlcnZpY2UgPSBpbmplY3QoTmF0dXJhbEFsZXJ0U2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBlcnNpc3RlbmNlU2VydmljZSA9IGluamVjdChOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogVFNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYXJpYWJsZXMgdGhhdCBhcmUgYWx3YXlzIGZvcmNlZCBvbiBhIGxpc3QsIGluIGFkZGl0aW9uIHRvIHdoYXRldmVyIHRoZSBlbmQtdXNlciBtaWdodCBzZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZm9yY2VkVmFyaWFibGVzKHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JjZWRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGNoYW5nZSwgY2hlY2sgRG9jdW1lbnRzQ29tcG9uZW50IHRoYXQgb3ZlcnJpZGVzIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBjYWxsaW5nIHN1cGVyLm5nT25Jbml0KCkuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvdXRlRGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcblxuICAgICAgICB0aGlzLmluaXRGcm9tUm91dGUoKTtcbiAgICAgICAgdGhpcy5pbml0RnJvbVBlcnNpc3RlZCgpO1xuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5kZWZhdWx0cygncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9uOiB0aGlzLmRlZmF1bHRQYWdpbmF0aW9ufSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuZGVmYXVsdHMoJ3NvcnRpbmcnLCB7c29ydGluZzogdGhpcy5kZWZhdWx0U29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTmF0dXJhbERhdGFTb3VyY2U8VGFsbD4odGhpcy5nZXREYXRhT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcblxuICAgICAgICAvLyBVcGRhdGUgbmF0dXJhbCBzZWFyY2ggd2hlbiBoaXN0b3J5IGNoYW5nZXMgKGJhY2svZm9yd2FyZCBidXR0b25zKVxuICAgICAgICAvLyBIaXN0b3J5IHN0YXRlIGlzIGRldGVjdGFibGUgb25seSBvbiBOYXZpZ2F0aW9uU3RhcnQgKHBvcHN0YXRlIHRyaWdnZXIpXG4gICAgICAgIC8vIEJ1dCB3ZSBuZWVkIHBhcmFtZXRlcnMgZnJvbSB1cmwgYWZ0ZXIgTmF2aWdhdGlvbkVuZC4gU28gcHJvY2VlZCBpbiB0d28gc3RlcHMgd2l0aCBhIGZsYWcuXG4gICAgICAgIGxldCBpc1BvcFN0YXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0ICYmIGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlzUG9wU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kICYmIGlzUG9wU3RhdGUpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNQb3BTdGF0ZSA9IGZhbHNlOyAvLyByZXNldCBmbGFnXG4gICAgICAgICAgICAgICAgdGhpcy5uYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IGZyb21VcmwodGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0RnJvbVVybCgnbnMnLCB0aGlzLnJvdXRlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJzaXN0IHNlYXJjaCBhbmQgdGhlbiBsYXVuY2ggd2hhdGV2ZXIgaXMgcmVxdWlyZWQgdG8gcmVmcmVzaCB0aGUgbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWFyY2goXG4gICAgICAgIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyxcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgICAgIHJlc2V0UGFnaW5hdGlvbiA9IHRydWUsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2UgaW5kZXggdG8gcmVzdGFydCB0aGUgcGFnaW5hdGlvbiAocHJlc2VydmUgcGFnZVNpemUpXG5cbiAgICAgICAgaWYgKHJlc2V0UGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCdwYWdpbmF0aW9uJywge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHBpY2sodGhpcy5kZWZhdWx0UGFnaW5hdGlvbiwgWydvZmZzZXQnLCAncGFnZUluZGV4J10pLFxuICAgICAgICAgICAgfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyc2lzdCBpZiBhY3RpdmF0ZWRcbiAgICAgICAgLy8gVHdvIHBhcmFsbGVsIG5hdmlnYXRpb25zIGNvbmZsaWN0LiBXZSBmaXJzdCBwZXJzaXN0IHRoZSBzZWFyY2gsIHRoZW4gdGhlIHBhZ2luYXRpb25cbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdChcbiAgICAgICAgICAgICAgICAnbnMnLFxuICAgICAgICAgICAgICAgIHRvVXJsKG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmFnZUtleSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uKHBhZ2luYXRpb24sIHByb21pc2UsIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdChuYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHNvcnRpbmcgdmFyaWFibGVzIGZvciBxdWVyeSBhbmQgcGVyc2lzdCB0aGUgbmV3IHZhbHVlIGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZVxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5vdCBwZXJzaXN0ZWRcbiAgICAgKiBAcGFyYW0gc29ydGluZ0V2ZW50cyBMaXN0IG9mIG1hdGVyaWFsIHNvcnRpbmcgZXZlbnRzXG4gICAgICovXG4gICAgcHVibGljIHNvcnRpbmcoc29ydGluZ0V2ZW50czogKFNvcnQgJiBQYXJ0aWFsPFBpY2s8U29ydGluZywgJ251bGxBc0hpZ2hlc3QnIHwgJ2VtcHR5U3RyaW5nQXNIaWdoZXN0Jz4+KVtdKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2UgaW5kZXggdG8gcmVzdGFydCB0aGUgcGFnaW5hdGlvbiAocHJlc2VydmUgcGFnZVNpemUpXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5tZXJnZSgncGFnaW5hdGlvbicsIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHBpY2sodGhpcy5kZWZhdWx0UGFnaW5hdGlvbiwgWydvZmZzZXQnLCAncGFnZUluZGV4J10pLFxuICAgICAgICB9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG5cbiAgICAgICAgLy8gUHJlc2VydmUgb25seSBzb3J0aW5nIGV2ZW50cyB3aXRoIGRpcmVjdGlvbiBhbmQgY29udmVydCBpbnRvIG5hdHVyYWwvZ3JhcGhxbCBTb3J0aW5nIHR5cGVcbiAgICAgICAgbGV0IHNvcnRpbmc6IFNvcnRpbmdbXSA9IHNvcnRpbmdFdmVudHNcbiAgICAgICAgICAgIC5maWx0ZXIoZSA9PiAhIWUuZGlyZWN0aW9uKVxuICAgICAgICAgICAgLm1hcChzb3J0aW5nRXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHM6IFNvcnRpbmcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzb3J0aW5nRXZlbnQuYWN0aXZlLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoc29ydGluZ0V2ZW50LmRpcmVjdGlvbiA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5vcmRlciA9IFNvcnRpbmdPcmRlci5BU0M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3J0aW5nRXZlbnQuZGlyZWN0aW9uID09PSAnZGVzYycpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5vcmRlciA9IFNvcnRpbmdPcmRlci5ERVNDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgnbnVsbEFzSGlnaGVzdCcgaW4gc29ydGluZ0V2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHMubnVsbEFzSGlnaGVzdCA9IHNvcnRpbmdFdmVudC5udWxsQXNIaWdoZXN0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgnZW1wdHlTdHJpbmdBc0hpZ2hlc3QnIGluIHNvcnRpbmdFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICBzLmVtcHR5U3RyaW5nQXNIaWdoZXN0ID0gc29ydGluZ0V2ZW50LmVtcHR5U3RyaW5nQXNIaWdoZXN0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRW1wdHkgc29ydGluZyBmYWxsYmFja3Mgb24gZGVmYXVsdFxuICAgICAgICBpZiAoc29ydGluZy5sZW5ndGggPT09IDAgJiYgdGhpcy5kZWZhdWx0U29ydGluZykge1xuICAgICAgICAgICAgc29ydGluZyA9IHRoaXMuZGVmYXVsdFNvcnRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgc29ydGluZyBhcyBzZWFyY2ggdmFyaWFibGVcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnc29ydGluZycsIHtzb3J0aW5nOiBzb3J0aW5nfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuXG4gICAgICAgIGlmICh0aGlzLnBlcnNpc3RTZWFyY2ggJiYgIXRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgLy8gSWYgc29ydGluZyBpcyBlcXVhbCB0byBkZWZhdWx0IHNvcnRpbmcsIG51bGxpZnkgaXQgdG8gcmVtb3ZlIGZyb20gcGVyc2lzdGVuY2UgKHVybCBhbmQgc2Vzc2lvbiBzdG9yYWdlKVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3QoXG4gICAgICAgICAgICAgICAgJ3NvJyxcbiAgICAgICAgICAgICAgICBpc0VxdWFsKHNvcnRpbmcsIHRoaXMuZGVmYXVsdFNvcnRpbmcpID8gbnVsbCA6IHNvcnRpbmcsXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0b3JhZ2VLZXkoKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLmdldFBhZ2luYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbihwYWdpbmF0aW9uLCBwcm9taXNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBjdXJyZW50IHBhZ2luYXRpb24sIGVpdGhlciB0aGUgdXNlciBkZWZpbmVkIG9uZSwgb3IgdGhlIGRlZmF1bHQgb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQYWdpbmF0aW9uKCk6IFBhZ2luYXRpb25JbnB1dCB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25DaGFubmVsOiBQYXJ0aWFsPEV4dHJhY3RWYWxsPFRTZXJ2aWNlPj4gfCB1bmRlZmluZWQgPSB0aGlzLnZhcmlhYmxlc01hbmFnZXIuZ2V0KCdwYWdpbmF0aW9uJyk7XG5cbiAgICAgICAgaWYgKHBhZ2luYXRpb25DaGFubmVsICYmIHBhZ2luYXRpb25DaGFubmVsLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIC8vIFRoZSBjYXN0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgVHlwZXNjcmlwdCBjb3JyZWN0bHkgbmFycm93IGRvd24gdGhlIHR5cGUgdG8gYFBhZ2luYXRpb25JbnB1dGBcbiAgICAgICAgICAgIC8vIGJ1dCBzb21laG93IHN0aWxsIGdldCBjb25mdXNlZCB3aGVuIHJldHVybmluZyBpdFxuICAgICAgICAgICAgcmV0dXJuIHBhZ2luYXRpb25DaGFubmVsLnBhZ2luYXRpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGFnaW5hdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgcGFnaW5hdGlvbiB2YXJpYWJsZXMgZm9yIHF1ZXJ5IGFuZCBwZXJzaXN0IGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZSB0aGUgbmV3IHZhbHVlXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgbm90IHBlcnNpc3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IE5hdHVyYWwgb3IgUGFnaW5hdG9yIFBhZ2VFdmVudFxuICAgICAqIEBwYXJhbSBkZWZlciBQcm9taXNlICh1c3VhbGx5IGEgcm91dGUgcHJvbWlzZSkgdGhhdCBkZWZlcnMgdGhlIHJlZGlyZWN0aW9uIGZyb20gdGhpcyBjYWxsIHRvIHByZXZlbnQgcm91dGUgbmF2aWdhdGlvbiBjb2xsaXNpb25cbiAgICAgKiBAcGFyYW0gbmF2aWdhdGlvbkV4dHJhcyBBbmd1bGFyIHJvdXRlciBuYXZpZ2F0aW9uIG9wdGlvbnMuIElzIHJlbGV2YW50IG9ubHkgaWYgcGVyc2lzdFNlYXJjaCBpcyB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHBhZ2luYXRpb24oXG4gICAgICAgIGV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgfCBQYWdlRXZlbnQsXG4gICAgICAgIGRlZmVyPzogUHJvbWlzZTx1bmtub3duPixcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGxldCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgPSB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uO1xuICAgICAgICBsZXQgZm9yUGVyc2lzdGVuY2U6IFBhZ2luYXRpb25JbnB1dCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gbmF0dXJhbC9ncmFwaHFsIGZvcm1hdCwgYWRkaW5nIG1pc3NpbmcgYXR0cmlidXRlc1xuICAgICAgICBsZXQgbmF0dXJhbEV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgPSBwaWNrKGV2ZW50LCBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKSk7IC8vIG9iamVjdCB3aXRoIG9ubHkgUGFnaW5hdGlvbklucHV0IGF0dHJpYnV0ZXNcbiAgICAgICAgbmF0dXJhbEV2ZW50ID0gZGVmYXVsdHMobmF0dXJhbEV2ZW50LCB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKTsgLy8gRGVmYXVsdCB3aXRoIGNvbnRyb2xsZXIgdmFsdWVzXG5cbiAgICAgICAgaWYgKCFpc0VxdWFsKG5hdHVyYWxFdmVudCwgdGhpcy5kZWZhdWx0UGFnaW5hdGlvbikpIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb24gPSBmb3JQZXJzaXN0ZW5jZSA9IG5hdHVyYWxFdmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbn0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLnBlcnNpc3RQYWdpbmF0aW9uKGZvclBlcnNpc3RlbmNlLCBkZWZlciwgbmF2aWdhdGlvbkV4dHJhcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHBlcnNpc3RQYWdpbmF0aW9uKFxuICAgICAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgfCBudWxsLFxuICAgICAgICBkZWZlcj86IFByb21pc2U8dW5rbm93bj4sXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wZXJzaXN0U2VhcmNoICYmICF0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgIC8vIERlY2xhcmUgcGVyc2lzdCBmdW5jdGlvblxuICAgICAgICAgICAgY29uc3QgcGVyc2lzdCA9ICh2YWx1ZTogUGFnaW5hdGlvbklucHV0IHwgbnVsbCk6IFByb21pc2U8Ym9vbGVhbj4gPT5cbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KCdwYScsIHZhbHVlLCB0aGlzLnJvdXRlLCB0aGlzLmdldFN0b3JhZ2VLZXkoKSwgbmF2aWdhdGlvbkV4dHJhcyk7XG5cbiAgICAgICAgICAgIC8vIENhbGwgZnVuY3Rpb24gZGlyZWN0bHkgb3Igd2hlbiBwcm9taXNlIGlzIHJlc29sdmVkXG4gICAgICAgICAgICBpZiAoZGVmZXIpIHtcbiAgICAgICAgICAgICAgICBkZWZlci50aGVuKCgpID0+IHBlcnNpc3QocGFnaW5hdGlvbikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZXJzaXN0KHBhZ2luYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIG1hc3RlclRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5pdGVtcy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW53cmFwcGVkID0gdW53cmFwTmF2aWdhYmxlKHJvdyk7XG4gICAgICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodW53cmFwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBlbGVtZW50cyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93c1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICAgICAgbGV0IG51bVJvd3MgPSAwO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/Lml0ZW1zLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcE5hdmlnYWJsZShyb3cpO1xuICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgIG51bVJvd3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgYnVsayBhY3Rpb24gaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgYnVsa0FjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gZXhlY3V0ZSBhIGJ1bGsgYWN0aW9uIHdpdGhvdXQgc2VsZWN0aW5nIG9uZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGV4ZWN1dGUgYSBidWxrIGFjdGlvbiB0aGF0IGRvZXMgbm90IGV4aXN0OiAnICsgdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMgYXMgYW55KVt0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZF0oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbiBub24tcGFuZWwgY29udGV4dCwgaGVhZGVyIGlzIGFsd2F5cyB2aXNpYmxlLlxuICAgICAqIEluIHBhbmVsIGNvbnRleHQsIGhlYWRlciBpcyBoaWRkZW4gd2hlbiBubyByZXN1bHRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbCB8fCAodGhpcy5pc1BhbmVsICYmIHRoaXMuc2hvd1RhYmxlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBpcyB2aXNpYmxlIGluIG1vc3QgY2FzZXMsIGJ1dCBoaWRkZW4gb24gYSBwYW5lbFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93U2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWJsZSBzaG91bGQgYmUgc2hvd24gb25seSB3aGVuIHRoZXJlIGlzIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1RhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRhdGFTb3VyY2UgJiYgISF0aGlzLmRhdGFTb3VyY2UuZGF0YSAmJiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vIHJlc3VsdHMgaXMgc2hvd24gd2hlbiB0aGVyZSBpcyBubyBpdGVtcywgYnV0IG9ubHkgaW4gbm9uLXBhbmVsIGNvbnRleHQgb25seS5cbiAgICAgKiBJbiBwYW5lbHMgd2Ugd2FudCBkaXNjcmV0ZSBtb2RlLCB0aGVyZSBpcyBubyBzZWFyY2ggYW5kIG5vIFwibm8tcmVzdWx0c1wiXG4gICAgICovXG4gICAgcHVibGljIHNob3dOb1Jlc3VsdHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc1BhbmVsICYmICEhdGhpcy5kYXRhU291cmNlICYmICEhdGhpcy5kYXRhU291cmNlLmRhdGEgJiYgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgZnJvbSByb3V0ZS5cbiAgICAgKlxuICAgICAqIFVzZXMgZGF0YSBwcm92aWRlZCBieSByb3V0ZXIgc3VjaCBhczpcbiAgICAgKlxuICAgICAqIC0gYHJvdXRlLmRhdGEuZm9yY2VkVmFyaWFibGVzYFxuICAgICAqIC0gYHJvdXRlLmRhdGEuYXZhaWxhYmxlQ29sdW1uc2BcbiAgICAgKiAtIGByb3V0ZS5kYXRhLnNlbGVjdGVkQ29sdW1uc2BcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaW5pdEZyb21Sb3V0ZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gVmFyaWFibGVzXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZm9yY2VkVmFyaWFibGVzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Rm9yY2VkVmFyaWFibGVzKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5mb3JjZWRWYXJpYWJsZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXZhaWxhYmxlIGNvbHVtbnNcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5hdmFpbGFibGVDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUNvbHVtbnMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuYXZhaWxhYmxlQ29sdW1ucztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbHVtbnNcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5zZWxlY3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnNlbGVjdGVkQ29sdW1ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXREYXRhT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPFRhbGw+IHtcbiAgICAgICAgLy8gSGVyZSB0aGUgY2FzdGluZyBpcyBhIGJpdCB1bmZvcnR1bmF0ZSBidXQgcmVxdWlyZWQgYmVjYXVzZSBOYXR1cmFsQWJzdHJhY3ROYXZpZ2FibGVMaXN0XG4gICAgICAgIC8vIGJyZWFrcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgY29udmVudGlvbiAoYnkgd3JhcHBpbmcgaXRlbXMgaW4gYSBzdHJ1Y3R1cmUpLiBJZGVhbGx5IHdlIHNob3VsZCByZW1vdmVcbiAgICAgICAgLy8gdGhlIGNhc3RpbmcgYW5kIHJlc29sdmUgdGhpbmdzIGluIGEgYmV0dGVyIHdheSwgYnV0IHRoYXQncyB0b28gbXVjaCB3b3JrIGZvciBub3dcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLndhdGNoQWxsKHRoaXMudmFyaWFibGVzTWFuYWdlciBhcyB1bmtub3duIGFzIGFueSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKSBhcyB1bmtub3duIGFzIE9ic2VydmFibGU8VGFsbD47XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluaXRGcm9tUGVyc2lzdGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucGVyc2lzdFNlYXJjaCB8fCB0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSB0aGlzLmdldFN0b3JhZ2VLZXkoKTtcblxuICAgICAgICAvLyBQYWdpbmF0aW9uIDogcGFcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHZhbGlkYXRlUGFnaW5hdGlvbih0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ3BhJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSkpO1xuICAgICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9ufSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29ydGluZyA6IHNvXG4gICAgICAgIGNvbnN0IHNvcnRpbmcgPSB2YWxpZGF0ZVNvcnRpbmcodGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0KCdzbycsIHRoaXMucm91dGUsIHN0b3JhZ2VLZXkpKTtcbiAgICAgICAgaWYgKHNvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3NvcnRpbmcnLCB7c29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbHVtbnNcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkQ29sdW1ucyA9IHZhbGlkYXRlQ29sdW1ucyh0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ2NvbCcsIHRoaXMucm91dGUsIHN0b3JhZ2VLZXkpKTtcbiAgICAgICAgaWYgKHBlcnNpc3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcGVyc2lzdGVkQ29sdW1ucztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5hdHVyYWwgc2VhcmNoIDogbnNcbiAgICAgICAgdGhpcy5uYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IGZyb21VcmwodGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0KCducycsIHRoaXMucm91dGUsIHN0b3JhZ2VLZXkpKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdCh0aGlzLm5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VhcmNoQW5kUmVmcmVzaExpc3QoXG4gICAgICAgIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyxcbiAgICAgICAgaWdub3JlRW1wdHlGaWx0ZXIgPSBmYWxzZSxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdG9HcmFwaFFMRG9jdHJpbmVGaWx0ZXIodGhpcy5uYXR1cmFsU2VhcmNoRmFjZXRzLCBuYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk7XG5cbiAgICAgICAgaWYgKGlnbm9yZUVtcHR5RmlsdGVyICYmIGlzRW1wdHkoZmlsdGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnbmF0dXJhbC1zZWFyY2gnLCB7ZmlsdGVyfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBjdXJyZW50IHVybCBleGNsdWRpbmcgbGFzdCByb3V0ZSBwYXJhbWV0ZXJzO1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRTdG9yYWdlS2V5KCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICB1cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50c1t1cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50cy5sZW5ndGggLSAxXS5wYXJhbWV0ZXJzID0ge307XG4gICAgICAgIHJldHVybiB1cmxUcmVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGJ1bGtkRGVsZXRlQ29uZmlybWF0aW9uKCk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGVydFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgICAgICRsb2NhbGl6ZWBTdXBwcmVzc2lvbmAsXG4gICAgICAgICAgICAkbG9jYWxpemVgVm91bGV6LXZvdXMgc3VwcHJpbWVyIGTDqWZpbml0aXZlbWVudCBsZXMgw6lsw6ltZW50cyBzw6lsZWN0aW9ubsOpcyA/YCxcbiAgICAgICAgICAgICRsb2NhbGl6ZWBTdXBwcmltZXIgZMOpZmluaXRpdmVtZW50YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGUgbXVsdGlwbGUgaXRlbXMgYXQgb25jZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBidWxrRGVsZXRlKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgICAgdGhpcy5idWxrZERlbGV0ZUNvbmZpcm1hdGlvbigpLnN1YnNjcmliZShjb25maXJtZWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IG91ciBvYmplY3RzIGhhdmUgSUQuIFRoaXMgaXMgdHJ1ZSBpbiBhbG1vc3QgYWxsIGNhc2VzLiBCdXQgaWZcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyBub3QsIGxpa2UgQXR0cmlidXRlUmVwb3J0Q29tcG9uZW50LCB0aGVuIHRoZSBpbmhlcml0aW5nIGNsYXNzIG11c3RcbiAgICAgICAgICAgICAgICAvLyBuZXZlciBjYWxsIHRoaXMgbWV0aG9kLlxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkIGFzIHtpZDogc3RyaW5nfVtdO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmRlbGV0ZShzZWxlY3Rpb24pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oJGxvY2FsaXplYFN1cHByaW3DqWApO1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5Rm9yY2VkVmFyaWFibGVzKHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhcmlhYmxlcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ2ZvcmNlZC1maWx0ZXInLCB7ZmlsdGVyOiB2YXJpYWJsZXMuZmlsdGVyfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhcmlhYmxlcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdwYWdpbmF0aW9uJywge3BhZ2luYXRpb246IHZhcmlhYmxlcy5wYWdpbmF0aW9ufSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhcmlhYmxlcy5zb3J0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdzb3J0aW5nJywge3NvcnRpbmc6IHZhcmlhYmxlcy5zb3J0aW5nfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdENvbHVtbnMoY29sdW1uczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zRm9yVGFibGUgPSBjb2x1bW5zO1xuXG4gICAgICAgIGlmICghdGhpcy5wZXJzaXN0U2VhcmNoIHx8IHRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZpcnN0IHNlbGVjdGlvbiB3ZSByZWNlaXZlIGlzIHRoZSBkZWZhdWx0IG9uZSBtYWRlIGJ5IGA8bmF0dXJhbC1jb2x1bW5zLXBpY2tlcj5gXG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0U2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZENvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUGVyc2lzdCBvbmx5IGlmIHdhbnRlZCBjb2x1bW5zIGFyZSBkaWZmZXJlbnQgZnJvbSBkZWZhdWx0IHNlbGVjdGlvblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpc0VxdWFsKHRoaXMuZGVmYXVsdFNlbGVjdGVkQ29sdW1ucywgY29sdW1ucykgPyBudWxsIDogY29sdW1ucy5qb2luKCcsJyk7XG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KCdjb2wnLCB2YWx1ZSwgdGhpcy5yb3V0ZSwgdGhpcy5nZXRTdG9yYWdlS2V5KCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -120,10 +120,10 @@ export class NaturalAbstractNavigableList extends NaturalAbstractList {
120
120
  }
121
121
  return [item];
122
122
  }
123
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAbstractNavigableList, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
124
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: NaturalAbstractNavigableList, isStandalone: true, inputs: { ancestorRelationName: "ancestorRelationName" }, usesInheritance: true, ngImport: i0 }); }
123
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractNavigableList, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
124
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalAbstractNavigableList, isStandalone: true, inputs: { ancestorRelationName: "ancestorRelationName" }, usesInheritance: true, ngImport: i0 }); }
125
125
  }
126
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAbstractNavigableList, decorators: [{
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractNavigableList, decorators: [{
127
127
  type: Directive,
128
128
  args: [{ standalone: true }]
129
129
  }], ctorParameters: () => [{ type: undefined }], propDecorators: { ancestorRelationName: [{
@@ -31,10 +31,10 @@ export class NaturalHttpPrefixDirective {
31
31
  }
32
32
  }
33
33
  }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalHttpPrefixDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
35
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: NaturalHttpPrefixDirective, isStandalone: true, selector: "[naturalHttpPrefix]", inputs: { naturalHttpPrefix: "naturalHttpPrefix" }, host: { listeners: { "ngModelChange": "httpize($event)" } }, ngImport: i0 }); }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalHttpPrefixDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
35
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalHttpPrefixDirective, isStandalone: true, selector: "[naturalHttpPrefix]", inputs: { naturalHttpPrefix: "naturalHttpPrefix" }, host: { listeners: { "ngModelChange": "httpize($event)" } }, ngImport: i0 }); }
36
36
  }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalHttpPrefixDirective, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalHttpPrefixDirective, decorators: [{
38
38
  type: Directive,
39
39
  args: [{
40
40
  selector: '[naturalHttpPrefix]',
@@ -43,10 +43,10 @@ export class NaturalAlertService {
43
43
  });
44
44
  return dialog.afterClosed();
45
45
  }
46
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAlertService, deps: [{ token: i1.MatDialog }, { token: i2.MatSnackBar }], target: i0.ɵɵFactoryTarget.Injectable }); }
47
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAlertService, providedIn: 'root' }); }
46
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAlertService, deps: [{ token: i1.MatDialog }, { token: i2.MatSnackBar }], target: i0.ɵɵFactoryTarget.Injectable }); }
47
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAlertService, providedIn: 'root' }); }
48
48
  }
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAlertService, decorators: [{
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAlertService, decorators: [{
50
50
  type: Injectable,
51
51
  args: [{
52
52
  providedIn: 'root',
@@ -8,10 +8,10 @@ export class NaturalConfirmComponent {
8
8
  constructor(data) {
9
9
  this.data = data;
10
10
  }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalConfirmComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
12
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: NaturalConfirmComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<h2 mat-dialog-title>{{ data.title }}</h2>\n<mat-dialog-content\n ><p class=\"mat-body\">{{ data.message }}</p></mat-dialog-content\n>\n<mat-dialog-actions align=\"end\">\n <button [mat-dialog-close]=\"false\" mat-button>{{ data.cancelText }}</button>\n <button [mat-dialog-close]=\"true\" mat-stroked-button cdkFocusInitial>{{ data.confirmText }}</button>\n</mat-dialog-actions>\n", styles: ["mat-dialog-content{max-width:40em}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] }); }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalConfirmComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.3", type: NaturalConfirmComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<h2 mat-dialog-title>{{ data.title }}</h2>\n<mat-dialog-content\n ><p class=\"mat-body\">{{ data.message }}</p></mat-dialog-content\n>\n<mat-dialog-actions align=\"end\">\n <button [mat-dialog-close]=\"false\" mat-button>{{ data.cancelText }}</button>\n <button [mat-dialog-close]=\"true\" mat-stroked-button cdkFocusInitial>{{ data.confirmText }}</button>\n</mat-dialog-actions>\n", styles: ["mat-dialog-content{max-width:40em}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] }); }
13
13
  }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalConfirmComponent, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalConfirmComponent, decorators: [{
15
15
  type: Component,
16
16
  args: [{ standalone: true, imports: [MatDialogModule, MatButtonModule], template: "<h2 mat-dialog-title>{{ data.title }}</h2>\n<mat-dialog-content\n ><p class=\"mat-body\">{{ data.message }}</p></mat-dialog-content\n>\n<mat-dialog-actions align=\"end\">\n <button [mat-dialog-close]=\"false\" mat-button>{{ data.cancelText }}</button>\n <button [mat-dialog-close]=\"true\" mat-stroked-button cdkFocusInitial>{{ data.confirmText }}</button>\n</mat-dialog-actions>\n", styles: ["mat-dialog-content{max-width:40em}\n"] }]
17
17
  }], ctorParameters: () => [{ type: undefined, decorators: [{
@@ -124,8 +124,8 @@ export class NaturalAvatarComponent {
124
124
  height: this.size + 'px',
125
125
  };
126
126
  }
127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAvatarComponent, deps: [{ token: i1.AvatarService }], target: i0.ɵɵFactoryTarget.Component }); }
128
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: NaturalAvatarComponent, isStandalone: true, selector: "natural-avatar", inputs: { image: "image", initials: "initials", gravatar: "gravatar", size: "size", decorated: "decorated", textSizeRatio: "textSizeRatio", bgColor: "bgColor", fgColor: "fgColor", borderRadius: "borderRadius", textMaximumLength: "textMaximumLength" }, host: { properties: { "style.height.px": "this.size", "style.width.px": "this.size", "class.decorated": "this.decorated" } }, usesOnChanges: true, ngImport: i0, template: `
127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAvatarComponent, deps: [{ token: i1.AvatarService }], target: i0.ɵɵFactoryTarget.Component }); }
128
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: NaturalAvatarComponent, isStandalone: true, selector: "natural-avatar", inputs: { image: "image", initials: "initials", gravatar: "gravatar", size: "size", decorated: "decorated", textSizeRatio: "textSizeRatio", bgColor: "bgColor", fgColor: "fgColor", borderRadius: "borderRadius", textMaximumLength: "textMaximumLength" }, host: { properties: { "style.height.px": "this.size", "style.width.px": "this.size", "class.decorated": "this.decorated" } }, usesOnChanges: true, ngImport: i0, template: `
129
129
  <div class="avatar-container" [ngStyle]="hostStyle">
130
130
  @if (avatarSrc) {
131
131
  <img
@@ -146,7 +146,7 @@ export class NaturalAvatarComponent {
146
146
  </div>
147
147
  `, isInline: true, styles: [":host{display:block}:host.decorated{position:relative}:host.decorated .avatar-container:before{position:absolute;inset:0;border-radius:50%;background:linear-gradient(345deg,#fff0 25%,#ffffff54);content:\"\"}:host.decorated .avatar-content{text-shadow:0 1px 0 rgba(0,0,0,.6)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
148
148
  }
149
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NaturalAvatarComponent, decorators: [{
149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAvatarComponent, decorators: [{
150
150
  type: Component,
151
151
  args: [{ selector: 'natural-avatar', template: `
152
152
  <div class="avatar-container" [ngStyle]="hostStyle">
@@ -53,10 +53,10 @@ export class AvatarService {
53
53
  .map(letter => letter.charCodeAt(0))
54
54
  .reduce((previous, current) => previous + current);
55
55
  }
56
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AvatarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
57
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AvatarService, providedIn: 'root' }); }
56
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: AvatarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
57
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: AvatarService, providedIn: 'root' }); }
58
58
  }
59
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AvatarService, decorators: [{
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: AvatarService, decorators: [{
60
60
  type: Injectable,
61
61
  args: [{
62
62
  providedIn: 'root',