@messaia/cdk 15.0.0-rc76 → 15.0.0-rc78

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 (146) hide show
  1. package/esm2020/lib/base/base.module.mjs +8 -8
  2. package/esm2020/lib/base/components/base.component.mjs +6 -6
  3. package/esm2020/lib/base/components/dynamic-table-config-dialog.comnponent.mjs +3 -3
  4. package/esm2020/lib/base/components/generic-form-base.component.mjs +37 -37
  5. package/esm2020/lib/base/components/generic-form.component.mjs +15 -15
  6. package/esm2020/lib/base/components/generic-list.component.mjs +3 -3
  7. package/esm2020/lib/base/components/generic-reactive-form.component.mjs +15 -15
  8. package/esm2020/lib/base/interceptors/base.interceptor.mjs +3 -3
  9. package/esm2020/lib/base/interceptors/caching-interceptor.mjs +3 -3
  10. package/esm2020/lib/base/interceptors/loading.interceptor.mjs +3 -3
  11. package/esm2020/lib/base/services/file.service.mjs +3 -3
  12. package/esm2020/lib/base/services/loading-screen.service.mjs +3 -3
  13. package/esm2020/lib/base/services/print.service.mjs +3 -3
  14. package/esm2020/lib/chips/chips.module.mjs +4 -4
  15. package/esm2020/lib/chips/components/chips.component.mjs +78 -78
  16. package/esm2020/lib/chips/directives/autocomplete-option.directive.mjs +3 -3
  17. package/esm2020/lib/chips/directives/chip.directive.mjs +3 -3
  18. package/esm2020/lib/common/common.module.mjs +4 -4
  19. package/esm2020/lib/common/directives/delayed-hover.directive.mjs +3 -3
  20. package/esm2020/lib/common/directives/disable-control.directive.mjs +11 -11
  21. package/esm2020/lib/common/functions/utils.mjs +3 -3
  22. package/esm2020/lib/common/helpers/app-storage.mjs +3 -3
  23. package/esm2020/lib/common/helpers/dynamic-builder.mjs +3 -3
  24. package/esm2020/lib/common/helpers/dynamic-component-compiler.mjs +3 -3
  25. package/esm2020/lib/common/models/app-setting.mjs +3 -3
  26. package/esm2020/lib/common/pipes/data-source.pipe.mjs +3 -3
  27. package/esm2020/lib/common/pipes/enum.pipe.mjs +3 -3
  28. package/esm2020/lib/common/pipes/file-size.pipe.mjs +3 -3
  29. package/esm2020/lib/common/pipes/filter.pipe.mjs +3 -3
  30. package/esm2020/lib/common/pipes/first-letter.mjs +3 -3
  31. package/esm2020/lib/common/pipes/form-array.pipe.mjs +3 -3
  32. package/esm2020/lib/common/pipes/form-control.pipe.mjs +3 -3
  33. package/esm2020/lib/common/pipes/form-group.pipe.mjs +3 -3
  34. package/esm2020/lib/common/pipes/func.pipe.mjs +3 -3
  35. package/esm2020/lib/common/pipes/keys.mjs +3 -3
  36. package/esm2020/lib/common/pipes/month-name.pipe.mjs +3 -3
  37. package/esm2020/lib/common/pipes/only-number.mjs +3 -3
  38. package/esm2020/lib/common/pipes/order.pipe.mjs +3 -3
  39. package/esm2020/lib/common/pipes/placeholder.pipe.mjs +3 -3
  40. package/esm2020/lib/common/pipes/safe-html.pipe.mjs +3 -3
  41. package/esm2020/lib/common/pipes/time.pipe.mjs +3 -3
  42. package/esm2020/lib/common/pipes/titlecase.pipe.mjs +3 -3
  43. package/esm2020/lib/common/pipes/truncate.pipe.mjs +3 -3
  44. package/esm2020/lib/common/pipes/values.mjs +3 -3
  45. package/esm2020/lib/common/services/base.service.mjs +3 -3
  46. package/esm2020/lib/common/services/enum.service.mjs +3 -3
  47. package/esm2020/lib/common/services/event-queue.service.mjs +3 -3
  48. package/esm2020/lib/dialogs/alert-dialog/alert-dialog.component.mjs +3 -3
  49. package/esm2020/lib/dialogs/confirm-dialog/confirm-dialog.component.mjs +3 -3
  50. package/esm2020/lib/dialogs/dialog.component.mjs +12 -12
  51. package/esm2020/lib/dialogs/dialogs.module.mjs +4 -4
  52. package/esm2020/lib/dialogs/prompt-dialog/prompt-dialog.component.mjs +3 -3
  53. package/esm2020/lib/dialogs/services/dialog.service.mjs +3 -3
  54. package/esm2020/lib/file/file-input.component.mjs +77 -77
  55. package/esm2020/lib/file/file.module.mjs +4 -4
  56. package/esm2020/lib/form-validators/directives/base-directive.mjs +3 -3
  57. package/esm2020/lib/form-validators/directives/control-host.directive.mjs +3 -3
  58. package/esm2020/lib/form-validators/directives/html-control-template.directive.mjs +3 -3
  59. package/esm2020/lib/form-validators/directives/rx-form.directive.mjs +3 -3
  60. package/esm2020/lib/form-validators/directives/template-validations/async-validation.directive.mjs +3 -3
  61. package/esm2020/lib/form-validators/directives/template-validations/base-validator.directive.mjs +3 -3
  62. package/esm2020/lib/form-validators/directives/template-validations/control-expression-process.mjs +3 -3
  63. package/esm2020/lib/form-validators/directives/template-validations/file-control.directive.mjs +12 -12
  64. package/esm2020/lib/form-validators/directives/template-validations/image-file-control.directive.mjs +7 -7
  65. package/esm2020/lib/form-validators/directives/template-validations/rxformcontrol.directive.mjs +10 -10
  66. package/esm2020/lib/form-validators/domain/element-processor/decimal.provider.mjs +3 -3
  67. package/esm2020/lib/form-validators/services/form-control.mjs +27 -27
  68. package/esm2020/lib/form-validators/services/reactive-form.module.mjs +8 -8
  69. package/esm2020/lib/form-validators/services/rx-form-builder.mjs +3 -3
  70. package/esm2020/lib/form-validators/services/typed-form-builder.mjs +3 -3
  71. package/esm2020/lib/forms/components/datepicker/datepicker-header.component.mjs +3 -3
  72. package/esm2020/lib/forms/components/generic-form/generic-form.component.mjs +40 -27
  73. package/esm2020/lib/forms/directives/mat-form-field-editor.directive.mjs +25 -25
  74. package/esm2020/lib/forms/directives/mat-form-field-readonly.directive.mjs +3 -3
  75. package/esm2020/lib/forms/directives/vd-generic-form-custom-field.directive.mjs +3 -3
  76. package/esm2020/lib/forms/forms.module.mjs +4 -4
  77. package/esm2020/lib/forms/helpers/abstract-mat-form-field.mjs +61 -61
  78. package/esm2020/lib/forms/helpers/abstract-select-form-field.component.mjs +81 -81
  79. package/esm2020/lib/forms/helpers/value-accessor-base.mjs +3 -3
  80. package/esm2020/lib/forms/models/form-field-definition.mjs +1 -1
  81. package/esm2020/lib/forms/validators/empty-string-reset.directive.mjs +3 -3
  82. package/esm2020/lib/forms/validators/equal-validator.directive.mjs +3 -3
  83. package/esm2020/lib/forms/validators/native-element-injector.directive.mjs +3 -3
  84. package/esm2020/lib/forms/validators/unique-validator-directive.mjs +3 -3
  85. package/esm2020/lib/http/http.module.mjs +4 -4
  86. package/esm2020/lib/layout/dynamic-menu/dynamic-menu.component.mjs +12 -12
  87. package/esm2020/lib/layout/layout-card-over/layout-card-over.component.mjs +3 -3
  88. package/esm2020/lib/layout/layout-compact/layout-compact.component.mjs +34 -34
  89. package/esm2020/lib/layout/layout-footer/layout-footer.component.mjs +9 -9
  90. package/esm2020/lib/layout/layout-manage-list/layout-manage-list.component.mjs +14 -14
  91. package/esm2020/lib/layout/layout-manage-list/layout-manage-list.directives.mjs +28 -28
  92. package/esm2020/lib/layout/layout-nav/layout-nav.component.mjs +12 -12
  93. package/esm2020/lib/layout/layout-nav-list/layout-nav-list.component.mjs +13 -13
  94. package/esm2020/lib/layout/layout-nav-list/layout-nav-list.directives.mjs +22 -22
  95. package/esm2020/lib/layout/layout-toggle.class.mjs +13 -13
  96. package/esm2020/lib/layout/layout.component.mjs +46 -46
  97. package/esm2020/lib/layout/layout.directives.mjs +19 -19
  98. package/esm2020/lib/layout/layout.module.mjs +4 -4
  99. package/esm2020/lib/layout/list-toolbar/list-toolbar.component.mjs +3 -3
  100. package/esm2020/lib/layout/navigation-drawer/navigation-drawer.component.mjs +34 -34
  101. package/esm2020/lib/list/components/list.component.mjs +8 -8
  102. package/esm2020/lib/list/directives/vd-list-option.directive.mjs +3 -3
  103. package/esm2020/lib/list/list.module.mjs +4 -4
  104. package/esm2020/lib/media/directives/media-toggle.directive.mjs +13 -13
  105. package/esm2020/lib/media/media.module.mjs +4 -4
  106. package/esm2020/lib/media/services/media.service.mjs +3 -3
  107. package/esm2020/lib/menu/components/menu.component.mjs +3 -3
  108. package/esm2020/lib/menu/menu.module.mjs +4 -4
  109. package/esm2020/lib/menu/resolvers/menu-form-includes.resolve.mjs +3 -3
  110. package/esm2020/lib/menu/resolvers/menu-item-form-includes.resolve.mjs +3 -3
  111. package/esm2020/lib/menu/resolvers/menu-list-projection.resolve.mjs +3 -3
  112. package/esm2020/lib/menu/resolvers/menu-settings.resolve.mjs +3 -3
  113. package/esm2020/lib/menu/services/menu-items.service.mjs +3 -3
  114. package/esm2020/lib/menu/services/menu.resolve.mjs +6 -6
  115. package/esm2020/lib/menu/services/menu.service.mjs +3 -3
  116. package/esm2020/lib/search/search.module.mjs +4 -4
  117. package/esm2020/lib/search/vd-search-box/vd-search-box.component.mjs +3 -3
  118. package/esm2020/lib/search/vd-search-input/vd-search-input.component.mjs +10 -10
  119. package/esm2020/lib/select/components/select.component.mjs +21 -21
  120. package/esm2020/lib/select/directives/vd-select-option.directive.mjs +3 -3
  121. package/esm2020/lib/select/directives/vd-select-trigger.directive.mjs +3 -3
  122. package/esm2020/lib/select/select.module.mjs +4 -4
  123. package/esm2020/lib/table/components/dynamic-table/dynamic-table.component.mjs +39 -39
  124. package/esm2020/lib/table/components/filter-clear.component.mjs +3 -3
  125. package/esm2020/lib/table/components/filter-date.component.mjs +21 -21
  126. package/esm2020/lib/table/components/filter-input.component.mjs +21 -21
  127. package/esm2020/lib/table/components/filter-select.component.mjs +76 -76
  128. package/esm2020/lib/table/directives/data-source-filter.directive.mjs +3 -3
  129. package/esm2020/lib/table/paginator-intl.mjs +3 -3
  130. package/esm2020/lib/table/table.data-source.mjs +28 -28
  131. package/esm2020/lib/table/table.module.mjs +4 -4
  132. package/fesm2015/messaia-cdk.mjs +1342 -1328
  133. package/fesm2015/messaia-cdk.mjs.map +1 -1
  134. package/fesm2020/messaia-cdk.mjs +1326 -1313
  135. package/fesm2020/messaia-cdk.mjs.map +1 -1
  136. package/lib/common/behaviors/constructor.d.ts +1 -1
  137. package/lib/common/behaviors/control-value-accesor.mixin.d.ts +1 -1
  138. package/lib/common/pipes/file-size.pipe.d.ts +2 -2
  139. package/lib/common/pipes/order.pipe.d.ts +1 -1
  140. package/lib/forms/models/form-field-definition.d.ts +6 -2
  141. package/package.json +3 -3
  142. package/src/lib/layout/README.md +0 -119
  143. package/src/lib/layout/layout-card-over/README.md +0 -36
  144. package/src/lib/layout/layout-manage-list/README.md +0 -76
  145. package/src/lib/layout/layout-nav/README.md +0 -40
  146. package/src/lib/layout/layout-nav-list/README.md +0 -85
@@ -28,12 +28,12 @@ export { AuthHelper, AuthUser, BaseComponent, BaseInterceptor, CachingIntercepto
28
28
  const DECLARATIONS = [VdDynamicTableConfigDialogComponent];
29
29
  export class MaterialModule {
30
30
  }
31
- /** @nocollapse */ MaterialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
32
- /** @nocollapse */ MaterialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.0", ngImport: i0, type: MaterialModule, exports: [MatButtonModule,
31
+ /** @nocollapse */ MaterialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
32
+ /** @nocollapse */ MaterialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.5", ngImport: i0, type: MaterialModule, exports: [MatButtonModule,
33
33
  DragDropModule] });
34
- /** @nocollapse */ MaterialModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MaterialModule, imports: [MatButtonModule,
34
+ /** @nocollapse */ MaterialModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MaterialModule, imports: [MatButtonModule,
35
35
  DragDropModule] });
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MaterialModule, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MaterialModule, decorators: [{
37
37
  type: NgModule,
38
38
  args: [{
39
39
  exports: [
@@ -44,13 +44,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImpor
44
44
  }] });
45
45
  export class VdBaseModule {
46
46
  }
47
- /** @nocollapse */ VdBaseModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: VdBaseModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
48
- /** @nocollapse */ VdBaseModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.0", ngImport: i0, type: VdBaseModule, declarations: [VdDynamicTableConfigDialogComponent], imports: [CommonModule,
47
+ /** @nocollapse */ VdBaseModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: VdBaseModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
48
+ /** @nocollapse */ VdBaseModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.5", ngImport: i0, type: VdBaseModule, declarations: [VdDynamicTableConfigDialogComponent], imports: [CommonModule,
49
49
  FormsModule,
50
50
  ReactiveFormsModule,
51
51
  MatDialogModule,
52
52
  VdTableModule, MaterialModule], exports: [VdDynamicTableConfigDialogComponent] });
53
- /** @nocollapse */ VdBaseModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: VdBaseModule, providers: [
53
+ /** @nocollapse */ VdBaseModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: VdBaseModule, providers: [
54
54
  { provide: HTTP_INTERCEPTORS, useClass: BaseInterceptor, multi: true },
55
55
  { provide: HTTP_INTERCEPTORS, useClass: CachingInterceptor, multi: true },
56
56
  { provide: HTTP_INTERCEPTORS, useClass: LoadingScreenInterceptor, multi: true },
@@ -60,7 +60,7 @@ export class VdBaseModule {
60
60
  MatDialogModule,
61
61
  VdTableModule,
62
62
  MaterialModule] });
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: VdBaseModule, decorators: [{
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: VdBaseModule, decorators: [{
64
64
  type: NgModule,
65
65
  args: [{
66
66
  imports: [
@@ -23,6 +23,8 @@ import * as i1 from "@angular/router";
23
23
  */
24
24
  // @dynamic
25
25
  export class BaseComponent {
26
+ get isSaving() { return this._isSaving || this.isLoading; }
27
+ set isSaving(isSaving) { this.isLoading = this._isSaving = isSaving; }
26
28
  /**
27
29
  * Constructor
28
30
  */
@@ -115,8 +117,6 @@ export class BaseComponent {
115
117
  ContextHelper.appSetting = this.appSetting;
116
118
  this.initEditor();
117
119
  }
118
- get isSaving() { return this._isSaving || this.isLoading; }
119
- set isSaving(isSaving) { this.isLoading = this._isSaving = isSaving; }
120
120
  /**
121
121
  * Lifecycle hook that is called after data-bound properties
122
122
  * of a directive are initialized.
@@ -556,9 +556,9 @@ export class BaseComponent {
556
556
  this.matExpansionPanelSubscriptions.forEach(x => x.unsubscribe());
557
557
  }
558
558
  }
559
- /** @nocollapse */ BaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: BaseComponent, deps: [{ token: i1.ActivatedRoute }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
560
- /** @nocollapse */ BaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.0", type: BaseComponent, inputs: { handleExpansionPanelChanges: "handleExpansionPanelChanges" }, outputs: { reload: "reload" }, viewQueries: [{ propertyName: "matExpansionPanelElementQueryList", predicate: MatExpansionPanel, descendants: true, read: ElementRef }, { propertyName: "matExpansionPanelQueryList", predicate: MatExpansionPanel, descendants: true }], ngImport: i0 });
561
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: BaseComponent, decorators: [{
559
+ /** @nocollapse */ BaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: BaseComponent, deps: [{ token: i1.ActivatedRoute }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
560
+ /** @nocollapse */ BaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: BaseComponent, inputs: { handleExpansionPanelChanges: "handleExpansionPanelChanges" }, outputs: { reload: "reload" }, viewQueries: [{ propertyName: "matExpansionPanelElementQueryList", predicate: MatExpansionPanel, descendants: true, read: ElementRef }, { propertyName: "matExpansionPanelQueryList", predicate: MatExpansionPanel, descendants: true }], ngImport: i0 });
561
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: BaseComponent, decorators: [{
562
562
  type: Directive
563
563
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { handleExpansionPanelChanges: [{
564
564
  type: Input
@@ -571,4 +571,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImpor
571
571
  type: ViewChildren,
572
572
  args: [MatExpansionPanel]
573
573
  }] } });
574
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9iYXNlL2NvbXBvbmVudHMvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFRLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SixPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBMEIsYUFBYSxFQUFFLE1BQU0sRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNySCxPQUFPLEVBQTRCLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIs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LENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEQsT0FBTyxNQUFNLENBQUM7UUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBUUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNWLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDOzs2SEEzc0JvQixhQUFhO2lIQUFiLGFBQWEsdUxBNExwQixpQkFBaUIsMkJBQVUsVUFBVSw2REFNckMsaUJBQWlCOzJGQWxNVixhQUFhO2tCQURsQyxTQUFTO3FJQThDRiwyQkFBMkI7c0JBRGpDLEtBQUs7Z0JBNkdDLE1BQU07c0JBRFosTUFBTTtnQkFxQ0csaUNBQWlDO3NCQUQxQyxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFPM0MsMEJBQTBCO3NCQURuQyxZQUFZO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFR5cGUsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvblBhbmVsIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBVcmxTZWdtZW50LCBVcmxUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb250ZXh0SGVscGVyIH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbW1vbi5tb2R1bGUnO1xyXG5pbXBvcnQgeyBBcHBTZXR0aW5nIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9hcHAtc2V0dGluZyc7XHJcbmltcG9ydCB7IFNlcnZpY2VMb2NhdG9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2VzL3NlcnZpY2UtbG9jYXRvcic7XHJcbmltcG9ydCB7IFZkRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL2RpYWxvZ3Mvc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWZE1lZGlhU2VydmljZSB9IGZyb20gJy4uLy4uL21lZGlhL3NlcnZpY2VzL21lZGlhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZW51IH0gZnJvbSAnLi4vLi4vbWVudS9tb2RlbHMvbWVudSc7XHJcbmltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4uL2NvbnN0YW50cy9jb21tb24nO1xyXG5pbXBvcnQgeyBHbG9iYWxSb2xlcyB9IGZyb20gJy4uL2NvbnN0YW50cy9nbG9iYWwtcm9sZXMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gJy4uL2VudW1zL21lc3NhZ2UtdHlwZSc7XHJcbmltcG9ydCB7IEF1dGhIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL2F1dGgtaGVscGVyJztcclxuaW1wb3J0IHsgSUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2liYXNlLWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi4vbW9kZWxzL2F1dGgtdXNlcic7XHJcblxyXG4vKipcclxuICogQSBiYXNlIGxpc3QgY29tcG9uZW50IGZvciBjb21wb25lbnRzIHdpdGggcGFnaW5hdGlvbiBzdXBwb3J0XHJcbiAqL1xyXG4vLyBAZHluYW1pY1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBJQmFzZUNvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuXHQvKipcclxuXHQgKiBBcHAgc2V0dGluZ3NcclxuXHQgKi9cclxuXHRwdWJsaWMgYXBwU2V0dGluZzogQXBwU2V0dGluZztcclxuXHJcblx0LyoqXHJcblx0ICogc2V0dGluZ3M6IEFueVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZXR0aW5nczogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lbnUgaXRlbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgbWVudTogTWVudTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIG5hbWUgb2YgdGhlIHByb2plY3RcclxuXHQgKi9cclxuXHRwdWJsaWMgcHJvamVjdE5hbWU6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIHRpdGxlIG9mIHRoZSBjdXJyZW50IHBhZ2VcclxuXHQgKi9cclxuXHRwdWJsaWMgdGl0bGU6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIHN1YnRpdGxlIG9mIHRoZSBjdXJyZW50IG91dGxldFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdWJ0aXRsZTogc3RyaW5nID0gJyc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHVzZSBzb21lIGR1bW15IGRhdGEgYW5kIHNob3cgZGVidWcgbG9nc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWJ1ZzogYm9vbGVhbjtcclxuXHJcblx0LyoqXHQgXHJcblx0ICogTG9hZGluZyBzdGF0dXNcclxuXHQgKi9cclxuXHRwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiBoYW5kbGVFeHBhbnNpb25QYW5lbENoYW5nZXM6IGJvb2xlYW5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBoYW5kbGVFeHBhbnNpb25QYW5lbENoYW5nZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBTYXZpbmcgc3RhdHVzXHJcblx0ICovXHJcblx0cHVibGljIF9pc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHB1YmxpYyBnZXQgaXNTYXZpbmcoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1NhdmluZyB8fCB0aGlzLmlzTG9hZGluZzsgfVxyXG5cdHB1YmxpYyBzZXQgaXNTYXZpbmcoaXNTYXZpbmc6IGJvb2xlYW4pIHsgdGhpcy5pc0xvYWRpbmcgPSB0aGlzLl9pc1NhdmluZyA9IGlzU2F2aW5nOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgZmxhZyBlaW5kaWNhdGVzIHRoYXQgdGhlIGVkaXRvciBpcyBpbml0ZWRcclxuXHQgKi9cclxuXHRwdWJsaWMgaXNFZGl0b3JJbml0aWFsemVkOiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiBSZXByZXNlbnRzIHRoZSByZXF1ZXN0IGVycm9yc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBlcnJvcnM6IEFycmF5PHN0cmluZz4gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBVc2VkIHRvIGV2YWx1YXRlIHdoZXRoZXIgYSBnaXZlbiBtZWRpYSBxdWVyeSBpcyB0cnVlIG9yIGZhbHNlIGdpdmVuIHRoZSBjdXJyZW50IGRldmljZSdzIHNjcmVlbiAvIHdpbmRvdyBzaXplLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBtZWRpYTogVmRNZWRpYVNlcnZpY2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFsbG93ZWQgZmlsZSBleHRlbnNpb25zXHJcblx0ICovXHJcblx0cHVibGljIGFsbG93ZWRFeHRlbnNpb25zOiBzdHJpbmdbXSA9IENvbW1vbi5hbGxvd2VkRXh0ZW5zaW9ucztcclxuXHJcblx0LyoqXHJcblx0ICogdGlueU1DRSBwbHVnaW5zXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRvclBsdWdpbnM6IHN0cmluZyA9IENvbW1vbi5lZGl0b3JQbHVnaW5zO1xyXG5cclxuXHQvKipcclxuXHQgKiB0aW55TUNFIGVkaXRvclxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0b3JUb29sYmFyOiBzdHJpbmcgPSBDb21tb24uZWRpdG9yVG9vbGJhcjtcclxuXHJcblx0LyoqXHJcblx0ICogRWRpdG9yIGNvbmZpZ3VyYXRpb25cclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdG9yQ29uZmlnOiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogUHJvdmlkZXMgdGhlIG5hdmlnYXRpb24gYW5kIHVybCBtYW5pcHVsYXRpb24gY2FwYWJpbGl0aWVzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyByb3V0ZXI6IFJvdXRlcjtcclxuXHJcblx0LyoqXHJcblx0ICogdXJsSGFzaDogc3RyaW5nXHJcblx0ICovXHJcblx0cHVibGljIHVybEhhc2g6IHN0cmluZyA9IG51bGw7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENsYXNzIG5hbWVcclxuXHQgKi9cclxuXHRwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBwZXJtaXNzaW9uXHJcblx0ICovXHJcblx0cHVibGljIGNhbkNyZWF0ZTogYm9vbGVhbjtcclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlIHBlcm1pc3Npb25cclxuXHQgKi9cclxuXHRwdWJsaWMgY2FuVXBkYXRlOiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiBDdXJyZW50IHJvdXRlXHJcblx0ICovXHJcblx0cHVibGljIGN1cnJlbnRSb3V0ZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBDdXJyZW50IGJhc2Ugcm91dGVcclxuXHQgKi9cclxuXHRwdWJsaWMgY3VycmVudEJhc2VSb3V0ZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHVybCB0byByZXR1cm4gdG8gYWZ0ZXIgc2F2ZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyByZXR1cm5Vcmw6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogQ3VycmVudCB1c2VyIG9iamVjdFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjdXJyZW50VXNlcjogQXV0aFVzZXIgPSBBdXRoSGVscGVyLnVzZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElzIHRoZSBjdXJyZW50IHVzZXIgYSBjbGllbnQgYWRtaW5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNBZG1pbiA9IEF1dGhIZWxwZXIuaGFzUm9sZShHbG9iYWxSb2xlcy5BZG1pbmlzdHJhdG9yKTtcclxuXHJcblx0LyoqXHJcblx0ICogSXMgdGhlIGN1cnJlbnQgdXNlciBhIGNsaWVudCBhZG1pblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0NsaWVudEFkbWluID0gQXV0aEhlbHBlci5oYXNSb2xlKEdsb2JhbFJvbGVzLkNsaWVudEFkbWluaXN0cmF0b3IpO1xyXG5cclxuXHQvKipcclxuXHQgKiBJcyB0aGUgY3VycmVudCB1c2VyIGEgZGVwYXJ0bWVudCBhZG1pblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0RlcGFydG1lbnRBZG1pbiA9IEF1dGhIZWxwZXIuaGFzUm9sZShHbG9iYWxSb2xlcy5EZXBhcnRtZW50QWRtaW5pc3RyYXRvcik7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHJlbG9hZD86IGZ1bmN0aW9uXHJcblx0ICovXHJcblx0QE91dHB1dCgpXHJcblx0cHVibGljIHJlbG9hZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogQSBzZXJ2aWNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2V0IGFuZCBzZXQgdGhlIHRpdGxlIG9mIGEgY3VycmVudCBIVE1MIGRvY3VtZW50LlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB0aXRsZVNlcnZpY2U6IFRpdGxlO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHNlcnZpY2UgdG8gZGlzcGF0Y2ggTWF0ZXJpYWwgRGVzaWduIHNuYWNrIGJhciBtZXNzYWdlcy5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc25hY2tCYXJTZXJ2aWNlOiBNYXRTbmFja0JhcjtcclxuXHJcblx0LyoqXHJcblx0ICogQSBzZXJ2aWNlIHRvIHNob3cgY29uaXJtIGFuZCBwcm9tcHQgZGlhbG9ncy5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZGlhbG9nU2VydmljZTogVmREaWFsb2dTZXJ2aWNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHNlcnZpY2UgdG8gc2hvdyBjb25pcm0gYW5kIHByb21wdCBkaWFsb2dzLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZztcclxuXHJcblx0LyoqXHJcblx0ICogbG9jYXRpb246IExvY2F0aW9uXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGxvY2F0aW9uOiBMb2NhdGlvbjtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2V0IHVybCBoYXNoXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFVybEhhc2g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBNYXRFeHBhbnNpb25QYW5lbCByZWZcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkcmVuKE1hdEV4cGFuc2lvblBhbmVsLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcclxuXHRwcm90ZWN0ZWQgbWF0RXhwYW5zaW9uUGFuZWxFbGVtZW50UXVlcnlMaXN0OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1hdEV4cGFuc2lvblBhbmVsIHJlZlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGRyZW4oTWF0RXhwYW5zaW9uUGFuZWwpXHJcblx0cHJvdGVjdGVkIG1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0OiBRdWVyeUxpc3Q8TWF0RXhwYW5zaW9uUGFuZWw+O1xyXG5cclxuXHQvKipcclxuXHQgKiBtYXRFeHBhbnNpb25QYW5lbFN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydWN0b3JcclxuXHQgKi9cclxuXHRjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcblx0XHR0aGlzLnRpdGxlU2VydmljZSA9IHRoaXMuZ2V0U2VydmljZShUaXRsZSk7XHJcblx0XHR0aGlzLmRpYWxvZ1NlcnZpY2UgPSB0aGlzLmdldFNlcnZpY2UoVmREaWFsb2dTZXJ2aWNlKTtcclxuXHRcdHRoaXMuZGlhbG9nID0gdGhpcy5nZXRTZXJ2aWNlKE1hdERpYWxvZyk7XHJcblx0XHR0aGlzLm1lZGlhID0gdGhpcy5nZXRTZXJ2aWNlKFZkTWVkaWFTZXJ2aWNlKTtcclxuXHRcdHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gdGhpcy5nZXRTZXJ2aWNlKE1hdFNuYWNrQmFyKTtcclxuXHRcdHRoaXMucm91dGVyID0gdGhpcy5nZXRTZXJ2aWNlKFJvdXRlcik7XHJcblx0XHR0aGlzLmFwcFNldHRpbmcgPSB0aGlzLmdldFNlcnZpY2UoQXBwU2V0dGluZyk7XHJcblx0XHR0aGlzLmxvY2F0aW9uID0gdGhpcy5nZXRTZXJ2aWNlKExvY2F0aW9uKTtcclxuXHJcblx0XHRDb250ZXh0SGVscGVyLmFjdGl2YXRlZFJvdXRlID0gcm91dGU7XHJcblx0XHRDb250ZXh0SGVscGVyLnJvdXRlciA9IHRoaXMucm91dGVyO1xyXG5cdFx0Q29udGV4dEhlbHBlci5hcHBTZXR0aW5nID0gdGhpcy5hcHBTZXR0aW5nO1xyXG5cclxuXHRcdHRoaXMuaW5pdEVkaXRvcigpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIFxyXG5cdCAqIG9mIGEgZGlyZWN0aXZlIGFyZSBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdC8qIEdldCBtZW51IGl0ZW1zIGZyb20gcm91dGUgc25hcHNob3QgKi9cclxuXHRcdHZhciBtYWluUm91dGUgPSB0aGlzLmdldE1haW5Sb3V0ZSh0aGlzLnJvdXRlLnNuYXBzaG90KTtcclxuXHRcdGlmIChtYWluUm91dGUpIHtcclxuXHRcdFx0dGhpcy5tZW51ID0gbWFpblJvdXRlLmRhdGEubWVudTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgcHJvamVjdCBuYW1lICYgZGVidWcgbW9kZSAqL1xyXG5cdFx0dGhpcy5wcm9qZWN0TmFtZSA9IHRoaXMuYXBwU2V0dGluZy5wcm9qZWN0TmFtZTtcclxuXHRcdHRoaXMuZGVidWcgPSB0aGlzLmFwcFNldHRpbmcuZGVidWc7XHJcblxyXG5cdFx0LyogR2V0IHRoZSBoYXNoIGZyb20gdGhlIHVybCAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5mcmFnbWVudC5zdWJzY3JpYmUoKGZyYWdtZW50OiBzdHJpbmcpID0+IHRoaXMudXJsSGFzaCA9IGZyYWdtZW50KTtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENoZWNrIHBlcm1pc3Npb25zXHJcblx0XHQgKi9cclxuXHRcdGlmICh0aGlzLnJvdXRlLnBhcmVudCkge1xyXG5cdFx0XHR0aGlzLnJvdXRlLnBhcmVudC51cmwuc3Vic2NyaWJlKCh1cmw6IFVybFNlZ21lbnRbXSkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuY2xhc3NOYW1lID8/PSB1cmwubGVuZ3RoID8gdXJsWzBdLnBhdGgucmVwbGFjZSgvKC4qKXMkLywgJyQxJykucmVwbGFjZSgvXi4vLCAodXJsWzBdLnBhdGhbMF0gfHwgJycpLnRvVXBwZXJDYXNlKCkpIDogJyc7XHJcblx0XHRcdFx0dGhpcy5jYW5DcmVhdGUgPSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKCdDcmVhdGUnLCBgQ3JlYXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0XHR0aGlzLmNhblVwZGF0ZSA9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoJ1VwZGF0ZScsIGBVcGRhdGUke3RoaXMuY2xhc3NOYW1lfWApO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgY3VycmVudCByb3V0ZSAqL1xyXG5cdFx0dGhpcy5jdXJyZW50Um91dGUgPSBidG9hKHRoaXMucm91dGVyLnVybCk7XHJcblx0XHR0aGlzLmN1cnJlbnRCYXNlUm91dGUgPSB0aGlzLnJvdXRlci51cmw/LnNwbGl0KCc/JylbMF0/LnNwbGl0KCc7JylbMF07XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgcGFnZSB0aXRsZVxyXG5cdFx0ICovXHJcblx0XHR0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKHggPT4ge1xyXG5cdFx0XHRpZiAoeCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuXHRcdFx0XHR0aGlzLnNldFRpdGxlcygpO1xyXG5cdFx0XHRcdHRoaXMuY3VycmVudFJvdXRlID0gYnRvYSh4LnVybCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIEdldCB0aGUgcmV0dXJuIHVybCBpZiBhbnkgKi9cclxuXHRcdHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHggPT4gdGhpcy5zZXRSZXR1cm5VcmwoeC5yZXR1cm5VcmwpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGEgY29tcG9uZW50J3MgdmlldyBoYXMgYmVlbiBmdWxseSBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHQvKiBCcm9hZGNhc3QgdG8gYWxsIGxpc3RlbmVyIG9ic2VydmFibGVzIHdoZW4gbG9hZGluZyB0aGUgcGFnZSAqL1xyXG5cdFx0dGhpcy5tZWRpYS5icm9hZGNhc3QoKTtcclxuXHJcblx0XHQvKiBTZXQgdGl0bGVzICovXHJcblx0XHR0aGlzLnNldFRpdGxlcygpO1xyXG5cclxuXHRcdC8qIFxyXG5cdFx0ICogRm9yY2UgYSBuZXcgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSBzaW5jZSBjaGFuZ2UgZGV0ZWN0aW9ucyBcclxuXHRcdCAqIGhhdmUgZmluaXNoZWQgd2hlbiBgbmdBZnRlclZpZXdJbml0YCBpcyBleGVjdXRlZFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcblx0XHQvKiBMaXN0ZW4gZm9yIGV4cGFuc2lvbiBwYW5lbCBjaGFuZ2VzICovXHJcblx0XHRpZiAodGhpcy5oYW5kbGVFeHBhbnNpb25QYW5lbENoYW5nZXMpIHtcclxuXHRcdFx0dGhpcy5vbkV4cGFuc2lvblBhbmVsQ2hhbmdlcygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVmcmVzaHMgdGhpcyBwYWdlL2NvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHB1YmxpYyByZWxvYWRQYWdlKCk6IHZvaWQge1xyXG5cdFx0bGV0IGN1cnJlbnRVcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcblx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywgeyByZXBsYWNlVXJsOiB0cnVlIH0pLnRoZW4oKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChjdXJyZW50VXJsLCB7IHJlcGxhY2VVcmw6IHRydWUgfSkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTmF2aWdhdGVzIGJhY2sgdG8gcmV0dXJuIHVybFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBuYXZpZ2F0ZVRvUmV0dXJuVXJsKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMucmV0dXJuVXJsKSB7XHJcblx0XHRcdGxldCB1cmxUcmVlOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yZXR1cm5VcmwpO1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybFRyZWUudG9TdHJpbmcoKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKiBcclxuXHQgKiBGb3JjZSBhIG5ldyBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIHNpbmNlIGNoYW5nZSBkZXRlY3Rpb25zIFxyXG5cdCAqIGhhdmUgZmluaXNoZWQgd2hlbiBgbmdBZnRlclZpZXdJbml0YCBpcyBleGVjdXRlZFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIHJldHVybiB1cmxcclxuXHQgKiBAcGFyYW0gcmV0dXJuVXJsIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZXRSZXR1cm5VcmwocmV0dXJuVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHRyeSB7IHRoaXMucmV0dXJuVXJsID0gcmV0dXJuVXJsID8gZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IocmV0dXJuVXJsKSkgOiBudWxsOyB9XHJcblx0XHRjYXRjaCAoZXJyb3IpIHsgfVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlzdGVuIGZvciBleHBhbnNpb24gcGFuZWwgY2hhbmdlc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkV4cGFuc2lvblBhbmVsQ2hhbmdlcygpOiB2b2lkIHtcclxuXHRcdC8qIExpc3RlbiBmb3IgZXhwYW5zaW9uIHBhbmVsIGNoYW5nZXMgKi9cclxuXHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxRdWVyeUxpc3Q/LmNoYW5nZXMuc3Vic2NyaWJlKF8gPT4ge1xyXG5cdFx0XHQvKiBVbnN1YnNjcmliZSBmcm9tIG9sZCAnb3BlbmVkJyBhbmQgJ2Nsb3NlZCcgc3Vic2NyaXB0aW9ucyAqL1xyXG5cdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHggPT4geC51bnN1YnNjcmliZSgpKTtcclxuXHJcblx0XHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuXHRcdFx0LyogR2V0IHRoZSBwYW5lbCBlbmRzIHdpdGggdGhlIElEICduZXcnICovXHJcblx0XHRcdHZhciBuZXdFeHBhbnNpb25QYW5lbEluZGV4ID0gdGhpcy5tYXRFeHBhbnNpb25QYW5lbEVsZW1lbnRRdWVyeUxpc3Q/LnRvQXJyYXkoKT8uZmluZEluZGV4KHggPT4geC5uYXRpdmVFbGVtZW50Py5pZD8uZW5kc1dpdGgoJy5uZXcnKSk7XHJcblx0XHRcdGlmIChuZXdFeHBhbnNpb25QYW5lbEluZGV4ID49IDApIHtcclxuXHRcdFx0XHQvKiBDbG9zZSBhbGwgcGFuZWxzICovXHJcblx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8uZmlyc3Q/LmFjY29yZGlvbj8uY2xvc2VBbGwoKTtcclxuXHJcblx0XHRcdFx0LyogT3BlbiB0aGUgbmV3IHBhbmVsICovXHJcblx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8udG9BcnJheSgpW25ld0V4cGFuc2lvblBhbmVsSW5kZXhdPy5vcGVuKCk7XHJcblxyXG5cdFx0XHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0LyogRmluZCB0aGUgaW5kZXggb2YgdGhlIHBhbmVsIHdpdGggdGhlIHNwZWNpZmllZCBlbGVtZW50IElEICovXHJcblx0XHRcdFx0dGhpcy51cmxIYXNoPy5zcGxpdCgnLicpXHJcblx0XHRcdFx0XHQ/LnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgpID0+IGFjY3VtdWxhdG9yLmNvbmNhdCgoaW5kZXggPiAwID8gKGFjY3VtdWxhdG9yLnNsaWNlKC0xKS5qb2luKCcuJykgKyAnLicpIDogJycpICsgY3VycmVudFZhbHVlKSwgW10pXHJcblx0XHRcdFx0XHQ/LmZvckVhY2goKGhhc2g6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0XHR2YXIgZXhwYW5zaW9uUGFuZWxJbmRleCA9IHRoaXMubWF0RXhwYW5zaW9uUGFuZWxFbGVtZW50UXVlcnlMaXN0Py50b0FycmF5KCk/LmZpbmRJbmRleCh4ID0+IHgubmF0aXZlRWxlbWVudC5pZCA9PSBoYXNoKTtcclxuXHRcdFx0XHRcdFx0aWYgKGV4cGFuc2lvblBhbmVsSW5kZXggPj0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxRdWVyeUxpc3Q/LnRvQXJyYXkoKVtleHBhbnNpb25QYW5lbEluZGV4XT8ub3BlbigpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgZm9yIG9wZW5lZCBwYW5lbHMgKi9cclxuXHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8uZm9yRWFjaCh5ID0+IHtcclxuXHRcdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9ucy5wdXNoKHkub3BlbmVkLnN1YnNjcmliZShfID0+IHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnNldFVybEhhc2gpIHtcclxuXHRcdFx0XHRcdFx0LyogR2V0IHRoZSBpZCBvZiB0aGUgY3VycmVudCBvcGVuZWQgcGFuZWwgKi9cclxuXHRcdFx0XHRcdFx0dmFyIGN1cnJlbnRQYW5lbElkID0geVsnX3ZpZXdDb250YWluZXJSZWYnXT8uZWxlbWVudD8ubmF0aXZlRWxlbWVudD8uaWQ7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiB0aGUgcGFuZWwgSUQgaXMgc2V0LCBzZXQgaXQgYXMgdXJsIHNlZ21lbnQgKGhhc2gpICovXHJcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50UGFuZWxJZCkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IGZyYWdtZW50OiBjdXJyZW50UGFuZWxJZCwgcmVwbGFjZVVybDogdHJ1ZSB9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0LyogT3RoZXJ3aXNlIHJlbW92ZSB0aGUgc2VnbWVudCBmcm9tIHRoZSB1cmwgKi9cclxuXHRcdFx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHRcdFx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0XHR9KSk7XHJcblxyXG5cdFx0XHRcdC8qIERldGVjdCBjaGFuZ2VzIGZvciBjbG9zZWQgcGFuZWxzICovXHJcblx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFN1YnNjcmlwdGlvbnMucHVzaCh5LmNsb3NlZC5zdWJzY3JpYmUoXyA9PiB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5zZXRVcmxIYXNoKSB7XHJcblx0XHRcdFx0XHRcdC8qIEdldCB0aGUgaWQgb2YgdGhlIGN1cnJlbnQgb3BlbmVkIHBhbmVsICovXHJcblx0XHRcdFx0XHRcdHZhciBjdXJyZW50UGFuZWxJZFBhcnRzID0geVsnX3ZpZXdDb250YWluZXJSZWYnXT8uZWxlbWVudD8ubmF0aXZlRWxlbWVudD8uaWQ/LnNwbGl0KCcuJyk7XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBJZiB0aGUgcGFuZWwgSUQgaXMgc2V0LCBzZXQgaXQgYXMgdXJsIHNlZ21lbnQgKGhhc2gpICovXHJcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50UGFuZWxJZFBhcnRzLmxlbmd0aCA+IDEpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgeyBmcmFnbWVudDogY3VycmVudFBhbmVsSWRQYXJ0cy5zbGljZSgwLCAtMSkuam9pbignLicpLCByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgKi9cclxuXHRcdFx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdH0pKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBOb3RpZnkgZXhwYW5zaW9uIHBhbmVsIGxpc3QgY2hhbmdlcyAqL1xyXG5cdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdC5ub3RpZnlPbkNoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHJpZXZlcyBhbiBpbnN0YW5jZSBmcm9tIHRoZSBpbmplY3RvciBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdG9rZW4uXHJcblx0ICogSWYgbm90IGZvdW5kOlxyXG5cdCAqIC0gVGhyb3dzIHtAbGluayBOb1Byb3ZpZGVyRXJyb3J9IGlmIG5vIGBub3RGb3VuZFZhbHVlYCB0aGF0IGlzIG5vdCBlcXVhbCB0b1xyXG5cdCAqIEluamVjdG9yLlRIUk9XX0lGX05PVF9GT1VORCBpcyBnaXZlblxyXG5cdCAqIC0gUmV0dXJucyB0aGUgYG5vdEZvdW5kVmFsdWVgIG90aGVyd2lzZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBnZXRTZXJ2aWNlPFQ+KHRva2VuOiBUeXBlPFQ+KTogVCB7XHJcblx0XHRyZXR1cm4gU2VydmljZUxvY2F0b3IuZ2V0U2VydmljZSh0b2tlbik7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIGJhc2Ugcm91dGVcclxuXHQgKiBAcGFyYW0gc25hcHNob3QgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldE1haW5Sb3V0ZShzbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xyXG5cdFx0aWYgKHNuYXBzaG90ICYmICFzbmFwc2hvdC5kYXRhLm1lbnUpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0TWFpblJvdXRlKHNuYXBzaG90LnBhcmVudCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHNuYXBzaG90O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgYSBjb25maXJtIGRpYWxvZyB0byBkZWxldGUgYW4gaXRlbSBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2hvd0RlbGV0ZUl0ZW1EaWFsb2coKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpcm0oe1xyXG5cdFx0XHRtZXNzYWdlOiAkbG9jYWxpemVgOkBAZGlhbG9nLm1lc3NhZ2UuZGVsZXRlLm9uZTpBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT9gLFxyXG5cdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGRpYWxvZy50aXRsZS5kZWxldGU6Q29uZmlybSBEZWxldGVgLFxyXG5cdFx0XHRjYW5jZWxCdXR0b246ICRsb2NhbGl6ZWA6QEBjYW5jZWw6Q2FuY2VsYCxcclxuXHRcdFx0YWNjZXB0QnV0dG9uOiAkbG9jYWxpemVgOkBAZGVsZXRlOkRlbGV0ZWAsXHJcblx0XHR9KS5hZnRlckNsb3NlZCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgYSBjb25maXJtIGRpYWxvZyB0byBkZWxldGUgbXVsdGlwbGUgaXRlbXNcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2hvd0RlbGV0ZUl0ZW1zRGlhbG9nKCk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5Db25maXJtKHtcclxuXHRcdFx0bWVzc2FnZTogJGxvY2FsaXplYDpAQGRpYWxvZy5tZXNzYWdlLmRlbGV0ZS5saXN0OkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIGl0ZW1zP2AsXHJcblx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZGlhbG9nLnRpdGxlLmRlbGV0ZTpDb25maXJtIERlbGV0ZWAsXHJcblx0XHRcdGNhbmNlbEJ1dHRvbjogJGxvY2FsaXplYDpAQGNhbmNlbDpDYW5jZWxgLFxyXG5cdFx0XHRhY2NlcHRCdXR0b246ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdH0pLmFmdGVyQ2xvc2VkKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBhIGNvbmZpcm0gZGlhbG9nIHRvIHNlbmQgc29tZSBkYXRhXHJcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gZGlzcGxheVxyXG5cdCAqIEBwYXJhbSBvYnNlcnZhYmUgVGhlIG9ic2VydmFibGUgaW5zdGFuY2VcclxuXHQgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIEEgc3VjY2VzcyBjYWxsYmFja1xyXG5cdCAqIEBwYXJhbSBlcnJvckNhbGxiYWNrIEFuIGVycm9yIGNhbGxiYWNrXHJcblx0ICovXHJcblx0cHVibGljIHNob3dDb25maXJtYXRpb25EaWFsb2cobWVzc2FnZTogc3RyaW5nLCBvYnNlcnZhYmU6IE9ic2VydmFibGU8YW55Piwgc3VjY2Vzc0NhbGxiYWNrOiBGdW5jdGlvbiA9IG51bGwsIGVycm9yQ2FsbGJhY2s6IEZ1bmN0aW9uID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0dGhpcy5kaWFsb2dTZXJ2aWNlXHJcblx0XHRcdC5vcGVuQ29uZmlybSh7XHJcblx0XHRcdFx0bWVzc2FnZTogbWVzc2FnZSxcclxuXHRcdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGRpYWxvZy50aXRsZS5jb25maXJtOkNvbmZpcm1gLFxyXG5cdFx0XHRcdGNhbmNlbEJ1dHRvbjogJGxvY2FsaXplYDpAQGNhbmNlbDpDYW5jZWxgLFxyXG5cdFx0XHRcdGFjY2VwdEJ1dHRvbjogJGxvY2FsaXplYDpAQG9rOk9rYCxcclxuXHRcdFx0fSlcclxuXHRcdFx0LmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChhY2NlcHQ6IGJvb2xlYW4pID0+IHtcclxuXHRcdFx0XHRpZiAoYWNjZXB0KSB7XHJcblx0XHRcdFx0XHRvYnNlcnZhYmUuc3Vic2NyaWJlKHggPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNob3dNZXNzYWdlKCRsb2NhbGl6ZWA6QEBzbmFja2Jhci5zZW5kLnN1Y2Nlc3M6RGF0YSBzZW50IHN1Y2Nlc3NmdWxseS5gKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChzdWNjZXNzQ2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdFx0XHRzdWNjZXNzQ2FsbGJhY2soeCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0sIGVycm9ycyA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0aWYgKGVycm9yQ2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKGVycm9ycyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZXMgdG8gdGhlIGFkZCBwYWdlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBvcGVuRGlhbG9nPFQsIEQgPSBhbnk+KGRpYWxvZ1R5cGU6IFR5cGU8VD4sIGNvbmZpZzogTWF0RGlhbG9nQ29uZmlnPEQ+LCBjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcclxuXHRcdHRoaXMuZGlhbG9nLm9wZW4oZGlhbG9nVHlwZSwgT2JqZWN0LmFzc2lnbih7IHdpZHRoOiAnNjUwcHgnLCBkYXRhOiB7fSwgcGFuZWxDbGFzczogWydkaWFsb2ctZnVsbC1zY3JlZW4nXSB9LCBjb25maWcpKVxyXG5cdFx0XHQuYWZ0ZXJDbG9zZWQoKVxyXG5cdFx0XHQuc3Vic2NyaWJlKF8gPT4gY2FsbGJhY2soKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBhIG1lc3NhZ2VcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5XHJcblx0ICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2VcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2hvd01lc3NhZ2UobWVzc2FnZT86IHN0cmluZywgdHlwZTogTWVzc2FnZVR5cGUgPSBNZXNzYWdlVHlwZS5TdWNjZXNzKTogdm9pZCB7XHJcblx0XHR2YXIgc25hY2tCYXJDbGFzcyA9ICdwcmltYXJ5JztcclxuXHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRjYXNlIE1lc3NhZ2VUeXBlLlN1Y2Nlc3M6XHJcblx0XHRcdFx0c25hY2tCYXJDbGFzcyA9ICdwcmltYXJ5JztcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgTWVzc2FnZVR5cGUuV2FybmluZzpcclxuXHRcdFx0XHRzbmFja0JhckNsYXNzID0gJ3dhcm4nO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSBNZXNzYWdlVHlwZS5FcnJvcjpcclxuXHRcdFx0XHRzbmFja0JhckNsYXNzID0gJ2Vycm9yJztcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihtZXNzYWdlIHx8ICRsb2NhbGl6ZWA6QEBzbmFja2Jhci5zZW5kLnN1Y2Nlc3M6RGF0YSBzZW50IHN1Y2Nlc3NmdWxseS5gLCBudWxsLCB7XHJcblx0XHRcdGR1cmF0aW9uOiAzMDAwLFxyXG5cdFx0XHRwYW5lbENsYXNzOiBbc25hY2tCYXJDbGFzc11cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5pdG9hbGl6ZXMgdGhlIHRpbnltY2UgZWRpdG9yXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGluaXRFZGl0b3IoZWRpdG9yQ29uZmlnOiBhbnkgPSB7fSkge1xyXG5cdFx0T2JqZWN0LmFzc2lnbih0aGlzLmVkaXRvckNvbmZpZywge1xyXG5cdFx0XHRzdWZmaXg6ICcubWluJyxcclxuXHRcdFx0c2tpbjogZmFsc2UsXHJcblx0XHRcdGhlaWdodDogJzE3MHB4JyxcclxuXHRcdFx0Y29udGVudF9jc3M6IGZhbHNlLFxyXG5cdFx0XHRwbHVnaW5zOiB0aGlzLmVkaXRvclBsdWdpbnMsXHJcblx0XHRcdHRvb2xiYXI6IHRoaXMuZWRpdG9yVG9vbGJhcixcclxuXHRcdFx0cGFzdGVfYXNfdGV4dDogdHJ1ZSxcclxuXHRcdFx0bGFuZ3VhZ2U6ICdkZScsXHJcblx0XHRcdGxhbmd1YWdlX3VybDogJy9hc3NldHMvdGlueW1jZS9sYW5ncy9kZS5qcycsXHJcblx0XHRcdGRvY3VtZW50X2Jhc2VfdXJsOiBgJHt0aGlzLmFwcFNldHRpbmcuYXBpVXJsfWZpbGUvYCxcclxuXHRcdFx0YXV0b21hdGljX3VwbG9hZHM6IHRydWUsXHJcblx0XHRcdHJlbGF0aXZlX3VybHM6IHRydWUsXHJcblx0XHRcdGNvbnZlcnRfdXJsczogZmFsc2UsXHJcblx0XHRcdGV4dGVuZGVkX3ZhbGlkX2VsZW1lbnRzOiAnc3BhbltpZHxjbGFzc3xzdHlsZV0sK0BbZGF0YS1vcHRpb25zXScsXHJcblx0XHRcdGFsbG93X2h0bWxfaW5fbmFtZWRfYW5jaG9yOiB0cnVlXHJcblx0XHR9LCBlZGl0b3JDb25maWcpO1xyXG5cclxuXHRcdHRoaXMuaXNFZGl0b3JJbml0aWFsemVkID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgc3VidGl0bGUgZnJvbSBjdXJyZW4gbWVudVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZXRUaXRsZXMoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5tZW51KSB7XHJcblx0XHRcdHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMubWVudS50aXRsZSk7XHJcblx0XHRcdHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlU2VydmljZS5nZXRUaXRsZSgpO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLm1lbnUuaXRlbXMpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIEdldCBzdWJ0aXRsZSBmcm9tIHVybCBwYXJhbXMgKi9cclxuXHRcdFx0dmFyIHN1YnRpdGxlID0gdGhpcy5yb3V0ZT8uc25hcHNob3Q/LnBhcmFtTWFwPy5nZXQoJ3N1YnRpdGxlJyk7XHJcblx0XHRcdGlmIChzdWJ0aXRsZSkge1xyXG5cdFx0XHRcdHRyeSB7IHRoaXMuc3VidGl0bGUgPSBhdG9iKHN1YnRpdGxlKTsgfVxyXG5cdFx0XHRcdGNhdGNoIChlKSB7IHRoaXMuc3VidGl0bGUgPSBzdWJ0aXRsZTsgfVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8qIEdldCBjdXJyZW50IHJvdXRlICovXHJcblx0XHRcdFx0bGV0IGN1cnJlbnRSb3V0ZSA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpWzBdPy5zcGxpdCgnOycpWzBdO1xyXG5cdFx0XHRcdHZhciBzdWJtZW51ID0gdGhpcy5tZW51Lml0ZW1zLmZpbHRlcih4ID0+IHgucGF0aCA9PSBjdXJyZW50Um91dGUpWzBdO1xyXG5cdFx0XHRcdGlmIChzdWJtZW51KSB7XHJcblx0XHRcdFx0XHR0aGlzLnN1YnRpdGxlID0gc3VibWVudS50aXRsZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hdmlnYXRlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBhcnJheSBvZiBjb21tYW5kcyBhbmQgYSBzdGFydGluZyBwb2ludC5cclxuXHQgKiBAcGFyYW0gY29tbWFuZHMgXHJcblx0ICovXHJcblx0cHVibGljIG5hdmlnYXRlKGNvbW1hbmRzOiBhbnlbXSwgcXVlcnlQYXJhbXM/OiBhbnksIGZyYWdtZW50Pzogc3RyaW5nLCBwcmVzZXJ2ZUZyYWdtZW50PzogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIHtcclxuXHRcdFx0cXVlcnlQYXJhbXM6IE9iamVjdC5hc3NpZ24oeyByZXR1cm5Vcmw6IHRoaXMuY3VycmVudFJvdXRlIH0sIHF1ZXJ5UGFyYW1zIHx8IHt9KSxcclxuXHRcdFx0ZnJhZ21lbnQ6IGZyYWdtZW50LFxyXG5cdFx0XHRwcmVzZXJ2ZUZyYWdtZW50OiBwcmVzZXJ2ZUZyYWdtZW50LFxyXG5cdFx0XHRyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnZlcnQgT2JqZWN0IHRvIEh0dHBIZWFkZXJzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGJvZHlcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgdG9IdHRwSGVhZGVycyhib2R5OiBPYmplY3QpOiBIdHRwSGVhZGVycyB7XHJcblx0XHRpZiAoIWJvZHkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBIdHRwSGVhZGVycygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhib2R5KVxyXG5cdFx0XHQuZmlsdGVyKGtleSA9PiBib2R5W2tleV0gIT0gbnVsbCAmJiBib2R5W2tleV0gIT0gJycpXHJcblx0XHRcdC5yZWR1Y2UoKHAsIGtleSkgPT4gcC5zZXQoa2V5LCBib2R5W2tleV0pLCBuZXcgSHR0cEhlYWRlcnMoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXJzZXMgaHR0cCByZXNwb25zZSBlcnJvcnNcclxuXHQgKiBAcGFyYW0gZXJyb3JzIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBwYXJzZUVycm9ycyhlcnJvcnM6IE9iamVjdCk6IHZvaWQge1xyXG5cdFx0dGhpcy5lcnJvcnMgPSBbXTtcclxuXHRcdHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcblxyXG5cdFx0aWYgKGVycm9ycykge1xyXG5cdFx0XHRPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goZWwgPT4ge1xyXG5cdFx0XHRcdGxldCBlcnJvciA9IGVycm9yc1tlbF07XHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZXJyb3IpKSB7XHJcblx0XHRcdFx0XHRlcnJvci5mb3JFYWNoKGVyciA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JzLnB1c2goZXJyKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSBcInN0cmluZ1wiKSB7XHJcblx0XHRcdFx0XHR0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlIEh0dHAgb3BlcmF0aW9uIHRoYXQgZmFpbGVkLlxyXG5cdCAqIExldCB0aGUgYXBwIGNvbnRpbnVlLlxyXG5cdCAqIEBwYXJhbSBvcGVyYXRpb24gLSBuYW1lIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBmYWlsZWRcclxuXHQgKiBAcGFyYW0gcmVzdWx0IC0gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGFzIHRoZSBvYnNlcnZhYmxlIHJlc3VsdFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBoYW5kbGVFcnJvcjxUPihvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgcmVzdWx0PzogVCkge1xyXG5cdFx0cmV0dXJuIChlcnJvcjogYW55KTogT2JzZXJ2YWJsZTxUPiA9PiB7XHJcblxyXG5cdFx0XHQvKiBQYXJzZSB0aGUgZXJyb3IgbWVzc2FnZXMgKi9cclxuXHRcdFx0dGhpcy5wYXJzZUVycm9ycyhlcnJvcik7XHJcblxyXG5cdFx0XHQvKiBMb2cgdG8gY29uc29sZSAqL1xyXG5cdFx0XHR0aGlzLndhcm4oYCR7b3BlcmF0aW9ufSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcclxuXHJcblx0XHRcdC8qIExldCB0aGUgYXBwIGtlZXAgcnVubmluZyBieSByZXR1cm5pbmcgYW4gZW1wdHkgcmVzdWx0ICovXHJcblx0XHRcdHJldHVybiBvZihyZXN1bHQgYXMgVCk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9nIHRvIGNvbnNvbGVcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBcclxuXHQgKiBAcGFyYW0gb3B0aW9uYWxQYXJhbXMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGxvZyhtZXNzYWdlOiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkge1xyXG5cdFx0aWYgKHRoaXMuZGVidWcpIHtcclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSwgb3B0aW9uYWxQYXJhbXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9nIHRvIGNvbnNvbGVcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBcclxuXHQgKiBAcGFyYW0gb3B0aW9uYWxQYXJhbXMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHdhcm4obWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pIHtcclxuXHRcdGlmICh0aGlzLmRlYnVnKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybihtZXNzYWdlLCBvcHRpb25hbFBhcmFtcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDbGVhbnMgdGhlIG9iamVjdHNcclxuXHQgKiBSZW1vdmVzIGVtcHR5IHByb3BlcnRpZXNcclxuXHQgKiBAcGFyYW0gb2JqIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjbGVhbihvYmo6IGFueSk6IGFueSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRmb3IgKHZhciBwcm9wTmFtZSBpbiBvYmopIHtcclxuXHRcdFx0XHRpZiAob2JqW3Byb3BOYW1lXSA9PT0gbnVsbCB8fCBvYmpbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgfHwgb2JqW3Byb3BOYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIG9ialtwcm9wTmFtZV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlcnJvcikgeyB9XHJcblxyXG5cdFx0cmV0dXJuIG9iajtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhbml0aXplcyB0aGUgc3BlY2lmaWVkIG9iamVjdFxyXG5cdCAqIEBwYXJhbSBvYmogXHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNhbml0aXplT2JqZWN0KG9iajogYW55LCAuLi5pZ25vcmU6IHN0cmluZ1tdKTogYW55IHtcclxuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvYmopXHJcblx0XHRcdC5maWx0ZXIoeCA9PiBvYmpbeF0pXHJcblx0XHRcdC5maWx0ZXIoeCA9PiAhKGlnbm9yZSB8fCBbXSkubWFwKHggPT4geC50b0xvd2VyQ2FzZSgpKS5pbmNsdWRlcyh4LnRvTG93ZXJDYXNlKCkpKVxyXG5cdFx0XHQucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdFtrZXldID0gaXNOYU4oK29ialtrZXldKSA/IG9ialtrZXldIDogK29ialtrZXldO1xyXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHRcdH0sIHt9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrcyBpZiB0aGUgdXNlciBzZWxlY2V0ZWQgYW55IHRleHQgaW4gdGhlIGRvY3VtZW50XHJcblx0ICogQHJldHVybnMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGlzVGV4dFNlbGVjdGVkID0gKCk6IGJvb2xlYW4gPT4gd2luZG93Py5nZXRTZWxlY3Rpb24oKT8udG9TdHJpbmcoKT8ubGVuZ3RoID4gMDtcclxuXHJcblx0LyoqXHJcblx0ICogQSBjYWxsYmFjayB1c2VkIGZvciBhbnkgY3VzdG9tIGNsZWFudXAgdGhhdCBuZWVkcyB0byBvY2N1clxyXG5cdCAqIHdoZW4gdGhlIGluc3RhbmNlIGlzIGRlc3Ryb3llZC5cclxuXHQgKi9cclxuXHRuZ09uRGVzdHJveSgpIHtcclxuXHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxTdWJzY3JpcHRpb25zLmZvckVhY2goeCA9PiB4LnVuc3Vic2NyaWJlKCkpO1xyXG5cdH1cclxufSJdfQ==
574
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9iYXNlL2NvbXBvbmVudHMvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFRLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SixPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBMEIsYUFBYSxFQUFFLE1BQU0sRUFBdUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNySCxPQUFPLEVBQTRCLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIs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Q0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RCxPQUFPLE1BQU0sQ0FBQztRQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFRRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1YsSUFBSSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7OzZIQTNzQm9CLGFBQWE7aUhBQWIsYUFBYSx1TEE0THBCLGlCQUFpQiwyQkFBVSxVQUFVLDZEQU1yQyxpQkFBaUI7MkZBbE1WLGFBQWE7a0JBRGxDLFNBQVM7cUlBOENGLDJCQUEyQjtzQkFEakMsS0FBSztnQkE2R0MsTUFBTTtzQkFEWixNQUFNO2dCQXFDRyxpQ0FBaUM7c0JBRDFDLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQU8zQywwQkFBMEI7c0JBRG5DLFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVHlwZSwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0RXhwYW5zaW9uUGFuZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFVybFNlZ21lbnQsIFVybFRyZWUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnRleHRIZWxwZXIgfSBmcm9tICcuLi8uLi9jb21tb24vY29tbW9uLm1vZHVsZSc7XHJcbmltcG9ydCB7IEFwcFNldHRpbmcgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL2FwcC1zZXR0aW5nJztcclxuaW1wb3J0IHsgU2VydmljZUxvY2F0b3IgfSBmcm9tICcuLi8uLi9jb21tb24vc2VydmljZXMvc2VydmljZS1sb2NhdG9yJztcclxuaW1wb3J0IHsgVmREaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGlhbG9ncy9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFZkTWVkaWFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbWVkaWEvc2VydmljZXMvbWVkaWEuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lbnUgfSBmcm9tICcuLi8uLi9tZW51L21vZGVscy9tZW51JztcclxuaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi4vY29uc3RhbnRzL2NvbW1vbic7XHJcbmltcG9ydCB7IEdsb2JhbFJvbGVzIH0gZnJvbSAnLi4vY29uc3RhbnRzL2dsb2JhbC1yb2xlcyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vZW51bXMvbWVzc2FnZS10eXBlJztcclxuaW1wb3J0IHsgQXV0aEhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMvYXV0aC1oZWxwZXInO1xyXG5pbXBvcnQgeyBJQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvaWJhc2UtY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXV0aFVzZXIgfSBmcm9tICcuLi9tb2RlbHMvYXV0aC11c2VyJztcclxuXHJcbi8qKlxyXG4gKiBBIGJhc2UgbGlzdCBjb21wb25lbnQgZm9yIGNvbXBvbmVudHMgd2l0aCBwYWdpbmF0aW9uIHN1cHBvcnRcclxuICovXHJcbi8vIEBkeW5hbWljXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIElCYXNlQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cdC8qKlxyXG5cdCAqIEFwcCBzZXR0aW5nc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBhcHBTZXR0aW5nOiBBcHBTZXR0aW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBzZXR0aW5nczogQW55XHJcblx0ICovXHJcblx0cHVibGljIHNldHRpbmdzOiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogTWVudSBpdGVtc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBtZW51OiBNZW51O1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVjdFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwcm9qZWN0TmFtZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgdGl0bGUgb2YgdGhlIGN1cnJlbnQgcGFnZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0aXRsZTogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgc3VidGl0bGUgb2YgdGhlIGN1cnJlbnQgb3V0bGV0XHJcblx0ICovXHJcblx0cHVibGljIHN1YnRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgdXNlIHNvbWUgZHVtbXkgZGF0YSBhbmQgc2hvdyBkZWJ1ZyBsb2dzXHJcblx0ICovXHJcblx0cHVibGljIGRlYnVnOiBib29sZWFuO1xyXG5cclxuXHQvKipcdCBcclxuXHQgKiBMb2FkaW5nIHN0YXR1c1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIGhhbmRsZUV4cGFuc2lvblBhbmVsQ2hhbmdlczogYm9vbGVhblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGhhbmRsZUV4cGFuc2lvblBhbmVsQ2hhbmdlczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmluZyBzdGF0dXNcclxuXHQgKi9cclxuXHRwdWJsaWMgX2lzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHVibGljIGdldCBpc1NhdmluZygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzU2F2aW5nIHx8IHRoaXMuaXNMb2FkaW5nOyB9XHJcblx0cHVibGljIHNldCBpc1NhdmluZyhpc1NhdmluZzogYm9vbGVhbikgeyB0aGlzLmlzTG9hZGluZyA9IHRoaXMuX2lzU2F2aW5nID0gaXNTYXZpbmc7IH1cclxuXHJcblx0LyoqXHJcblx0ICogQSBmbGFnIGVpbmRpY2F0ZXMgdGhhdCB0aGUgZWRpdG9yIGlzIGluaXRlZFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0VkaXRvckluaXRpYWx6ZWQ6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlcHJlc2VudHMgdGhlIHJlcXVlc3QgZXJyb3JzXHJcblx0ICovXHJcblx0cHVibGljIGVycm9yczogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVzZWQgdG8gZXZhbHVhdGUgd2hldGhlciBhIGdpdmVuIG1lZGlhIHF1ZXJ5IGlzIHRydWUgb3IgZmFsc2UgZ2l2ZW4gdGhlIGN1cnJlbnQgZGV2aWNlJ3Mgc2NyZWVuIC8gd2luZG93IHNpemUuXHJcblx0ICovXHJcblx0cHVibGljIG1lZGlhOiBWZE1lZGlhU2VydmljZTtcclxuXHJcblx0LyoqXHJcblx0ICogQWxsb3dlZCBmaWxlIGV4dGVuc2lvbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgYWxsb3dlZEV4dGVuc2lvbnM6IHN0cmluZ1tdID0gQ29tbW9uLmFsbG93ZWRFeHRlbnNpb25zO1xyXG5cclxuXHQvKipcclxuXHQgKiB0aW55TUNFIHBsdWdpbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdG9yUGx1Z2luczogc3RyaW5nID0gQ29tbW9uLmVkaXRvclBsdWdpbnM7XHJcblxyXG5cdC8qKlxyXG5cdCAqIHRpbnlNQ0UgZWRpdG9yXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRvclRvb2xiYXI6IHN0cmluZyA9IENvbW1vbi5lZGl0b3JUb29sYmFyO1xyXG5cclxuXHQvKipcclxuXHQgKiBFZGl0b3IgY29uZmlndXJhdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0b3JDb25maWc6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBQcm92aWRlcyB0aGUgbmF2aWdhdGlvbiBhbmQgdXJsIG1hbmlwdWxhdGlvbiBjYXBhYmlsaXRpZXMuXHJcblx0ICovXHJcblx0cHVibGljIHJvdXRlcjogUm91dGVyO1xyXG5cclxuXHQvKipcclxuXHQgKiB1cmxIYXNoOiBzdHJpbmdcclxuXHQgKi9cclxuXHRwdWJsaWMgdXJsSGFzaDogc3RyaW5nID0gbnVsbDtcclxuXHJcblx0LyoqXHJcblx0ICogQ2xhc3MgbmFtZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlIHBlcm1pc3Npb25cclxuXHQgKi9cclxuXHRwdWJsaWMgY2FuQ3JlYXRlOiBib29sZWFuO1xyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGUgcGVybWlzc2lvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjYW5VcGRhdGU6IGJvb2xlYW47XHJcblxyXG5cdC8qKlxyXG5cdCAqIEN1cnJlbnQgcm91dGVcclxuXHQgKi9cclxuXHRwdWJsaWMgY3VycmVudFJvdXRlOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEN1cnJlbnQgYmFzZSByb3V0ZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjdXJyZW50QmFzZVJvdXRlOiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgdXJsIHRvIHJldHVybiB0byBhZnRlciBzYXZlXHJcblx0ICovXHJcblx0cHVibGljIHJldHVyblVybDogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBDdXJyZW50IHVzZXIgb2JqZWN0XHJcblx0ICovXHJcblx0cHVibGljIGN1cnJlbnRVc2VyOiBBdXRoVXNlciA9IEF1dGhIZWxwZXIudXNlcjtcclxuXHJcblx0LyoqXHJcblx0ICogSXMgdGhlIGN1cnJlbnQgdXNlciBhIGNsaWVudCBhZG1pblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0FkbWluID0gQXV0aEhlbHBlci5oYXNSb2xlKEdsb2JhbFJvbGVzLkFkbWluaXN0cmF0b3IpO1xyXG5cclxuXHQvKipcclxuXHQgKiBJcyB0aGUgY3VycmVudCB1c2VyIGEgY2xpZW50IGFkbWluXHJcblx0ICovXHJcblx0cHVibGljIGlzQ2xpZW50QWRtaW4gPSBBdXRoSGVscGVyLmhhc1JvbGUoR2xvYmFsUm9sZXMuQ2xpZW50QWRtaW5pc3RyYXRvcik7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElzIHRoZSBjdXJyZW50IHVzZXIgYSBkZXBhcnRtZW50IGFkbWluXHJcblx0ICovXHJcblx0cHVibGljIGlzRGVwYXJ0bWVudEFkbWluID0gQXV0aEhlbHBlci5oYXNSb2xlKEdsb2JhbFJvbGVzLkRlcGFydG1lbnRBZG1pbmlzdHJhdG9yKTtcclxuXHJcblx0LyoqXHJcblx0ICogcmVsb2FkPzogZnVuY3Rpb25cclxuXHQgKi9cclxuXHRAT3V0cHV0KClcclxuXHRwdWJsaWMgcmVsb2FkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHNlcnZpY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBnZXQgYW5kIHNldCB0aGUgdGl0bGUgb2YgYSBjdXJyZW50IEhUTUwgZG9jdW1lbnQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHRpdGxlU2VydmljZTogVGl0bGU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgc2VydmljZSB0byBkaXNwYXRjaCBNYXRlcmlhbCBEZXNpZ24gc25hY2sgYmFyIG1lc3NhZ2VzLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzbmFja0JhclNlcnZpY2U6IE1hdFNuYWNrQmFyO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIHNlcnZpY2UgdG8gc2hvdyBjb25pcm0gYW5kIHByb21wdCBkaWFsb2dzLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBWZERpYWxvZ1NlcnZpY2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgc2VydmljZSB0byBzaG93IGNvbmlybSBhbmQgcHJvbXB0IGRpYWxvZ3MuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGRpYWxvZzogTWF0RGlhbG9nO1xyXG5cclxuXHQvKipcclxuXHQgKiBsb2NhdGlvbjogTG9jYXRpb25cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbG9jYXRpb246IExvY2F0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzZXQgdXJsIGhhc2hcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2V0VXJsSGFzaDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1hdEV4cGFuc2lvblBhbmVsIHJlZlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGRyZW4oTWF0RXhwYW5zaW9uUGFuZWwsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG5cdHByb3RlY3RlZCBtYXRFeHBhbnNpb25QYW5lbEVsZW1lbnRRdWVyeUxpc3Q6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuXHJcblx0LyoqXHJcblx0ICogTWF0RXhwYW5zaW9uUGFuZWwgcmVmXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZHJlbihNYXRFeHBhbnNpb25QYW5lbClcclxuXHRwcm90ZWN0ZWQgbWF0RXhwYW5zaW9uUGFuZWxRdWVyeUxpc3Q6IFF1ZXJ5TGlzdDxNYXRFeHBhbnNpb25QYW5lbD47XHJcblxyXG5cdC8qKlxyXG5cdCAqIG1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW11cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbWF0RXhwYW5zaW9uUGFuZWxTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvclxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuXHRcdHRoaXMudGl0bGVTZXJ2aWNlID0gdGhpcy5nZXRTZXJ2aWNlKFRpdGxlKTtcclxuXHRcdHRoaXMuZGlhbG9nU2VydmljZSA9IHRoaXMuZ2V0U2VydmljZShWZERpYWxvZ1NlcnZpY2UpO1xyXG5cdFx0dGhpcy5kaWFsb2cgPSB0aGlzLmdldFNlcnZpY2UoTWF0RGlhbG9nKTtcclxuXHRcdHRoaXMubWVkaWEgPSB0aGlzLmdldFNlcnZpY2UoVmRNZWRpYVNlcnZpY2UpO1xyXG5cdFx0dGhpcy5zbmFja0JhclNlcnZpY2UgPSB0aGlzLmdldFNlcnZpY2UoTWF0U25hY2tCYXIpO1xyXG5cdFx0dGhpcy5yb3V0ZXIgPSB0aGlzLmdldFNlcnZpY2UoUm91dGVyKTtcclxuXHRcdHRoaXMuYXBwU2V0dGluZyA9IHRoaXMuZ2V0U2VydmljZShBcHBTZXR0aW5nKTtcclxuXHRcdHRoaXMubG9jYXRpb24gPSB0aGlzLmdldFNlcnZpY2UoTG9jYXRpb24pO1xyXG5cclxuXHRcdENvbnRleHRIZWxwZXIuYWN0aXZhdGVkUm91dGUgPSByb3V0ZTtcclxuXHRcdENvbnRleHRIZWxwZXIucm91dGVyID0gdGhpcy5yb3V0ZXI7XHJcblx0XHRDb250ZXh0SGVscGVyLmFwcFNldHRpbmcgPSB0aGlzLmFwcFNldHRpbmc7XHJcblxyXG5cdFx0dGhpcy5pbml0RWRpdG9yKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBkYXRhLWJvdW5kIHByb3BlcnRpZXMgXHJcblx0ICogb2YgYSBkaXJlY3RpdmUgYXJlIGluaXRpYWxpemVkLlxyXG5cdCAqL1xyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0LyogR2V0IG1lbnUgaXRlbXMgZnJvbSByb3V0ZSBzbmFwc2hvdCAqL1xyXG5cdFx0dmFyIG1haW5Sb3V0ZSA9IHRoaXMuZ2V0TWFpblJvdXRlKHRoaXMucm91dGUuc25hcHNob3QpO1xyXG5cdFx0aWYgKG1haW5Sb3V0ZSkge1xyXG5cdFx0XHR0aGlzLm1lbnUgPSBtYWluUm91dGUuZGF0YS5tZW51O1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFNldCBwcm9qZWN0IG5hbWUgJiBkZWJ1ZyBtb2RlICovXHJcblx0XHR0aGlzLnByb2plY3ROYW1lID0gdGhpcy5hcHBTZXR0aW5nLnByb2plY3ROYW1lO1xyXG5cdFx0dGhpcy5kZWJ1ZyA9IHRoaXMuYXBwU2V0dGluZy5kZWJ1ZztcclxuXHJcblx0XHQvKiBHZXQgdGhlIGhhc2ggZnJvbSB0aGUgdXJsICovXHJcblx0XHR0aGlzLnJvdXRlLmZyYWdtZW50LnN1YnNjcmliZSgoZnJhZ21lbnQ6IHN0cmluZykgPT4gdGhpcy51cmxIYXNoID0gZnJhZ21lbnQpO1xyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ2hlY2sgcGVybWlzc2lvbnNcclxuXHRcdCAqL1xyXG5cdFx0aWYgKHRoaXMucm91dGUucGFyZW50KSB7XHJcblx0XHRcdHRoaXMucm91dGUucGFyZW50LnVybC5zdWJzY3JpYmUoKHVybDogVXJsU2VnbWVudFtdKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5jbGFzc05hbWUgPz89IHVybC5sZW5ndGggPyB1cmxbMF0ucGF0aC5yZXBsYWNlKC8oLiopcyQvLCAnJDEnKS5yZXBsYWNlKC9eLi8sICh1cmxbMF0ucGF0aFswXSB8fCAnJykudG9VcHBlckNhc2UoKSkgOiAnJztcclxuXHRcdFx0XHR0aGlzLmNhbkNyZWF0ZSA9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoJ0NyZWF0ZScsIGBDcmVhdGUke3RoaXMuY2xhc3NOYW1lfWApO1xyXG5cdFx0XHRcdHRoaXMuY2FuVXBkYXRlID0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZCgnVXBkYXRlJywgYFVwZGF0ZSR7dGhpcy5jbGFzc05hbWV9YCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFNldCBjdXJyZW50IHJvdXRlICovXHJcblx0XHR0aGlzLmN1cnJlbnRSb3V0ZSA9IGJ0b2EodGhpcy5yb3V0ZXIudXJsKTtcclxuXHRcdHRoaXMuY3VycmVudEJhc2VSb3V0ZSA9IHRoaXMucm91dGVyLnVybD8uc3BsaXQoJz8nKVswXT8uc3BsaXQoJzsnKVswXTtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNldCBwYWdlIHRpdGxlXHJcblx0XHQgKi9cclxuXHRcdHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdGlmICh4IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xyXG5cdFx0XHRcdHRoaXMuc2V0VGl0bGVzKCk7XHJcblx0XHRcdFx0dGhpcy5jdXJyZW50Um91dGUgPSBidG9hKHgudXJsKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0LyogR2V0IHRoZSByZXR1cm4gdXJsIGlmIGFueSAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoeCA9PiB0aGlzLnNldFJldHVyblVybCh4LnJldHVyblVybCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQncyB2aWV3IGhhcyBiZWVuIGZ1bGx5IGluaXRpYWxpemVkLlxyXG5cdCAqL1xyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdC8qIEJyb2FkY2FzdCB0byBhbGwgbGlzdGVuZXIgb2JzZXJ2YWJsZXMgd2hlbiBsb2FkaW5nIHRoZSBwYWdlICovXHJcblx0XHR0aGlzLm1lZGlhLmJyb2FkY2FzdCgpO1xyXG5cclxuXHRcdC8qIFNldCB0aXRsZXMgKi9cclxuXHRcdHRoaXMuc2V0VGl0bGVzKCk7XHJcblxyXG5cdFx0LyogXHJcblx0XHQgKiBGb3JjZSBhIG5ldyBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIHNpbmNlIGNoYW5nZSBkZXRlY3Rpb25zIFxyXG5cdFx0ICogaGF2ZSBmaW5pc2hlZCB3aGVuIGBuZ0FmdGVyVmlld0luaXRgIGlzIGV4ZWN1dGVkXHJcblx0XHQgKi9cclxuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuXHRcdC8qIExpc3RlbiBmb3IgZXhwYW5zaW9uIHBhbmVsIGNoYW5nZXMgKi9cclxuXHRcdGlmICh0aGlzLmhhbmRsZUV4cGFuc2lvblBhbmVsQ2hhbmdlcykge1xyXG5cdFx0XHR0aGlzLm9uRXhwYW5zaW9uUGFuZWxDaGFuZ2VzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWZyZXNocyB0aGlzIHBhZ2UvY29tcG9uZW50XHJcblx0ICovXHJcblx0cHVibGljIHJlbG9hZFBhZ2UoKTogdm9pZCB7XHJcblx0XHRsZXQgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHJlcGxhY2VVcmw6IHRydWUgfSkudGhlbigoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGN1cnJlbnRVcmwsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZXMgYmFjayB0byByZXR1cm4gdXJsXHJcblx0ICovXHJcblx0cHVibGljIG5hdmlnYXRlVG9SZXR1cm5VcmwoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5yZXR1cm5VcmwpIHtcclxuXHRcdFx0bGV0IHVybFRyZWU6IFVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJldHVyblVybCk7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsVHJlZS50b1N0cmluZygpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qIFxyXG5cdCAqIEZvcmNlIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgc2luY2UgY2hhbmdlIGRldGVjdGlvbnMgXHJcblx0ICogaGF2ZSBmaW5pc2hlZCB3aGVuIGBuZ0FmdGVyVmlld0luaXRgIGlzIGV4ZWN1dGVkXHJcblx0ICovXHJcblx0cHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgcmV0dXJuIHVybFxyXG5cdCAqIEBwYXJhbSByZXR1cm5VcmwgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFJldHVyblVybChyZXR1cm5Vcmw6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dHJ5IHsgdGhpcy5yZXR1cm5VcmwgPSByZXR1cm5VcmwgPyBkZWNvZGVVUklDb21wb25lbnQoYXRvYihyZXR1cm5VcmwpKSA6IG51bGw7IH1cclxuXHRcdGNhdGNoIChlcnJvcikgeyB9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMaXN0ZW4gZm9yIGV4cGFuc2lvbiBwYW5lbCBjaGFuZ2VzXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uRXhwYW5zaW9uUGFuZWxDaGFuZ2VzKCk6IHZvaWQge1xyXG5cdFx0LyogTGlzdGVuIGZvciBleHBhbnNpb24gcGFuZWwgY2hhbmdlcyAqL1xyXG5cdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8uY2hhbmdlcy5zdWJzY3JpYmUoXyA9PiB7XHJcblx0XHRcdC8qIFVuc3Vic2NyaWJlIGZyb20gb2xkICdvcGVuZWQnIGFuZCAnY2xvc2VkJyBzdWJzY3JpcHRpb25zICovXHJcblx0XHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxTdWJzY3JpcHRpb25zLmZvckVhY2goeCA9PiB4LnVuc3Vic2NyaWJlKCkpO1xyXG5cclxuXHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgKi9cclxuXHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG5cdFx0XHQvKiBHZXQgdGhlIHBhbmVsIGVuZHMgd2l0aCB0aGUgSUQgJ25ldycgKi9cclxuXHRcdFx0dmFyIG5ld0V4cGFuc2lvblBhbmVsSW5kZXggPSB0aGlzLm1hdEV4cGFuc2lvblBhbmVsRWxlbWVudFF1ZXJ5TGlzdD8udG9BcnJheSgpPy5maW5kSW5kZXgoeCA9PiB4Lm5hdGl2ZUVsZW1lbnQ/LmlkPy5lbmRzV2l0aCgnLm5ldycpKTtcclxuXHRcdFx0aWYgKG5ld0V4cGFuc2lvblBhbmVsSW5kZXggPj0gMCkge1xyXG5cdFx0XHRcdC8qIENsb3NlIGFsbCBwYW5lbHMgKi9cclxuXHRcdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Py5maXJzdD8uYWNjb3JkaW9uPy5jbG9zZUFsbCgpO1xyXG5cclxuXHRcdFx0XHQvKiBPcGVuIHRoZSBuZXcgcGFuZWwgKi9cclxuXHRcdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Py50b0FycmF5KClbbmV3RXhwYW5zaW9uUGFuZWxJbmRleF0/Lm9wZW4oKTtcclxuXHJcblx0XHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgKi9cclxuXHRcdFx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgcGFuZWwgd2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgSUQgKi9cclxuXHRcdFx0XHR0aGlzLnVybEhhc2g/LnNwbGl0KCcuJylcclxuXHRcdFx0XHRcdD8ucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlLCBpbmRleCkgPT4gYWNjdW11bGF0b3IuY29uY2F0KChpbmRleCA+IDAgPyAoYWNjdW11bGF0b3Iuc2xpY2UoLTEpLmpvaW4oJy4nKSArICcuJykgOiAnJykgKyBjdXJyZW50VmFsdWUpLCBbXSlcclxuXHRcdFx0XHRcdD8uZm9yRWFjaCgoaGFzaDogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRcdHZhciBleHBhbnNpb25QYW5lbEluZGV4ID0gdGhpcy5tYXRFeHBhbnNpb25QYW5lbEVsZW1lbnRRdWVyeUxpc3Q/LnRvQXJyYXkoKT8uZmluZEluZGV4KHggPT4geC5uYXRpdmVFbGVtZW50LmlkID09IGhhc2gpO1xyXG5cdFx0XHRcdFx0XHRpZiAoZXhwYW5zaW9uUGFuZWxJbmRleCA+PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8udG9BcnJheSgpW2V4cGFuc2lvblBhbmVsSW5kZXhdPy5vcGVuKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBEZXRlY3QgY2hhbmdlcyBmb3Igb3BlbmVkIHBhbmVscyAqL1xyXG5cdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Py5mb3JFYWNoKHkgPT4ge1xyXG5cdFx0XHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxTdWJzY3JpcHRpb25zLnB1c2goeS5vcGVuZWQuc3Vic2NyaWJlKF8gPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuc2V0VXJsSGFzaCkge1xyXG5cdFx0XHRcdFx0XHQvKiBHZXQgdGhlIGlkIG9mIHRoZSBjdXJyZW50IG9wZW5lZCBwYW5lbCAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgY3VycmVudFBhbmVsSWQgPSB5Wydfdmlld0NvbnRhaW5lclJlZiddPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5pZDtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwYW5lbCBJRCBpcyBzZXQsIHNldCBpdCBhcyB1cmwgc2VnbWVudCAoaGFzaCkgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRQYW5lbElkKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgZnJhZ21lbnQ6IGN1cnJlbnRQYW5lbElkLCByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBPdGhlcndpc2UgcmVtb3ZlIHRoZSBzZWdtZW50IGZyb20gdGhlIHVybCAqL1xyXG5cdFx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgKi9cclxuXHRcdFx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdH0pKTtcclxuXHJcblx0XHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgZm9yIGNsb3NlZCBwYW5lbHMgKi9cclxuXHRcdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9ucy5wdXNoKHkuY2xvc2VkLnN1YnNjcmliZShfID0+IHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnNldFVybEhhc2gpIHtcclxuXHRcdFx0XHRcdFx0LyogR2V0IHRoZSBpZCBvZiB0aGUgY3VycmVudCBvcGVuZWQgcGFuZWwgKi9cclxuXHRcdFx0XHRcdFx0dmFyIGN1cnJlbnRQYW5lbElkUGFydHMgPSB5Wydfdmlld0NvbnRhaW5lclJlZiddPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5pZD8uc3BsaXQoJy4nKTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwYW5lbCBJRCBpcyBzZXQsIHNldCBpdCBhcyB1cmwgc2VnbWVudCAoaGFzaCkgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRQYW5lbElkUGFydHMubGVuZ3RoID4gMSkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IGZyYWdtZW50OiBjdXJyZW50UGFuZWxJZFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcuJyksIHJlcGxhY2VVcmw6IHRydWUgfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBEZXRlY3QgY2hhbmdlcyAqL1xyXG5cdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIE5vdGlmeSBleHBhbnNpb24gcGFuZWwgbGlzdCBjaGFuZ2VzICovXHJcblx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0cmlldmVzIGFuIGluc3RhbmNlIGZyb20gdGhlIGluamVjdG9yIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0b2tlbi5cclxuXHQgKiBJZiBub3QgZm91bmQ6XHJcblx0ICogLSBUaHJvd3Mge0BsaW5rIE5vUHJvdmlkZXJFcnJvcn0gaWYgbm8gYG5vdEZvdW5kVmFsdWVgIHRoYXQgaXMgbm90IGVxdWFsIHRvXHJcblx0ICogSW5qZWN0b3IuVEhST1dfSUZfTk9UX0ZPVU5EIGlzIGdpdmVuXHJcblx0ICogLSBSZXR1cm5zIHRoZSBgbm90Rm91bmRWYWx1ZWAgb3RoZXJ3aXNlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldFNlcnZpY2U8VD4odG9rZW46IFR5cGU8VD4pOiBUIHtcclxuXHRcdHJldHVybiBTZXJ2aWNlTG9jYXRvci5nZXRTZXJ2aWNlKHRva2VuKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgYmFzZSByb3V0ZVxyXG5cdCAqIEBwYXJhbSBzbmFwc2hvdCBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZ2V0TWFpblJvdXRlKHNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB7XHJcblx0XHRpZiAoc25hcHNob3QgJiYgIXNuYXBzaG90LmRhdGEubWVudSkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRNYWluUm91dGUoc25hcHNob3QucGFyZW50KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gc25hcHNob3Q7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBhIGNvbmZpcm0gZGlhbG9nIHRvIGRlbGV0ZSBhbiBpdGVtIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93RGVsZXRlSXRlbURpYWxvZygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuQ29uZmlybSh7XHJcblx0XHRcdG1lc3NhZ2U6ICRsb2NhbGl6ZWA6QEBkaWFsb2cubWVzc2FnZS5kZWxldGUub25lOkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBpdGVtP2AsXHJcblx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZGlhbG9nLnRpdGxlLmRlbGV0ZTpDb25maXJtIERlbGV0ZWAsXHJcblx0XHRcdGNhbmNlbEJ1dHRvbjogJGxvY2FsaXplYDpAQGNhbmNlbDpDYW5jZWxgLFxyXG5cdFx0XHRhY2NlcHRCdXR0b246ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdH0pLmFmdGVyQ2xvc2VkKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBhIGNvbmZpcm0gZGlhbG9nIHRvIGRlbGV0ZSBtdWx0aXBsZSBpdGVtc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93RGVsZXRlSXRlbXNEaWFsb2coKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpcm0oe1xyXG5cdFx0XHRtZXNzYWdlOiAkbG9jYWxpemVgOkBAZGlhbG9nLm1lc3NhZ2UuZGVsZXRlLmxpc3Q6QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgaXRlbXM/YCxcclxuXHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkaWFsb2cudGl0bGUuZGVsZXRlOkNvbmZpcm0gRGVsZXRlYCxcclxuXHRcdFx0Y2FuY2VsQnV0dG9uOiAkbG9jYWxpemVgOkBAY2FuY2VsOkNhbmNlbGAsXHJcblx0XHRcdGFjY2VwdEJ1dHRvbjogJGxvY2FsaXplYDpAQGRlbGV0ZTpEZWxldGVgLFxyXG5cdFx0fSkuYWZ0ZXJDbG9zZWQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3dzIGEgY29uZmlybSBkaWFsb2cgdG8gc2VuZCBzb21lIGRhdGFcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5XHJcblx0ICogQHBhcmFtIG9ic2VydmFiZSBUaGUgb2JzZXJ2YWJsZSBpbnN0YW5jZVxyXG5cdCAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgQSBzdWNjZXNzIGNhbGxiYWNrXHJcblx0ICogQHBhcmFtIGVycm9yQ2FsbGJhY2sgQW4gZXJyb3IgY2FsbGJhY2tcclxuXHQgKi9cclxuXHRwdWJsaWMgc2hvd0NvbmZpcm1hdGlvbkRpYWxvZyhtZXNzYWdlOiBzdHJpbmcsIG9ic2VydmFiZTogT2JzZXJ2YWJsZTxhbnk+LCBzdWNjZXNzQ2FsbGJhY2s6IEZ1bmN0aW9uID0gbnVsbCwgZXJyb3JDYWxsYmFjazogRnVuY3Rpb24gPSBudWxsKTogdm9pZCB7XHJcblx0XHR0aGlzLmRpYWxvZ1NlcnZpY2VcclxuXHRcdFx0Lm9wZW5Db25maXJtKHtcclxuXHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlLFxyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZGlhbG9nLnRpdGxlLmNvbmZpcm06Q29uZmlybWAsXHJcblx0XHRcdFx0Y2FuY2VsQnV0dG9uOiAkbG9jYWxpemVgOkBAY2FuY2VsOkNhbmNlbGAsXHJcblx0XHRcdFx0YWNjZXB0QnV0dG9uOiAkbG9jYWxpemVgOkBAb2s6T2tgLFxyXG5cdFx0XHR9KVxyXG5cdFx0XHQuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdGlmIChhY2NlcHQpIHtcclxuXHRcdFx0XHRcdG9ic2VydmFiZS5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2hvd01lc3NhZ2UoJGxvY2FsaXplYDpAQHNuYWNrYmFyLnNlbmQuc3VjY2VzczpEYXRhIHNlbnQgc3VjY2Vzc2Z1bGx5LmApO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3NDYWxsYmFjaykge1xyXG5cdFx0XHRcdFx0XHRcdHN1Y2Nlc3NDYWxsYmFjayh4KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSwgZXJyb3JzID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRpZiAoZXJyb3JDYWxsYmFjaykge1xyXG5cdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soZXJyb3JzKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hdmlnYXRlcyB0byB0aGUgYWRkIHBhZ2UuXHJcblx0ICovXHJcblx0cHVibGljIG9wZW5EaWFsb2c8VCwgRCA9IGFueT4oZGlhbG9nVHlwZTogVHlwZTxUPiwgY29uZmlnOiBNYXREaWFsb2dDb25maWc8RD4sIGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xyXG5cdFx0dGhpcy5kaWFsb2cub3BlbihkaWFsb2dUeXBlLCBPYmplY3QuYXNzaWduKHsgd2lkdGg6ICc2NTBweCcsIGRhdGE6IHt9LCBwYW5lbENsYXNzOiBbJ2RpYWxvZy1mdWxsLXNjcmVlbiddIH0sIGNvbmZpZykpXHJcblx0XHRcdC5hZnRlckNsb3NlZCgpXHJcblx0XHRcdC5zdWJzY3JpYmUoXyA9PiBjYWxsYmFjaygpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3dzIGEgbWVzc2FnZVxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXlcclxuXHQgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgbWVzc2FnZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93TWVzc2FnZShtZXNzYWdlPzogc3RyaW5nLCB0eXBlOiBNZXNzYWdlVHlwZSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpOiB2b2lkIHtcclxuXHRcdHZhciBzbmFja0JhckNsYXNzID0gJ3ByaW1hcnknO1xyXG5cdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdGNhc2UgTWVzc2FnZVR5cGUuU3VjY2VzczpcclxuXHRcdFx0XHRzbmFja0JhckNsYXNzID0gJ3ByaW1hcnknO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSBNZXNzYWdlVHlwZS5XYXJuaW5nOlxyXG5cdFx0XHRcdHNuYWNrQmFyQ2xhc3MgPSAnd2Fybic7XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlIE1lc3NhZ2VUeXBlLkVycm9yOlxyXG5cdFx0XHRcdHNuYWNrQmFyQ2xhc3MgPSAnZXJyb3InO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKG1lc3NhZ2UgfHwgJGxvY2FsaXplYDpAQHNuYWNrYmFyLnNlbmQuc3VjY2VzczpEYXRhIHNlbnQgc3VjY2Vzc2Z1bGx5LmAsIG51bGwsIHtcclxuXHRcdFx0ZHVyYXRpb246IDMwMDAsXHJcblx0XHRcdHBhbmVsQ2xhc3M6IFtzbmFja0JhckNsYXNzXVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJbml0b2FsaXplcyB0aGUgdGlueW1jZSBlZGl0b3JcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW5pdEVkaXRvcihlZGl0b3JDb25maWc6IGFueSA9IHt9KSB7XHJcblx0XHRPYmplY3QuYXNzaWduKHRoaXMuZWRpdG9yQ29uZmlnLCB7XHJcblx0XHRcdHN1ZmZpeDogJy5taW4nLFxyXG5cdFx0XHRza2luOiBmYWxzZSxcclxuXHRcdFx0aGVpZ2h0OiAnMTcwcHgnLFxyXG5cdFx0XHRjb250ZW50X2NzczogZmFsc2UsXHJcblx0XHRcdHBsdWdpbnM6IHRoaXMuZWRpdG9yUGx1Z2lucyxcclxuXHRcdFx0dG9vbGJhcjogdGhpcy5lZGl0b3JUb29sYmFyLFxyXG5cdFx0XHRwYXN0ZV9hc190ZXh0OiB0cnVlLFxyXG5cdFx0XHRsYW5ndWFnZTogJ2RlJyxcclxuXHRcdFx0bGFuZ3VhZ2VfdXJsOiAnL2Fzc2V0cy90aW55bWNlL2xhbmdzL2RlLmpzJyxcclxuXHRcdFx0ZG9jdW1lbnRfYmFzZV91cmw6IGAke3RoaXMuYXBwU2V0dGluZy5hcGlVcmx9ZmlsZS9gLFxyXG5cdFx0XHRhdXRvbWF0aWNfdXBsb2FkczogdHJ1ZSxcclxuXHRcdFx0cmVsYXRpdmVfdXJsczogdHJ1ZSxcclxuXHRcdFx0Y29udmVydF91cmxzOiBmYWxzZSxcclxuXHRcdFx0ZXh0ZW5kZWRfdmFsaWRfZWxlbWVudHM6ICdzcGFuW2lkfGNsYXNzfHN0eWxlXSwrQFtkYXRhLW9wdGlvbnNdJyxcclxuXHRcdFx0YWxsb3dfaHRtbF9pbl9uYW1lZF9hbmNob3I6IHRydWVcclxuXHRcdH0sIGVkaXRvckNvbmZpZyk7XHJcblxyXG5cdFx0dGhpcy5pc0VkaXRvckluaXRpYWx6ZWQgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyBzdWJ0aXRsZSBmcm9tIGN1cnJlbiBtZW51XHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFRpdGxlcygpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLm1lbnUpIHtcclxuXHRcdFx0dGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGhpcy5tZW51LnRpdGxlKTtcclxuXHRcdFx0dGhpcy50aXRsZSA9IHRoaXMudGl0bGVTZXJ2aWNlLmdldFRpdGxlKCk7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMubWVudS5pdGVtcykge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogR2V0IHN1YnRpdGxlIGZyb20gdXJsIHBhcmFtcyAqL1xyXG5cdFx0XHR2YXIgc3VidGl0bGUgPSB0aGlzLnJvdXRlPy5zbmFwc2hvdD8ucGFyYW1NYXA/LmdldCgnc3VidGl0bGUnKTtcclxuXHRcdFx0aWYgKHN1YnRpdGxlKSB7XHJcblx0XHRcdFx0dHJ5IHsgdGhpcy5zdWJ0aXRsZSA9IGF0b2Ioc3VidGl0bGUpOyB9XHJcblx0XHRcdFx0Y2F0Y2ggKGUpIHsgdGhpcy5zdWJ0aXRsZSA9IHN1YnRpdGxlOyB9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0LyogR2V0IGN1cnJlbnQgcm91dGUgKi9cclxuXHRcdFx0XHRsZXQgY3VycmVudFJvdXRlID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF0/LnNwbGl0KCc7JylbMF07XHJcblx0XHRcdFx0dmFyIHN1Ym1lbnUgPSB0aGlzLm1lbnUuaXRlbXMuZmlsdGVyKHggPT4geC5wYXRoID09IGN1cnJlbnRSb3V0ZSlbMF07XHJcblx0XHRcdFx0aWYgKHN1Ym1lbnUpIHtcclxuXHRcdFx0XHRcdHRoaXMuc3VidGl0bGUgPSBzdWJtZW51LnRpdGxlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTmF2aWdhdGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGFycmF5IG9mIGNvbW1hbmRzIGFuZCBhIHN0YXJ0aW5nIHBvaW50LlxyXG5cdCAqIEBwYXJhbSBjb21tYW5kcyBcclxuXHQgKi9cclxuXHRwdWJsaWMgbmF2aWdhdGUoY29tbWFuZHM6IGFueVtdLCBxdWVyeVBhcmFtcz86IGFueSwgZnJhZ21lbnQ/OiBzdHJpbmcsIHByZXNlcnZlRnJhZ21lbnQ/OiBib29sZWFuKTogdm9pZCB7XHJcblx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywge1xyXG5cdFx0XHRxdWVyeVBhcmFtczogT2JqZWN0LmFzc2lnbih7IHJldHVyblVybDogdGhpcy5jdXJyZW50Um91dGUgfSwgcXVlcnlQYXJhbXMgfHwge30pLFxyXG5cdFx0XHRmcmFnbWVudDogZnJhZ21lbnQsXHJcblx0XHRcdHByZXNlcnZlRnJhZ21lbnQ6IHByZXNlcnZlRnJhZ21lbnQsXHJcblx0XHRcdHJlbGF0aXZlVG86IHRoaXMucm91dGVcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29udmVydCBPYmplY3QgdG8gSHR0cEhlYWRlcnNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gYm9keVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB0b0h0dHBIZWFkZXJzKGJvZHk6IE9iamVjdCk6IEh0dHBIZWFkZXJzIHtcclxuXHRcdGlmICghYm9keSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IEh0dHBIZWFkZXJzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGJvZHkpXHJcblx0XHRcdC5maWx0ZXIoa2V5ID0+IGJvZHlba2V5XSAhPSBudWxsICYmIGJvZHlba2V5XSAhPSAnJylcclxuXHRcdFx0LnJlZHVjZSgocCwga2V5KSA9PiBwLnNldChrZXksIGJvZHlba2V5XSksIG5ldyBIdHRwSGVhZGVycygpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhcnNlcyBodHRwIHJlc3BvbnNlIGVycm9yc1xyXG5cdCAqIEBwYXJhbSBlcnJvcnMgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHBhcnNlRXJyb3JzKGVycm9yczogT2JqZWN0KTogdm9pZCB7XHJcblx0XHR0aGlzLmVycm9ycyA9IFtdO1xyXG5cdFx0dGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHRcdHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRpZiAoZXJyb3JzKSB7XHJcblx0XHRcdE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaChlbCA9PiB7XHJcblx0XHRcdFx0bGV0IGVycm9yID0gZXJyb3JzW2VsXTtcclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShlcnJvcikpIHtcclxuXHRcdFx0XHRcdGVycm9yLmZvckVhY2goZXJyID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvcnMucHVzaChlcnIpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09IFwic3RyaW5nXCIpIHtcclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGUgSHR0cCBvcGVyYXRpb24gdGhhdCBmYWlsZWQuXHJcblx0ICogTGV0IHRoZSBhcHAgY29udGludWUuXHJcblx0ICogQHBhcmFtIG9wZXJhdGlvbiAtIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IGZhaWxlZFxyXG5cdCAqIEBwYXJhbSByZXN1bHQgLSBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gYXMgdGhlIG9ic2VydmFibGUgcmVzdWx0XHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGhhbmRsZUVycm9yPFQ+KG9wZXJhdGlvbiA9ICdvcGVyYXRpb24nLCByZXN1bHQ/OiBUKSB7XHJcblx0XHRyZXR1cm4gKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPFQ+ID0+IHtcclxuXHJcblx0XHRcdC8qIFBhcnNlIHRoZSBlcnJvciBtZXNzYWdlcyAqL1xyXG5cdFx0XHR0aGlzLnBhcnNlRXJyb3JzKGVycm9yKTtcclxuXHJcblx0XHRcdC8qIExvZyB0byBjb25zb2xlICovXHJcblx0XHRcdHRoaXMud2FybihgJHtvcGVyYXRpb259IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xyXG5cclxuXHRcdFx0LyogTGV0IHRoZSBhcHAga2VlcCBydW5uaW5nIGJ5IHJldHVybmluZyBhbiBlbXB0eSByZXN1bHQgKi9cclxuXHRcdFx0cmV0dXJuIG9mKHJlc3VsdCBhcyBUKTtcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2cgdG8gY29uc29sZVxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFxyXG5cdCAqIEBwYXJhbSBvcHRpb25hbFBhcmFtcyBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbG9nKG1lc3NhZ2U6IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKSB7XHJcblx0XHRpZiAodGhpcy5kZWJ1Zykge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhtZXNzYWdlLCBvcHRpb25hbFBhcmFtcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2cgdG8gY29uc29sZVxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFxyXG5cdCAqIEBwYXJhbSBvcHRpb25hbFBhcmFtcyBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgd2FybihtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkge1xyXG5cdFx0aWYgKHRoaXMuZGVidWcpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKG1lc3NhZ2UsIG9wdGlvbmFsUGFyYW1zKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENsZWFucyB0aGUgb2JqZWN0c1xyXG5cdCAqIFJlbW92ZXMgZW1wdHkgcHJvcGVydGllc1xyXG5cdCAqIEBwYXJhbSBvYmogXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNsZWFuKG9iajogYW55KTogYW55IHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGZvciAodmFyIHByb3BOYW1lIGluIG9iaikge1xyXG5cdFx0XHRcdGlmIChvYmpbcHJvcE5hbWVdID09PSBudWxsIHx8IG9ialtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCB8fCBvYmpbcHJvcE5hbWVdID09PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRkZWxldGUgb2JqW3Byb3BOYW1lXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuXHJcblx0XHRyZXR1cm4gb2JqO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2FuaXRpemVzIHRoZSBzcGVjaWZpZWQgb2JqZWN0XHJcblx0ICogQHBhcmFtIG9iaiBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2FuaXRpemVPYmplY3Qob2JqOiBhbnksIC4uLmlnbm9yZTogc3RyaW5nW10pOiBhbnkge1xyXG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9iailcclxuXHRcdFx0LmZpbHRlcih4ID0+IG9ialt4XSlcclxuXHRcdFx0LmZpbHRlcih4ID0+ICEoaWdub3JlIHx8IFtdKS5tYXAoeCA9PiB4LnRvTG93ZXJDYXNlKCkpLmluY2x1ZGVzKHgudG9Mb3dlckNhc2UoKSkpXHJcblx0XHRcdC5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0W2tleV0gPSBpc05hTigrb2JqW2tleV0pID8gb2JqW2tleV0gOiArb2JqW2tleV07XHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fSwge30pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2tzIGlmIHRoZSB1c2VyIHNlbGVjZXRlZCBhbnkgdGV4dCBpbiB0aGUgZG9jdW1lbnRcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaXNUZXh0U2VsZWN0ZWQgPSAoKTogYm9vbGVhbiA9PiB3aW5kb3c/LmdldFNlbGVjdGlvbigpPy50b1N0cmluZygpPy5sZW5ndGggPiAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIGNhbGxiYWNrIHVzZWQgZm9yIGFueSBjdXN0b20gY2xlYW51cCB0aGF0IG5lZWRzIHRvIG9jY3VyXHJcblx0ICogd2hlbiB0aGUgaW5zdGFuY2UgaXMgZGVzdHJveWVkLlxyXG5cdCAqL1xyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFN1YnNjcmlwdGlvbnMuZm9yRWFjaCh4ID0+IHgudW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG59Il19
@@ -60,8 +60,8 @@ export class VdDynamicTableConfigDialogComponent extends BaseComponent {
60
60
  this.genericList?.updateColumns();
61
61
  }
62
62
  }
63
- /** @nocollapse */ VdDynamicTableConfigDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: VdDynamicTableConfigDialogComponent, deps: [{ token: i1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
64
- /** @nocollapse */ VdDynamicTableConfigDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: VdDynamicTableConfigDialogComponent, selector: "vd-dynamic-table-config-dialog", usesInheritance: true, ngImport: i0, template: `
63
+ /** @nocollapse */ VdDynamicTableConfigDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: VdDynamicTableConfigDialogComponent, deps: [{ token: i1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
64
+ /** @nocollapse */ VdDynamicTableConfigDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: VdDynamicTableConfigDialogComponent, selector: "vd-dynamic-table-config-dialog", usesInheritance: true, ngImport: i0, template: `
65
65
  <div mat-dialog-title cdkDrag cdkDragRootElement=".cdk-overlay-pane" class="pad push-none" cdkDragHandle i18n="@@tableConfiguration">Table configuration</div>
66
66
  <vd-dynamic-table [data]="columns" [classType]="classType" [filterable]="false" [pageSize]="10" [context]="this">
67
67
  <div table-footer layout-padding class="push-xs">
@@ -70,7 +70,7 @@ export class VdDynamicTableConfigDialogComponent extends BaseComponent {
70
70
  <a mat-flat-button (click)="dialogRef.close()" i18n="@@close">Close</a>
71
71
  </div>
72
72
  </vd-dynamic-table>`, isInline: true, styles: [".mat-mdc-dialog-title{cursor:move}\n"], dependencies: [{ kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "component", type: i3.VdDynamicTableComponent, selector: "vd-dynamic-table", inputs: ["dataSource", "data", "classType", "context", "dataSourceFilter", "static", "filterable", "paginable", "selectable", "sortActive", "sortDirection", "stickyHeader", "stickyFilter", "rowNgClass", "detailsTemplate", "readonly", "selectAllFilter", "columns", "rowMenuItems", "excludedColumns", "pageSize", "pageSizeOptions"], outputs: ["rowClick"] }, { kind: "component", type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i5.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }] });
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: VdDynamicTableConfigDialogComponent, decorators: [{
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: VdDynamicTableConfigDialogComponent, decorators: [{
74
74
  type: Component,
75
75
  args: [{ selector: 'vd-dynamic-table-config-dialog', template: `
76
76
  <div mat-dialog-title cdkDrag cdkDragRootElement=".cdk-overlay-pane" class="pad push-none" cdkDragHandle i18n="@@tableConfiguration">Table configuration</div>