carbon-components-angular 5.72.0 → 5.72.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 (116) hide show
  1. package/docs/documentation/components/TextInputLabelComponent.html +171 -65
  2. package/docs/documentation/components/TextareaLabelComponent.html +142 -74
  3. package/docs/documentation/coverage.html +12 -12
  4. package/docs/documentation/directives/TextArea.html +106 -11
  5. package/docs/documentation/directives/TextInput.html +118 -24
  6. package/docs/documentation/js/search/search_index.js +2 -2
  7. package/docs/documentation/modules/CheckboxModule/dependencies.svg +42 -42
  8. package/docs/documentation/modules/CheckboxModule.html +42 -42
  9. package/docs/documentation/modules/CodeSnippetModule/dependencies.svg +4 -4
  10. package/docs/documentation/modules/CodeSnippetModule.html +4 -4
  11. package/docs/documentation/modules/ComboBoxModule/dependencies.svg +6 -6
  12. package/docs/documentation/modules/ComboBoxModule.html +6 -6
  13. package/docs/documentation/modules/ContentSwitcherModule/dependencies.svg +4 -4
  14. package/docs/documentation/modules/ContentSwitcherModule.html +4 -4
  15. package/docs/documentation/modules/ContextMenuModule/dependencies.svg +67 -67
  16. package/docs/documentation/modules/ContextMenuModule.html +67 -67
  17. package/docs/documentation/modules/DatePickerInputModule/dependencies.svg +4 -4
  18. package/docs/documentation/modules/DatePickerInputModule.html +4 -4
  19. package/docs/documentation/modules/DatePickerModule/dependencies.svg +6 -6
  20. package/docs/documentation/modules/DatePickerModule.html +6 -6
  21. package/docs/documentation/modules/DialogModule/dependencies.svg +4 -4
  22. package/docs/documentation/modules/DialogModule.html +4 -4
  23. package/docs/documentation/modules/DropdownModule/dependencies.svg +53 -53
  24. package/docs/documentation/modules/DropdownModule.html +53 -53
  25. package/docs/documentation/modules/FileUploaderModule/dependencies.svg +58 -58
  26. package/docs/documentation/modules/FileUploaderModule.html +58 -58
  27. package/docs/documentation/modules/GridModule/dependencies.svg +29 -29
  28. package/docs/documentation/modules/GridModule.html +29 -29
  29. package/docs/documentation/modules/I18nModule/dependencies.svg +4 -4
  30. package/docs/documentation/modules/I18nModule.html +4 -4
  31. package/docs/documentation/modules/IconModule/dependencies.svg +4 -4
  32. package/docs/documentation/modules/IconModule.html +4 -4
  33. package/docs/documentation/modules/InputModule/dependencies.svg +76 -76
  34. package/docs/documentation/modules/InputModule.html +76 -76
  35. package/docs/documentation/modules/LayerModule/dependencies.svg +4 -4
  36. package/docs/documentation/modules/LayerModule.html +4 -4
  37. package/docs/documentation/modules/ListModule/dependencies.svg +4 -4
  38. package/docs/documentation/modules/ListModule.html +4 -4
  39. package/docs/documentation/modules/LoadingModule/dependencies.svg +4 -4
  40. package/docs/documentation/modules/LoadingModule.html +4 -4
  41. package/docs/documentation/modules/MenuButtonModule/dependencies.svg +29 -29
  42. package/docs/documentation/modules/MenuButtonModule.html +29 -29
  43. package/docs/documentation/modules/ModalModule/dependencies.svg +37 -37
  44. package/docs/documentation/modules/ModalModule.html +37 -37
  45. package/docs/documentation/modules/NumberModule/dependencies.svg +4 -4
  46. package/docs/documentation/modules/NumberModule.html +4 -4
  47. package/docs/documentation/modules/PaginationModule/dependencies.svg +56 -56
  48. package/docs/documentation/modules/PaginationModule.html +56 -56
  49. package/docs/documentation/modules/PanelModule/dependencies.svg +36 -36
  50. package/docs/documentation/modules/PanelModule.html +36 -36
  51. package/docs/documentation/modules/PopoverModule/dependencies.svg +4 -4
  52. package/docs/documentation/modules/PopoverModule.html +4 -4
  53. package/docs/documentation/modules/ProgressBarModule/dependencies.svg +4 -4
  54. package/docs/documentation/modules/ProgressBarModule.html +4 -4
  55. package/docs/documentation/modules/ProgressIndicatorModule/dependencies.svg +4 -4
  56. package/docs/documentation/modules/ProgressIndicatorModule.html +4 -4
  57. package/docs/documentation/modules/RadioModule/dependencies.svg +55 -59
  58. package/docs/documentation/modules/RadioModule.html +55 -59
  59. package/docs/documentation/modules/SelectModule/dependencies.svg +61 -61
  60. package/docs/documentation/modules/SelectModule.html +61 -61
  61. package/docs/documentation/modules/SideNavModule/dependencies.svg +41 -41
  62. package/docs/documentation/modules/SideNavModule.html +41 -41
  63. package/docs/documentation/modules/SkeletonModule/dependencies.svg +4 -4
  64. package/docs/documentation/modules/SkeletonModule.html +4 -4
  65. package/docs/documentation/modules/SliderModule/dependencies.svg +40 -36
  66. package/docs/documentation/modules/SliderModule.html +40 -36
  67. package/docs/documentation/modules/StructuredListModule/dependencies.svg +43 -43
  68. package/docs/documentation/modules/StructuredListModule.html +43 -43
  69. package/docs/documentation/modules/TableModule/dependencies.svg +225 -225
  70. package/docs/documentation/modules/TableModule.html +225 -225
  71. package/docs/documentation/modules/TabsModule/dependencies.svg +137 -137
  72. package/docs/documentation/modules/TabsModule.html +137 -137
  73. package/docs/documentation/modules/TagModule/dependencies.svg +38 -38
  74. package/docs/documentation/modules/TagModule.html +38 -38
  75. package/docs/documentation/modules/ThemeModule/dependencies.svg +13 -13
  76. package/docs/documentation/modules/ThemeModule.html +13 -13
  77. package/docs/documentation/modules/TilesModule/dependencies.svg +4 -4
  78. package/docs/documentation/modules/TilesModule.html +4 -4
  79. package/docs/documentation/modules/TimePickerModule/dependencies.svg +7 -7
  80. package/docs/documentation/modules/TimePickerModule.html +7 -7
  81. package/docs/documentation/modules/ToggleModule/dependencies.svg +18 -18
  82. package/docs/documentation/modules/ToggleModule.html +18 -18
  83. package/docs/documentation/modules/ToggletipModule/dependencies.svg +4 -4
  84. package/docs/documentation/modules/ToggletipModule.html +4 -4
  85. package/docs/documentation/modules/TooltipModule/dependencies.svg +4 -4
  86. package/docs/documentation/modules/TooltipModule.html +4 -4
  87. package/docs/documentation/modules/TreeviewModule/dependencies.svg +28 -28
  88. package/docs/documentation/modules/TreeviewModule.html +28 -28
  89. package/docs/documentation/modules/UIShellModule/dependencies.svg +4 -4
  90. package/docs/documentation/modules/UIShellModule.html +4 -4
  91. package/docs/documentation.json +249 -131
  92. package/docs/storybook/1345.da6e3dec.iframe.bundle.js +1 -0
  93. package/docs/storybook/7019.75ad5817.iframe.bundle.js +2 -0
  94. package/docs/storybook/iframe.html +2 -2
  95. package/docs/storybook/{input-input-stories.85a9e65e.iframe.bundle.js → input-input-stories.8bf34960.iframe.bundle.js} +1 -1
  96. package/docs/storybook/{input-textarea-stories.77240fb3.iframe.bundle.js → input-textarea-stories.ad775432.iframe.bundle.js} +1 -1
  97. package/docs/storybook/main.d2b9abb3.iframe.bundle.js +1 -0
  98. package/docs/storybook/project.json +1 -1
  99. package/docs/storybook/{runtime~main.e32f2dfb.iframe.bundle.js → runtime~main.86875b86.iframe.bundle.js} +1 -1
  100. package/esm2020/input/input.directive.mjs +11 -5
  101. package/esm2020/input/text-area.directive.mjs +11 -5
  102. package/esm2020/input/text-input-label.component.mjs +38 -15
  103. package/esm2020/input/textarea-label.component.mjs +46 -21
  104. package/fesm2015/carbon-components-angular-input.mjs +112 -46
  105. package/fesm2015/carbon-components-angular-input.mjs.map +1 -1
  106. package/fesm2020/carbon-components-angular-input.mjs +102 -45
  107. package/fesm2020/carbon-components-angular-input.mjs.map +1 -1
  108. package/input/input.directive.d.ts +4 -1
  109. package/input/text-area.directive.d.ts +4 -1
  110. package/input/text-input-label.component.d.ts +9 -5
  111. package/input/textarea-label.component.d.ts +5 -3
  112. package/package.json +1 -1
  113. package/docs/storybook/1345.9ccf4f3f.iframe.bundle.js +0 -1
  114. package/docs/storybook/7019.b8944046.iframe.bundle.js +0 -2
  115. package/docs/storybook/main.cdbf1814.iframe.bundle.js +0 -1
  116. /package/docs/storybook/{7019.b8944046.iframe.bundle.js.LICENSE.txt → 7019.75ad5817.iframe.bundle.js.LICENSE.txt} +0 -0
@@ -1,4 +1,5 @@
1
1
  import { Component, Input, HostBinding, TemplateRef, ViewChild, ContentChild } from "@angular/core";
2
+ import { startWith } from "rxjs/operators";
2
3
  import { TextArea } from "./text-area.directive";
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@angular/common";
@@ -66,12 +67,14 @@ export class TextareaLabelComponent {
66
67
  * on each change. Excess words are trimmed from the end of the value.
67
68
  */
68
69
  this.counterMode = "character";
69
- // Tracks current character / word count for the counter display.
70
+ // Tracks current character / word count for the counter display.
70
71
  this.textCount = 0;
71
72
  this.labelClass = true;
72
73
  // Cached reference to the textarea element, set once in ngAfterViewInit.
73
74
  this._textareaElement = null;
74
- // Cached listener so it can be removed precisely (avoids anonymous-function leak)
75
+ // RxJS subscription used when NgControl is available (template-driven & reactive forms).
76
+ this._subscription = null;
77
+ // Fallback DOM listener used only when no NgControl is present (plain textarea).
75
78
  this._inputListener = null;
76
79
  }
77
80
  get isReadonly() {
@@ -118,7 +121,6 @@ export class TextareaLabelComponent {
118
121
  }
119
122
  /**
120
123
  * Attach/remove listener and seed `textCount` from the textarea's current value.
121
- * @param changes
122
124
  */
123
125
  ngOnChanges(changes) {
124
126
  if (changes.enableCounter && !changes.enableCounter.firstChange) {
@@ -162,27 +164,47 @@ export class TextareaLabelComponent {
162
164
  }
163
165
  }
164
166
  /**
165
- * Attaches the input event listener, ensuring it is never added twice.
167
+ * Attaches the counter listener, listen for either ngControl or native DOM input
168
+ * event listener
166
169
  */
167
170
  _attachCounterListener() {
168
171
  this._detachCounterListener();
169
- if (!this._textareaElement) {
170
- return;
171
- }
172
- this._inputListener = (e) => {
173
- const el = e.target;
174
- // Word-mode enforcement: clamp value to maxCount words on each input so
175
- // the textarea never holds more words than allowed. Character mode relies
176
- // on the native `maxlength` attribute set by the developer.
177
- if (this.counterMode === "word" && this.maxCount != null) {
178
- const clamped = this._truncateToWordLimit(el.value || "", this.maxCount);
179
- if (clamped !== el.value) {
180
- el.value = clamped;
172
+ const control = this.textArea?.ngControl;
173
+ if (control?.valueChanges) {
174
+ // NgControl listener
175
+ this._subscription = control.valueChanges
176
+ .pipe(startWith(control.value))
177
+ .subscribe((value) => {
178
+ const raw = value || "";
179
+ if (this.counterMode === "word" && this.maxCount != null) {
180
+ const clamped = this._truncateToWordLimit(raw, this.maxCount);
181
+ if (clamped !== raw) {
182
+ // Write back through the control so the form model stays in sync.
183
+ // emitEvent false to avoid infinite loop
184
+ control?.control?.setValue(clamped, { emitEvent: false });
185
+ }
181
186
  }
187
+ this.textCount = this._countValue(raw);
188
+ this.changeDetectorRef.markForCheck();
189
+ });
190
+ }
191
+ else {
192
+ // Fallback DOM path
193
+ if (!this._textareaElement) {
194
+ return;
182
195
  }
183
- this.textCount = this._countValue(el.value || "");
184
- };
185
- this._textareaElement.addEventListener("input", this._inputListener);
196
+ this._inputListener = (e) => {
197
+ const el = e.target;
198
+ if (this.counterMode === "word" && this.maxCount != null) {
199
+ const clamped = this._truncateToWordLimit(el.value || "", this.maxCount);
200
+ if (clamped !== el.value) {
201
+ el.value = clamped;
202
+ }
203
+ }
204
+ this.textCount = this._countValue(el.value || "");
205
+ };
206
+ this._textareaElement.addEventListener("input", this._inputListener);
207
+ }
186
208
  }
187
209
  /**
188
210
  * Truncates `value` so it contains at most `limit` Unicode words.
@@ -206,9 +228,12 @@ export class TextareaLabelComponent {
206
228
  return wordsSeen < limit ? value : value.slice(0, cutIndex);
207
229
  }
208
230
  /**
209
- * Removes the input event listener and clears the cached reference.
231
+ * Removes the subscription (NgControl path) and removes the DOM listener
232
+ * (fallback path). Safe to call when neither is active.
210
233
  */
211
234
  _detachCounterListener() {
235
+ this._subscription?.unsubscribe();
236
+ this._subscription = null;
212
237
  if (this._inputListener && this._textareaElement) {
213
238
  this._textareaElement.removeEventListener("input", this._inputListener);
214
239
  this._inputListener = null;
@@ -482,4 +507,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
482
507
  type: HostBinding,
483
508
  args: ["class.cds--form-item"]
484
509
  }] } });
485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEtbGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lucHV0L3RleHRhcmVhLWxhYmVsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFLTCxXQUFXLEVBQ1gsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBR1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQXVHSCxNQUFNLE9BQU8sc0JBQXNCO0lBa0hsQzs7T0FFRztJQUNILFlBQXNCLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBcEcxRDs7O1VBR0U7UUFDTyxpQkFBWSxHQUFHLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxZQUFZLENBQUM7UUFFOUU7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQWdCMUI7O1dBRUc7UUFDTSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCOztZQUVJO1FBQ0ssU0FBSSxHQUFHLEtBQUssQ0FBQztRQVV0Qjs7V0FFRztRQUNNLFVBQUssR0FBRyxLQUFLLENBQUM7UUFFdkI7OztXQUdHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUzQjs7O1dBR0c7UUFDTSxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQVEvQjs7OztXQUlHO1FBQ00sZ0JBQVcsR0FBeUIsV0FBVyxDQUFDO1FBT3pELGtFQUFrRTtRQUNsRSxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBUXVCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkQseUVBQXlFO1FBQ2pFLHFCQUFnQixHQUErQixJQUFJLENBQUM7UUFDNUQsa0ZBQWtGO1FBQzFFLG1CQUFjLEdBQWdD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RyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsUUFBUTtzQkFBaEIsS0FBSztnQkFPRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTW1DLE9BQU87c0JBQS9DLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHSSxRQUFRO3NCQUFsRCxZQUFZO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRUosVUFBVTtzQkFBOUMsV0FBVzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRBZnRlclZpZXdJbml0LFxuXHRPbkNoYW5nZXMsXG5cdE9uRGVzdHJveSxcblx0RWxlbWVudFJlZixcblx0SG9zdEJpbmRpbmcsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q2hpbGQsXG5cdENvbnRlbnRDaGlsZCxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdFNpbXBsZUNoYW5nZXNcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgVGV4dEFyZWEgfSBmcm9tIFwiLi90ZXh0LWFyZWEuZGlyZWN0aXZlXCI7XG5cbi8qKlxuICogR2V0IHN0YXJ0ZWQgd2l0aCBpbXBvcnRpbmcgdGhlIG1vZHVsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBJbnB1dE1vZHVsZSB9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuICogYGBgXG4gKlxuICogYGBgaHRtbFxuICogPGNkcy10ZXh0YXJlYS1sYWJlbD5cbiAqIFx0TGFiZWxcbiAqIFx0PHRleHRhcmVhIGNkc1RleHRBcmVhIGNsYXNzPVwidGV4dGFyZWEtZmllbGRcIj5cbiAqIDwvY2RzLXRleHRhcmVhLWxhYmVsPlxuICogYGBgXG4gKlxuICogW1NlZSBkZW1vXSguLi8uLi8/cGF0aD0vc3RvcnkvY29tcG9uZW50cy1pbnB1dC10ZXh0LWFyZWEtLWJhc2ljKVxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLXRleHRhcmVhLWxhYmVsLCBpYm0tdGV4dGFyZWEtbGFiZWxcIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwic2tlbGV0b25cIj5cblx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS1sYWJlbCBjZHMtLXNrZWxldG9uXCI+PC9zcGFuPlxuXHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tdGV4dC1hcmVhIGNkcy0tc2tlbGV0b25cIj48L2Rpdj5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS10ZXh0LWFyZWFfX2xhYmVsLXdyYXBwZXJcIj5cblx0XHRcdFx0PGxhYmVsXG5cdFx0XHRcdFx0W2Zvcl09XCJsYWJlbElucHV0SURcIlxuXHRcdFx0XHRcdFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcblx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGFiZWxcIlxuXHRcdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHRcdCdjZHMtLWxhYmVsLS1kaXNhYmxlZCc6IGRpc2FibGVkLFxuXHRcdFx0XHRcdFx0J2Nkcy0tdmlzdWFsbHktaGlkZGVuJzogaGlkZUxhYmVsXG5cdFx0XHRcdFx0fVwiPlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImxhYmVsVGVtcGxhdGU7IGVsc2UgbGFiZWxDb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNsYWJlbENvbnRlbnQ+XG5cdFx0XHRcdFx0XHQ8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PC9sYWJlbD5cblx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHQqbmdJZj1cImVuYWJsZUNvdW50ZXIgJiYgbWF4Q291bnRcIlxuXHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1sYWJlbFwiXG5cdFx0XHRcdFx0W25nQ2xhc3NdPVwieydjZHMtLWxhYmVsLS1kaXNhYmxlZCc6IGRpc2FibGVkfVwiXG5cdFx0XHRcdFx0YXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdFx0e3t0ZXh0Q291bnR9fS97e21heENvdW50fX1cblx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzPVwiY2RzLS10ZXh0LWFyZWFfX3dyYXBwZXJcIlxuXHRcdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdFx0J2Nkcy0tdGV4dC1hcmVhX193cmFwcGVyLS13YXJuJzogd2Fybixcblx0XHRcdFx0XHQnY2RzLS10ZXh0LWFyZWFfX3dyYXBwZXItLWRlY29yYXRvcic6ICEhZGVjb3JhdG9yXG5cdFx0XHRcdH1cIlxuXHRcdFx0XHRbYXR0ci5kYXRhLWludmFsaWRdPVwiKGludmFsaWQgPyB0cnVlIDogbnVsbClcIlxuXHRcdFx0XHQjd3JhcHBlcj5cblx0XHRcdFx0PHN2Z1xuXHRcdFx0XHRcdCpuZ0lmPVwiIWZsdWlkICYmIGludmFsaWRcIlxuXHRcdFx0XHRcdGNkc0ljb249XCJ3YXJuaW5nLS1maWxsZWRcIlxuXHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXRleHQtYXJlYV9faW52YWxpZC1pY29uXCI+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0Km5nSWY9XCIhZmx1aWQgJiYgIWludmFsaWQgJiYgd2FyblwiXG5cdFx0XHRcdFx0Y2RzSWNvbj1cIndhcm5pbmctLWFsdC0tZmlsbGVkXCJcblx0XHRcdFx0XHRzaXplPVwiMTZcIlxuXHRcdFx0XHRcdGNsYXNzPVwiY2RzLS10ZXh0LWFyZWFfX2ludmFsaWQtaWNvbiBjZHMtLXRleHQtYXJlYV9faW52YWxpZC1pY29uLS13YXJuaW5nXCI+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJ0ZXh0QXJlYVRlbXBsYXRlOyBlbHNlIHRleHRBcmVhQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRleHRBcmVhVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgI3RleHRBcmVhQ29udGVudD5cblx0XHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJbY2RzVGV4dEFyZWFdLFtpYm1UZXh0QXJlYV0sdGV4dGFyZWFcIj48L25nLWNvbnRlbnQ+XG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJkZWNvcmF0b3JcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS10ZXh0LWFyZWFfX2lubmVyLXdyYXBwZXItLWRlY29yYXRvclwiPlxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRlY29yYXRvclwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvbmctY29udGFpbmVyPlxuXG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJmbHVpZFwiPlxuXHRcdFx0XHRcdDxociBjbGFzcz1cImNkcy0tdGV4dC1hcmVhX19kaXZpZGVyXCIgLz5cblx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiaW52YWxpZFwiIGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCI+e3tpbnZhbGlkVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGludmFsaWRUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImludmFsaWRUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdFx0Y2RzSWNvbj1cIndhcm5pbmctLWZpbGxlZFwiXG5cdFx0XHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS10ZXh0LWFyZWFfX2ludmFsaWQtaWNvblwiPlxuXHRcdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiAqbmdJZj1cIiFpbnZhbGlkICYmIHdhcm5cIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKHdhcm5UZXh0KVwiPnt7d2FyblRleHR9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZSh3YXJuVGV4dClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ3YXJuVGV4dFwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0XHRcdGNkc0ljb249XCJ3YXJuaW5nLS1hbHQtLWZpbGxlZFwiXG5cdFx0XHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS10ZXh0LWFyZWFfX2ludmFsaWQtaWNvbiBjZHMtLXRleHQtYXJlYV9faW52YWxpZC1pY29uLS13YXJuaW5nXCI+XG5cdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmx1aWRcIj5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdCpuZ0lmPVwiaGVscGVyVGV4dCAmJiAhaW52YWxpZCAmJiAhd2FyblwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWZvcm1fX2hlbHBlci10ZXh0XCJcblx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tZm9ybV9faGVscGVyLXRleHQtLWRpc2FibGVkJzogZGlzYWJsZWR9XCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGhlbHBlclRleHQpXCI+e3toZWxwZXJUZXh0fX08L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGhlbHBlclRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVscGVyVGV4dFwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiaW52YWxpZFwiIGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGludmFsaWRUZXh0KVwiPnt7aW52YWxpZFRleHR9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW52YWxpZFRleHRcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiAqbmdJZj1cIiFpbnZhbGlkICYmIHdhcm5cIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZSh3YXJuVGV4dClcIj57e3dhcm5UZXh0fX08L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKHdhcm5UZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndhcm5UZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0YFxufSlcbmV4cG9ydCBjbGFzcyBUZXh0YXJlYUxhYmVsQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tdGV4dC1hcmVhX193cmFwcGVyLS1yZWFkb25seVwiKSBnZXQgaXNSZWFkb25seSgpIHtcblx0XHRyZXR1cm4gdGhpcy53cmFwcGVyPy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJ0ZXh0YXJlYVwiKT8ucmVhZE9ubHkgPz8gZmFsc2U7XG5cdH1cblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXRleHQtYXJlYS0tZmx1aWRcIikgZ2V0IGZsdWlkQ2xhc3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZmx1aWQgJiYgIXRoaXMuc2tlbGV0b247XG5cdH1cblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLXRleHQtYXJlYS0tZmx1aWRfX3NrZWxldG9uXCIpIGdldCBmbHVpZFNrZWxldG9uQ2xhc3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZmx1aWQgJiYgdGhpcy5za2VsZXRvbjtcblx0fVxuXHQvKipcblx0ICogVXNlZCB0byBidWlsZCB0aGUgaWQgb2YgdGhlIGlucHV0IGl0ZW0gYXNzb2NpYXRlZCB3aXRoIHRoZSBgTGFiZWxgLlxuXHQgKi9cblx0c3RhdGljIGxhYmVsQ291bnRlciA9IDA7XG5cdC8qKlxuXHQgKiBUaGUgaWQgb2YgdGhlIGlucHV0IGl0ZW0gYXNzb2NpYXRlZCB3aXRoIHRoZSBgTGFiZWxgLiBUaGlzIHZhbHVlIGlzIGFsc28gdXNlZCB0byBhc3NvY2lhdGUgdGhlIGBMYWJlbGAgd2l0aFxuXHQgKiBpdHMgaW5wdXQgY291bnRlcnBhcnQgdGhyb3VnaCB0aGUgJ2ZvcicgYXR0cmlidXRlLlxuXHQqL1xuXHRASW5wdXQoKSBsYWJlbElucHV0SUQgPSBcImlibS10ZXh0YXJlYS1cIiArIFRleHRhcmVhTGFiZWxDb21wb25lbnQubGFiZWxDb3VudGVyO1xuXG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBhIGRpc2FibGVkIGxhYmVsLlxuXHQgKi9cblx0QElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgbG9hZGluZyBsYWJlbC5cblx0ICovXG5cdEBJbnB1dCgpIHNrZWxldG9uID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEhlbHBlciBpbnB1dCBwcm9wZXJ0eSBmb3IgZWFzZSBvZiBtaWdyYXRpb25cblx0ICogU2luY2Ugd2UgY2Fubm90IHBhc3MgbmctY29udGVudCBkb3duIGVhc2lseSBmcm9tIGxhYmVsIGNvbXBvbmVudCwgd2Ugd2lsbCBhY2NlcHQgdGhlIHRlbXBsYXRlc1xuXHQgKi9cblx0QElucHV0KCkgbGFiZWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pjtcblx0QElucHV0KCkgdGV4dEFyZWFUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqIE9wdGlvbmFsIGhlbHBlciB0ZXh0IHRoYXQgYXBwZWFycyB1bmRlciB0aGUgbGFiZWwuXG5cdCAqL1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogU2V0cyB0aGUgaW52YWxpZCB0ZXh0LlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZFRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBhbiBpbnZhbGlkIGxhYmVsIGNvbXBvbmVudC5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblx0LyoqXG5cdCAgKiBTZXQgdG8gYHRydWVgIHRvIHNob3cgYSB3YXJuaW5nIChjb250ZW50cyBzZXQgYnkgd2FybmluZ1RleHQpXG5cdCAgKi9cblx0QElucHV0KCkgd2FybiA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgd2FybmluZyB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSB3YXJuVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqIFNldCB0aGUgYXJpYWxhYmVsIGZvciBsYWJlbFxuXHQgKi9cblx0QElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEV4cGVyaW1lbnRhbDogZW5hYmxlIGZsdWlkIHN0YXRlXG5cdCAqL1xuXHRASW5wdXQoKSBmbHVpZCA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIGhpZGUgdGhlIGxhYmVsIHZpc3VhbGx5LCBidXQga2VlcCBhY2Nlc3NpYmxlIHRvXG5cdCAqIHNjcmVlbiByZWFkZXJzLlxuXHQgKi9cblx0QElucHV0KCkgaGlkZUxhYmVsID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgKGBtYXhDb3VudGAgbXVzdCBiZSBzZXQpIHRvIGRpc3BsYXlzIGEgbGl2ZSBjaGFyYWN0ZXIvd29yZFxuXHQgKiBjb3VudGVyIGFsb25nc2lkZSB0aGUgbGFiZWwuXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVDb3VudGVyID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgKG9yIHdvcmRzKSBhbGxvd2VkLiBSZXF1aXJlZCBmb3IgdGhlXG5cdCAqIGNvdW50ZXIgdG8gZGlzcGxheS5cblx0ICovXG5cdEBJbnB1dCgpIG1heENvdW50OiBudW1iZXI7XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0aGUgY291bnRlciBjb3VudHMgY2hhcmFjdGVycyBvciB3b3Jkcy5cblx0ICogV2hlbiBgXCJ3b3JkXCJgIGFuZCBgbWF4Q291bnRgIGlzIHNldCwgaW5wdXQgaXMgY2xhbXBlZCB0byBgbWF4Q291bnRgIHdvcmRzXG5cdCAqIG9uIGVhY2ggY2hhbmdlLiBFeGNlc3Mgd29yZHMgYXJlIHRyaW1tZWQgZnJvbSB0aGUgZW5kIG9mIHRoZSB2YWx1ZS5cblx0ICovXG5cdEBJbnB1dCgpIGNvdW50ZXJNb2RlOiBcImNoYXJhY3RlclwiIHwgXCJ3b3JkXCIgPSBcImNoYXJhY3RlclwiO1xuXG5cdC8qKlxuXHQgKiAqKkV4cGVyaW1lbnRhbCoqOiBPcHRpb25hbCBkZWNvcmF0b3IgKGUuZy4gQUkgbGFiZWwpLlxuXHQgKi9cblx0QElucHV0KCkgZGVjb3JhdG9yOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cdC8vICBUcmFja3MgY3VycmVudCBjaGFyYWN0ZXIgLyB3b3JkIGNvdW50IGZvciB0aGUgY291bnRlciBkaXNwbGF5LlxuXHR0ZXh0Q291bnQgPSAwO1xuXG5cdC8vIEB0cy1pZ25vcmVcblx0QFZpZXdDaGlsZChcIndyYXBwZXJcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHdyYXBwZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG5cdC8vIEB0cy1pZ25vcmVcblx0QENvbnRlbnRDaGlsZChUZXh0QXJlYSwgeyBzdGF0aWM6IGZhbHNlIH0pIHRleHRBcmVhOiBUZXh0QXJlYTtcblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWZvcm0taXRlbVwiKSBsYWJlbENsYXNzID0gdHJ1ZTtcblxuXHQvLyBDYWNoZWQgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0YXJlYSBlbGVtZW50LCBzZXQgb25jZSBpbiBuZ0FmdGVyVmlld0luaXQuXG5cdHByaXZhdGUgX3RleHRhcmVhRWxlbWVudDogSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHQvLyBDYWNoZWQgbGlzdGVuZXIgc28gaXQgY2FuIGJlIHJlbW92ZWQgcHJlY2lzZWx5IChhdm9pZHMgYW5vbnltb3VzLWZ1bmN0aW9uIGxlYWspXG5cdHByaXZhdGUgX2lucHV0TGlzdGVuZXI6ICgoZTogRXZlbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTGFiZWwuXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBpZCBvbiB0aGUgaW5wdXQgaXRlbSBhc3NvY2lhdGVkIHdpdGggdGhlIGBMYWJlbGAgYW5kIGF0dGFjaGVzIHRoZVxuXHQgKiBjb3VudGVyIGxpc3RlbmVyIHdoZW4gYGVuYWJsZUNvdW50ZXJgIGlzIGFscmVhZHkgYHRydWVgIG9uIGZpcnN0IHJlbmRlci5cblx0ICovXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHRpZiAodGhpcy53cmFwcGVyKSB7XG5cdFx0XHQvLyBQcmlvcml0aXplIHNldHRpbmcgaWQgdG8gYHRleHRhcmVhYCBvdmVyIGRpdlxuXHRcdFx0Y29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcInRleHRhcmVhXCIpO1xuXHRcdFx0aWYgKGlucHV0RWxlbWVudCkge1xuXHRcdFx0XHQvLyBhdm9pZCBvdmVycmlkaW5nIGlkcyBhbHJlYWR5IHNldCBieSB0aGUgdXNlciDigJQgcmV1c2UgaXQgaW5zdGVhZFxuXHRcdFx0XHRpZiAoaW5wdXRFbGVtZW50LmlkKSB7XG5cdFx0XHRcdFx0dGhpcy5sYWJlbElucHV0SUQgPSBpbnB1dEVsZW1lbnQuaWQ7XG5cdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5wdXRFbGVtZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIHRoaXMubGFiZWxJbnB1dElEKTtcblxuXHRcdFx0XHR0aGlzLl90ZXh0YXJlYUVsZW1lbnQgPSBpbnB1dEVsZW1lbnQ7XG5cdFx0XHRcdHRoaXMuX3N5bmNNYXhMZW5ndGgoKTtcblxuXHRcdFx0XHRpZiAodGhpcy5lbmFibGVDb3VudGVyKSB7XG5cdFx0XHRcdFx0dGhpcy50ZXh0Q291bnQgPSB0aGlzLl9jb3VudFZhbHVlKGlucHV0RWxlbWVudC52YWx1ZSB8fCBcIlwiKTtcblx0XHRcdFx0XHR0aGlzLl9hdHRhY2hDb3VudGVyTGlzdGVuZXIoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGl2RWxlbWVudCA9IHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXZcIik7XG5cdFx0XHRpZiAoZGl2RWxlbWVudCkge1xuXHRcdFx0XHRpZiAoZGl2RWxlbWVudC5pZCkge1xuXHRcdFx0XHRcdHRoaXMubGFiZWxJbnB1dElEID0gZGl2RWxlbWVudC5pZDtcblx0XHRcdFx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkaXZFbGVtZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIHRoaXMubGFiZWxJbnB1dElEKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXR0YWNoL3JlbW92ZSBsaXN0ZW5lciBhbmQgc2VlZCBgdGV4dENvdW50YCBmcm9tIHRoZSB0ZXh0YXJlYSdzIGN1cnJlbnQgdmFsdWUuXG5cdCAqIEBwYXJhbSBjaGFuZ2VzXG5cdCAqL1xuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cdFx0aWYgKGNoYW5nZXMuZW5hYmxlQ291bnRlciAmJiAhY2hhbmdlcy5lbmFibGVDb3VudGVyLmZpcnN0Q2hhbmdlKSB7XG5cdFx0XHRpZiAoY2hhbmdlcy5lbmFibGVDb3VudGVyLmN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRpZiAodGhpcy5fdGV4dGFyZWFFbGVtZW50KSB7XG5cdFx0XHRcdFx0dGhpcy50ZXh0Q291bnQgPSB0aGlzLl9jb3VudFZhbHVlKHRoaXMuX3RleHRhcmVhRWxlbWVudC52YWx1ZSB8fCBcIlwiKTtcblx0XHRcdFx0XHR0aGlzLl9hdHRhY2hDb3VudGVyTGlzdGVuZXIoKTtcblx0XHRcdFx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fZGV0YWNoQ291bnRlckxpc3RlbmVyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0KGNoYW5nZXMubWF4Q291bnQgfHwgY2hhbmdlcy5jb3VudGVyTW9kZSkgJiZcblx0XHRcdCEoY2hhbmdlcy5tYXhDb3VudD8uZmlyc3RDaGFuZ2UgJiYgY2hhbmdlcy5jb3VudGVyTW9kZT8uZmlyc3RDaGFuZ2UpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLl9zeW5jTWF4TGVuZ3RoKCk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5fZGV0YWNoQ291bnRlckxpc3RlbmVyKCk7XG5cdH1cblxuXHRwdWJsaWMgaXNUZW1wbGF0ZSh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuXHR9XG5cblx0LyoqXG5cdCAqIEtlZXBzIHRoZSB0ZXh0YXJlYSdzIGBtYXhsZW5ndGhgIGF0dHJpYnV0ZSBpbiBzeW5jIHdpdGggYG1heENvdW50YC4gVGhpcyBpcyBvbmx5IHNldFxuXHQgKiB3aGVuIGNvdW50ZXJNb2RlIGlzIHNldCB0byBgY2hhcmFjdGVyYC4gV2hlbiBjb3VudGVyTW9kZSBpcyBzZXQgdG8gYHdvcmRgLCB3ZSBlbmZvcmNlIGxpbWl0IHZpYSBKUy5cblx0ICogSWYgYG1heENvdW50YCBpcyB1bnNldCBvciB0aGUgbW9kZSBpcyBgXCJ3b3JkXCJgLCBhbnkgcHJldmlvdXNseSBhcHBsaWVkXG5cdCAqIGBtYXhsZW5ndGhgIGlzIHJlbW92ZWQgc28gdGhlIHRleHRhcmVhIGlzIHVucmVzdHJpY3RlZCBieSB0aGUgYXR0cmlidXRlLlxuXHQgKi9cblx0cHJpdmF0ZSBfc3luY01heExlbmd0aCgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuX3RleHRhcmVhRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy5jb3VudGVyTW9kZSA9PT0gXCJjaGFyYWN0ZXJcIiAmJiB0aGlzLm1heENvdW50ICE9IG51bGwpIHtcblx0XHRcdHRoaXMuX3RleHRhcmVhRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIiwgU3RyaW5nKHRoaXMubWF4Q291bnQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fdGV4dGFyZWFFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcIm1heGxlbmd0aFwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXR0YWNoZXMgdGhlIGlucHV0IGV2ZW50IGxpc3RlbmVyLCBlbnN1cmluZyBpdCBpcyBuZXZlciBhZGRlZCB0d2ljZS5cblx0ICovXG5cdHByaXZhdGUgX2F0dGFjaENvdW50ZXJMaXN0ZW5lcigpOiB2b2lkIHtcblx0XHR0aGlzLl9kZXRhY2hDb3VudGVyTGlzdGVuZXIoKTtcblx0XHRpZiAoIXRoaXMuX3RleHRhcmVhRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLl9pbnB1dExpc3RlbmVyID0gKGU6IEV2ZW50KSA9PiB7XG5cdFx0XHRjb25zdCBlbCA9IGUudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG5cdFx0XHQvLyBXb3JkLW1vZGUgZW5mb3JjZW1lbnQ6IGNsYW1wIHZhbHVlIHRvIG1heENvdW50IHdvcmRzIG9uIGVhY2ggaW5wdXQgc29cblx0XHRcdC8vIHRoZSB0ZXh0YXJlYSBuZXZlciBob2xkcyBtb3JlIHdvcmRzIHRoYW4gYWxsb3dlZC4gIENoYXJhY3RlciBtb2RlIHJlbGllc1xuXHRcdFx0Ly8gb24gdGhlIG5hdGl2ZSBgbWF4bGVuZ3RoYCBhdHRyaWJ1dGUgc2V0IGJ5IHRoZSBkZXZlbG9wZXIuXG5cdFx0XHRpZiAodGhpcy5jb3VudGVyTW9kZSA9PT0gXCJ3b3JkXCIgJiYgdGhpcy5tYXhDb3VudCAhPSBudWxsKSB7XG5cdFx0XHRcdGNvbnN0IGNsYW1wZWQgPSB0aGlzLl90cnVuY2F0ZVRvV29yZExpbWl0KGVsLnZhbHVlIHx8IFwiXCIsIHRoaXMubWF4Q291bnQpO1xuXHRcdFx0XHRpZiAoY2xhbXBlZCAhPT0gZWwudmFsdWUpIHtcblx0XHRcdFx0XHRlbC52YWx1ZSA9IGNsYW1wZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMudGV4dENvdW50ID0gdGhpcy5fY291bnRWYWx1ZShlbC52YWx1ZSB8fCBcIlwiKTtcblx0XHR9O1xuXHRcdHRoaXMuX3RleHRhcmVhRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgdGhpcy5faW5wdXRMaXN0ZW5lcik7XG5cdH1cblxuXHQvKipcblx0ICogVHJ1bmNhdGVzIGB2YWx1ZWAgc28gaXQgY29udGFpbnMgYXQgbW9zdCBgbGltaXRgIFVuaWNvZGUgd29yZHMuXG5cdCAqIFdoaXRlc3BhY2UgYmV0d2VlbiBhbmQgYXJvdW5kIHdvcmRzIGlzIHByZXNlcnZlZCB1cCB0byB0aGUgbGFzdCBhbGxvd2VkIHdvcmQ7XG5cdCAqIGFueSB0cmFpbGluZyBjb250ZW50IChwYXJ0aWFsIHdvcmQgb3Igc3BhY2UpIGJleW9uZCB0aGUgbGltaXQgaXMgZHJvcHBlZC5cblx0ICovXG5cdHByaXZhdGUgX3RydW5jYXRlVG9Xb3JkTGltaXQodmFsdWU6IHN0cmluZywgbGltaXQ6IG51bWJlcik6IHN0cmluZyB7XG5cdFx0bGV0IHdvcmRzU2VlbiA9IDA7XG5cdFx0Ly8gV2FsayB0aHJvdWdoIHRoZSBzdHJpbmcgY2FwdHVyaW5nIHdvcmQgYm91bmRhcmllc1xuXHRcdGNvbnN0IHdvcmRQYXR0ZXJuID0gL1xccHtMfSsvZ3U7XG5cdFx0bGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuXHRcdGxldCBjdXRJbmRleCA9IHZhbHVlLmxlbmd0aDtcblx0XHR3aGlsZSAoKG1hdGNoID0gd29yZFBhdHRlcm4uZXhlYyh2YWx1ZSkpICE9PSBudWxsKSB7XG5cdFx0XHR3b3Jkc1NlZW4rKztcblx0XHRcdGlmICh3b3Jkc1NlZW4gPT09IGxpbWl0KSB7XG5cdFx0XHRcdC8vIEFsbG93IHRoZSBzdHJpbmcgdG8gY29udGludWUgdXAgdG8gKGJ1dCBub3QgcGFzdCkgdGhlIGVuZCBvZiB0aGlzIHdvcmRcblx0XHRcdFx0Y3V0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB3b3Jkc1NlZW4gPCBsaW1pdCA/IHZhbHVlIDogdmFsdWUuc2xpY2UoMCwgY3V0SW5kZXgpO1xuXHR9XG5cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgaW5wdXQgZXZlbnQgbGlzdGVuZXIgYW5kIGNsZWFycyB0aGUgY2FjaGVkIHJlZmVyZW5jZS5cblx0ICovXG5cdHByaXZhdGUgX2RldGFjaENvdW50ZXJMaXN0ZW5lcigpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5faW5wdXRMaXN0ZW5lciAmJiB0aGlzLl90ZXh0YXJlYUVsZW1lbnQpIHtcblx0XHRcdHRoaXMuX3RleHRhcmVhRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgdGhpcy5faW5wdXRMaXN0ZW5lcik7XG5cdFx0XHR0aGlzLl9pbnB1dExpc3RlbmVyID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIF9jb3VudFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuXHRcdGlmICh0aGlzLmNvdW50ZXJNb2RlID09PSBcIndvcmRcIikge1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hdGNoKC9cXHB7TH0rL2d1KT8ubGVuZ3RoIHx8IDA7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZS5sZW5ndGg7XG5cdH1cbn1cbiJdfQ==
510
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEtbGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lucHV0L3RleHRhcmVhLWxhYmVsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFLTCxXQUFXLEVBQ1gsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBR1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUVqRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUF1R0gsTUFBTSxPQUFPLHNCQUFzQjtJQXNIbEM7O09BRUc7SUFDSCxZQUFzQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQXhHMUQ7OztVQUdFO1FBQ08saUJBQVksR0FBRyxlQUFlLEdBQUcsc0JBQXNCLENBQUMsWUFBWSxDQUFDO1FBRTlFOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQjs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFnQjFCOztXQUVHO1FBQ00sWUFBTyxHQUFHLEtBQUssQ0FBQztRQUN6Qjs7WUFFSTtRQUNLLFNBQUksR0FBRyxLQUFLLENBQUM7UUFVdEI7O1dBRUc7UUFDTSxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRXZCOzs7V0FHRztRQUNNLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFM0I7OztXQUdHO1FBQ00sa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFRL0I7Ozs7V0FJRztRQUNNLGdCQUFXLEdBQXlCLFdBQVcsQ0FBQztRQU96RCxpRUFBaUU7UUFDakUsY0FBUyxHQUFHLENBQUMsQ0FBQztRQVF1QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXZELHlFQUF5RTtRQUNqRSxxQkFBZ0IsR0FB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LFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUcsYUFBYTtzQkFBckIsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQU9HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFNbUMsT0FBTztzQkFBL0MsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdJLFFBQVE7c0JBQWxELFlBQVk7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFSixVQUFVO3NCQUE5QyxXQUFXO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SW5wdXQsXG5cdEFmdGVyVmlld0luaXQsXG5cdE9uQ2hhbmdlcyxcblx0T25EZXN0cm95LFxuXHRFbGVtZW50UmVmLFxuXHRIb3N0QmluZGluZyxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZCxcblx0Q29udGVudENoaWxkLFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0U2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHN0YXJ0V2l0aCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBUZXh0QXJlYSB9IGZyb20gXCIuL3RleHQtYXJlYS5kaXJlY3RpdmVcIjtcblxuLyoqXG4gKiBHZXQgc3RhcnRlZCB3aXRoIGltcG9ydGluZyB0aGUgbW9kdWxlOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IElucHV0TW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBgYGBodG1sXG4gKiA8Y2RzLXRleHRhcmVhLWxhYmVsPlxuICogXHRMYWJlbFxuICogXHQ8dGV4dGFyZWEgY2RzVGV4dEFyZWEgY2xhc3M9XCJ0ZXh0YXJlYS1maWVsZFwiPlxuICogPC9jZHMtdGV4dGFyZWEtbGFiZWw+XG4gKiBgYGBcbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLWlucHV0LXRleHQtYXJlYS0tYmFzaWMpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtdGV4dGFyZWEtbGFiZWwsIGlibS10ZXh0YXJlYS1sYWJlbFwiLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvblwiPlxuXHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLWxhYmVsIGNkcy0tc2tlbGV0b25cIj48L3NwYW4+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS10ZXh0LWFyZWEgY2RzLS1za2VsZXRvblwiPjwvZGl2PlxuXHRcdDwvbmctY29udGFpbmVyPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25cIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXRleHQtYXJlYV9fbGFiZWwtd3JhcHBlclwiPlxuXHRcdFx0XHQ8bGFiZWxcblx0XHRcdFx0XHRbZm9yXT1cImxhYmVsSW5wdXRJRFwiXG5cdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuXHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1sYWJlbFwiXG5cdFx0XHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHRcdFx0J2Nkcy0tbGFiZWwtLWRpc2FibGVkJzogZGlzYWJsZWQsXG5cdFx0XHRcdFx0XHQnY2RzLS12aXN1YWxseS1oaWRkZW4nOiBoaWRlTGFiZWxcblx0XHRcdFx0XHR9XCI+XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwibGFiZWxUZW1wbGF0ZTsgZWxzZSBsYWJlbENvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2xhYmVsQ29udGVudD5cblx0XHRcdFx0XHRcdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdCpuZ0lmPVwiZW5hYmxlQ291bnRlciAmJiBtYXhDb3VudFwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxhYmVsXCJcblx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tbGFiZWwtLWRpc2FibGVkJzogZGlzYWJsZWR9XCJcblx0XHRcdFx0XHRhcmlhLWhpZGRlbj1cInRydWVcIj5cblx0XHRcdFx0XHR7e3RleHRDb3VudH19L3t7bWF4Q291bnR9fVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3M9XCJjZHMtLXRleHQtYXJlYV9fd3JhcHBlclwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHQnY2RzLS10ZXh0LWFyZWFfX3dyYXBwZXItLXdhcm4nOiB3YXJuLFxuXHRcdFx0XHRcdCdjZHMtLXRleHQtYXJlYV9fd3JhcHBlci0tZGVjb3JhdG9yJzogISFkZWNvcmF0b3Jcblx0XHRcdFx0fVwiXG5cdFx0XHRcdFthdHRyLmRhdGEtaW52YWxpZF09XCIoaW52YWxpZCA/IHRydWUgOiBudWxsKVwiXG5cdFx0XHRcdCN3cmFwcGVyPlxuXHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0Km5nSWY9XCIhZmx1aWQgJiYgaW52YWxpZFwiXG5cdFx0XHRcdFx0Y2RzSWNvbj1cIndhcm5pbmctLWZpbGxlZFwiXG5cdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRjbGFzcz1cImNkcy0tdGV4dC1hcmVhX19pbnZhbGlkLWljb25cIj5cblx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdDxzdmdcblx0XHRcdFx0XHQqbmdJZj1cIiFmbHVpZCAmJiAhaW52YWxpZCAmJiB3YXJuXCJcblx0XHRcdFx0XHRjZHNJY29uPVwid2FybmluZy0tYWx0LS1maWxsZWRcIlxuXHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXRleHQtYXJlYV9faW52YWxpZC1pY29uIGNkcy0tdGV4dC1hcmVhX19pbnZhbGlkLWljb24tLXdhcm5pbmdcIj5cblx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cInRleHRBcmVhVGVtcGxhdGU7IGVsc2UgdGV4dEFyZWFDb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGV4dEFyZWFUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAjdGV4dEFyZWFDb250ZW50PlxuXHRcdFx0XHRcdDxuZy1jb250ZW50IHNlbGVjdD1cIltjZHNUZXh0QXJlYV0sW2libVRleHRBcmVhXSx0ZXh0YXJlYVwiPjwvbmctY29udGVudD5cblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImRlY29yYXRvclwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLXRleHQtYXJlYV9faW5uZXItd3JhcHBlci0tZGVjb3JhdG9yXCI+XG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGVjb3JhdG9yXCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImZsdWlkXCI+XG5cdFx0XHRcdFx0PGhyIGNsYXNzPVwiY2RzLS10ZXh0LWFyZWFfX2RpdmlkZXJcIiAvPlxuXHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJpbnZhbGlkXCIgY2xhc3M9XCJjZHMtLWZvcm0tcmVxdWlyZW1lbnRcIj5cblx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShpbnZhbGlkVGV4dClcIj57e2ludmFsaWRUZXh0fX08L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW52YWxpZFRleHRcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0PHN2Z1xuXHRcdFx0XHRcdFx0XHRjZHNJY29uPVwid2FybmluZy0tZmlsbGVkXCJcblx0XHRcdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXRleHQtYXJlYV9faW52YWxpZC1pY29uXCI+XG5cdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiIWludmFsaWQgJiYgd2FyblwiIGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUod2FyblRleHQpXCI+e3t3YXJuVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKHdhcm5UZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndhcm5UZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdFx0Y2RzSWNvbj1cIndhcm5pbmctLWFsdC0tZmlsbGVkXCJcblx0XHRcdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXRleHQtYXJlYV9faW52YWxpZC1pY29uIGNkcy0tdGV4dC1hcmVhX19pbnZhbGlkLWljb24tLXdhcm5pbmdcIj5cblx0XHRcdFx0XHRcdDwvc3ZnPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmbHVpZFwiPlxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Km5nSWY9XCJoZWxwZXJUZXh0ICYmICFpbnZhbGlkICYmICF3YXJuXCJcblx0XHRcdFx0XHRjbGFzcz1cImNkcy0tZm9ybV9faGVscGVyLXRleHRcIlxuXHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1mb3JtX19oZWxwZXItdGV4dC0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoaGVscGVyVGV4dClcIj57e2hlbHBlclRleHR9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaGVscGVyVGV4dClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWxwZXJUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgKm5nSWY9XCJpbnZhbGlkXCIgY2xhc3M9XCJjZHMtLWZvcm0tcmVxdWlyZW1lbnRcIj5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCI+e3tpbnZhbGlkVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShpbnZhbGlkVGV4dClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJpbnZhbGlkVGV4dFwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiIWludmFsaWQgJiYgd2FyblwiIGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKHdhcm5UZXh0KVwiPnt7d2FyblRleHR9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUod2FyblRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwid2FyblRleHRcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdDwvbmctY29udGFpbmVyPlxuXHRgXG59KVxuZXhwb3J0IGNsYXNzIFRleHRhcmVhTGFiZWxDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS10ZXh0LWFyZWFfX3dyYXBwZXItLXJlYWRvbmx5XCIpIGdldCBpc1JlYWRvbmx5KCkge1xuXHRcdHJldHVybiB0aGlzLndyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcInRleHRhcmVhXCIpPy5yZWFkT25seSA/PyBmYWxzZTtcblx0fVxuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tdGV4dC1hcmVhLS1mbHVpZFwiKSBnZXQgZmx1aWRDbGFzcygpIHtcblx0XHRyZXR1cm4gdGhpcy5mbHVpZCAmJiAhdGhpcy5za2VsZXRvbjtcblx0fVxuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tdGV4dC1hcmVhLS1mbHVpZF9fc2tlbGV0b25cIikgZ2V0IGZsdWlkU2tlbGV0b25DbGFzcygpIHtcblx0XHRyZXR1cm4gdGhpcy5mbHVpZCAmJiB0aGlzLnNrZWxldG9uO1xuXHR9XG5cdC8qKlxuXHQgKiBVc2VkIHRvIGJ1aWxkIHRoZSBpZCBvZiB0aGUgaW5wdXQgaXRlbSBhc3NvY2lhdGVkIHdpdGggdGhlIGBMYWJlbGAuXG5cdCAqL1xuXHRzdGF0aWMgbGFiZWxDb3VudGVyID0gMDtcblx0LyoqXG5cdCAqIFRoZSBpZCBvZiB0aGUgaW5wdXQgaXRlbSBhc3NvY2lhdGVkIHdpdGggdGhlIGBMYWJlbGAuIFRoaXMgdmFsdWUgaXMgYWxzbyB1c2VkIHRvIGFzc29jaWF0ZSB0aGUgYExhYmVsYCB3aXRoXG5cdCAqIGl0cyBpbnB1dCBjb3VudGVycGFydCB0aHJvdWdoIHRoZSAnZm9yJyBhdHRyaWJ1dGUuXG5cdCovXG5cdEBJbnB1dCgpIGxhYmVsSW5wdXRJRCA9IFwiaWJtLXRleHRhcmVhLVwiICsgVGV4dGFyZWFMYWJlbENvbXBvbmVudC5sYWJlbENvdW50ZXI7XG5cblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgZGlzYWJsZWQgbGFiZWwuXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYSBsb2FkaW5nIGxhYmVsLlxuXHQgKi9cblx0QElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcblxuXHQvKipcblx0ICogSGVscGVyIGlucHV0IHByb3BlcnR5IGZvciBlYXNlIG9mIG1pZ3JhdGlvblxuXHQgKiBTaW5jZSB3ZSBjYW5ub3QgcGFzcyBuZy1jb250ZW50IGRvd24gZWFzaWx5IGZyb20gbGFiZWwgY29tcG9uZW50LCB3ZSB3aWxsIGFjY2VwdCB0aGUgdGVtcGxhdGVzXG5cdCAqL1xuXHRASW5wdXQoKSBsYWJlbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRASW5wdXQoKSB0ZXh0QXJlYVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogT3B0aW9uYWwgaGVscGVyIHRleHQgdGhhdCBhcHBlYXJzIHVuZGVyIHRoZSBsYWJlbC5cblx0ICovXG5cdEBJbnB1dCgpIGhlbHBlclRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBpbnZhbGlkIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgZm9yIGFuIGludmFsaWQgbGFiZWwgY29tcG9uZW50LlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuXHQvKipcblx0ICAqIFNldCB0byBgdHJ1ZWAgdG8gc2hvdyBhIHdhcm5pbmcgKGNvbnRlbnRzIHNldCBieSB3YXJuaW5nVGV4dClcblx0ICAqL1xuXHRASW5wdXQoKSB3YXJuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB3YXJuaW5nIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIHdhcm5UZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogU2V0IHRoZSBhcmlhbGFiZWwgZm9yIGxhYmVsXG5cdCAqL1xuXHRASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZztcblxuXHQvKipcblx0ICogRXhwZXJpbWVudGFsOiBlbmFibGUgZmx1aWQgc3RhdGVcblx0ICovXG5cdEBJbnB1dCgpIGZsdWlkID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gaGlkZSB0aGUgbGFiZWwgdmlzdWFsbHksIGJ1dCBrZWVwIGFjY2Vzc2libGUgdG9cblx0ICogc2NyZWVuIHJlYWRlcnMuXG5cdCAqL1xuXHRASW5wdXQoKSBoaWRlTGFiZWwgPSBmYWxzZTtcblxuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCAoYG1heENvdW50YCBtdXN0IGJlIHNldCkgdG8gZGlzcGxheXMgYSBsaXZlIGNoYXJhY3Rlci93b3JkXG5cdCAqIGNvdW50ZXIgYWxvbmdzaWRlIHRoZSBsYWJlbC5cblx0ICovXG5cdEBJbnB1dCgpIGVuYWJsZUNvdW50ZXIgPSBmYWxzZTtcblxuXHQvKipcblx0ICogTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyAob3Igd29yZHMpIGFsbG93ZWQuIFJlcXVpcmVkIGZvciB0aGVcblx0ICogY291bnRlciB0byBkaXNwbGF5LlxuXHQgKi9cblx0QElucHV0KCkgbWF4Q291bnQ6IG51bWJlcjtcblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb3VudGVyIGNvdW50cyBjaGFyYWN0ZXJzIG9yIHdvcmRzLlxuXHQgKiBXaGVuIGBcIndvcmRcImAgYW5kIGBtYXhDb3VudGAgaXMgc2V0LCBpbnB1dCBpcyBjbGFtcGVkIHRvIGBtYXhDb3VudGAgd29yZHNcblx0ICogb24gZWFjaCBjaGFuZ2UuIEV4Y2VzcyB3b3JkcyBhcmUgdHJpbW1lZCBmcm9tIHRoZSBlbmQgb2YgdGhlIHZhbHVlLlxuXHQgKi9cblx0QElucHV0KCkgY291bnRlck1vZGU6IFwiY2hhcmFjdGVyXCIgfCBcIndvcmRcIiA9IFwiY2hhcmFjdGVyXCI7XG5cblx0LyoqXG5cdCAqICoqRXhwZXJpbWVudGFsKio6IE9wdGlvbmFsIGRlY29yYXRvciAoZS5nLiBBSSBsYWJlbCkuXG5cdCAqL1xuXHRASW5wdXQoKSBkZWNvcmF0b3I6IFRlbXBsYXRlUmVmPGFueT47XG5cblx0Ly8gVHJhY2tzIGN1cnJlbnQgY2hhcmFjdGVyIC8gd29yZCBjb3VudCBmb3IgdGhlIGNvdW50ZXIgZGlzcGxheS5cblx0dGV4dENvdW50ID0gMDtcblxuXHQvLyBAdHMtaWdub3JlXG5cdEBWaWV3Q2hpbGQoXCJ3cmFwcGVyXCIsIHsgc3RhdGljOiBmYWxzZSB9KSB3cmFwcGVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuXHQvLyBAdHMtaWdub3JlXG5cdEBDb250ZW50Q2hpbGQoVGV4dEFyZWEsIHsgc3RhdGljOiBmYWxzZSB9KSB0ZXh0QXJlYTogVGV4dEFyZWE7XG5cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1mb3JtLWl0ZW1cIikgbGFiZWxDbGFzcyA9IHRydWU7XG5cblx0Ly8gQ2FjaGVkIHJlZmVyZW5jZSB0byB0aGUgdGV4dGFyZWEgZWxlbWVudCwgc2V0IG9uY2UgaW4gbmdBZnRlclZpZXdJbml0LlxuXHRwcml2YXRlIF90ZXh0YXJlYUVsZW1lbnQ6IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuXHQvLyBSeEpTIHN1YnNjcmlwdGlvbiB1c2VkIHdoZW4gTmdDb250cm9sIGlzIGF2YWlsYWJsZSAodGVtcGxhdGUtZHJpdmVuICYgcmVhY3RpdmUgZm9ybXMpLlxuXHRwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG5cdC8vIEZhbGxiYWNrIERPTSBsaXN0ZW5lciB1c2VkIG9ubHkgd2hlbiBubyBOZ0NvbnRyb2wgaXMgcHJlc2VudCAocGxhaW4gdGV4dGFyZWEpLlxuXHRwcml2YXRlIF9pbnB1dExpc3RlbmVyOiAoKGU6IEV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIExhYmVsLlxuXHQgKi9cblx0Y29uc3RydWN0b3IocHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaWQgb24gdGhlIGlucHV0IGl0ZW0gYXNzb2NpYXRlZCB3aXRoIHRoZSBgTGFiZWxgIGFuZCBhdHRhY2hlcyB0aGVcblx0ICogY291bnRlciBsaXN0ZW5lciB3aGVuIGBlbmFibGVDb3VudGVyYCBpcyBhbHJlYWR5IGB0cnVlYCBvbiBmaXJzdCByZW5kZXIuXG5cdCAqL1xuXHRuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0aWYgKHRoaXMud3JhcHBlcikge1xuXHRcdFx0Ly8gUHJpb3JpdGl6ZSBzZXR0aW5nIGlkIHRvIGB0ZXh0YXJlYWAgb3ZlciBkaXZcblx0XHRcdGNvbnN0IGlucHV0RWxlbWVudCA9IHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJ0ZXh0YXJlYVwiKTtcblx0XHRcdGlmIChpbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0Ly8gYXZvaWQgb3ZlcnJpZGluZyBpZHMgYWxyZWFkeSBzZXQgYnkgdGhlIHVzZXIg4oCUIHJldXNlIGl0IGluc3RlYWRcblx0XHRcdFx0aWYgKGlucHV0RWxlbWVudC5pZCkge1xuXHRcdFx0XHRcdHRoaXMubGFiZWxJbnB1dElEID0gaW5wdXRFbGVtZW50LmlkO1xuXHRcdFx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlucHV0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCB0aGlzLmxhYmVsSW5wdXRJRCk7XG5cblx0XHRcdFx0dGhpcy5fdGV4dGFyZWFFbGVtZW50ID0gaW5wdXRFbGVtZW50O1xuXHRcdFx0XHR0aGlzLl9zeW5jTWF4TGVuZ3RoKCk7XG5cblx0XHRcdFx0aWYgKHRoaXMuZW5hYmxlQ291bnRlcikge1xuXHRcdFx0XHRcdHRoaXMudGV4dENvdW50ID0gdGhpcy5fY291bnRWYWx1ZShpbnB1dEVsZW1lbnQudmFsdWUgfHwgXCJcIik7XG5cdFx0XHRcdFx0dGhpcy5fYXR0YWNoQ291bnRlckxpc3RlbmVyKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRpdkVsZW1lbnQgPSB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiZGl2XCIpO1xuXHRcdFx0aWYgKGRpdkVsZW1lbnQpIHtcblx0XHRcdFx0aWYgKGRpdkVsZW1lbnQuaWQpIHtcblx0XHRcdFx0XHR0aGlzLmxhYmVsSW5wdXRJRCA9IGRpdkVsZW1lbnQuaWQ7XG5cdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGl2RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCB0aGlzLmxhYmVsSW5wdXRJRCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEF0dGFjaC9yZW1vdmUgbGlzdGVuZXIgYW5kIHNlZWQgYHRleHRDb3VudGAgZnJvbSB0aGUgdGV4dGFyZWEncyBjdXJyZW50IHZhbHVlLlxuXHQgKi9cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRcdGlmIChjaGFuZ2VzLmVuYWJsZUNvdW50ZXIgJiYgIWNoYW5nZXMuZW5hYmxlQ291bnRlci5maXJzdENoYW5nZSkge1xuXHRcdFx0aWYgKGNoYW5nZXMuZW5hYmxlQ291bnRlci5jdXJyZW50VmFsdWUpIHtcblx0XHRcdFx0aWYgKHRoaXMuX3RleHRhcmVhRWxlbWVudCkge1xuXHRcdFx0XHRcdHRoaXMudGV4dENvdW50ID0gdGhpcy5fY291bnRWYWx1ZSh0aGlzLl90ZXh0YXJlYUVsZW1lbnQudmFsdWUgfHwgXCJcIik7XG5cdFx0XHRcdFx0dGhpcy5fYXR0YWNoQ291bnRlckxpc3RlbmVyKCk7XG5cdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2RldGFjaENvdW50ZXJMaXN0ZW5lcigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdChjaGFuZ2VzLm1heENvdW50IHx8IGNoYW5nZXMuY291bnRlck1vZGUpICYmXG5cdFx0XHQhKGNoYW5nZXMubWF4Q291bnQ/LmZpcnN0Q2hhbmdlICYmIGNoYW5nZXMuY291bnRlck1vZGU/LmZpcnN0Q2hhbmdlKVxuXHRcdCkge1xuXHRcdFx0dGhpcy5fc3luY01heExlbmd0aCgpO1xuXHRcdH1cblx0fVxuXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdHRoaXMuX2RldGFjaENvdW50ZXJMaXN0ZW5lcigpO1xuXHR9XG5cblx0cHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcblx0fVxuXG5cdC8qKlxuXHQgKiBLZWVwcyB0aGUgdGV4dGFyZWEncyBgbWF4bGVuZ3RoYCBhdHRyaWJ1dGUgaW4gc3luYyB3aXRoIGBtYXhDb3VudGAuIFRoaXMgaXMgb25seSBzZXRcblx0ICogd2hlbiBjb3VudGVyTW9kZSBpcyBzZXQgdG8gYGNoYXJhY3RlcmAuIFdoZW4gY291bnRlck1vZGUgaXMgc2V0IHRvIGB3b3JkYCwgd2UgZW5mb3JjZSBsaW1pdCB2aWEgSlMuXG5cdCAqIElmIGBtYXhDb3VudGAgaXMgdW5zZXQgb3IgdGhlIG1vZGUgaXMgYFwid29yZFwiYCwgYW55IHByZXZpb3VzbHkgYXBwbGllZFxuXHQgKiBgbWF4bGVuZ3RoYCBpcyByZW1vdmVkIHNvIHRoZSB0ZXh0YXJlYSBpcyB1bnJlc3RyaWN0ZWQgYnkgdGhlIGF0dHJpYnV0ZS5cblx0ICovXG5cdHByaXZhdGUgX3N5bmNNYXhMZW5ndGgoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLl90ZXh0YXJlYUVsZW1lbnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY291bnRlck1vZGUgPT09IFwiY2hhcmFjdGVyXCIgJiYgdGhpcy5tYXhDb3VudCAhPSBudWxsKSB7XG5cdFx0XHR0aGlzLl90ZXh0YXJlYUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4bGVuZ3RoXCIsIFN0cmluZyh0aGlzLm1heENvdW50KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3RleHRhcmVhRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEF0dGFjaGVzIHRoZSBjb3VudGVyIGxpc3RlbmVyLCBsaXN0ZW4gZm9yIGVpdGhlciBuZ0NvbnRyb2wgb3IgbmF0aXZlIERPTSBpbnB1dFxuXHQgKiBldmVudCBsaXN0ZW5lclxuXHQgKi9cblx0cHJpdmF0ZSBfYXR0YWNoQ291bnRlckxpc3RlbmVyKCk6IHZvaWQge1xuXHRcdHRoaXMuX2RldGFjaENvdW50ZXJMaXN0ZW5lcigpO1xuXG5cdFx0Y29uc3QgY29udHJvbCA9IHRoaXMudGV4dEFyZWE/Lm5nQ29udHJvbDtcblx0XHRpZiAoY29udHJvbD8udmFsdWVDaGFuZ2VzKSB7XG5cdFx0XHQvLyBOZ0NvbnRyb2wgbGlzdGVuZXJcblx0XHRcdHRoaXMuX3N1YnNjcmlwdGlvbiA9IGNvbnRyb2wudmFsdWVDaGFuZ2VzXG5cdFx0XHRcdC5waXBlKHN0YXJ0V2l0aChjb250cm9sLnZhbHVlKSlcblx0XHRcdFx0LnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHJhdyA9IHZhbHVlIHx8IFwiXCI7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5jb3VudGVyTW9kZSA9PT0gXCJ3b3JkXCIgJiYgdGhpcy5tYXhDb3VudCAhPSBudWxsKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBjbGFtcGVkID0gdGhpcy5fdHJ1bmNhdGVUb1dvcmRMaW1pdChyYXcsIHRoaXMubWF4Q291bnQpO1xuXHRcdFx0XHRcdFx0aWYgKGNsYW1wZWQgIT09IHJhdykge1xuXHRcdFx0XHRcdFx0XHQvLyBXcml0ZSBiYWNrIHRocm91Z2ggdGhlIGNvbnRyb2wgc28gdGhlIGZvcm0gbW9kZWwgc3RheXMgaW4gc3luYy5cblx0XHRcdFx0XHRcdFx0Ly8gZW1pdEV2ZW50IGZhbHNlIHRvIGF2b2lkIGluZmluaXRlIGxvb3Bcblx0XHRcdFx0XHRcdFx0Y29udHJvbD8uY29udHJvbD8uc2V0VmFsdWUoY2xhbXBlZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMudGV4dENvdW50ID0gdGhpcy5fY291bnRWYWx1ZShyYXcpO1xuXHRcdFx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBGYWxsYmFjayBET00gcGF0aFxuXHRcdFx0aWYgKCF0aGlzLl90ZXh0YXJlYUVsZW1lbnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5faW5wdXRMaXN0ZW5lciA9IChlOiBFdmVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCBlbCA9IGUudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG5cdFx0XHRcdGlmICh0aGlzLmNvdW50ZXJNb2RlID09PSBcIndvcmRcIiAmJiB0aGlzLm1heENvdW50ICE9IG51bGwpIHtcblx0XHRcdFx0XHRjb25zdCBjbGFtcGVkID0gdGhpcy5fdHJ1bmNhdGVUb1dvcmRMaW1pdChlbC52YWx1ZSB8fCBcIlwiLCB0aGlzLm1heENvdW50KTtcblx0XHRcdFx0XHRpZiAoY2xhbXBlZCAhPT0gZWwudmFsdWUpIHtcblx0XHRcdFx0XHRcdGVsLnZhbHVlID0gY2xhbXBlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy50ZXh0Q291bnQgPSB0aGlzLl9jb3VudFZhbHVlKGVsLnZhbHVlIHx8IFwiXCIpO1xuXHRcdFx0fTtcblx0XHRcdHRoaXMuX3RleHRhcmVhRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgdGhpcy5faW5wdXRMaXN0ZW5lcik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRydW5jYXRlcyBgdmFsdWVgIHNvIGl0IGNvbnRhaW5zIGF0IG1vc3QgYGxpbWl0YCBVbmljb2RlIHdvcmRzLlxuXHQgKiBXaGl0ZXNwYWNlIGJldHdlZW4gYW5kIGFyb3VuZCB3b3JkcyBpcyBwcmVzZXJ2ZWQgdXAgdG8gdGhlIGxhc3QgYWxsb3dlZCB3b3JkO1xuXHQgKiBhbnkgdHJhaWxpbmcgY29udGVudCAocGFydGlhbCB3b3JkIG9yIHNwYWNlKSBiZXlvbmQgdGhlIGxpbWl0IGlzIGRyb3BwZWQuXG5cdCAqL1xuXHRwcml2YXRlIF90cnVuY2F0ZVRvV29yZExpbWl0KHZhbHVlOiBzdHJpbmcsIGxpbWl0OiBudW1iZXIpOiBzdHJpbmcge1xuXHRcdGxldCB3b3Jkc1NlZW4gPSAwO1xuXHRcdC8vIFdhbGsgdGhyb3VnaCB0aGUgc3RyaW5nIGNhcHR1cmluZyB3b3JkIGJvdW5kYXJpZXNcblx0XHRjb25zdCB3b3JkUGF0dGVybiA9IC9cXHB7TH0rL2d1O1xuXHRcdGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcblx0XHRsZXQgY3V0SW5kZXggPSB2YWx1ZS5sZW5ndGg7XG5cdFx0d2hpbGUgKChtYXRjaCA9IHdvcmRQYXR0ZXJuLmV4ZWModmFsdWUpKSAhPT0gbnVsbCkge1xuXHRcdFx0d29yZHNTZWVuKys7XG5cdFx0XHRpZiAod29yZHNTZWVuID09PSBsaW1pdCkge1xuXHRcdFx0XHQvLyBBbGxvdyB0aGUgc3RyaW5nIHRvIGNvbnRpbnVlIHVwIHRvIChidXQgbm90IHBhc3QpIHRoZSBlbmQgb2YgdGhpcyB3b3JkXG5cdFx0XHRcdGN1dEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gd29yZHNTZWVuIDwgbGltaXQgPyB2YWx1ZSA6IHZhbHVlLnNsaWNlKDAsIGN1dEluZGV4KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBzdWJzY3JpcHRpb24gKE5nQ29udHJvbCBwYXRoKSBhbmQgcmVtb3ZlcyB0aGUgRE9NIGxpc3RlbmVyXG5cdCAqIChmYWxsYmFjayBwYXRoKS4gU2FmZSB0byBjYWxsIHdoZW4gbmVpdGhlciBpcyBhY3RpdmUuXG5cdCAqL1xuXHRwcml2YXRlIF9kZXRhY2hDb3VudGVyTGlzdGVuZXIoKTogdm9pZCB7XG5cdFx0dGhpcy5fc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbiA9IG51bGw7XG5cblx0XHRpZiAodGhpcy5faW5wdXRMaXN0ZW5lciAmJiB0aGlzLl90ZXh0YXJlYUVsZW1lbnQpIHtcblx0XHRcdHRoaXMuX3RleHRhcmVhRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgdGhpcy5faW5wdXRMaXN0ZW5lcik7XG5cdFx0XHR0aGlzLl9pbnB1dExpc3RlbmVyID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIF9jb3VudFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuXHRcdGlmICh0aGlzLmNvdW50ZXJNb2RlID09PSBcIndvcmRcIikge1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hdGNoKC9cXHB7TH0rL2d1KT8ubGVuZ3RoIHx8IDA7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZS5sZW5ndGg7XG5cdH1cbn1cbiJdfQ==
@@ -1,10 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Directive, Input, HostBinding, TemplateRef, Component, ViewChild, ContentChild, EventEmitter, Output, NgModule } from '@angular/core';
2
+ import { Directive, Self, Optional, Input, HostBinding, TemplateRef, Component, ViewChild, ContentChild, EventEmitter, Output, NgModule } from '@angular/core';
3
+ import * as i1 from '@angular/forms';
3
4
  import { FormsModule } from '@angular/forms';
4
- import * as i1 from '@angular/common';
5
+ import * as i1$1 from '@angular/common';
5
6
  import { CommonModule } from '@angular/common';
6
7
  import * as i2 from 'carbon-components-angular/icon';
7
8
  import { IconModule } from 'carbon-components-angular/icon';
9
+ import { startWith } from 'rxjs/operators';
8
10
  import { BaseIconButton, ButtonModule } from 'carbon-components-angular/button';
9
11
  import * as i3 from 'carbon-components-angular/tooltip';
10
12
  import { TooltipModule } from 'carbon-components-angular/tooltip';
@@ -21,7 +23,8 @@ import { TooltipModule } from 'carbon-components-angular/tooltip';
21
23
  * See the [vanilla carbon docs](http://www.carbondesignsystem.com/components/text-input/code) for more detail.
22
24
  */
23
25
  class TextInput {
24
- constructor() {
26
+ constructor(ngControl) {
27
+ this.ngControl = ngControl;
25
28
  /**
26
29
  * @deprecated since v5 - Use `cdsLayer` directive instead
27
30
  * `light` or `dark` input theme
@@ -65,14 +68,20 @@ class TextInput {
65
68
  return this.invalid ? true : undefined;
66
69
  }
67
70
  }
68
- TextInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextInput, deps: [], target: i0.ɵɵFactoryTarget.Directive });
71
+ TextInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextInput, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
69
72
  TextInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: TextInput, selector: "[cdsText], [ibmText]", inputs: { theme: "theme", size: "size", invalid: "invalid", warn: "warn", skeleton: "skeleton" }, host: { properties: { "class.cds--text-input": "this.inputClass", "class.cds--text-input--sm": "this.isSizeSm", "class.cds--text-input--md": "this.isSizeMd", "class.cds--text-input--lg": "this.isSizelg", "class.cds--layout--size-sm": "this.sizeSm", "class.cds--layout--size-md": "this.sizeMd", "class.cds--layout--size-lg": "this.sizelg", "class.cds--text-input--invalid": "this.invalid", "class.cds--text-input--warning": "this.warn", "class.cds--skeleton": "this.skeleton", "class.cds--text-input--light": "this.isLightTheme", "attr.data-invalid": "this.getInvalidAttribute" } }, ngImport: i0 });
70
73
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextInput, decorators: [{
71
74
  type: Directive,
72
75
  args: [{
73
76
  selector: "[cdsText], [ibmText]"
74
77
  }]
75
- }], propDecorators: { theme: [{
78
+ }], ctorParameters: function () {
79
+ return [{ type: i1.NgControl, decorators: [{
80
+ type: Self
81
+ }, {
82
+ type: Optional
83
+ }] }];
84
+ }, propDecorators: { theme: [{
76
85
  type: Input
77
86
  }], size: [{
78
87
  type: Input
@@ -132,7 +141,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
132
141
  * See the [vanilla carbon docs](http://www.carbondesignsystem.com/components/text-input/code) for more detail.
133
142
  */
134
143
  class TextArea {
135
- constructor() {
144
+ constructor(ngControl) {
145
+ this.ngControl = ngControl;
136
146
  /**
137
147
  * @deprecated since v5 - Use `cdsLayer` directive instead
138
148
  * `light` or `dark` input theme
@@ -153,14 +163,20 @@ class TextArea {
153
163
  return this.invalid ? true : undefined;
154
164
  }
155
165
  }
156
- TextArea.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextArea, deps: [], target: i0.ɵɵFactoryTarget.Directive });
166
+ TextArea.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextArea, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
157
167
  TextArea.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: TextArea, selector: "[cdsTextArea], [ibmTextArea]", inputs: { theme: "theme", invalid: "invalid", warn: "warn", skeleton: "skeleton" }, host: { properties: { "class.cds--text-area": "this.baseClass", "class.cds--text-area--invalid": "this.invalid", "class.cds--text-area--warn": "this.warn", "class.cds--skeleton": "this.skeleton", "class.cds--text-area--light": "this.isLightTheme", "attr.data-invalid": "this.getInvalidAttr" } }, ngImport: i0 });
158
168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextArea, decorators: [{
159
169
  type: Directive,
160
170
  args: [{
161
171
  selector: "[cdsTextArea], [ibmTextArea]"
162
172
  }]
163
- }], propDecorators: { theme: [{
173
+ }], ctorParameters: function () {
174
+ return [{ type: i1.NgControl, decorators: [{
175
+ type: Self
176
+ }, {
177
+ type: Optional
178
+ }] }];
179
+ }, propDecorators: { theme: [{
164
180
  type: Input
165
181
  }], baseClass: [{
166
182
  type: HostBinding,
@@ -371,12 +387,14 @@ class TextareaLabelComponent {
371
387
  * on each change. Excess words are trimmed from the end of the value.
372
388
  */
373
389
  this.counterMode = "character";
374
- // Tracks current character / word count for the counter display.
390
+ // Tracks current character / word count for the counter display.
375
391
  this.textCount = 0;
376
392
  this.labelClass = true;
377
393
  // Cached reference to the textarea element, set once in ngAfterViewInit.
378
394
  this._textareaElement = null;
379
- // Cached listener so it can be removed precisely (avoids anonymous-function leak)
395
+ // RxJS subscription used when NgControl is available (template-driven & reactive forms).
396
+ this._subscription = null;
397
+ // Fallback DOM listener used only when no NgControl is present (plain textarea).
380
398
  this._inputListener = null;
381
399
  }
382
400
  get isReadonly() {
@@ -424,7 +442,6 @@ class TextareaLabelComponent {
424
442
  }
425
443
  /**
426
444
  * Attach/remove listener and seed `textCount` from the textarea's current value.
427
- * @param changes
428
445
  */
429
446
  ngOnChanges(changes) {
430
447
  var _a, _b;
@@ -469,27 +486,49 @@ class TextareaLabelComponent {
469
486
  }
470
487
  }
471
488
  /**
472
- * Attaches the input event listener, ensuring it is never added twice.
489
+ * Attaches the counter listener, listen for either ngControl or native DOM input
490
+ * event listener
473
491
  */
474
492
  _attachCounterListener() {
493
+ var _a;
475
494
  this._detachCounterListener();
476
- if (!this._textareaElement) {
477
- return;
478
- }
479
- this._inputListener = (e) => {
480
- const el = e.target;
481
- // Word-mode enforcement: clamp value to maxCount words on each input so
482
- // the textarea never holds more words than allowed. Character mode relies
483
- // on the native `maxlength` attribute set by the developer.
484
- if (this.counterMode === "word" && this.maxCount != null) {
485
- const clamped = this._truncateToWordLimit(el.value || "", this.maxCount);
486
- if (clamped !== el.value) {
487
- el.value = clamped;
495
+ const control = (_a = this.textArea) === null || _a === void 0 ? void 0 : _a.ngControl;
496
+ if (control === null || control === void 0 ? void 0 : control.valueChanges) {
497
+ // NgControl listener
498
+ this._subscription = control.valueChanges
499
+ .pipe(startWith(control.value))
500
+ .subscribe((value) => {
501
+ var _a;
502
+ const raw = value || "";
503
+ if (this.counterMode === "word" && this.maxCount != null) {
504
+ const clamped = this._truncateToWordLimit(raw, this.maxCount);
505
+ if (clamped !== raw) {
506
+ // Write back through the control so the form model stays in sync.
507
+ // emitEvent false to avoid infinite loop
508
+ (_a = control === null || control === void 0 ? void 0 : control.control) === null || _a === void 0 ? void 0 : _a.setValue(clamped, { emitEvent: false });
509
+ }
488
510
  }
511
+ this.textCount = this._countValue(raw);
512
+ this.changeDetectorRef.markForCheck();
513
+ });
514
+ }
515
+ else {
516
+ // Fallback DOM path
517
+ if (!this._textareaElement) {
518
+ return;
489
519
  }
490
- this.textCount = this._countValue(el.value || "");
491
- };
492
- this._textareaElement.addEventListener("input", this._inputListener);
520
+ this._inputListener = (e) => {
521
+ const el = e.target;
522
+ if (this.counterMode === "word" && this.maxCount != null) {
523
+ const clamped = this._truncateToWordLimit(el.value || "", this.maxCount);
524
+ if (clamped !== el.value) {
525
+ el.value = clamped;
526
+ }
527
+ }
528
+ this.textCount = this._countValue(el.value || "");
529
+ };
530
+ this._textareaElement.addEventListener("input", this._inputListener);
531
+ }
493
532
  }
494
533
  /**
495
534
  * Truncates `value` so it contains at most `limit` Unicode words.
@@ -513,9 +552,13 @@ class TextareaLabelComponent {
513
552
  return wordsSeen < limit ? value : value.slice(0, cutIndex);
514
553
  }
515
554
  /**
516
- * Removes the input event listener and clears the cached reference.
555
+ * Removes the subscription (NgControl path) and removes the DOM listener
556
+ * (fallback path). Safe to call when neither is active.
517
557
  */
518
558
  _detachCounterListener() {
559
+ var _a;
560
+ (_a = this._subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
561
+ this._subscription = null;
519
562
  if (this._inputListener && this._textareaElement) {
520
563
  this._textareaElement.removeEventListener("input", this._inputListener);
521
564
  this._inputListener = null;
@@ -632,7 +675,7 @@ TextareaLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
632
675
  </div>
633
676
  </ng-container>
634
677
  </ng-container>
635
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }] });
678
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }] });
636
679
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextareaLabelComponent, decorators: [{
637
680
  type: Component,
638
681
  args: [{
@@ -863,7 +906,9 @@ class TextInputLabelComponent {
863
906
  this.textInputWrapper = true;
864
907
  // Cached reference to the input element, set once in ngAfterViewInit.
865
908
  this._inputElement = null;
866
- // Cached listener so it can be removed precisely (avoids anonymous-function leak).
909
+ // RxJS subscription used when NgControl is available (template-driven & reactive forms).
910
+ this._subscription = null;
911
+ // Fallback cached DOM listener so it can be removed precisely (avoids anonymous-function leak).
867
912
  this._inputListener = null;
868
913
  }
869
914
  get isInlineWrapper() {
@@ -913,8 +958,7 @@ class TextInputLabelComponent {
913
958
  }
914
959
  }
915
960
  /**
916
- * Attach/remove listener and seed `textCount` from the textarea's current value.
917
- * @param changes
961
+ * Attach/remove listener and seed `textCount` from the input's current value.
918
962
  */
919
963
  ngOnChanges(changes) {
920
964
  var _a;
@@ -941,24 +985,43 @@ class TextInputLabelComponent {
941
985
  return value instanceof TemplateRef;
942
986
  }
943
987
  /**
944
- * Attaches the input event listener, ensuring it is never added twice.
988
+ * Attaches the counter listener, listen for either ngControl or native DOM input
989
+ * event listener
945
990
  */
946
991
  _attachCounterListener() {
992
+ var _a;
947
993
  this._detachCounterListener();
948
- if (!this._inputElement) {
949
- return;
994
+ const control = (_a = this.textInput) === null || _a === void 0 ? void 0 : _a.ngControl;
995
+ if (control === null || control === void 0 ? void 0 : control.valueChanges) {
996
+ // NgControl listener
997
+ this._subscription = control.valueChanges
998
+ .pipe(startWith(control.value))
999
+ .subscribe((value) => {
1000
+ this.textCount = (value === null || value === void 0 ? void 0 : value.length) || 0;
1001
+ this.changeDetectorRef.markForCheck();
1002
+ });
1003
+ }
1004
+ else {
1005
+ // Fallback DOM path
1006
+ if (!this._inputElement) {
1007
+ return;
1008
+ }
1009
+ this._inputListener = (e) => {
1010
+ var _a;
1011
+ this.textCount = ((_a = e.target.value) === null || _a === void 0 ? void 0 : _a.length) || 0;
1012
+ this.changeDetectorRef.detectChanges();
1013
+ };
1014
+ this._inputElement.addEventListener("input", this._inputListener);
950
1015
  }
951
- this._inputListener = (e) => {
952
- var _a;
953
- this.textCount = ((_a = e.target.value) === null || _a === void 0 ? void 0 : _a.length) || 0;
954
- this.changeDetectorRef.detectChanges();
955
- };
956
- this._inputElement.addEventListener("input", this._inputListener);
957
1016
  }
958
1017
  /**
959
- * Removes the input event listener and clears the cached reference.
1018
+ * Removes the subscription (NgControl path) or removes the DOM listener.
1019
+ * Safe to call when neither is active.
960
1020
  */
961
1021
  _detachCounterListener() {
1022
+ var _a;
1023
+ (_a = this._subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
1024
+ this._subscription = null;
962
1025
  if (this._inputListener && this._inputElement) {
963
1026
  this._inputElement.removeEventListener("input", this._inputListener);
964
1027
  this._inputListener = null;
@@ -970,7 +1033,7 @@ class TextInputLabelComponent {
970
1033
  */
971
1034
  TextInputLabelComponent.labelCounter = 0;
972
1035
  TextInputLabelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextInputLabelComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
973
- TextInputLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: { labelInputID: "labelInputID", disabled: "disabled", skeleton: "skeleton", labelTemplate: "labelTemplate", textInputTemplate: "textInputTemplate", helperText: "helperText", invalidText: "invalidText", invalid: "invalid", warn: "warn", warnText: "warnText", ariaLabel: "ariaLabel", fluid: "fluid", decorator: "decorator", hideLabel: "hideLabel", inline: "inline", size: "size", enableCounter: "enableCounter", maxCount: "maxCount" }, host: { properties: { "class.cds--text-input-wrapper--inline": "this.isInlineWrapper", "class.cds--text-input-wrapper--readonly": "this.isReadonly", "class.cds--text-input--fluid": "this.fluidClass", "class.cds--text-input--fluid__skeleton": "this.fluidSkeletonClass", "class.cds--form-item": "this.labelClass", "class.cds--text-input-wrapper": "this.textInputWrapper" } }, viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
1036
+ TextInputLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: { labelInputID: "labelInputID", disabled: "disabled", skeleton: "skeleton", labelTemplate: "labelTemplate", textInputTemplate: "textInputTemplate", helperText: "helperText", invalidText: "invalidText", invalid: "invalid", warn: "warn", warnText: "warnText", ariaLabel: "ariaLabel", fluid: "fluid", decorator: "decorator", hideLabel: "hideLabel", inline: "inline", size: "size", enableCounter: "enableCounter", maxCount: "maxCount" }, host: { properties: { "class.cds--text-input-wrapper--inline": "this.isInlineWrapper", "class.cds--text-input-wrapper--readonly": "this.isReadonly", "class.cds--text-input--fluid": "this.fluidClass", "class.cds--text-input--fluid__skeleton": "this.fluidSkeletonClass", "class.cds--form-item": "this.labelClass", "class.cds--text-input-wrapper": "this.textInputWrapper" } }, queries: [{ propertyName: "textInput", first: true, predicate: TextInput, descendants: true }], viewQueries: [{ propertyName: "wrapper", first: true, predicate: ["wrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
974
1037
  <ng-container *ngIf="skeleton">
975
1038
  <span class="cds--label cds--skeleton"></span>
976
1039
  <div class="cds--text-input cds--skeleton"></div>
@@ -1094,7 +1157,7 @@ TextInputLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
1094
1157
  <ng-template *ngIf="isTemplate(warnText)" [ngTemplateOutlet]="warnText"></ng-template>
1095
1158
  </div>
1096
1159
  </ng-template>
1097
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }] });
1160
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }] });
1098
1161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TextInputLabelComponent, decorators: [{
1099
1162
  type: Component,
1100
1163
  args: [{
@@ -1276,6 +1339,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
1276
1339
  }], wrapper: [{
1277
1340
  type: ViewChild,
1278
1341
  args: ["wrapper", { static: false }]
1342
+ }], textInput: [{
1343
+ type: ContentChild,
1344
+ args: [TextInput, { static: false }]
1279
1345
  }], labelClass: [{
1280
1346
  type: HostBinding,
1281
1347
  args: ["class.cds--form-item"]
@@ -1524,7 +1590,7 @@ PasswordInputLabelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
1524
1590
  </div>
1525
1591
  </ng-container>
1526
1592
  </div>
1527
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i3.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }] });
1593
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i3.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }] });
1528
1594
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PasswordInputLabelComponent, decorators: [{
1529
1595
  type: Component,
1530
1596
  args: [{
@@ -1937,7 +2003,7 @@ Label.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0
1937
2003
  <ng-template *ngIf="isTemplate(warnText)" [ngTemplateOutlet]="warnText"></ng-template>
1938
2004
  </div>
1939
2005
  </ng-template>
1940
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: TextareaLabelComponent, selector: "cds-textarea-label, ibm-textarea-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textAreaTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel", "fluid", "hideLabel", "enableCounter", "maxCount", "counterMode", "decorator"] }, { kind: "component", type: TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel", "fluid", "decorator", "hideLabel", "inline", "size", "enableCounter", "maxCount"] }, { kind: "component", type: PasswordInputLabelComponent, selector: "cds-password-label, ibm-password-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "passwordInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel", "hidePasswordLabel", "showPasswordLabel", "fluid", "hideLabel", "inline"], outputs: ["togglePasswordVisibility"] }] });
2006
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: TextareaLabelComponent, selector: "cds-textarea-label, ibm-textarea-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textAreaTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel", "fluid", "hideLabel", "enableCounter", "maxCount", "counterMode", "decorator"] }, { kind: "component", type: TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel", "fluid", "decorator", "hideLabel", "inline", "size", "enableCounter", "maxCount"] }, { kind: "component", type: PasswordInputLabelComponent, selector: "cds-password-label, ibm-password-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "passwordInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel", "hidePasswordLabel", "showPasswordLabel", "fluid", "hideLabel", "inline"], outputs: ["togglePasswordVisibility"] }] });
1941
2007
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Label, decorators: [{
1942
2008
  type: Component,
1943
2009
  args: [{