@seniorsistemas/data-seniorx-core 3.1.0 → 3.2.0

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 (191) hide show
  1. package/core/constants/accordion.const.d.ts +4 -4
  2. package/core/constants/alert.const.d.ts +1 -1
  3. package/core/constants/autocomplete.const.d.ts +2 -2
  4. package/core/constants/badge.const.d.ts +1 -1
  5. package/core/constants/card.const.d.ts +8 -8
  6. package/core/constants/chips.const.d.ts +2 -2
  7. package/core/constants/code-editor.const.d.ts +4 -4
  8. package/core/constants/collapse-link.const.d.ts +2 -2
  9. package/core/constants/color-picker.const.d.ts +2 -2
  10. package/core/constants/combobox.const.d.ts +3 -3
  11. package/core/constants/context-selector.const.d.ts +1 -1
  12. package/core/constants/editable-overlay.const.d.ts +4 -4
  13. package/core/constants/fileupload.const.d.ts +3 -3
  14. package/core/constants/gantt.const.d.ts +1 -1
  15. package/core/constants/help-popover.const.d.ts +2 -2
  16. package/core/constants/hyperlink.const.d.ts +2 -2
  17. package/core/constants/info-sign.const.d.ts +1 -1
  18. package/core/constants/inline-edit.const.d.ts +4 -4
  19. package/core/constants/kanban.const.d.ts +2 -2
  20. package/core/constants/list.const.d.ts +1 -1
  21. package/core/constants/modalc.const.d.ts +1 -1
  22. package/core/constants/navigation-button.const.d.ts +3 -3
  23. package/core/constants/object-card.const.d.ts +2 -2
  24. package/core/constants/picklist.const.d.ts +2 -2
  25. package/core/constants/pin-code-field.const.d.ts +3 -3
  26. package/core/constants/popover.const.d.ts +1 -1
  27. package/core/constants/progressbar.const.d.ts +1 -1
  28. package/core/constants/radio.const.d.ts +2 -2
  29. package/core/constants/rating-scale.const.d.ts +1 -1
  30. package/core/constants/sidebar.const.d.ts +1 -1
  31. package/core/constants/slider.const.d.ts +1 -1
  32. package/core/constants/split-button.const.d.ts +2 -2
  33. package/core/constants/spotlight.const.d.ts +8 -8
  34. package/core/constants/star-rating.const.d.ts +2 -2
  35. package/core/constants/tab.const.d.ts +3 -3
  36. package/core/constants/table.const.d.ts +1 -0
  37. package/core/constants/thumbnails.const.d.ts +4 -4
  38. package/core/constants/token-list.const.d.ts +1 -1
  39. package/core/types/table-column.type.d.ts +4 -0
  40. package/core/types/table-options.type.d.ts +3 -0
  41. package/core/types/table-shared.type.d.ts +1 -1
  42. package/core/types/tile-select.type.d.ts +17 -0
  43. package/esm2022/core/constants/accordion.const.mjs +5 -5
  44. package/esm2022/core/constants/alert.const.mjs +2 -2
  45. package/esm2022/core/constants/autocomplete.const.mjs +3 -3
  46. package/esm2022/core/constants/badge.const.mjs +2 -2
  47. package/esm2022/core/constants/card.const.mjs +9 -9
  48. package/esm2022/core/constants/chips.const.mjs +3 -3
  49. package/esm2022/core/constants/code-editor.const.mjs +5 -5
  50. package/esm2022/core/constants/collapse-link.const.mjs +3 -3
  51. package/esm2022/core/constants/color-picker.const.mjs +3 -3
  52. package/esm2022/core/constants/combobox.const.mjs +7 -4
  53. package/esm2022/core/constants/context-selector.const.mjs +2 -2
  54. package/esm2022/core/constants/editable-overlay.const.mjs +5 -5
  55. package/esm2022/core/constants/fileupload.const.mjs +4 -4
  56. package/esm2022/core/constants/gantt.const.mjs +2 -2
  57. package/esm2022/core/constants/help-popover.const.mjs +3 -3
  58. package/esm2022/core/constants/hyperlink.const.mjs +3 -3
  59. package/esm2022/core/constants/info-sign.const.mjs +2 -2
  60. package/esm2022/core/constants/inline-edit.const.mjs +5 -5
  61. package/esm2022/core/constants/kanban.const.mjs +3 -3
  62. package/esm2022/core/constants/list.const.mjs +2 -2
  63. package/esm2022/core/constants/loading-state.const.mjs +2 -2
  64. package/esm2022/core/constants/modalc.const.mjs +2 -2
  65. package/esm2022/core/constants/navigation-button.const.mjs +4 -4
  66. package/esm2022/core/constants/object-card.const.mjs +3 -3
  67. package/esm2022/core/constants/picklist.const.mjs +3 -3
  68. package/esm2022/core/constants/pin-code-field.const.mjs +4 -4
  69. package/esm2022/core/constants/popover.const.mjs +8 -2
  70. package/esm2022/core/constants/progressbar.const.mjs +2 -2
  71. package/esm2022/core/constants/radio.const.mjs +3 -3
  72. package/esm2022/core/constants/rating-scale.const.mjs +2 -2
  73. package/esm2022/core/constants/sidebar.const.mjs +2 -2
  74. package/esm2022/core/constants/slider.const.mjs +2 -2
  75. package/esm2022/core/constants/split-button.const.mjs +3 -3
  76. package/esm2022/core/constants/spotlight.const.mjs +9 -9
  77. package/esm2022/core/constants/star-rating.const.mjs +3 -3
  78. package/esm2022/core/constants/tab.const.mjs +4 -4
  79. package/esm2022/core/constants/table.const.mjs +4 -3
  80. package/esm2022/core/constants/thumbnails.const.mjs +5 -5
  81. package/esm2022/core/constants/token-list.const.mjs +2 -2
  82. package/esm2022/core/data/fontawesome-v5-solid-icons.data.mjs +2 -2
  83. package/esm2022/core/types/table-column.type.mjs +1 -1
  84. package/esm2022/core/types/table-options.type.mjs +1 -1
  85. package/esm2022/core/types/table-shared.type.mjs +1 -1
  86. package/esm2022/core/types/tile-select.type.mjs +8 -0
  87. package/esm2022/core/utils/combobox.util.mjs +6 -6
  88. package/esm2022/features/accordion/components/accordion-item/accordion-item.component.mjs +3 -3
  89. package/esm2022/features/autocomplete/autocomplete.component.mjs +3 -3
  90. package/esm2022/features/bignumber-input/bignumber-input.component.mjs +1 -1
  91. package/esm2022/features/breadcrumb/breadcrumb.component.mjs +3 -3
  92. package/esm2022/features/button/button.component.mjs +7 -3
  93. package/esm2022/features/card-list/card/card.component.mjs +2 -2
  94. package/esm2022/features/card-list/card-list.component.mjs +7 -3
  95. package/esm2022/features/chat/chat.component.mjs +4 -4
  96. package/esm2022/features/checkbox/checkbox.component.mjs +3 -3
  97. package/esm2022/features/checkbox-list/checkbox-list.component.mjs +3 -3
  98. package/esm2022/features/chips/chips.component.mjs +3 -3
  99. package/esm2022/features/code-editor/code-editor.component.mjs +23 -5
  100. package/esm2022/features/color-picker/color-picker.component.mjs +3 -3
  101. package/esm2022/features/country-phone-picker/country-phone-picker.component.mjs +3 -3
  102. package/esm2022/features/currency/currency.component.mjs +1 -1
  103. package/esm2022/features/editable-overlay/editable-overlay.component.mjs +3 -3
  104. package/esm2022/features/empty-state/empty-state.component.mjs +1 -1
  105. package/esm2022/features/fileupload/fileupload.component.mjs +4 -4
  106. package/esm2022/features/filters/filters.component.mjs +3 -3
  107. package/esm2022/features/help-popover/help-popover.component.mjs +2 -2
  108. package/esm2022/features/hyperlink/hyperlink.component.mjs +3 -3
  109. package/esm2022/features/icon-picker/icon-picker.component.mjs +1 -1
  110. package/esm2022/features/image-cropper/image-cropper.component.mjs +9 -9
  111. package/esm2022/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
  112. package/esm2022/features/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +2 -2
  113. package/esm2022/features/list/list.component.mjs +7 -3
  114. package/esm2022/features/loading-state/loading-state.component.mjs +5 -5
  115. package/esm2022/features/localized-number-input/localized-number-input.component.mjs +4 -4
  116. package/esm2022/features/lookup/lookup.component.mjs +5 -5
  117. package/esm2022/features/mask/mask.component.mjs +4 -4
  118. package/esm2022/features/modal/modal.component.mjs +3 -3
  119. package/esm2022/features/modalc/modalc.component.mjs +3 -3
  120. package/esm2022/features/number-input/number-input.component.mjs +32 -5
  121. package/esm2022/features/object-card/components/object-card-field/object-card-field.component.mjs +1 -1
  122. package/esm2022/features/object-card/components/object-card-main/object-card-main.component.mjs +1 -1
  123. package/esm2022/features/object-card/object-card.component.mjs +2 -2
  124. package/esm2022/features/paginator/paginator.component.mjs +3 -3
  125. package/esm2022/features/panel/panel.component.mjs +6 -6
  126. package/esm2022/features/password-strength/password-strength.component.mjs +6 -6
  127. package/esm2022/features/picklist/picklist.component.mjs +6 -4
  128. package/esm2022/features/pin-code-field/pin-code-field.component.mjs +3 -3
  129. package/esm2022/features/profile-picture-picker/profile-picture-picker.component.mjs +11 -11
  130. package/esm2022/features/rating-scale/rating-scale.component.mjs +3 -3
  131. package/esm2022/features/row-card-list/row-card/row-card.component.mjs +100 -7
  132. package/esm2022/features/row-card-list/row-card-list.component.mjs +7 -3
  133. package/esm2022/features/scaffold/scaffold.component.mjs +3 -3
  134. package/esm2022/features/searchbox/searchbox.component.mjs +4 -4
  135. package/esm2022/features/select-button/select-button.component.mjs +5 -5
  136. package/esm2022/features/sidebar/sidebar.component.mjs +3 -3
  137. package/esm2022/features/slider/slider.component.mjs +3 -3
  138. package/esm2022/features/speech-recognition/speech-recognition.component.mjs +12 -12
  139. package/esm2022/features/spotlight/spotlight.component.mjs +2 -2
  140. package/esm2022/features/star-rating/star-rating.component.mjs +3 -3
  141. package/esm2022/features/switch/switch.component.mjs +4 -4
  142. package/esm2022/features/table/components/table-actions-menu.component.mjs +2 -2
  143. package/esm2022/features/table/components/table-cell-content.component.mjs +16 -10
  144. package/esm2022/features/table/table.component.mjs +46 -16
  145. package/esm2022/features/table/utils/table-visual.util.mjs +25 -7
  146. package/esm2022/features/textarea/textarea.component.mjs +3 -3
  147. package/esm2022/features/textbox/textbox.component.mjs +3 -3
  148. package/esm2022/features/tile-select/tile-select.component.mjs +80 -0
  149. package/esm2022/features/toast/toast.component.mjs +3 -3
  150. package/esm2022/features/tree/components/tree-node-item/tree-node-item.component.mjs +6 -6
  151. package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2 -2
  152. package/esm2022/locales/en.json +4760 -4749
  153. package/esm2022/locales/es-CO.json +4760 -4749
  154. package/esm2022/locales/pt.json +4760 -4749
  155. package/esm2022/providers/features.provider.mjs +3 -1
  156. package/esm2022/public-api.mjs +3 -1
  157. package/features/button/button.component.d.ts +2 -1
  158. package/features/card-list/card-list.component.d.ts +3 -1
  159. package/features/code-editor/code-editor.component.d.ts +2 -1
  160. package/features/help-popover/help-popover.component.d.ts +1 -1
  161. package/features/inline-edit/components/inline-edit-item/inline-edit-item.component.d.ts +4 -4
  162. package/features/kanban/components/kanban-item-dragging/kanban-item-dragging.component.d.ts +2 -2
  163. package/features/list/list.component.d.ts +3 -1
  164. package/features/navigation-button/navigation-button.component.d.ts +3 -3
  165. package/features/number-input/number-input.component.d.ts +7 -1
  166. package/features/panel/panel.component.d.ts +1 -1
  167. package/features/picklist/picklist.component.d.ts +3 -2
  168. package/features/pin-code-field/pin-code-field.component.d.ts +3 -3
  169. package/features/row-card-list/row-card/row-card.component.d.ts +15 -2
  170. package/features/row-card-list/row-card-list.component.d.ts +3 -1
  171. package/features/spotlight/spotlight.component.d.ts +8 -8
  172. package/features/table/components/table-cell-content.component.d.ts +4 -1
  173. package/features/table/table.component.d.ts +9 -2
  174. package/features/table/utils/table-visual.util.d.ts +5 -0
  175. package/features/textarea/textarea.component.d.ts +1 -1
  176. package/features/thumbnails/components/thumbnail-item/thumbnail-item.component.d.ts +3 -3
  177. package/features/thumbnails/components/thumbnail-item-image/thumbnail-item-image.component.d.ts +1 -1
  178. package/features/thumbnails/components/thumbnail-item-video/thumbnail-item-video.component.d.ts +1 -1
  179. package/features/tile-select/tile-select.component.d.ts +21 -0
  180. package/fesm2022/seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-fK3MF8KJ.mjs +4 -0
  181. package/fesm2022/{seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-B7opbaVg.mjs.map → seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-fK3MF8KJ.mjs.map} +1 -1
  182. package/fesm2022/seniorsistemas-data-seniorx-core.mjs +14859 -14534
  183. package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
  184. package/package.json +57 -22
  185. package/public-api.d.ts +3 -0
  186. package/src/locales/en.json +4760 -4749
  187. package/src/locales/es-CO.json +4760 -4749
  188. package/src/locales/pt.json +4760 -4749
  189. package/styles/sdc-global-variables.scss +2 -2
  190. package/styles.css +2 -2
  191. package/fesm2022/seniorsistemas-data-seniorx-core-fontawesome-v5-solid-icons.data-B7opbaVg.mjs +0 -4
@@ -48,7 +48,7 @@ export class LocalizedNumberInputComponent extends InputsComponent {
48
48
  if (this.placeholder) {
49
49
  return resolveTranslatableText(this.translate, this.placeholder);
50
50
  }
51
- return resolveTranslatableText(this.translate, 'platform.datacore.accessibility.localized_number_input');
51
+ return resolveTranslatableText(this.translate, 'platform.datacore.accessibility_localized_number_input');
52
52
  }
53
53
  onNativeInput(event) {
54
54
  const target = event.target;
@@ -97,7 +97,7 @@ export class LocalizedNumberInputComponent extends InputsComponent {
97
97
  useExisting: forwardRef(() => LocalizedNumberInputComponent),
98
98
  multi: true
99
99
  }
100
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"sdc-localized-number-input\">\n @if (labelKey() || infoTooltip) {\n <div class=\"sdc-localized-number-input__label-row\">\n @if (labelKey()) {\n <label [for]=\"identity.id\" class=\"sdc-localized-number-input__label\">\n <span class=\"sdc-localized-number-input__label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n }\n @if (required) {\n <span class=\"sr-only\">\n {{ 'platform.datacore.accessibility.required_field' | translate }}\n </span>\n }\n </span>\n </label>\n }\n </div>\n }\n\n <input\n class=\"sdc-localized-number-input__input\"\n (input)=\"onNativeInput($event)\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [id]=\"identity.id\"\n [name]=\"identity.name\"\n [ngClass]=\"getInvalidClass()\"\n [class.sdc-localized-number-input__input--invalid]=\"invalid || hasFormatError\"\n [ngStyle]=\"getInputStyle()\"\n [placeholder]=\"placeholder ? (placeholder | translate) : ''\"\n [required]=\"required\"\n [value]=\"displayValue\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"required ? 'true' : null\"\n [attr.aria-invalid]=\"invalid || hasFormatError ? 'true' : null\"\n [attr.aria-describedby]=\"messageKey() ? identity.id + '-error' : null\"\n />\n\n @if (messageKey() || hasFormatError) {\n <small\n [id]=\"identity.id + '-error'\"\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{\n hasFormatError\n ? ('platform.datacore.localized_number_input.errors.invalid_number' | translate)\n : (messageKey() | translate)\n }}\n </small>\n }\n </div>\n", styles: [":host{display:block;min-width:0;max-width:100%}.sdc-localized-number-input .sdc-localized-number-input__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-localized-number-input .sdc-localized-number-input__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py);min-width:0}.sdc-localized-number-input .sdc-localized-number-input__label-text{display:inline-flex;align-items:center}.sdc-localized-number-input .required-field{margin-left:var(--sdc-form-required-ml);color:var(--sdc-form-required-color, var(--sdc-error-color, #d98888));font-weight:400}.sdc-localized-number-input .sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sdc-localized-number-input .sdc-localized-number-input__input{width:100%;min-width:0;box-sizing:border-box!important;border:1px solid var(--sdc-formfield-default-border)!important;border-radius:var(--sdc-formfield-border-radius)!important;min-height:var(--sdc-formfield-default-height)!important;height:var(--sdc-formfield-default-height)!important;line-height:var(--sdc-formfield-default-line-height)!important;padding:0 var(--sdc-form-input-padding-x)!important;background-color:var(--sdc-formfield-default-bg)!important;font-family:inherit!important;font-size:inherit!important;font-weight:inherit!important}.sdc-localized-number-input .sdc-localized-number-input__input:focus,.sdc-localized-number-input .sdc-localized-number-input__input:focus-visible{outline:none;border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))!important;box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))!important}.sdc-localized-number-input .sdc-localized-number-input__input--invalid,.sdc-localized-number-input .sdc-localized-number-input__input[aria-invalid=true]{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888))!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
100
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"sdc-localized-number-input\">\n @if (labelKey() || infoTooltip) {\n <div class=\"sdc-localized-number-input__label-row\">\n @if (labelKey()) {\n <label [for]=\"identity.id\" class=\"sdc-localized-number-input__label\">\n <span class=\"sdc-localized-number-input__label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n }\n @if (required) {\n <span class=\"sr-only\">\n {{ 'platform.datacore.accessibility_required_field' | translate }}\n </span>\n }\n </span>\n </label>\n }\n </div>\n }\n\n <input\n class=\"sdc-localized-number-input__input\"\n (input)=\"onNativeInput($event)\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [id]=\"identity.id\"\n [name]=\"identity.name\"\n [ngClass]=\"getInvalidClass()\"\n [class.sdc-localized-number-input__input--invalid]=\"invalid || hasFormatError\"\n [ngStyle]=\"getInputStyle()\"\n [placeholder]=\"placeholder ? (placeholder | translate) : ''\"\n [required]=\"required\"\n [value]=\"displayValue\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"required ? 'true' : null\"\n [attr.aria-invalid]=\"invalid || hasFormatError ? 'true' : null\"\n [attr.aria-describedby]=\"messageKey() ? identity.id + '-error' : null\"\n />\n\n @if (messageKey() || hasFormatError) {\n <small\n [id]=\"identity.id + '-error'\"\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{\n hasFormatError\n ? ('platform.datacore.localized_number_input_errors_invalid_number' | translate)\n : (messageKey() | translate)\n }}\n </small>\n }\n </div>\n", styles: [":host{display:block;min-width:0;max-width:100%}.sdc-localized-number-input .sdc-localized-number-input__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-localized-number-input .sdc-localized-number-input__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py);min-width:0}.sdc-localized-number-input .sdc-localized-number-input__label-text{display:inline-flex;align-items:center}.sdc-localized-number-input .required-field{margin-left:var(--sdc-form-required-ml);color:var(--sdc-form-required-color, var(--sdc-error-color, #d98888));font-weight:400}.sdc-localized-number-input .sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sdc-localized-number-input .sdc-localized-number-input__input{width:100%;min-width:0;box-sizing:border-box!important;border:1px solid var(--sdc-formfield-default-border)!important;border-radius:var(--sdc-formfield-border-radius)!important;min-height:var(--sdc-formfield-default-height)!important;height:var(--sdc-formfield-default-height)!important;line-height:var(--sdc-formfield-default-line-height)!important;padding:0 var(--sdc-form-input-padding-x)!important;background-color:var(--sdc-formfield-default-bg)!important;font-family:inherit!important;font-size:inherit!important;font-weight:inherit!important}.sdc-localized-number-input .sdc-localized-number-input__input:focus,.sdc-localized-number-input .sdc-localized-number-input__input:focus-visible{outline:none;border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))!important;box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))!important}.sdc-localized-number-input .sdc-localized-number-input__input--invalid,.sdc-localized-number-input .sdc-localized-number-input__input[aria-invalid=true]{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888))!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
101
101
  }
102
102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalizedNumberInputComponent, decorators: [{
103
103
  type: Component,
@@ -107,7 +107,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
107
107
  useExisting: forwardRef(() => LocalizedNumberInputComponent),
108
108
  multi: true
109
109
  }
110
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-localized-number-input\">\n @if (labelKey() || infoTooltip) {\n <div class=\"sdc-localized-number-input__label-row\">\n @if (labelKey()) {\n <label [for]=\"identity.id\" class=\"sdc-localized-number-input__label\">\n <span class=\"sdc-localized-number-input__label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n }\n @if (required) {\n <span class=\"sr-only\">\n {{ 'platform.datacore.accessibility.required_field' | translate }}\n </span>\n }\n </span>\n </label>\n }\n </div>\n }\n\n <input\n class=\"sdc-localized-number-input__input\"\n (input)=\"onNativeInput($event)\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [id]=\"identity.id\"\n [name]=\"identity.name\"\n [ngClass]=\"getInvalidClass()\"\n [class.sdc-localized-number-input__input--invalid]=\"invalid || hasFormatError\"\n [ngStyle]=\"getInputStyle()\"\n [placeholder]=\"placeholder ? (placeholder | translate) : ''\"\n [required]=\"required\"\n [value]=\"displayValue\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"required ? 'true' : null\"\n [attr.aria-invalid]=\"invalid || hasFormatError ? 'true' : null\"\n [attr.aria-describedby]=\"messageKey() ? identity.id + '-error' : null\"\n />\n\n @if (messageKey() || hasFormatError) {\n <small\n [id]=\"identity.id + '-error'\"\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{\n hasFormatError\n ? ('platform.datacore.localized_number_input.errors.invalid_number' | translate)\n : (messageKey() | translate)\n }}\n </small>\n }\n </div>\n", styles: [":host{display:block;min-width:0;max-width:100%}.sdc-localized-number-input .sdc-localized-number-input__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-localized-number-input .sdc-localized-number-input__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py);min-width:0}.sdc-localized-number-input .sdc-localized-number-input__label-text{display:inline-flex;align-items:center}.sdc-localized-number-input .required-field{margin-left:var(--sdc-form-required-ml);color:var(--sdc-form-required-color, var(--sdc-error-color, #d98888));font-weight:400}.sdc-localized-number-input .sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sdc-localized-number-input .sdc-localized-number-input__input{width:100%;min-width:0;box-sizing:border-box!important;border:1px solid var(--sdc-formfield-default-border)!important;border-radius:var(--sdc-formfield-border-radius)!important;min-height:var(--sdc-formfield-default-height)!important;height:var(--sdc-formfield-default-height)!important;line-height:var(--sdc-formfield-default-line-height)!important;padding:0 var(--sdc-form-input-padding-x)!important;background-color:var(--sdc-formfield-default-bg)!important;font-family:inherit!important;font-size:inherit!important;font-weight:inherit!important}.sdc-localized-number-input .sdc-localized-number-input__input:focus,.sdc-localized-number-input .sdc-localized-number-input__input:focus-visible{outline:none;border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))!important;box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))!important}.sdc-localized-number-input .sdc-localized-number-input__input--invalid,.sdc-localized-number-input .sdc-localized-number-input__input[aria-invalid=true]{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888))!important}\n"] }]
110
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-localized-number-input\">\n @if (labelKey() || infoTooltip) {\n <div class=\"sdc-localized-number-input__label-row\">\n @if (labelKey()) {\n <label [for]=\"identity.id\" class=\"sdc-localized-number-input__label\">\n <span class=\"sdc-localized-number-input__label-text\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"required-field\" aria-hidden=\"true\">*</span>\n }\n @if (required) {\n <span class=\"sr-only\">\n {{ 'platform.datacore.accessibility_required_field' | translate }}\n </span>\n }\n </span>\n </label>\n }\n </div>\n }\n\n <input\n class=\"sdc-localized-number-input__input\"\n (input)=\"onNativeInput($event)\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [id]=\"identity.id\"\n [name]=\"identity.name\"\n [ngClass]=\"getInvalidClass()\"\n [class.sdc-localized-number-input__input--invalid]=\"invalid || hasFormatError\"\n [ngStyle]=\"getInputStyle()\"\n [placeholder]=\"placeholder ? (placeholder | translate) : ''\"\n [required]=\"required\"\n [value]=\"displayValue\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"required ? 'true' : null\"\n [attr.aria-invalid]=\"invalid || hasFormatError ? 'true' : null\"\n [attr.aria-describedby]=\"messageKey() ? identity.id + '-error' : null\"\n />\n\n @if (messageKey() || hasFormatError) {\n <small\n [id]=\"identity.id + '-error'\"\n [ngClass]=\"getInvalidMessageClass()\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n {{\n hasFormatError\n ? ('platform.datacore.localized_number_input_errors_invalid_number' | translate)\n : (messageKey() | translate)\n }}\n </small>\n }\n </div>\n", styles: [":host{display:block;min-width:0;max-width:100%}.sdc-localized-number-input .sdc-localized-number-input__label-row{display:flex;align-items:center;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-localized-number-input .sdc-localized-number-input__label{display:inline-flex;align-items:center;margin-bottom:0;line-height:1;padding-top:var(--sdc-form-label-py);padding-bottom:var(--sdc-form-label-py);min-width:0}.sdc-localized-number-input .sdc-localized-number-input__label-text{display:inline-flex;align-items:center}.sdc-localized-number-input .required-field{margin-left:var(--sdc-form-required-ml);color:var(--sdc-form-required-color, var(--sdc-error-color, #d98888));font-weight:400}.sdc-localized-number-input .sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sdc-localized-number-input .sdc-localized-number-input__input{width:100%;min-width:0;box-sizing:border-box!important;border:1px solid var(--sdc-formfield-default-border)!important;border-radius:var(--sdc-formfield-border-radius)!important;min-height:var(--sdc-formfield-default-height)!important;height:var(--sdc-formfield-default-height)!important;line-height:var(--sdc-formfield-default-line-height)!important;padding:0 var(--sdc-form-input-padding-x)!important;background-color:var(--sdc-formfield-default-bg)!important;font-family:inherit!important;font-size:inherit!important;font-weight:inherit!important}.sdc-localized-number-input .sdc-localized-number-input__input:focus,.sdc-localized-number-input .sdc-localized-number-input__input:focus-visible{outline:none;border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))!important;box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))!important}.sdc-localized-number-input .sdc-localized-number-input__input--invalid,.sdc-localized-number-input .sdc-localized-number-input__input[aria-invalid=true]{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888))!important}\n"] }]
111
111
  }], propDecorators: { decimalSeparator: [{
112
112
  type: Input
113
113
  }], thousandsSeparator: [{
@@ -123,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
123
123
  }], infoTooltipEvent: [{
124
124
  type: Input
125
125
  }] } });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemVkLW51bWJlci1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2xvY2FsaXplZC1udW1iZXItaW5wdXQvbG9jYWxpemVkLW51bWJlci1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2xvY2FsaXplZC1udW1iZXItaW5wdXQvbG9jYWxpemVkLW51bWJlci1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQUVqRSxNQUFNLCtCQUErQixHQUFHLEdBQUcsQ0FBQztBQUM1QyxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQztBQWtCM0MsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGVBQXVCO0lBQ3ZELFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU3QyxnQkFBZ0IsQ0FBVTtJ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c0JBQTNCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiwgZm9yd2FyZFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgTE9DQUxJWkVEX05VTUJFUl9JTlBVVF9ERUZBVUxUX1BSRUNJU0lPTiB9IGZyb20gJy4uLy4uL2NvcmUvY29uc3RhbnRzL2xvY2FsaXplZC1udW1iZXItaW5wdXQuY29uc3QnO1xuaW1wb3J0IHsgSW5wdXRzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS9kaXJlY3RpdmVzL2lucHV0cy5kaXJlY3RpdmUnO1xuaW1wb3J0IHR5cGUgeyBUb29sdGlwRXZlbnQsIFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvdG9vbHRpcC50eXBlJztcbmltcG9ydCB7IHJlc29sdmVUcmFuc2xhdGFibGVUZXh0IH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pMThuLnV0aWwnO1xuaW1wb3J0IHsgZ2V0TnVtZXJpY0xvY2FsZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvbnVtZXJpYy51dGlsJztcblxuY29uc3QgTE9DQUxJWkVEX05VTUJFUl9ERUNJTUFMX1NBTVBMRSA9IDEuMTtcbmNvbnN0IExPQ0FMSVpFRF9OVU1CRVJfR1JPVVBfU0FNUExFID0gMTAwMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLWxvY2FsaXplZC1udW1iZXItaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvY2FsaXplZC1udW1iZXItaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbG9jYWxpemVkLW51bWJlci1pbnB1dC5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTG9jYWxpemVkTnVtYmVySW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZFxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZWROdW1iZXJJbnB1dENvbXBvbmVudCBleHRlbmRzIElucHV0c0NvbXBvbmVudDxzdHJpbmc+IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgQElucHV0KCkgZGVjaW1hbFNlcGFyYXRvcj86IHN0cmluZztcbiAgQElucHV0KCkgdGhvdXNhbmRzU2VwYXJhdG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBwcmVjaXNpb24gPSBMT0NBTElaRURfTlVNQkVSX0lOUFVUX0RFRkFVTFRfUFJFQ0lTSU9OO1xuICBASW5wdXQoKSBhbGxvd05lZ2F0aXZlID0gdHJ1ZTtcbiAgQElucHV0KCkgaW5mb1Rvb2x0aXA6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcFBvc2l0aW9uOiBUb29sdGlwUG9zaXRpb24gPSAncmlnaHQnO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcEV2ZW50OiBUb29sdGlwRXZlbnQgPSAnYm90aCc7XG5cbiAgZGlzcGxheVZhbHVlID0gJyc7XG4gIGhhc0Zvcm1hdEVycm9yID0gZmFsc2U7XG5cbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IFN0cmluZyh2YWx1ZSA/PyAnJyk7XG4gICAgdGhpcy5oYXNGb3JtYXRFcnJvciA9ICF0aGlzLmlzRW1wdHkodGhpcy5kaXNwbGF5VmFsdWUpICYmICF0aGlzLmlzVmFsaWRMb2NhbGl6ZWROdW1iZXIodGhpcy5kaXNwbGF5VmFsdWUpO1xuICB9XG5cbiAgZ2V0IHJlc29sdmVkRGVjaW1hbFNlcGFyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgPz8gbmV3IEludGwuTnVtYmVyRm9ybWF0KGdldE51bWVyaWNMb2NhbGUodGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcpKVxuICAgICAgLmZvcm1hdFRvUGFydHMoTE9DQUxJWkVEX05VTUJFUl9ERUNJTUFMX1NBTVBMRSlcbiAgICAgIC5maW5kKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICdkZWNpbWFsJylcbiAgICAgID8udmFsdWVcbiAgICAgID8/ICcsJztcbiAgfVxuXG4gIGdldCByZXNvbHZlZFRob3VzYW5kc1NlcGFyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRob3VzYW5kc1NlcGFyYXRvciA/PyBuZXcgSW50bC5OdW1iZXJGb3JtYXQoZ2V0TnVtZXJpY0xvY2FsZSh0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZykpXG4gICAgICAuZm9ybWF0VG9QYXJ0cyhMT0NBTElaRURfTlVNQkVSX0dST1VQX1NBTVBMRSlcbiAgICAgIC5maW5kKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICdncm91cCcpXG4gICAgICA/LnZhbHVlXG4gICAgICA/PyAnLic7XG4gIH1cblxuICBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubGFiZWxLZXkoKSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLmxhYmVsS2V5KCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQodGhpcy50cmFuc2xhdGUsIHRoaXMucGxhY2Vob2xkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvbHZlVHJhbnNsYXRhYmxlVGV4dCh0aGlzLnRyYW5zbGF0ZSwgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkubG9jYWxpemVkX251bWJlcl9pbnB1dCcpO1xuICB9XG5cbiAgb25OYXRpdmVJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuaGFzRm9ybWF0RXJyb3IgPSAhdGhpcy5pc0VtcHR5KHRhcmdldC52YWx1ZSkgJiYgIXRoaXMuaXNWYWxpZExvY2FsaXplZE51bWJlcih0YXJnZXQudmFsdWUpO1xuICAgIHRoaXMuaW52YWxpZCA9IHRoaXMuaW52YWxpZCB8fCB0aGlzLmhhc0Zvcm1hdEVycm9yO1xuICAgIHRoaXMuY29tbWl0VmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc0Zvcm1hdEVycm9yICYmICF0aGlzLmlzRW1wdHkodGhpcy5kaXNwbGF5VmFsdWUpKSB7XG4gICAgICBjb25zdCBudW1lcmljVmFsdWUgPSB0aGlzLnBhcnNlTG9jYWxpemVkTnVtYmVyKHRoaXMuZGlzcGxheVZhbHVlKTtcbiAgICAgIGlmIChudW1lcmljVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoZ2V0TnVtZXJpY0xvY2FsZSh0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyksIHtcbiAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAsXG4gICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLnByZWNpc2lvbixcbiAgICAgICAgICB1c2VHcm91cGluZzogdHJ1ZVxuICAgICAgICB9KS5mb3JtYXQobnVtZXJpY1ZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZGlzcGxheVZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRMb2NhbGl6ZWROdW1iZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeJHt0aGlzLmFsbG93TmVnYXRpdmUgPyAnLT8nIDogJyd9KD86XFxcXGR7MSwzfSg/OlxcXFwke3RoaXMucmVzb2x2ZWRUaG91c2FuZHNTZXBhcmF0b3J9XFxcXGR7M30pKnxcXFxcZCspKD86XFxcXCR7dGhpcy5yZXNvbHZlZERlY2ltYWxTZXBhcmF0b3J9XFxcXGR7MSwke3RoaXMucHJlY2lzaW9ufX0pPyRgXG4gICAgKTtcblxuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlLnRyaW0oKSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTG9jYWxpemVkTnVtYmVyKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdmFsdWVcbiAgICAgIC5zcGxpdCh0aGlzLnJlc29sdmVkVGhvdXNhbmRzU2VwYXJhdG9yKVxuICAgICAgLmpvaW4oJycpXG4gICAgICAucmVwbGFjZSh0aGlzLnJlc29sdmVkRGVjaW1hbFNlcGFyYXRvciwgJy4nKTtcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobm9ybWFsaXplZCk7XG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbXB0eSh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhU3RyaW5nKHZhbHVlID8/ICcnKS50cmltKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZGMtbG9jYWxpemVkLW51bWJlci1pbnB1dFwiPlxuICBAaWYgKGxhYmVsS2V5KCkgfHwgaW5mb1Rvb2x0aXApIHtcbiAgICA8ZGl2IGNsYXNzPVwic2RjLWxvY2FsaXplZC1udW1iZXItaW5wdXRfX2xhYmVsLXJvd1wiPlxuICAgICAgQGlmIChsYWJlbEtleSgpKSB7XG4gICAgICAgIDxsYWJlbCBbZm9yXT1cImlkZW50aXR5LmlkXCIgY2xhc3M9XCJzZGMtbG9jYWxpemVkLW51bWJlci1pbnB1dF9fbGFiZWxcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1sb2NhbGl6ZWQtbnVtYmVyLWlucHV0X19sYWJlbC10ZXh0XCI+XG4gICAgICAgICAgICB7eyBsYWJlbEtleSgpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWQtZmllbGRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uZGF0YWNvcmUuYWNjZXNzaWJpbGl0eS5yZXF1aXJlZF9maWVsZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxpbnB1dFxuICAgIGNsYXNzPVwic2RjLWxvY2FsaXplZC1udW1iZXItaW5wdXRfX2lucHV0XCJcbiAgICAoaW5wdXQpPVwib25OYXRpdmVJbnB1dCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbaWRdPVwiaWRlbnRpdHkuaWRcIlxuICAgIFtuYW1lXT1cImlkZW50aXR5Lm5hbWVcIlxuICAgIFtuZ0NsYXNzXT1cImdldEludmFsaWRDbGFzcygpXCJcbiAgICBbY2xhc3Muc2RjLWxvY2FsaXplZC1udW1iZXItaW5wdXRfX2lucHV0LS1pbnZhbGlkXT1cImludmFsaWQgfHwgaGFzRm9ybWF0RXJyb3JcIlxuICAgIFtuZ1N0eWxlXT1cImdldElucHV0U3R5bGUoKVwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyID8gKHBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFt2YWx1ZV09XCJkaXNwbGF5VmFsdWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWQgPyAndHJ1ZScgOiBudWxsXCJcbiAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaW52YWxpZCB8fCBoYXNGb3JtYXRFcnJvciA/ICd0cnVlJyA6IG51bGxcIlxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwibWVzc2FnZUtleSgpID8gaWRlbnRpdHkuaWQgKyAnLWVycm9yJyA6IG51bGxcIlxuICAgIC8+XG5cbiAgICBAaWYgKG1lc3NhZ2VLZXkoKSB8fCBoYXNGb3JtYXRFcnJvcikge1xuICAgICAgPHNtYWxsXG4gICAgICAgIFtpZF09XCJpZGVudGl0eS5pZCArICctZXJyb3InXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SW52YWxpZE1lc3NhZ2VDbGFzcygpXCJcbiAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgPlxuICAgICAgICB7e1xuICAgICAgICBoYXNGb3JtYXRFcnJvclxuICAgICAgICA/ICgncGxhdGZvcm0uZGF0YWNvcmUubG9jYWxpemVkX251bWJlcl9pbnB1dC5lcnJvcnMuaW52YWxpZF9udW1iZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICA6IChtZXNzYWdlS2V5KCkgfCB0cmFuc2xhdGUpXG4gICAgICAgIH19XG4gICAgICA8L3NtYWxsPlxuICAgIH1cbiAgPC9kaXY+XG4iXX0=
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemVkLW51bWJlci1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2xvY2FsaXplZC1udW1iZXItaW5wdXQvbG9jYWxpemVkLW51bWJlci1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2xvY2FsaXplZC1udW1iZXItaW5wdXQvbG9jYWxpemVkLW51bWJlci1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQUVqRSxNQUFNLCtCQUErQixHQUFHLEdBQUcsQ0FBQztBQUM1QyxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQztBQWtCM0MsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGVBQXVCO0lBQ3ZELFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU3QyxnQkFBZ0IsQ0FBVTtJ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c0JBQTNCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiwgZm9yd2FyZFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgTE9DQUxJWkVEX05VTUJFUl9JTlBVVF9ERUZBVUxUX1BSRUNJU0lPTiB9IGZyb20gJy4uLy4uL2NvcmUvY29uc3RhbnRzL2xvY2FsaXplZC1udW1iZXItaW5wdXQuY29uc3QnO1xuaW1wb3J0IHsgSW5wdXRzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS9kaXJlY3RpdmVzL2lucHV0cy5kaXJlY3RpdmUnO1xuaW1wb3J0IHR5cGUgeyBUb29sdGlwRXZlbnQsIFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvdG9vbHRpcC50eXBlJztcbmltcG9ydCB7IHJlc29sdmVUcmFuc2xhdGFibGVUZXh0IH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pMThuLnV0aWwnO1xuaW1wb3J0IHsgZ2V0TnVtZXJpY0xvY2FsZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvbnVtZXJpYy51dGlsJztcblxuY29uc3QgTE9DQUxJWkVEX05VTUJFUl9ERUNJTUFMX1NBTVBMRSA9IDEuMTtcbmNvbnN0IExPQ0FMSVpFRF9OVU1CRVJfR1JPVVBfU0FNUExFID0gMTAwMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLWxvY2FsaXplZC1udW1iZXItaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvY2FsaXplZC1udW1iZXItaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbG9jYWxpemVkLW51bWJlci1pbnB1dC5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTG9jYWxpemVkTnVtYmVySW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZFxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZWROdW1iZXJJbnB1dENvbXBvbmVudCBleHRlbmRzIElucHV0c0NvbXBvbmVudDxzdHJpbmc+IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgQElucHV0KCkgZGVjaW1hbFNlcGFyYXRvcj86IHN0cmluZztcbiAgQElucHV0KCkgdGhvdXNhbmRzU2VwYXJhdG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBwcmVjaXNpb24gPSBMT0NBTElaRURfTlVNQkVSX0lOUFVUX0RFRkFVTFRfUFJFQ0lTSU9OO1xuICBASW5wdXQoKSBhbGxvd05lZ2F0aXZlID0gdHJ1ZTtcbiAgQElucHV0KCkgaW5mb1Rvb2x0aXA6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcFBvc2l0aW9uOiBUb29sdGlwUG9zaXRpb24gPSAncmlnaHQnO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcEV2ZW50OiBUb29sdGlwRXZlbnQgPSAnYm90aCc7XG5cbiAgZGlzcGxheVZhbHVlID0gJyc7XG4gIGhhc0Zvcm1hdEVycm9yID0gZmFsc2U7XG5cbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IFN0cmluZyh2YWx1ZSA/PyAnJyk7XG4gICAgdGhpcy5oYXNGb3JtYXRFcnJvciA9ICF0aGlzLmlzRW1wdHkodGhpcy5kaXNwbGF5VmFsdWUpICYmICF0aGlzLmlzVmFsaWRMb2NhbGl6ZWROdW1iZXIodGhpcy5kaXNwbGF5VmFsdWUpO1xuICB9XG5cbiAgZ2V0IHJlc29sdmVkRGVjaW1hbFNlcGFyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgPz8gbmV3IEludGwuTnVtYmVyRm9ybWF0KGdldE51bWVyaWNMb2NhbGUodGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcpKVxuICAgICAgLmZvcm1hdFRvUGFydHMoTE9DQUxJWkVEX05VTUJFUl9ERUNJTUFMX1NBTVBMRSlcbiAgICAgIC5maW5kKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICdkZWNpbWFsJylcbiAgICAgID8udmFsdWVcbiAgICAgID8/ICcsJztcbiAgfVxuXG4gIGdldCByZXNvbHZlZFRob3VzYW5kc1NlcGFyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRob3VzYW5kc1NlcGFyYXRvciA/PyBuZXcgSW50bC5OdW1iZXJGb3JtYXQoZ2V0TnVtZXJpY0xvY2FsZSh0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZykpXG4gICAgICAuZm9ybWF0VG9QYXJ0cyhMT0NBTElaRURfTlVNQkVSX0dST1VQX1NBTVBMRSlcbiAgICAgIC5maW5kKChwYXJ0KSA9PiBwYXJ0LnR5cGUgPT09ICdncm91cCcpXG4gICAgICA/LnZhbHVlXG4gICAgICA/PyAnLic7XG4gIH1cblxuICBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubGFiZWxLZXkoKSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLmxhYmVsS2V5KCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQodGhpcy50cmFuc2xhdGUsIHRoaXMucGxhY2Vob2xkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiByZXNvbHZlVHJhbnNsYXRhYmxlVGV4dCh0aGlzLnRyYW5zbGF0ZSwgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHlfbG9jYWxpemVkX251bWJlcl9pbnB1dCcpO1xuICB9XG5cbiAgb25OYXRpdmVJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuaGFzRm9ybWF0RXJyb3IgPSAhdGhpcy5pc0VtcHR5KHRhcmdldC52YWx1ZSkgJiYgIXRoaXMuaXNWYWxpZExvY2FsaXplZE51bWJlcih0YXJnZXQudmFsdWUpO1xuICAgIHRoaXMuaW52YWxpZCA9IHRoaXMuaW52YWxpZCB8fCB0aGlzLmhhc0Zvcm1hdEVycm9yO1xuICAgIHRoaXMuY29tbWl0VmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc0Zvcm1hdEVycm9yICYmICF0aGlzLmlzRW1wdHkodGhpcy5kaXNwbGF5VmFsdWUpKSB7XG4gICAgICBjb25zdCBudW1lcmljVmFsdWUgPSB0aGlzLnBhcnNlTG9jYWxpemVkTnVtYmVyKHRoaXMuZGlzcGxheVZhbHVlKTtcbiAgICAgIGlmIChudW1lcmljVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoZ2V0TnVtZXJpY0xvY2FsZSh0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyksIHtcbiAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAsXG4gICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLnByZWNpc2lvbixcbiAgICAgICAgICB1c2VHcm91cGluZzogdHJ1ZVxuICAgICAgICB9KS5mb3JtYXQobnVtZXJpY1ZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZGlzcGxheVZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRMb2NhbGl6ZWROdW1iZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeJHt0aGlzLmFsbG93TmVnYXRpdmUgPyAnLT8nIDogJyd9KD86XFxcXGR7MSwzfSg/OlxcXFwke3RoaXMucmVzb2x2ZWRUaG91c2FuZHNTZXBhcmF0b3J9XFxcXGR7M30pKnxcXFxcZCspKD86XFxcXCR7dGhpcy5yZXNvbHZlZERlY2ltYWxTZXBhcmF0b3J9XFxcXGR7MSwke3RoaXMucHJlY2lzaW9ufX0pPyRgXG4gICAgKTtcblxuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlLnRyaW0oKSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTG9jYWxpemVkTnVtYmVyKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdmFsdWVcbiAgICAgIC5zcGxpdCh0aGlzLnJlc29sdmVkVGhvdXNhbmRzU2VwYXJhdG9yKVxuICAgICAgLmpvaW4oJycpXG4gICAgICAucmVwbGFjZSh0aGlzLnJlc29sdmVkRGVjaW1hbFNlcGFyYXRvciwgJy4nKTtcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobm9ybWFsaXplZCk7XG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbXB0eSh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhU3RyaW5nKHZhbHVlID8/ICcnKS50cmltKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZGMtbG9jYWxpemVkLW51bWJlci1pbnB1dFwiPlxuICBAaWYgKGxhYmVsS2V5KCkgfHwgaW5mb1Rvb2x0aXApIHtcbiAgICA8ZGl2IGNsYXNzPVwic2RjLWxvY2FsaXplZC1udW1iZXItaW5wdXRfX2xhYmVsLXJvd1wiPlxuICAgICAgQGlmIChsYWJlbEtleSgpKSB7XG4gICAgICAgIDxsYWJlbCBbZm9yXT1cImlkZW50aXR5LmlkXCIgY2xhc3M9XCJzZGMtbG9jYWxpemVkLW51bWJlci1pbnB1dF9fbGFiZWxcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1sb2NhbGl6ZWQtbnVtYmVyLWlucHV0X19sYWJlbC10ZXh0XCI+XG4gICAgICAgICAgICB7eyBsYWJlbEtleSgpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWQtZmllbGRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj4qPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uZGF0YWNvcmUuYWNjZXNzaWJpbGl0eV9yZXF1aXJlZF9maWVsZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxpbnB1dFxuICAgIGNsYXNzPVwic2RjLWxvY2FsaXplZC1udW1iZXItaW5wdXRfX2lucHV0XCJcbiAgICAoaW5wdXQpPVwib25OYXRpdmVJbnB1dCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbaWRdPVwiaWRlbnRpdHkuaWRcIlxuICAgIFtuYW1lXT1cImlkZW50aXR5Lm5hbWVcIlxuICAgIFtuZ0NsYXNzXT1cImdldEludmFsaWRDbGFzcygpXCJcbiAgICBbY2xhc3Muc2RjLWxvY2FsaXplZC1udW1iZXItaW5wdXRfX2lucHV0LS1pbnZhbGlkXT1cImludmFsaWQgfHwgaGFzRm9ybWF0RXJyb3JcIlxuICAgIFtuZ1N0eWxlXT1cImdldElucHV0U3R5bGUoKVwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyID8gKHBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFt2YWx1ZV09XCJkaXNwbGF5VmFsdWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWQgPyAndHJ1ZScgOiBudWxsXCJcbiAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaW52YWxpZCB8fCBoYXNGb3JtYXRFcnJvciA/ICd0cnVlJyA6IG51bGxcIlxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwibWVzc2FnZUtleSgpID8gaWRlbnRpdHkuaWQgKyAnLWVycm9yJyA6IG51bGxcIlxuICAgIC8+XG5cbiAgICBAaWYgKG1lc3NhZ2VLZXkoKSB8fCBoYXNGb3JtYXRFcnJvcikge1xuICAgICAgPHNtYWxsXG4gICAgICAgIFtpZF09XCJpZGVudGl0eS5pZCArICctZXJyb3InXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SW52YWxpZE1lc3NhZ2VDbGFzcygpXCJcbiAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgPlxuICAgICAgICB7e1xuICAgICAgICBoYXNGb3JtYXRFcnJvclxuICAgICAgICA/ICgncGxhdGZvcm0uZGF0YWNvcmUubG9jYWxpemVkX251bWJlcl9pbnB1dF9lcnJvcnNfaW52YWxpZF9udW1iZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICA6IChtZXNzYWdlS2V5KCkgfCB0cmFuc2xhdGUpXG4gICAgICAgIH19XG4gICAgICA8L3NtYWxsPlxuICAgIH1cbiAgPC9kaXY+XG4iXX0=
@@ -89,7 +89,7 @@ export class LookupComponent extends InputsComponent {
89
89
  }
90
90
  const checkboxColumn = {
91
91
  field: this.config.dataKey,
92
- header: 'platform.datacore.lookup.select_column',
92
+ header: 'platform.datacore.lookup_select_column',
93
93
  type: 'checkbox-selection',
94
94
  sortable: false,
95
95
  align: 'center'
@@ -105,7 +105,7 @@ export class LookupComponent extends InputsComponent {
105
105
  return [
106
106
  {
107
107
  id: `${this.componentId}-confirm-selection`,
108
- label: 'platform.datacore.lookup.confirm_selection',
108
+ label: 'platform.datacore.lookup_confirm_selection',
109
109
  severity: 'primary',
110
110
  disabled: !this.hasDialogSelection(),
111
111
  action: () => this.confirmMultipleSelection()
@@ -303,7 +303,7 @@ export class LookupComponent extends InputsComponent {
303
303
  useExisting: forwardRef(() => LookupComponent),
304
304
  multi: true
305
305
  }
306
- ], viewQueries: [{ propertyName: "containerDiv", first: true, predicate: ["containerDiv"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sdc-lookup\" [ngStyle]=\"getInputStyle()\">\n @if (labelKey()) {\n <label class=\"sdc-lookup__label\" [for]=\"componentId\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"sdc-lookup__required\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n\n <div\n #containerDiv\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"sdc-lookup__control\"\n [class.sdc-lookup__control--invalid]=\"invalid\"\n [class.sdc-lookup__control--disabled]=\"disabled\"\n >\n <input\n [id]=\"componentId\"\n class=\"sdc-lookup__input\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-expanded=\"false\"\n [attr.aria-expanded]=\"panelOpen() ? 'true' : 'false'\"\n aria-controls=\"sdc-lookup-listbox\"\n [attr.aria-controls]=\"componentId + '-listbox'\"\n [attr.aria-label]=\"placeholder || (config?.placeholder ?? '') | translate\"\n [placeholder]=\"(config?.placeholder ?? placeholder) | translate\"\n [disabled]=\"disabled\"\n [value]=\"inputValue()\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus()\"\n />\n\n <button\n type=\"button\"\n class=\"sdc-lookup__search-button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'platform.datacore.lookup.open_dialog' | translate\"\n (click)=\"openDialog()\"\n >\n <i class=\"fas fa-search\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <!-- Autocomplete dropdown -->\n @if (suggestions.length > 0) {\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"panelOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closePanel()\"\n (detach)=\"closePanel()\"\n >\n <!-- NOSONAR: custom autocomplete popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-lookup__panel\"\n [id]=\"componentId + '-listbox'\"\n [attr.role]=\"'listbox'\"\n [style.width.px]=\"containerDiv?.offsetWidth ?? null\"\n >\n <ul class=\"sdc-lookup__list\">\n @for (item of suggestions; track item; let i = $index) {\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <li\n class=\"sdc-lookup__option\"\n [attr.role]=\"'option'\"\n tabindex=\"-1\"\n [id]=\"componentId + '-option-' + i\"\n [attr.aria-selected]=\"'false'\"\n (click)=\"selectSuggestion(item)\"\n (keydown.enter)=\"selectSuggestion(item)\"\n >\n {{ getDisplayValue(item) }}\n </li>\n }\n </ul>\n </div>\n </ng-template>\n }\n\n @if (messageKey()) {\n <small\n class=\"sdc-lookup__message\"\n [class.sdc-lookup__message--invalid]=\"invalid\"\n >\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n\n<!-- Search Dialog -->\n<sdc-modal\n [visible]=\"dialogVisible()\"\n (visibleChange)=\"onDialogVisibleChange($event)\"\n [header]=\"config?.dialogTitle ?? 'platform.datacore.lookup.dialog_title'\"\n [footerButtons]=\"dialogModalFooterButtons()\"\n [width]=\"800\"\n>\n <div class=\"sdc-lookup__dialog\">\n @if (config?.showSearch !== false) {\n <div class=\"sdc-lookup__dialog-search\">\n <sdc-searchbox\n [placeholder]=\"'platform.datacore.lookup.search_placeholder'\"\n (onSearch)=\"onDialogSearchEvent($event)\"\n ></sdc-searchbox>\n </div>\n }\n\n @if (hasFilters()) {\n <div class=\"sdc-lookup__dialog-filters\">\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-toggle\"\n [attr.aria-expanded]=\"filtersExpanded()\"\n [attr.aria-controls]=\"componentId + '-filters-panel'\"\n (click)=\"toggleFilters()\"\n >\n <i class=\"fas fa-filter\" aria-hidden=\"true\"></i>\n {{ 'platform.datacore.lookup.filters' | translate }}\n <i\n class=\"fas fa-chevron-down sdc-lookup__filters-toggle-caret\"\n [class.sdc-lookup__filters-toggle-caret--open]=\"filtersExpanded()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n @if (filtersExpanded()) {\n <div class=\"sdc-lookup__filters-panel\" [id]=\"componentId + '-filters-panel'\">\n <div class=\"sdc-lookup__filters-grid\">\n @for (filter of config.filters; track filter.name) {\n <div class=\"sdc-lookup__filters-field\">\n @if (filter.type === 'select') {\n <sdc-combobox\n [label]=\"filter.label\"\n [placeholder]=\"filter.placeholder ?? ''\"\n [options]=\"mapFilterOptions(filter.options)\"\n [ngModel]=\"filterValueFor(filter.name)\"\n (ngModelChange)=\"onFilterValueChange(filter.name, $event)\"\n width=\"100%\"\n ></sdc-combobox>\n } @else {\n <sdc-textbox\n [label]=\"filter.label\"\n [placeholder]=\"filter.placeholder ?? ''\"\n [ngModel]=\"filterValueFor(filter.name)\"\n (ngModelChange)=\"onFilterValueChange(filter.name, $event)\"\n width=\"100%\"\n ></sdc-textbox>\n }\n </div>\n }\n </div>\n\n <div class=\"sdc-lookup__filters-actions\">\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-action sdc-lookup__filters-action--secondary\"\n (click)=\"clearFilters()\"\n >\n {{ 'platform.datacore.lookup.clear_filters' | translate }}\n </button>\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-action sdc-lookup__filters-action--primary\"\n (click)=\"applyFilters()\"\n >\n {{ 'platform.datacore.lookup.apply_filters' | translate }}\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <div class=\"sdc-lookup__dialog-table\">\n <sdc-table\n [cols]=\"tableColumns()\"\n [data]=\"dialogData.items\"\n [loading]=\"dialogLoading\"\n [config]=\"dialogTableConfig()\"\n (rowClick)=\"onDialogRowClick($event)\"\n (selectionChange)=\"onDialogSelectionChange($event)\"\n ></sdc-table>\n </div>\n\n <div class=\"sdc-lookup__dialog-paginator\">\n <sdc-paginator\n [first]=\"dialogFirst()\"\n [rows]=\"pageSize()\"\n [totalRecords]=\"dialogData.totalRecords\"\n (pageChange)=\"onDialogPageChange($event)\"\n ></sdc-paginator>\n </div>\n </div>\n</sdc-modal>\n", styles: [":host{display:block}.sdc-lookup__label{display:inline-flex;align-items:center;margin-bottom:var(--sdc-form-label-row-mb);line-height:1;padding-top:var(--sdc-form-label-py, 0);padding-bottom:var(--sdc-form-label-py, 0)}.sdc-lookup__required{margin-left:var(--sdc-form-required-ml, .25rem);color:var(--sdc-error-color, #dc3545);font-weight:400}.sdc-lookup__control{display:flex;align-items:stretch;min-height:var(--sdc-formfield-default-height, 2.5rem);border:1px solid var(--sdc-formfield-default-border, #d1d5db);border-radius:var(--sdc-formfield-border-radius, .375rem);background:var(--sdc-formfield-default-bg, #fff);box-sizing:border-box;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-lookup__control:hover{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))}.sdc-lookup__control:focus-within{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff));box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))}.sdc-lookup__control--invalid,.sdc-lookup__control--invalid:hover,.sdc-lookup__control--invalid:focus-within{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888));box-shadow:var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16))}.sdc-lookup__control--disabled,.sdc-lookup__control--disabled:hover{background-color:var(--sdc-formfield-disabled-bg, #f3f4f6);border-color:var(--sdc-formfield-default-border, #d1d5db);box-shadow:none;cursor:not-allowed}.sdc-lookup__input{flex:1 1 auto;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-formfield-default-line-height, 1.5);padding:0 .75rem}.sdc-lookup__input::placeholder{color:var(--sdc-form-placeholder-color, #9ca3af)}.sdc-lookup__input:disabled{cursor:not-allowed}.sdc-lookup__search-button{display:inline-flex;align-items:center;justify-content:center;min-width:2.5rem;padding:0 .75rem;border:0;border-left:1px solid var(--sdc-formfield-default-border, #d1d5db);background:transparent;color:var(--sdc-button-icon-default, #6b7280);cursor:pointer;transition:background-color .16s ease}.sdc-lookup__search-button:disabled{cursor:not-allowed;opacity:.6}.sdc-lookup__search-button:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:-2px}.sdc-lookup__search-button:hover:not(:disabled){background:var(--sdc-lookup-button-hover-bg, rgba(0, 0, 0, .04))}.sdc-lookup__panel{display:flex;flex-direction:column;min-width:100%;padding:.5rem 0;background:var(--sdc-lookup-panel-bg, #fff);border:1px solid var(--sdc-lookup-panel-border, #e5e7eb);border-radius:var(--sdc-lookup-panel-radius, .375rem);box-shadow:var(--sdc-lookup-panel-shadow, 0 12px 28px rgba(15, 23, 42, .14));max-height:var(--sdc-lookup-panel-max-height, 240px);overflow:auto;box-sizing:border-box}.sdc-lookup__list{margin:0;padding:0;list-style:none}.sdc-lookup__option{display:flex;align-items:center;min-height:2.5rem;padding:.5rem .75rem;cursor:pointer;transition:background-color .16s ease;color:var(--sdc-lookup-option-color, #334155);font-size:.95rem}.sdc-lookup__option:hover{background:var(--sdc-lookup-option-hover-bg, #eeebf2)}.sdc-lookup__message{display:block;margin-top:.25rem;font-size:.8rem;color:var(--sdc-lookup-message-color, #6b7280)}.sdc-lookup__message--invalid{color:var(--sdc-error-color, #dc3545)}.sdc-lookup__dialog{display:flex;flex-direction:column;gap:1rem;padding:.5rem 0;overflow:hidden}.sdc-lookup__dialog-search,.sdc-lookup__dialog-filters{flex:0 0 auto;padding:0 .5rem}.sdc-lookup__filters-toggle{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .75rem;border:1px solid var(--sdc-formfield-default-border, #d1d5db);border-radius:var(--sdc-formfield-border-radius, .375rem);background:transparent;color:var(--sdc-text-default, #111827);font-size:.85rem;cursor:pointer;transition:background-color .16s ease}.sdc-lookup__filters-toggle:hover{background:var(--sdc-lookup-option-hover-bg, #eeebf2)}.sdc-lookup__filters-toggle-caret{font-size:.7rem;transition:transform .16s ease}.sdc-lookup__filters-toggle-caret--open{transform:rotate(180deg)}.sdc-lookup__filters-panel{margin-top:.75rem;padding:.75rem;border:1px solid var(--sdc-lookup-panel-border, #e5e7eb);border-radius:var(--sdc-formfield-border-radius, .375rem);background:var(--sdc-lookup-filters-bg, #f9fafb)}.sdc-lookup__filters-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem}.sdc-lookup__filters-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:.75rem}.sdc-lookup__filters-action{padding:.375rem .875rem;border:0;border-radius:var(--sdc-formfield-border-radius, .375rem);font-size:.85rem;font-weight:600;cursor:pointer;transition:background-color .15s ease}.sdc-lookup__filters-action--secondary{background:transparent;color:var(--sdc-tab-primary, #007bff)}.sdc-lookup__filters-action--secondary:hover{background:#007bff14}.sdc-lookup__filters-action--primary{background:var(--sdc-tab-primary, #007bff);color:#fff}.sdc-lookup__filters-action--primary:hover{background:#0056b3}.sdc-lookup__dialog-table{flex:1 1 auto;min-height:120px;overflow:auto}.sdc-lookup__dialog-paginator{flex:0 0 auto;padding:0 .5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ModalComponent, selector: "sdc-modal", inputs: ["footerButtons", "headerActions", "header", "height", "maximizable", "maximize", "resizable", "responsive", "width", "zIndex", "closable", "styleClass", "appendToBody", "visible"], outputs: ["hidden", "visibleChange"] }, { kind: "component", type: TableComponent, selector: "sdc-table", inputs: ["cols", "data", "loading", "config", "ariaLabel"], outputs: ["action", "rowClick", "lazyLoad", "selectionChange"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: PaginatorComponent, selector: "sdc-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "showRowsPerPageSelector", "isMobile", "totalRecordsLabel"], outputs: ["pageChange"] }, { kind: "component", type: TextboxComponent, selector: "sdc-textbox", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent"] }, { kind: "component", type: ComboboxComponent, selector: "sdc-combobox", inputs: ["multiple", "appendTo", "zIndex", "options", "overrideChipMessage", "maxSelectedLabels", "showClear", "searchable", "iconSelector", "showIconClass", "infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "infoTooltipAllowHtml"], outputs: ["onSelectedItem", "panelClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
306
+ ], viewQueries: [{ propertyName: "containerDiv", first: true, predicate: ["containerDiv"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sdc-lookup\" [ngStyle]=\"getInputStyle()\">\n @if (labelKey()) {\n <label class=\"sdc-lookup__label\" [for]=\"componentId\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"sdc-lookup__required\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n\n <div\n #containerDiv\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"sdc-lookup__control\"\n [class.sdc-lookup__control--invalid]=\"invalid\"\n [class.sdc-lookup__control--disabled]=\"disabled\"\n >\n <input\n [id]=\"componentId\"\n class=\"sdc-lookup__input\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-expanded=\"false\"\n [attr.aria-expanded]=\"panelOpen() ? 'true' : 'false'\"\n aria-controls=\"sdc-lookup-listbox\"\n [attr.aria-controls]=\"componentId + '-listbox'\"\n [attr.aria-label]=\"placeholder || (config.placeholder ?? '') | translate\"\n [placeholder]=\"(config.placeholder ?? placeholder) | translate\"\n [disabled]=\"disabled\"\n [value]=\"inputValue()\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus()\"\n />\n\n <button\n type=\"button\"\n class=\"sdc-lookup__search-button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'platform.datacore.lookup_open_dialog' | translate\"\n (click)=\"openDialog()\"\n >\n <i class=\"fas fa-search\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <!-- Autocomplete dropdown -->\n @if (suggestions.length > 0) {\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"panelOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closePanel()\"\n (detach)=\"closePanel()\"\n >\n <!-- NOSONAR: custom autocomplete popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-lookup__panel\"\n [id]=\"componentId + '-listbox'\"\n [attr.role]=\"'listbox'\"\n [style.width.px]=\"containerDiv?.offsetWidth ?? null\"\n >\n <ul class=\"sdc-lookup__list\">\n @for (item of suggestions; track item; let i = $index) {\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <li\n class=\"sdc-lookup__option\"\n [attr.role]=\"'option'\"\n tabindex=\"-1\"\n [id]=\"componentId + '-option-' + i\"\n [attr.aria-selected]=\"'false'\"\n (click)=\"selectSuggestion(item)\"\n (keydown.enter)=\"selectSuggestion(item)\"\n >\n {{ getDisplayValue(item) }}\n </li>\n }\n </ul>\n </div>\n </ng-template>\n }\n\n @if (messageKey()) {\n <small\n class=\"sdc-lookup__message\"\n [class.sdc-lookup__message--invalid]=\"invalid\"\n >\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n\n<!-- Search Dialog -->\n<sdc-modal\n [visible]=\"dialogVisible()\"\n (visibleChange)=\"onDialogVisibleChange($event)\"\n [header]=\"config.dialogTitle ?? 'platform.datacore.lookup_dialog_title'\"\n [footerButtons]=\"dialogModalFooterButtons()\"\n [width]=\"800\"\n>\n <div class=\"sdc-lookup__dialog\">\n @if (config.showSearch !== false) {\n <div class=\"sdc-lookup__dialog-search\">\n <sdc-searchbox\n [placeholder]=\"'platform.datacore.lookup_search_placeholder'\"\n (onSearch)=\"onDialogSearchEvent($event)\"\n ></sdc-searchbox>\n </div>\n }\n\n @if (hasFilters()) {\n <div class=\"sdc-lookup__dialog-filters\">\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-toggle\"\n [attr.aria-expanded]=\"filtersExpanded()\"\n [attr.aria-controls]=\"componentId + '-filters-panel'\"\n (click)=\"toggleFilters()\"\n >\n <i class=\"fas fa-filter\" aria-hidden=\"true\"></i>\n {{ 'platform.datacore.lookup_filters' | translate }}\n <i\n class=\"fas fa-chevron-down sdc-lookup__filters-toggle-caret\"\n [class.sdc-lookup__filters-toggle-caret--open]=\"filtersExpanded()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n @if (filtersExpanded()) {\n <div class=\"sdc-lookup__filters-panel\" [id]=\"componentId + '-filters-panel'\">\n <div class=\"sdc-lookup__filters-grid\">\n @for (filter of config.filters; track filter.name) {\n <div class=\"sdc-lookup__filters-field\">\n @if (filter.type === 'select') {\n <sdc-combobox\n [label]=\"filter.label\"\n [placeholder]=\"filter.placeholder ?? ''\"\n [options]=\"mapFilterOptions(filter.options)\"\n [ngModel]=\"filterValueFor(filter.name)\"\n (ngModelChange)=\"onFilterValueChange(filter.name, $event)\"\n width=\"100%\"\n ></sdc-combobox>\n } @else {\n <sdc-textbox\n [label]=\"filter.label\"\n [placeholder]=\"filter.placeholder ?? ''\"\n [ngModel]=\"filterValueFor(filter.name)\"\n (ngModelChange)=\"onFilterValueChange(filter.name, $event)\"\n width=\"100%\"\n ></sdc-textbox>\n }\n </div>\n }\n </div>\n\n <div class=\"sdc-lookup__filters-actions\">\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-action sdc-lookup__filters-action--secondary\"\n (click)=\"clearFilters()\"\n >\n {{ 'platform.datacore.lookup_clear_filters' | translate }}\n </button>\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-action sdc-lookup__filters-action--primary\"\n (click)=\"applyFilters()\"\n >\n {{ 'platform.datacore.lookup_apply_filters' | translate }}\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <div class=\"sdc-lookup__dialog-table\">\n <sdc-table\n [cols]=\"tableColumns()\"\n [data]=\"dialogData.items\"\n [loading]=\"dialogLoading\"\n [config]=\"dialogTableConfig()\"\n (rowClick)=\"onDialogRowClick($event)\"\n (selectionChange)=\"onDialogSelectionChange($event)\"\n ></sdc-table>\n </div>\n\n <div class=\"sdc-lookup__dialog-paginator\">\n <sdc-paginator\n [first]=\"dialogFirst()\"\n [rows]=\"pageSize()\"\n [totalRecords]=\"dialogData.totalRecords\"\n (pageChange)=\"onDialogPageChange($event)\"\n ></sdc-paginator>\n </div>\n </div>\n</sdc-modal>\n", styles: [":host{display:block}.sdc-lookup__label{display:inline-flex;align-items:center;margin-bottom:var(--sdc-form-label-row-mb);line-height:1;padding-top:var(--sdc-form-label-py, 0);padding-bottom:var(--sdc-form-label-py, 0)}.sdc-lookup__required{margin-left:var(--sdc-form-required-ml, .25rem);color:var(--sdc-error-color, #dc3545);font-weight:400}.sdc-lookup__control{display:flex;align-items:stretch;min-height:var(--sdc-formfield-default-height, 2.5rem);border:1px solid var(--sdc-formfield-default-border, #d1d5db);border-radius:var(--sdc-formfield-border-radius, .375rem);background:var(--sdc-formfield-default-bg, #fff);box-sizing:border-box;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-lookup__control:hover{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))}.sdc-lookup__control:focus-within{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff));box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))}.sdc-lookup__control--invalid,.sdc-lookup__control--invalid:hover,.sdc-lookup__control--invalid:focus-within{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888));box-shadow:var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16))}.sdc-lookup__control--disabled,.sdc-lookup__control--disabled:hover{background-color:var(--sdc-formfield-disabled-bg, #f3f4f6);border-color:var(--sdc-formfield-default-border, #d1d5db);box-shadow:none;cursor:not-allowed}.sdc-lookup__input{flex:1 1 auto;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-formfield-default-line-height, 1.5);padding:0 .75rem}.sdc-lookup__input::placeholder{color:var(--sdc-form-placeholder-color, #9ca3af)}.sdc-lookup__input:disabled{cursor:not-allowed}.sdc-lookup__search-button{display:inline-flex;align-items:center;justify-content:center;min-width:2.5rem;padding:0 .75rem;border:0;border-left:1px solid var(--sdc-formfield-default-border, #d1d5db);background:transparent;color:var(--sdc-button-icon-default, #6b7280);cursor:pointer;transition:background-color .16s ease}.sdc-lookup__search-button:disabled{cursor:not-allowed;opacity:.6}.sdc-lookup__search-button:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:-2px}.sdc-lookup__search-button:hover:not(:disabled){background:var(--sdc-lookup-button-hover-bg, rgba(0, 0, 0, .04))}.sdc-lookup__panel{display:flex;flex-direction:column;min-width:100%;padding:.5rem 0;background:var(--sdc-lookup-panel-bg, #fff);border:1px solid var(--sdc-lookup-panel-border, #e5e7eb);border-radius:var(--sdc-lookup-panel-radius, .375rem);box-shadow:var(--sdc-lookup-panel-shadow, 0 12px 28px rgba(15, 23, 42, .14));max-height:var(--sdc-lookup-panel-max-height, 240px);overflow:auto;box-sizing:border-box}.sdc-lookup__list{margin:0;padding:0;list-style:none}.sdc-lookup__option{display:flex;align-items:center;min-height:2.5rem;padding:.5rem .75rem;cursor:pointer;transition:background-color .16s ease;color:var(--sdc-lookup-option-color, #334155);font-size:.95rem}.sdc-lookup__option:hover{background:var(--sdc-lookup-option-hover-bg, #eeebf2)}.sdc-lookup__message{display:block;margin-top:.25rem;font-size:.8rem;color:var(--sdc-lookup-message-color, #6b7280)}.sdc-lookup__message--invalid{color:var(--sdc-error-color, #dc3545)}.sdc-lookup__dialog{display:flex;flex-direction:column;gap:1rem;padding:.5rem 0;overflow:hidden}.sdc-lookup__dialog-search,.sdc-lookup__dialog-filters{flex:0 0 auto;padding:0 .5rem}.sdc-lookup__filters-toggle{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .75rem;border:1px solid var(--sdc-formfield-default-border, #d1d5db);border-radius:var(--sdc-formfield-border-radius, .375rem);background:transparent;color:var(--sdc-text-default, #111827);font-size:.85rem;cursor:pointer;transition:background-color .16s ease}.sdc-lookup__filters-toggle:hover{background:var(--sdc-lookup-option-hover-bg, #eeebf2)}.sdc-lookup__filters-toggle-caret{font-size:.7rem;transition:transform .16s ease}.sdc-lookup__filters-toggle-caret--open{transform:rotate(180deg)}.sdc-lookup__filters-panel{margin-top:.75rem;padding:.75rem;border:1px solid var(--sdc-lookup-panel-border, #e5e7eb);border-radius:var(--sdc-formfield-border-radius, .375rem);background:var(--sdc-lookup-filters-bg, #f9fafb)}.sdc-lookup__filters-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem}.sdc-lookup__filters-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:.75rem}.sdc-lookup__filters-action{padding:.375rem .875rem;border:0;border-radius:var(--sdc-formfield-border-radius, .375rem);font-size:.85rem;font-weight:600;cursor:pointer;transition:background-color .15s ease}.sdc-lookup__filters-action--secondary{background:transparent;color:var(--sdc-tab-primary, #007bff)}.sdc-lookup__filters-action--secondary:hover{background:#007bff14}.sdc-lookup__filters-action--primary{background:var(--sdc-tab-primary, #007bff);color:#fff}.sdc-lookup__filters-action--primary:hover{background:#0056b3}.sdc-lookup__dialog-table{flex:1 1 auto;min-height:120px;overflow:auto}.sdc-lookup__dialog-paginator{flex:0 0 auto;padding:0 .5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ModalComponent, selector: "sdc-modal", inputs: ["footerButtons", "headerActions", "header", "height", "maximizable", "maximize", "resizable", "responsive", "width", "zIndex", "closable", "styleClass", "appendToBody", "visible"], outputs: ["hidden", "visibleChange"] }, { kind: "component", type: TableComponent, selector: "sdc-table", inputs: ["cols", "data", "selection", "loading", "loadingIndicator", "config", "ariaLabel"], outputs: ["action", "rowClick", "lazyLoad", "selectionChange"] }, { kind: "component", type: SearchboxComponent, selector: "sdc-searchbox", inputs: ["triggerMode", "debounceTimeMs", "ariaLabel", "inputRole", "inputAriaControls", "inputAriaDescribedBy", "inputAriaActiveDescendant", "inputAriaHaspopup", "inputAriaExpanded", "inputAutocomplete", "submitOnEnter", "clearOnEscape"], outputs: ["debouncedValueChange", "onSearch", "onClear"] }, { kind: "component", type: PaginatorComponent, selector: "sdc-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "showRowsPerPageSelector", "isMobile", "totalRecordsLabel"], outputs: ["pageChange"] }, { kind: "component", type: TextboxComponent, selector: "sdc-textbox", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent"] }, { kind: "component", type: ComboboxComponent, selector: "sdc-combobox", inputs: ["multiple", "appendTo", "zIndex", "options", "overrideChipMessage", "maxSelectedLabels", "showClear", "searchable", "iconSelector", "showIconClass", "infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "infoTooltipAllowHtml"], outputs: ["onSelectedItem", "panelClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
307
307
  }
308
308
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LookupComponent, decorators: [{
309
309
  type: Component,
@@ -326,7 +326,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
326
326
  useExisting: forwardRef(() => LookupComponent),
327
327
  multi: true
328
328
  }
329
- ], template: "<div class=\"sdc-lookup\" [ngStyle]=\"getInputStyle()\">\n @if (labelKey()) {\n <label class=\"sdc-lookup__label\" [for]=\"componentId\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"sdc-lookup__required\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n\n <div\n #containerDiv\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"sdc-lookup__control\"\n [class.sdc-lookup__control--invalid]=\"invalid\"\n [class.sdc-lookup__control--disabled]=\"disabled\"\n >\n <input\n [id]=\"componentId\"\n class=\"sdc-lookup__input\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-expanded=\"false\"\n [attr.aria-expanded]=\"panelOpen() ? 'true' : 'false'\"\n aria-controls=\"sdc-lookup-listbox\"\n [attr.aria-controls]=\"componentId + '-listbox'\"\n [attr.aria-label]=\"placeholder || (config?.placeholder ?? '') | translate\"\n [placeholder]=\"(config?.placeholder ?? placeholder) | translate\"\n [disabled]=\"disabled\"\n [value]=\"inputValue()\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus()\"\n />\n\n <button\n type=\"button\"\n class=\"sdc-lookup__search-button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'platform.datacore.lookup.open_dialog' | translate\"\n (click)=\"openDialog()\"\n >\n <i class=\"fas fa-search\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <!-- Autocomplete dropdown -->\n @if (suggestions.length > 0) {\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"panelOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closePanel()\"\n (detach)=\"closePanel()\"\n >\n <!-- NOSONAR: custom autocomplete popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-lookup__panel\"\n [id]=\"componentId + '-listbox'\"\n [attr.role]=\"'listbox'\"\n [style.width.px]=\"containerDiv?.offsetWidth ?? null\"\n >\n <ul class=\"sdc-lookup__list\">\n @for (item of suggestions; track item; let i = $index) {\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <li\n class=\"sdc-lookup__option\"\n [attr.role]=\"'option'\"\n tabindex=\"-1\"\n [id]=\"componentId + '-option-' + i\"\n [attr.aria-selected]=\"'false'\"\n (click)=\"selectSuggestion(item)\"\n (keydown.enter)=\"selectSuggestion(item)\"\n >\n {{ getDisplayValue(item) }}\n </li>\n }\n </ul>\n </div>\n </ng-template>\n }\n\n @if (messageKey()) {\n <small\n class=\"sdc-lookup__message\"\n [class.sdc-lookup__message--invalid]=\"invalid\"\n >\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n\n<!-- Search Dialog -->\n<sdc-modal\n [visible]=\"dialogVisible()\"\n (visibleChange)=\"onDialogVisibleChange($event)\"\n [header]=\"config?.dialogTitle ?? 'platform.datacore.lookup.dialog_title'\"\n [footerButtons]=\"dialogModalFooterButtons()\"\n [width]=\"800\"\n>\n <div class=\"sdc-lookup__dialog\">\n @if (config?.showSearch !== false) {\n <div class=\"sdc-lookup__dialog-search\">\n <sdc-searchbox\n [placeholder]=\"'platform.datacore.lookup.search_placeholder'\"\n (onSearch)=\"onDialogSearchEvent($event)\"\n ></sdc-searchbox>\n </div>\n }\n\n @if (hasFilters()) {\n <div class=\"sdc-lookup__dialog-filters\">\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-toggle\"\n [attr.aria-expanded]=\"filtersExpanded()\"\n [attr.aria-controls]=\"componentId + '-filters-panel'\"\n (click)=\"toggleFilters()\"\n >\n <i class=\"fas fa-filter\" aria-hidden=\"true\"></i>\n {{ 'platform.datacore.lookup.filters' | translate }}\n <i\n class=\"fas fa-chevron-down sdc-lookup__filters-toggle-caret\"\n [class.sdc-lookup__filters-toggle-caret--open]=\"filtersExpanded()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n @if (filtersExpanded()) {\n <div class=\"sdc-lookup__filters-panel\" [id]=\"componentId + '-filters-panel'\">\n <div class=\"sdc-lookup__filters-grid\">\n @for (filter of config.filters; track filter.name) {\n <div class=\"sdc-lookup__filters-field\">\n @if (filter.type === 'select') {\n <sdc-combobox\n [label]=\"filter.label\"\n [placeholder]=\"filter.placeholder ?? ''\"\n [options]=\"mapFilterOptions(filter.options)\"\n [ngModel]=\"filterValueFor(filter.name)\"\n (ngModelChange)=\"onFilterValueChange(filter.name, $event)\"\n width=\"100%\"\n ></sdc-combobox>\n } @else {\n <sdc-textbox\n [label]=\"filter.label\"\n [placeholder]=\"filter.placeholder ?? ''\"\n [ngModel]=\"filterValueFor(filter.name)\"\n (ngModelChange)=\"onFilterValueChange(filter.name, $event)\"\n width=\"100%\"\n ></sdc-textbox>\n }\n </div>\n }\n </div>\n\n <div class=\"sdc-lookup__filters-actions\">\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-action sdc-lookup__filters-action--secondary\"\n (click)=\"clearFilters()\"\n >\n {{ 'platform.datacore.lookup.clear_filters' | translate }}\n </button>\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-action sdc-lookup__filters-action--primary\"\n (click)=\"applyFilters()\"\n >\n {{ 'platform.datacore.lookup.apply_filters' | translate }}\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <div class=\"sdc-lookup__dialog-table\">\n <sdc-table\n [cols]=\"tableColumns()\"\n [data]=\"dialogData.items\"\n [loading]=\"dialogLoading\"\n [config]=\"dialogTableConfig()\"\n (rowClick)=\"onDialogRowClick($event)\"\n (selectionChange)=\"onDialogSelectionChange($event)\"\n ></sdc-table>\n </div>\n\n <div class=\"sdc-lookup__dialog-paginator\">\n <sdc-paginator\n [first]=\"dialogFirst()\"\n [rows]=\"pageSize()\"\n [totalRecords]=\"dialogData.totalRecords\"\n (pageChange)=\"onDialogPageChange($event)\"\n ></sdc-paginator>\n </div>\n </div>\n</sdc-modal>\n", styles: [":host{display:block}.sdc-lookup__label{display:inline-flex;align-items:center;margin-bottom:var(--sdc-form-label-row-mb);line-height:1;padding-top:var(--sdc-form-label-py, 0);padding-bottom:var(--sdc-form-label-py, 0)}.sdc-lookup__required{margin-left:var(--sdc-form-required-ml, .25rem);color:var(--sdc-error-color, #dc3545);font-weight:400}.sdc-lookup__control{display:flex;align-items:stretch;min-height:var(--sdc-formfield-default-height, 2.5rem);border:1px solid var(--sdc-formfield-default-border, #d1d5db);border-radius:var(--sdc-formfield-border-radius, .375rem);background:var(--sdc-formfield-default-bg, #fff);box-sizing:border-box;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-lookup__control:hover{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))}.sdc-lookup__control:focus-within{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff));box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))}.sdc-lookup__control--invalid,.sdc-lookup__control--invalid:hover,.sdc-lookup__control--invalid:focus-within{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888));box-shadow:var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16))}.sdc-lookup__control--disabled,.sdc-lookup__control--disabled:hover{background-color:var(--sdc-formfield-disabled-bg, #f3f4f6);border-color:var(--sdc-formfield-default-border, #d1d5db);box-shadow:none;cursor:not-allowed}.sdc-lookup__input{flex:1 1 auto;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-formfield-default-line-height, 1.5);padding:0 .75rem}.sdc-lookup__input::placeholder{color:var(--sdc-form-placeholder-color, #9ca3af)}.sdc-lookup__input:disabled{cursor:not-allowed}.sdc-lookup__search-button{display:inline-flex;align-items:center;justify-content:center;min-width:2.5rem;padding:0 .75rem;border:0;border-left:1px solid var(--sdc-formfield-default-border, #d1d5db);background:transparent;color:var(--sdc-button-icon-default, #6b7280);cursor:pointer;transition:background-color .16s ease}.sdc-lookup__search-button:disabled{cursor:not-allowed;opacity:.6}.sdc-lookup__search-button:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:-2px}.sdc-lookup__search-button:hover:not(:disabled){background:var(--sdc-lookup-button-hover-bg, rgba(0, 0, 0, .04))}.sdc-lookup__panel{display:flex;flex-direction:column;min-width:100%;padding:.5rem 0;background:var(--sdc-lookup-panel-bg, #fff);border:1px solid var(--sdc-lookup-panel-border, #e5e7eb);border-radius:var(--sdc-lookup-panel-radius, .375rem);box-shadow:var(--sdc-lookup-panel-shadow, 0 12px 28px rgba(15, 23, 42, .14));max-height:var(--sdc-lookup-panel-max-height, 240px);overflow:auto;box-sizing:border-box}.sdc-lookup__list{margin:0;padding:0;list-style:none}.sdc-lookup__option{display:flex;align-items:center;min-height:2.5rem;padding:.5rem .75rem;cursor:pointer;transition:background-color .16s ease;color:var(--sdc-lookup-option-color, #334155);font-size:.95rem}.sdc-lookup__option:hover{background:var(--sdc-lookup-option-hover-bg, #eeebf2)}.sdc-lookup__message{display:block;margin-top:.25rem;font-size:.8rem;color:var(--sdc-lookup-message-color, #6b7280)}.sdc-lookup__message--invalid{color:var(--sdc-error-color, #dc3545)}.sdc-lookup__dialog{display:flex;flex-direction:column;gap:1rem;padding:.5rem 0;overflow:hidden}.sdc-lookup__dialog-search,.sdc-lookup__dialog-filters{flex:0 0 auto;padding:0 .5rem}.sdc-lookup__filters-toggle{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .75rem;border:1px solid var(--sdc-formfield-default-border, #d1d5db);border-radius:var(--sdc-formfield-border-radius, .375rem);background:transparent;color:var(--sdc-text-default, #111827);font-size:.85rem;cursor:pointer;transition:background-color .16s ease}.sdc-lookup__filters-toggle:hover{background:var(--sdc-lookup-option-hover-bg, #eeebf2)}.sdc-lookup__filters-toggle-caret{font-size:.7rem;transition:transform .16s ease}.sdc-lookup__filters-toggle-caret--open{transform:rotate(180deg)}.sdc-lookup__filters-panel{margin-top:.75rem;padding:.75rem;border:1px solid var(--sdc-lookup-panel-border, #e5e7eb);border-radius:var(--sdc-formfield-border-radius, .375rem);background:var(--sdc-lookup-filters-bg, #f9fafb)}.sdc-lookup__filters-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem}.sdc-lookup__filters-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:.75rem}.sdc-lookup__filters-action{padding:.375rem .875rem;border:0;border-radius:var(--sdc-formfield-border-radius, .375rem);font-size:.85rem;font-weight:600;cursor:pointer;transition:background-color .15s ease}.sdc-lookup__filters-action--secondary{background:transparent;color:var(--sdc-tab-primary, #007bff)}.sdc-lookup__filters-action--secondary:hover{background:#007bff14}.sdc-lookup__filters-action--primary{background:var(--sdc-tab-primary, #007bff);color:#fff}.sdc-lookup__filters-action--primary:hover{background:#0056b3}.sdc-lookup__dialog-table{flex:1 1 auto;min-height:120px;overflow:auto}.sdc-lookup__dialog-paginator{flex:0 0 auto;padding:0 .5rem}\n"] }]
329
+ ], template: "<div class=\"sdc-lookup\" [ngStyle]=\"getInputStyle()\">\n @if (labelKey()) {\n <label class=\"sdc-lookup__label\" [for]=\"componentId\">\n {{ labelKey() | translate }}\n @if (required) {\n <span class=\"sdc-lookup__required\" aria-hidden=\"true\">*</span>\n }\n </label>\n }\n\n <div\n #containerDiv\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n class=\"sdc-lookup__control\"\n [class.sdc-lookup__control--invalid]=\"invalid\"\n [class.sdc-lookup__control--disabled]=\"disabled\"\n >\n <input\n [id]=\"componentId\"\n class=\"sdc-lookup__input\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-expanded=\"false\"\n [attr.aria-expanded]=\"panelOpen() ? 'true' : 'false'\"\n aria-controls=\"sdc-lookup-listbox\"\n [attr.aria-controls]=\"componentId + '-listbox'\"\n [attr.aria-label]=\"placeholder || (config.placeholder ?? '') | translate\"\n [placeholder]=\"(config.placeholder ?? placeholder) | translate\"\n [disabled]=\"disabled\"\n [value]=\"inputValue()\"\n (input)=\"onInputChange($event)\"\n (focus)=\"onInputFocus()\"\n />\n\n <button\n type=\"button\"\n class=\"sdc-lookup__search-button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"'platform.datacore.lookup_open_dialog' | translate\"\n (click)=\"openDialog()\"\n >\n <i class=\"fas fa-search\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <!-- Autocomplete dropdown -->\n @if (suggestions.length > 0) {\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"panelOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closePanel()\"\n (detach)=\"closePanel()\"\n >\n <!-- NOSONAR: custom autocomplete popup intentionally uses ARIA listbox semantics instead of a native select -->\n <div\n class=\"sdc-lookup__panel\"\n [id]=\"componentId + '-listbox'\"\n [attr.role]=\"'listbox'\"\n [style.width.px]=\"containerDiv?.offsetWidth ?? null\"\n >\n <ul class=\"sdc-lookup__list\">\n @for (item of suggestions; track item; let i = $index) {\n <!-- NOSONAR -->\n <!-- the custom listbox keeps option semantics on the focusable action for keyboard navigation -->\n <li\n class=\"sdc-lookup__option\"\n [attr.role]=\"'option'\"\n tabindex=\"-1\"\n [id]=\"componentId + '-option-' + i\"\n [attr.aria-selected]=\"'false'\"\n (click)=\"selectSuggestion(item)\"\n (keydown.enter)=\"selectSuggestion(item)\"\n >\n {{ getDisplayValue(item) }}\n </li>\n }\n </ul>\n </div>\n </ng-template>\n }\n\n @if (messageKey()) {\n <small\n class=\"sdc-lookup__message\"\n [class.sdc-lookup__message--invalid]=\"invalid\"\n >\n {{ messageKey() | translate }}\n </small>\n }\n</div>\n\n<!-- Search Dialog -->\n<sdc-modal\n [visible]=\"dialogVisible()\"\n (visibleChange)=\"onDialogVisibleChange($event)\"\n [header]=\"config.dialogTitle ?? 'platform.datacore.lookup_dialog_title'\"\n [footerButtons]=\"dialogModalFooterButtons()\"\n [width]=\"800\"\n>\n <div class=\"sdc-lookup__dialog\">\n @if (config.showSearch !== false) {\n <div class=\"sdc-lookup__dialog-search\">\n <sdc-searchbox\n [placeholder]=\"'platform.datacore.lookup_search_placeholder'\"\n (onSearch)=\"onDialogSearchEvent($event)\"\n ></sdc-searchbox>\n </div>\n }\n\n @if (hasFilters()) {\n <div class=\"sdc-lookup__dialog-filters\">\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-toggle\"\n [attr.aria-expanded]=\"filtersExpanded()\"\n [attr.aria-controls]=\"componentId + '-filters-panel'\"\n (click)=\"toggleFilters()\"\n >\n <i class=\"fas fa-filter\" aria-hidden=\"true\"></i>\n {{ 'platform.datacore.lookup_filters' | translate }}\n <i\n class=\"fas fa-chevron-down sdc-lookup__filters-toggle-caret\"\n [class.sdc-lookup__filters-toggle-caret--open]=\"filtersExpanded()\"\n aria-hidden=\"true\"\n ></i>\n </button>\n\n @if (filtersExpanded()) {\n <div class=\"sdc-lookup__filters-panel\" [id]=\"componentId + '-filters-panel'\">\n <div class=\"sdc-lookup__filters-grid\">\n @for (filter of config.filters; track filter.name) {\n <div class=\"sdc-lookup__filters-field\">\n @if (filter.type === 'select') {\n <sdc-combobox\n [label]=\"filter.label\"\n [placeholder]=\"filter.placeholder ?? ''\"\n [options]=\"mapFilterOptions(filter.options)\"\n [ngModel]=\"filterValueFor(filter.name)\"\n (ngModelChange)=\"onFilterValueChange(filter.name, $event)\"\n width=\"100%\"\n ></sdc-combobox>\n } @else {\n <sdc-textbox\n [label]=\"filter.label\"\n [placeholder]=\"filter.placeholder ?? ''\"\n [ngModel]=\"filterValueFor(filter.name)\"\n (ngModelChange)=\"onFilterValueChange(filter.name, $event)\"\n width=\"100%\"\n ></sdc-textbox>\n }\n </div>\n }\n </div>\n\n <div class=\"sdc-lookup__filters-actions\">\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-action sdc-lookup__filters-action--secondary\"\n (click)=\"clearFilters()\"\n >\n {{ 'platform.datacore.lookup_clear_filters' | translate }}\n </button>\n <button\n type=\"button\"\n class=\"sdc-lookup__filters-action sdc-lookup__filters-action--primary\"\n (click)=\"applyFilters()\"\n >\n {{ 'platform.datacore.lookup_apply_filters' | translate }}\n </button>\n </div>\n </div>\n }\n </div>\n }\n\n <div class=\"sdc-lookup__dialog-table\">\n <sdc-table\n [cols]=\"tableColumns()\"\n [data]=\"dialogData.items\"\n [loading]=\"dialogLoading\"\n [config]=\"dialogTableConfig()\"\n (rowClick)=\"onDialogRowClick($event)\"\n (selectionChange)=\"onDialogSelectionChange($event)\"\n ></sdc-table>\n </div>\n\n <div class=\"sdc-lookup__dialog-paginator\">\n <sdc-paginator\n [first]=\"dialogFirst()\"\n [rows]=\"pageSize()\"\n [totalRecords]=\"dialogData.totalRecords\"\n (pageChange)=\"onDialogPageChange($event)\"\n ></sdc-paginator>\n </div>\n </div>\n</sdc-modal>\n", styles: [":host{display:block}.sdc-lookup__label{display:inline-flex;align-items:center;margin-bottom:var(--sdc-form-label-row-mb);line-height:1;padding-top:var(--sdc-form-label-py, 0);padding-bottom:var(--sdc-form-label-py, 0)}.sdc-lookup__required{margin-left:var(--sdc-form-required-ml, .25rem);color:var(--sdc-error-color, #dc3545);font-weight:400}.sdc-lookup__control{display:flex;align-items:stretch;min-height:var(--sdc-formfield-default-height, 2.5rem);border:1px solid var(--sdc-formfield-default-border, #d1d5db);border-radius:var(--sdc-formfield-border-radius, .375rem);background:var(--sdc-formfield-default-bg, #fff);box-sizing:border-box;transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease}.sdc-lookup__control:hover{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff))}.sdc-lookup__control:focus-within{border-color:var(--sdc-formfield-focus-color, var(--sdc-tab-primary, #007bff));box-shadow:var(--sdc-formfield-focus-shadow, 0 0 0 2px rgba(0, 123, 255, .14))}.sdc-lookup__control--invalid,.sdc-lookup__control--invalid:hover,.sdc-lookup__control--invalid:focus-within{border-color:var(--sdc-formfield-invalid-border, var(--sdc-error-color, #d98888));box-shadow:var(--sdc-formfield-invalid-focus-shadow, 0 0 0 2px rgba(217, 136, 136, .16))}.sdc-lookup__control--disabled,.sdc-lookup__control--disabled:hover{background-color:var(--sdc-formfield-disabled-bg, #f3f4f6);border-color:var(--sdc-formfield-default-border, #d1d5db);box-shadow:none;cursor:not-allowed}.sdc-lookup__input{flex:1 1 auto;min-width:0;border:0;background:transparent;box-shadow:none;outline:0;font:inherit;color:inherit;line-height:var(--sdc-formfield-default-line-height, 1.5);padding:0 .75rem}.sdc-lookup__input::placeholder{color:var(--sdc-form-placeholder-color, #9ca3af)}.sdc-lookup__input:disabled{cursor:not-allowed}.sdc-lookup__search-button{display:inline-flex;align-items:center;justify-content:center;min-width:2.5rem;padding:0 .75rem;border:0;border-left:1px solid var(--sdc-formfield-default-border, #d1d5db);background:transparent;color:var(--sdc-button-icon-default, #6b7280);cursor:pointer;transition:background-color .16s ease}.sdc-lookup__search-button:disabled{cursor:not-allowed;opacity:.6}.sdc-lookup__search-button:focus-visible{outline:2px solid var(--sdc-primary-color, #007bff);outline-offset:-2px}.sdc-lookup__search-button:hover:not(:disabled){background:var(--sdc-lookup-button-hover-bg, rgba(0, 0, 0, .04))}.sdc-lookup__panel{display:flex;flex-direction:column;min-width:100%;padding:.5rem 0;background:var(--sdc-lookup-panel-bg, #fff);border:1px solid var(--sdc-lookup-panel-border, #e5e7eb);border-radius:var(--sdc-lookup-panel-radius, .375rem);box-shadow:var(--sdc-lookup-panel-shadow, 0 12px 28px rgba(15, 23, 42, .14));max-height:var(--sdc-lookup-panel-max-height, 240px);overflow:auto;box-sizing:border-box}.sdc-lookup__list{margin:0;padding:0;list-style:none}.sdc-lookup__option{display:flex;align-items:center;min-height:2.5rem;padding:.5rem .75rem;cursor:pointer;transition:background-color .16s ease;color:var(--sdc-lookup-option-color, #334155);font-size:.95rem}.sdc-lookup__option:hover{background:var(--sdc-lookup-option-hover-bg, #eeebf2)}.sdc-lookup__message{display:block;margin-top:.25rem;font-size:.8rem;color:var(--sdc-lookup-message-color, #6b7280)}.sdc-lookup__message--invalid{color:var(--sdc-error-color, #dc3545)}.sdc-lookup__dialog{display:flex;flex-direction:column;gap:1rem;padding:.5rem 0;overflow:hidden}.sdc-lookup__dialog-search,.sdc-lookup__dialog-filters{flex:0 0 auto;padding:0 .5rem}.sdc-lookup__filters-toggle{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .75rem;border:1px solid var(--sdc-formfield-default-border, #d1d5db);border-radius:var(--sdc-formfield-border-radius, .375rem);background:transparent;color:var(--sdc-text-default, #111827);font-size:.85rem;cursor:pointer;transition:background-color .16s ease}.sdc-lookup__filters-toggle:hover{background:var(--sdc-lookup-option-hover-bg, #eeebf2)}.sdc-lookup__filters-toggle-caret{font-size:.7rem;transition:transform .16s ease}.sdc-lookup__filters-toggle-caret--open{transform:rotate(180deg)}.sdc-lookup__filters-panel{margin-top:.75rem;padding:.75rem;border:1px solid var(--sdc-lookup-panel-border, #e5e7eb);border-radius:var(--sdc-formfield-border-radius, .375rem);background:var(--sdc-lookup-filters-bg, #f9fafb)}.sdc-lookup__filters-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem}.sdc-lookup__filters-actions{display:flex;justify-content:flex-end;gap:.5rem;margin-top:.75rem}.sdc-lookup__filters-action{padding:.375rem .875rem;border:0;border-radius:var(--sdc-formfield-border-radius, .375rem);font-size:.85rem;font-weight:600;cursor:pointer;transition:background-color .15s ease}.sdc-lookup__filters-action--secondary{background:transparent;color:var(--sdc-tab-primary, #007bff)}.sdc-lookup__filters-action--secondary:hover{background:#007bff14}.sdc-lookup__filters-action--primary{background:var(--sdc-tab-primary, #007bff);color:#fff}.sdc-lookup__filters-action--primary:hover{background:#0056b3}.sdc-lookup__dialog-table{flex:1 1 auto;min-height:120px;overflow:auto}.sdc-lookup__dialog-paginator{flex:0 0 auto;padding:0 .5rem}\n"] }]
330
330
  }], ctorParameters: () => [], propDecorators: { containerDiv: [{
331
331
  type: ViewChild,
332
332
  args: ['containerDiv']
@@ -348,4 +348,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
348
348
  }], valueSelected: [{
349
349
  type: Output
350
350
  }] } });
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvbG9va3VwL2xvb2t1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2xvb2t1cC9sb29rdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFFUixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUVoQixPQUFPLEVBRVYsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFLekUsT0FBTyxFQUFFLG1CQUFtQixFQUE4QixNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NB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Q2hCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIHNpZ25hbCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIENka0Nvbm5lY3RlZE92ZXJsYXksXG4gICAgQ2RrT3ZlcmxheU9yaWdpbixcbiAgICBDb25uZWN0ZWRQb3NpdGlvbixcbiAgICBPdmVybGF5LFxuICAgIFNjcm9sbFN0cmF0ZWd5XG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJbnB1dHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2RpcmVjdGl2ZXMvaW5wdXRzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgdHlwZSB7IExvb2t1cENvbmZpZywgTG9va3VwR3JpZEZpZWxkLCBMb29rdXBTZWFyY2hSZXF1ZXN0LCBMb29rdXBTZWFyY2hSZXNwb25zZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvbG9va3VwLnR5cGUnO1xuaW1wb3J0IHR5cGUgeyBNb2RhbEJ1dHRvbiB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvbW9kYWwudHlwZSc7XG5pbXBvcnQgdHlwZSB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy90YWJsZS50eXBlJztcbmltcG9ydCB0eXBlIHsgUGFnaW5hdG9yU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3BhZ2luYXRvci50eXBlJztcbmltcG9ydCB7IHdhdGNoT3ZlcmxheURpc21pc3MsIHR5cGUgT3ZlcmxheURpc21pc3NXYXRjaGVyIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9vdmVybGF5LWRpc21pc3MudXRpbCc7XG5pbXBvcnQgeyBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL21vZGFsL21vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hib3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Ym94Q29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFID0gMTA7XG5jb25zdCBMT09LVVBfREVCT1VOQ0VfTVMgPSAzMDA7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2RjLWxvb2t1cCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgQ2RrQ29ubmVjdGVkT3ZlcmxheSxcbiAgICAgICAgQ2RrT3ZlcmxheU9yaWdpbixcbiAgICAgICAgTW9kYWxDb21wb25lbnQsXG4gICAgICAgIFRhYmxlQ29tcG9uZW50LFxuICAgICAgICBTZWFyY2hib3hDb21wb25lbnQsXG4gICAgICAgIFBhZ2luYXRvckNvbXBvbmVudCxcbiAgICAgICAgQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBUZXh0Ym94Q29tcG9uZW50LFxuICAgICAgICBDb21ib2JveENvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xvb2t1cC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2xvb2t1cC5jb21wb25lbnQuc2NzcycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTG9va3VwQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIExvb2t1cENvbXBvbmVudCBleHRlbmRzIElucHV0c0NvbXBvbmVudDx1bmtub3duPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbmV4dElkID0gMDtcblxuICAgIHByaXZhdGUgc3RhdGljIGFsbG9jYXRlQ29tcG9uZW50SWQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaWQgPSBMb29rdXBDb21wb25lbnQubmV4dElkO1xuICAgICAgICBMb29rdXBDb21wb25lbnQubmV4dElkICs9IDE7XG4gICAgICAgIHJldHVybiBgc2RjLWxvb2t1cC0ke2lkfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGRpc21pc3NXYXRjaGVyOiBPdmVybGF5RGlzbWlzc1dhdGNoZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBDREsgb3ZlcmxheSBjb25maWcgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvdmVybGF5UG9zaXRpb25zOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gW1xuICAgICAgICB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICd0b3AnIH0sXG4gICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ3RvcCcsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2JvdHRvbScgfVxuICAgIF07XG5cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXJEaXYnKSBwcm90ZWN0ZWQgY29udGFpbmVyRGl2PzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvLyAtLS0gSW5wdXRzIC0tLVxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbmZpZyE6IExvb2t1cENvbmZpZztcbiAgICBASW5wdXQoKSBzdWdnZXN0aW9uczogdW5rbm93bltdID0gW107XG4gICAgQElucHV0KCkgZGlhbG9nRGF0YTogTG9va3VwU2VhcmNoUmVzcG9uc2UgPSB7IGl0ZW1zOiBbXSwgdG90YWxSZWNvcmRzOiAwIH07XG4gICAgQElucHV0KCkgZGlhbG9nTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLy8gLS0tIE91dHB1dHMgLS0tXG4gICAgQE91dHB1dCgpIG9uTG9va3VwUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIEBPdXRwdXQoKSBvbkRpYWxvZ1NlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8TG9va3VwU2VhcmNoUmVxdWVzdD4oKTtcbiAgICBAT3V0cHV0KCkgb25EaWFsb2dPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSB2YWx1ZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duPigpO1xuXG4gICAgLy8gLS0tIEludGVybmFsIHN0YXRlIC0tLVxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb21wb25lbnRJZCA9IExvb2t1cENvbXBvbmVudC5hbGxvY2F0ZUNvbXBvbmVudElkKCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlucHV0VmFsdWUgPSBzaWduYWwoJycpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBwYW5lbE9wZW4gPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkaWFsb2dWaXNpYmxlID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlhbG9nUXVlcnkgPSBzaWduYWwoJycpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkaWFsb2dQYWdlID0gc2lnbmFsKDApO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJzRXhwYW5kZWQgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJWYWx1ZXMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkaWFsb2dTZWxlY3Rpb24gPSBzaWduYWw8dW5rbm93bltdPihbXSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFnZVNpemUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZz8ucGFnZVNpemUgPz8gREVGQVVMVF9QQUdFX1NJWkUpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc011bHRpcGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWc/Lm11bHRpcGxlID09PSB0cnVlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGFzRmlsdGVycyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmNvbmZpZz8uZmlsdGVycz8ubGVuZ3RoID8/IDApID4gMCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlhbG9nVGFibGVDb25maWcgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgICBzZWFyY2g6IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgICAgLy8gJ2FwaScgbW9kZTogZGlhbG9nRGF0YS5pdGVtcyBpcyBhIHNpbmdsZSBleHRlcm5hbGx5LWZldGNoZWQgcGFnZSAodmlhIG9uRGlhbG9nU2VhcmNoKSxcbiAgICAgICAgLy8gbm90IHRoZSBmdWxsIGRhdGFzZXQuIFRoaXMgYWxzbyB0ZWxscyBzZGMtdGFibGUgdG8gcHJlc2VydmUgbXVsdGktc2VsZWN0IGFjcm9zcyBwYWdlXG4gICAgICAgIC8vIGNoYW5nZXMgaW5zdGVhZCBvZiBkcm9wcGluZyByb3dzIHRoYXQgYXJlbid0IG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UuXG4gICAgICAgIHRhYmxlOiB7IHRvdGFsUmVjb3Jkc0xhYmVsOiAnJywgcmVzcG9uc2l2ZTogZmFsc2UsIG1vZGU6ICdhcGknIGFzIGNvbnN0IH0sXG4gICAgICAgIHBhZ2luYXRpb246IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgICAgZW1wdHk6IHsgc2hvdzogdHJ1ZSwgdGl0bGU6ICdOZW5odW0gcmVzdWx0YWRvJywgdGV4dDogJ1RlbnRlIGFqdXN0YXIgYSBidXNjYS4nIH0sXG4gICAgICAgIGNlbGxzOiB7XG4gICAgICAgICAgICBjaGVja2JveDogeyBzZWxlY3RBbGw6IHRydWUgfVxuICAgICAgICB9XG4gICAgfSkpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYmxlQ29sdW1ucyA9IGNvbXB1dGVkPFRhYmxlQ29sdW1uW10+KCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZz8uZ3JpZEZpZWxkcykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmllbGRDb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gdGhpcy5jb25maWcuZ3JpZEZpZWxkcy5tYXAoKGZpZWxkOiBMb29rdXBHcmlkRmllbGQpID0+ICh7XG4gICAgICAgICAgICBmaWVsZDogZmllbGQubmFtZSxcbiAgICAgICAgICAgIGhlYWRlcjogZmllbGQubGFiZWwsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLm1hcEZpZWxkVHlwZShmaWVsZC50eXBlKSxcbiAgICAgICAgICAgIHdpZHRoOiBmaWVsZC53aWR0aFxuICAgICAgICB9IGFzIFRhYmxlQ29sdW1uKSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlwbGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkQ29sdW1ucztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoZWNrYm94Q29sdW1uOiBUYWJsZUNvbHVtbiA9IHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLmNvbmZpZy5kYXRhS2V5LFxuICAgICAgICAgICAgaGVhZGVyOiAncGxhdGZvcm0uZGF0YWNvcmUubG9va3VwLnNlbGVjdF9jb2x1bW4nLFxuICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94LXNlbGVjdGlvbicsXG4gICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBhbGlnbjogJ2NlbnRlcidcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gW2NoZWNrYm94Q29sdW1uLCAuLi5maWVsZENvbHVtbnNdO1xuICAgIH0pO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRpYWxvZ0ZpcnN0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kaWFsb2dQYWdlKCkgKiB0aGlzLnBhZ2VTaXplKCkpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhc0RpYWxvZ1NlbGVjdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGlhbG9nU2VsZWN0aW9uKCkubGVuZ3RoID4gMCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlhbG9nTW9kYWxGb290ZXJCdXR0b25zID0gY29tcHV0ZWQ8TW9kYWxCdXR0b25bXT4oKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aXBsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBgJHt0aGlzLmNvbXBvbmVudElkfS1jb25maXJtLXNlbGVjdGlvbmAsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdwbGF0Zm9ybS5kYXRhY29yZS5sb29rdXAuY29uZmlybV9zZWxlY3Rpb24nLFxuICAgICAgICAgICAgICAgIHNldmVyaXR5OiAncHJpbWFyeScsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLmhhc0RpYWxvZ1NlbGVjdGlvbigpLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5jb25maXJtTXVsdGlwbGVTZWxlY3Rpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5pbnB1dFN1YmplY3QucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZShMT09LVVBfREVCT1VOQ0VfTVMpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgICApLnN1YnNjcmliZSgocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkxvb2t1cFJlcXVlc3QuZW1pdChxdWVyeSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNtaXNzV2F0Y2hlciA9IHdhdGNoT3ZlcmxheURpc21pc3Moe1xuICAgICAgICAgICAgZ2V0VHJpZ2dlckVsZW1lbnQ6ICgpID0+IHRoaXMuY29udGFpbmVyRGl2Py5uYXRpdmVFbGVtZW50ID8/IG51bGwsXG4gICAgICAgICAgICBpc09wZW46ICgpID0+IHRoaXMucGFuZWxPcGVuKCksXG4gICAgICAgICAgICBvbkRpc21pc3M6ICgpID0+IHRoaXMuY2xvc2VQYW5lbCgpLFxuICAgICAgICAgICAgcm91dGVyOiB0aGlzLnJvdXRlclxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kaXNtaXNzV2F0Y2hlcj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIC0tLSBWYWx1ZSBhY2Nlc3NvciBvdmVycmlkZXMgLS0tXG4gICAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXREaXNwbGF5KCk7XG4gICAgfVxuXG4gICAgLy8gLS0tIEZpbHRlcnMgLS0tXG4gICAgcHJvdGVjdGVkIHRvZ2dsZUZpbHRlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsdGVyc0V4cGFuZGVkLnNldCghdGhpcy5maWx0ZXJzRXhwYW5kZWQoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRmlsdGVyVmFsdWVDaGFuZ2UobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlclZhbHVlcy5zZXQoeyAuLi50aGlzLmZpbHRlclZhbHVlcygpLCBbbmFtZV06IHZhbHVlID8/ICcnIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmaWx0ZXJWYWx1ZUZvcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJWYWx1ZXMoKVtuYW1lXSA/PyAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbWFwRmlsdGVyT3B0aW9ucyhvcHRpb25zOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdIHwgdW5kZWZpbmVkKTogeyB2YWx1ZTogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdIHtcbiAgICAgICAgcmV0dXJuIChvcHRpb25zID8/IFtdKS5tYXAoKG9wdGlvbikgPT4gKHsgdmFsdWU6IG9wdGlvbi52YWx1ZSwgdGV4dDogb3B0aW9uLmxhYmVsIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXBwbHlGaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1BhZ2Uuc2V0KDApO1xuICAgICAgICB0aGlzLmVtaXREaWFsb2dTZWFyY2goKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xlYXJGaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlclZhbHVlcy5zZXQoe30pO1xuICAgICAgICB0aGlzLmRpYWxvZ1BhZ2Uuc2V0KDApO1xuICAgICAgICB0aGlzLmVtaXREaWFsb2dTZWFyY2goKTtcbiAgICB9XG5cbiAgICAvLyAtLS0gQXV0b2NvbXBsZXRlIGlucHV0IC0tLVxuICAgIHByb3RlY3RlZCBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0YXJnZXQ/LnZhbHVlID8/ICcnO1xuICAgICAgICB0aGlzLmlucHV0VmFsdWUuc2V0KHF1ZXJ5KTtcbiAgICAgICAgdGhpcy5pbnB1dFN1YmplY3QubmV4dChxdWVyeSk7XG5cbiAgICAgICAgaWYgKHF1ZXJ5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxPcGVuLnNldCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxPcGVuLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmNvbW1pdFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZVNlbGVjdGVkLmVtaXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25JbnB1dEZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwICYmIHRoaXMuaW5wdXRWYWx1ZSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxPcGVuLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbG9zZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhbmVsT3Blbi5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZWxlY3RTdWdnZXN0aW9uKGl0ZW06IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW0pO1xuICAgICAgICB0aGlzLnBhbmVsT3Blbi5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWUoaXRlbTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXRlbSB8fCAhdGhpcy5jb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIHJldHVybiBTdHJpbmcocmVjb3JkW3RoaXMuY29uZmlnLmRpc3BsYXlGaWVsZF0gPz8gJycpO1xuICAgIH1cblxuICAgIC8vIC0tLSBEaWFsb2cgLS0tXG4gICAgcHJvdGVjdGVkIG9wZW5EaWFsb2coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nVmlzaWJsZS5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGlhbG9nUXVlcnkuc2V0KCcnKTtcbiAgICAgICAgdGhpcy5kaWFsb2dQYWdlLnNldCgwKTtcbiAgICAgICAgdGhpcy5maWx0ZXJzRXhwYW5kZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5kaWFsb2dTZWxlY3Rpb24uc2V0KHRoaXMuaXNNdWx0aXBsZSgpICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyBbLi4udGhpcy52YWx1ZV0gOiBbXSk7XG4gICAgICAgIHRoaXMub25EaWFsb2dPcGVuLmVtaXQoKTtcbiAgICAgICAgdGhpcy5lbWl0RGlhbG9nU2VhcmNoKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRGlhbG9nVmlzaWJsZUNoYW5nZSh2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nVmlzaWJsZS5zZXQodmlzaWJsZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRGlhbG9nU2VhcmNoRXZlbnQocXVlcnk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1F1ZXJ5LnNldChxdWVyeSk7XG4gICAgICAgIHRoaXMuZGlhbG9nUGFnZS5zZXQoMCk7XG4gICAgICAgIHRoaXMuZW1pdERpYWxvZ1NlYXJjaCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkRpYWxvZ1BhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2luYXRvclN0YXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUGFnZS5zZXQoZXZlbnQucGFnZSk7XG4gICAgICAgIHRoaXMuZW1pdERpYWxvZ1NlYXJjaCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkRpYWxvZ1Jvd0NsaWNrKHJvdzogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKCkpIHtcbiAgICAgICAgICAgIC8vIEluIG11bHRpcGxlIG1vZGUsIGEgcm93IGNsaWNrIHRvZ2dsZXMgdGhlIGNoZWNrYm94IGluc3RlYWQgb2YgY29tbWl0dGluZ1xuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIHNvIHRoZSB1c2VyIGNhbiBwaWNrIHNldmVyYWwgcm93cyBiZWZvcmUgY29uZmlybWluZy5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRGlhbG9nUm93U2VsZWN0aW9uKHJvdyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdEl0ZW0ocm93KTtcbiAgICAgICAgdGhpcy5kaWFsb2dWaXNpYmxlLnNldChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRGlhbG9nU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbjogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VsZWN0aW9uLnNldChzZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb25maXJtTXVsdGlwbGVTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZGlhbG9nU2VsZWN0aW9uKCk7XG5cbiAgICAgICAgaWYgKHNlbGVjdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3Rpb247XG4gICAgICAgIHRoaXMub25DaGFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMudmFsdWVTZWxlY3RlZC5lbWl0KHNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXREaXNwbGF5KCk7XG4gICAgICAgIHRoaXMuZGlhbG9nVmlzaWJsZS5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIC0tLSBIZWxwZXJzIC0tLVxuICAgIHByaXZhdGUgc2VsZWN0SXRlbShpdGVtOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IHN0b3JlZFZhbHVlID0gcmVjb3JkW3RoaXMuY29uZmlnLmRhdGFLZXldID8/IGl0ZW07XG4gICAgICAgIHRoaXMudmFsdWUgPSBpdGVtO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHN0b3JlZFZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHN0b3JlZFZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dERpc3BsYXkoKTtcbiAgICAgICAgdGhpcy52YWx1ZVNlbGVjdGVkLmVtaXQoaXRlbSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVEaWFsb2dSb3dTZWxlY3Rpb24ocm93OiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmRpYWxvZ1NlbGVjdGlvbigpO1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmRhdGFLZXlPZihyb3cpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnQuZmluZEluZGV4KChpdGVtKSA9PiB0aGlzLmRhdGFLZXlPZihpdGVtKSA9PT0ga2V5KTtcblxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZWxlY3Rpb24uc2V0KFsuLi5jdXJyZW50LnNsaWNlKDAsIGluZGV4KSwgLi4uY3VycmVudC5zbGljZShpbmRleCArIDEpXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlbGVjdGlvbi5zZXQoWy4uLmN1cnJlbnQsIHJvd10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkYXRhS2V5T2YoaXRlbTogdW5rbm93bik6IHVua25vd24ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICByZXR1cm4gcmVjb3JkPy5bdGhpcy5jb25maWc/LmRhdGFLZXldO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW5wdXREaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKCkgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlLnNldChcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcCgoaXRlbSkgPT4gdGhpcy5nZXREaXNwbGF5VmFsdWUoaXRlbSkpLmpvaW4oJywgJylcbiAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUuc2V0KHRoaXMuZ2V0RGlzcGxheVZhbHVlKHRoaXMudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZS5zZXQoJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0RGlhbG9nU2VhcmNoKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBMb29rdXBTZWFyY2hSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgcXVlcnk6IHRoaXMuZGlhbG9nUXVlcnkoKSxcbiAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplKCksXG4gICAgICAgICAgICBwYWdlOiB0aGlzLmRpYWxvZ1BhZ2UoKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0ZpbHRlcnMoKSkge1xuICAgICAgICAgICAgcmVxdWVzdC5maWx0ZXJzID0gdGhpcy5maWx0ZXJWYWx1ZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25EaWFsb2dTZWFyY2guZW1pdChyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcEZpZWxkVHlwZSh0eXBlPzogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdudW1lcmljJztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOiByZXR1cm4gJ2RhdGUnO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZGMtbG9va3VwXCIgW25nU3R5bGVdPVwiZ2V0SW5wdXRTdHlsZSgpXCI+XG4gIEBpZiAobGFiZWxLZXkoKSkge1xuICAgIDxsYWJlbCBjbGFzcz1cInNkYy1sb29rdXBfX2xhYmVsXCIgW2Zvcl09XCJjb21wb25lbnRJZFwiPlxuICAgICAge3sgbGFiZWxLZXkoKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgQGlmIChyZXF1aXJlZCkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1sb29rdXBfX3JlcXVpcmVkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2xhYmVsPlxuICB9XG5cbiAgPGRpdlxuICAgICNjb250YWluZXJEaXZcbiAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICBjbGFzcz1cInNkYy1sb29rdXBfX2NvbnRyb2xcIlxuICAgIFtjbGFzcy5zZGMtbG9va3VwX19jb250cm9sLS1pbnZhbGlkXT1cImludmFsaWRcIlxuICAgIFtjbGFzcy5zZGMtbG9va3VwX19jb250cm9sLS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIFtpZF09XCJjb21wb25lbnRJZFwiXG4gICAgICBjbGFzcz1cInNkYy1sb29rdXBfX2lucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwicGFuZWxPcGVuKCkgPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgIGFyaWEtY29udHJvbHM9XCJzZGMtbG9va3VwLWxpc3Rib3hcIlxuICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJjb21wb25lbnRJZCArICctbGlzdGJveCdcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwbGFjZWhvbGRlciB8fCAoY29uZmlnPy5wbGFjZWhvbGRlciA/PyAnJykgfCB0cmFuc2xhdGVcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIihjb25maWc/LnBsYWNlaG9sZGVyID8/IHBsYWNlaG9sZGVyKSB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW3ZhbHVlXT1cImlucHV0VmFsdWUoKVwiXG4gICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoKVwiXG4gICAgLz5cblxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJzZGMtbG9va3VwX19zZWFyY2gtYnV0dG9uXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybS5kYXRhY29yZS5sb29rdXAub3Blbl9kaWFsb2cnIHwgdHJhbnNsYXRlXCJcbiAgICAgIChjbGljayk9XCJvcGVuRGlhbG9nKClcIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXNlYXJjaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBdXRvY29tcGxldGUgZHJvcGRvd24gLS0+XG4gIEBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwicGFuZWxPcGVuKClcIlxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwib3ZlcmxheVBvc2l0aW9uc1wiXG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5XT1cInNjcm9sbFN0cmF0ZWd5XCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5Vmlld3BvcnRNYXJnaW5dPVwiOFwiXG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wXT1cInRydWVcIlxuICAgICAgY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3M9XCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcFwiXG4gICAgICAoYmFja2Ryb3BDbGljayk9XCJjbG9zZVBhbmVsKClcIlxuICAgICAgKGRldGFjaCk9XCJjbG9zZVBhbmVsKClcIlxuICAgID5cbiAgICAgIDwhLS0gTk9TT05BUjogY3VzdG9tIGF1dG9jb21wbGV0ZSBwb3B1cCBpbnRlbnRpb25hbGx5IHVzZXMgQVJJQSBsaXN0Ym94IHNlbWFudGljcyBpbnN0ZWFkIG9mIGEgbmF0aXZlIHNlbGVjdCAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzZGMtbG9va3VwX19wYW5lbFwiXG4gICAgICAgIFtpZF09XCJjb21wb25lbnRJZCArICctbGlzdGJveCdcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cIidsaXN0Ym94J1wiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb250YWluZXJEaXY/Lm9mZnNldFdpZHRoID8/IG51bGxcIlxuICAgICAgPlxuICAgICAgICA8dWwgY2xhc3M9XCJzZGMtbG9va3VwX19saXN0XCI+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBzdWdnZXN0aW9uczsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDwhLS0gTk9TT05BUiAtLT5cbiAgICAgICAgICAgIDwhLS0gdGhlIGN1c3RvbSBsaXN0Ym94IGtlZXBzIG9wdGlvbiBzZW1hbnRpY3Mgb24gdGhlIGZvY3VzYWJsZSBhY3Rpb24gZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gLS0+XG4gICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtbG9va3VwX19vcHRpb25cIlxuICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cIidvcHRpb24nXCJcbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZCArICctb3B0aW9uLScgKyBpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCInZmFsc2UnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFN1Z2dlc3Rpb24oaXRlbSlcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzZWxlY3RTdWdnZXN0aW9uKGl0ZW0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGl0ZW0pIH19XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIH1cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIH1cblxuICBAaWYgKG1lc3NhZ2VLZXkoKSkge1xuICAgIDxzbWFsbFxuICAgICAgY2xhc3M9XCJzZGMtbG9va3VwX19tZXNzYWdlXCJcbiAgICAgIFtjbGFzcy5zZGMtbG9va3VwX19tZXNzYWdlLS1pbnZhbGlkXT1cImludmFsaWRcIlxuICAgID5cbiAgICAgIHt7IG1lc3NhZ2VLZXkoKSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc21hbGw+XG4gIH1cbjwvZGl2PlxuXG48IS0tIFNlYXJjaCBEaWFsb2cgLS0+XG48c2RjLW1vZGFsXG4gIFt2aXNpYmxlXT1cImRpYWxvZ1Zpc2libGUoKVwiXG4gICh2aXNpYmxlQ2hhbmdlKT1cIm9uRGlhbG9nVmlzaWJsZUNoYW5nZSgkZXZlbnQpXCJcbiAgW2hlYWRlcl09XCJjb25maWc/LmRpYWxvZ1RpdGxlID8/ICdwbGF0Zm9ybS5kYXRhY29yZS5sb29rdXAuZGlhbG9nX3RpdGxlJ1wiXG4gIFtmb290ZXJCdXR0b25zXT1cImRpYWxvZ01vZGFsRm9vdGVyQnV0dG9ucygpXCJcbiAgW3dpZHRoXT1cIjgwMFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJzZGMtbG9va3VwX19kaWFsb2dcIj5cbiAgICBAaWYgKGNvbmZpZz8uc2hvd1NlYXJjaCAhPT0gZmFsc2UpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzZGMtbG9va3VwX19kaWFsb2ctc2VhcmNoXCI+XG4gICAgICAgIDxzZGMtc2VhcmNoYm94XG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybS5kYXRhY29yZS5sb29rdXAuc2VhcmNoX3BsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgKG9uU2VhcmNoKT1cIm9uRGlhbG9nU2VhcmNoRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgID48L3NkYy1zZWFyY2hib3g+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGhhc0ZpbHRlcnMoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cInNkYy1sb29rdXBfX2RpYWxvZy1maWx0ZXJzXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInNkYy1sb29rdXBfX2ZpbHRlcnMtdG9nZ2xlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImZpbHRlcnNFeHBhbmRlZCgpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImNvbXBvbmVudElkICsgJy1maWx0ZXJzLXBhbmVsJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZpbHRlcnMoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWx0ZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAge3sgJ3BsYXRmb3JtLmRhdGFjb3JlLmxvb2t1cC5maWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1jaGV2cm9uLWRvd24gc2RjLWxvb2t1cF9fZmlsdGVycy10b2dnbGUtY2FyZXRcIlxuICAgICAgICAgICAgW2NsYXNzLnNkYy1sb29rdXBfX2ZpbHRlcnMtdG9nZ2xlLWNhcmV0LS1vcGVuXT1cImZpbHRlcnNFeHBhbmRlZCgpXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgQGlmIChmaWx0ZXJzRXhwYW5kZWQoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtbG9va3VwX19maWx0ZXJzLXBhbmVsXCIgW2lkXT1cImNvbXBvbmVudElkICsgJy1maWx0ZXJzLXBhbmVsJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1sb29rdXBfX2ZpbHRlcnMtZ3JpZFwiPlxuICAgICAgICAgICAgICBAZm9yIChmaWx0ZXIgb2YgY29uZmlnLmZpbHRlcnM7IHRyYWNrIGZpbHRlci5uYW1lKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1sb29rdXBfX2ZpbHRlcnMtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZmlsdGVyLnR5cGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzZGMtY29tYm9ib3hcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmlsdGVyLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnBsYWNlaG9sZGVyID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJtYXBGaWx0ZXJPcHRpb25zKGZpbHRlci5vcHRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyVmFsdWVGb3IoZmlsdGVyLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlclZhbHVlQ2hhbmdlKGZpbHRlci5uYW1lLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zZGMtY29tYm9ib3g+XG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPHNkYy10ZXh0Ym94XG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpbHRlci5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpbHRlci5wbGFjZWhvbGRlciA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyVmFsdWVGb3IoZmlsdGVyLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlclZhbHVlQ2hhbmdlKGZpbHRlci5uYW1lLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zZGMtdGV4dGJveD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZGMtbG9va3VwX19maWx0ZXJzLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWxvb2t1cF9fZmlsdGVycy1hY3Rpb24gc2RjLWxvb2t1cF9fZmlsdGVycy1hY3Rpb24tLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybS5kYXRhY29yZS5sb29rdXAuY2xlYXJfZmlsdGVycycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkYy1sb29rdXBfX2ZpbHRlcnMtYWN0aW9uIHNkYy1sb29rdXBfX2ZpbHRlcnMtYWN0aW9uLS1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtLmRhdGFjb3JlLmxvb2t1cC5hcHBseV9maWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2IGNsYXNzPVwic2RjLWxvb2t1cF9fZGlhbG9nLXRhYmxlXCI+XG4gICAgICA8c2RjLXRhYmxlXG4gICAgICAgIFtjb2xzXT1cInRhYmxlQ29sdW1ucygpXCJcbiAgICAgICAgW2RhdGFdPVwiZGlhbG9nRGF0YS5pdGVtc1wiXG4gICAgICAgIFtsb2FkaW5nXT1cImRpYWxvZ0xvYWRpbmdcIlxuICAgICAgICBbY29uZmlnXT1cImRpYWxvZ1RhYmxlQ29uZmlnKClcIlxuICAgICAgICAocm93Q2xpY2spPVwib25EaWFsb2dSb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkRpYWxvZ1NlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L3NkYy10YWJsZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJzZGMtbG9va3VwX19kaWFsb2ctcGFnaW5hdG9yXCI+XG4gICAgICA8c2RjLXBhZ2luYXRvclxuICAgICAgICBbZmlyc3RdPVwiZGlhbG9nRmlyc3QoKVwiXG4gICAgICAgIFtyb3dzXT1cInBhZ2VTaXplKClcIlxuICAgICAgICBbdG90YWxSZWNvcmRzXT1cImRpYWxvZ0RhdGEudG90YWxSZWNvcmRzXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25EaWFsb2dQYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvc2RjLXBhZ2luYXRvcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3NkYy1tb2RhbD5cbiJdfQ==
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvbG9va3VwL2xvb2t1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2xvb2t1cC9sb29rdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFFUixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUVoQixPQUFPLEVBRVYsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFLekUsT0FBTyxFQUFFLG1CQUFtQixFQUE4QixNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NB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Q2hCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIHNpZ25hbCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIENka0Nvbm5lY3RlZE92ZXJsYXksXG4gICAgQ2RrT3ZlcmxheU9yaWdpbixcbiAgICBDb25uZWN0ZWRQb3NpdGlvbixcbiAgICBPdmVybGF5LFxuICAgIFNjcm9sbFN0cmF0ZWd5XG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJbnB1dHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2RpcmVjdGl2ZXMvaW5wdXRzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgdHlwZSB7IExvb2t1cENvbmZpZywgTG9va3VwR3JpZEZpZWxkLCBMb29rdXBTZWFyY2hSZXF1ZXN0LCBMb29rdXBTZWFyY2hSZXNwb25zZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvbG9va3VwLnR5cGUnO1xuaW1wb3J0IHR5cGUgeyBNb2RhbEJ1dHRvbiB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvbW9kYWwudHlwZSc7XG5pbXBvcnQgdHlwZSB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy90YWJsZS50eXBlJztcbmltcG9ydCB0eXBlIHsgUGFnaW5hdG9yU3RhdGUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3BhZ2luYXRvci50eXBlJztcbmltcG9ydCB7IHdhdGNoT3ZlcmxheURpc21pc3MsIHR5cGUgT3ZlcmxheURpc21pc3NXYXRjaGVyIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9vdmVybGF5LWRpc21pc3MudXRpbCc7XG5pbXBvcnQgeyBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL21vZGFsL21vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hib3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Ym94Q29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFID0gMTA7XG5jb25zdCBMT09LVVBfREVCT1VOQ0VfTVMgPSAzMDA7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2RjLWxvb2t1cCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgQ2RrQ29ubmVjdGVkT3ZlcmxheSxcbiAgICAgICAgQ2RrT3ZlcmxheU9yaWdpbixcbiAgICAgICAgTW9kYWxDb21wb25lbnQsXG4gICAgICAgIFRhYmxlQ29tcG9uZW50LFxuICAgICAgICBTZWFyY2hib3hDb21wb25lbnQsXG4gICAgICAgIFBhZ2luYXRvckNvbXBvbmVudCxcbiAgICAgICAgQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBUZXh0Ym94Q29tcG9uZW50LFxuICAgICAgICBDb21ib2JveENvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xvb2t1cC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2xvb2t1cC5jb21wb25lbnQuc2NzcycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTG9va3VwQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIExvb2t1cENvbXBvbmVudCBleHRlbmRzIElucHV0c0NvbXBvbmVudDx1bmtub3duPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbmV4dElkID0gMDtcblxuICAgIHByaXZhdGUgc3RhdGljIGFsbG9jYXRlQ29tcG9uZW50SWQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaWQgPSBMb29rdXBDb21wb25lbnQubmV4dElkO1xuICAgICAgICBMb29rdXBDb21wb25lbnQubmV4dElkICs9IDE7XG4gICAgICAgIHJldHVybiBgc2RjLWxvb2t1cC0ke2lkfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGRpc21pc3NXYXRjaGVyOiBPdmVybGF5RGlzbWlzc1dhdGNoZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBDREsgb3ZlcmxheSBjb25maWcgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvdmVybGF5UG9zaXRpb25zOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gW1xuICAgICAgICB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdib3R0b20nLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICd0b3AnIH0sXG4gICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ3RvcCcsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2JvdHRvbScgfVxuICAgIF07XG5cbiAgICBAVmlld0NoaWxkKCdjb250YWluZXJEaXYnKSBwcm90ZWN0ZWQgY29udGFpbmVyRGl2PzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvLyAtLS0gSW5wdXRzIC0tLVxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbmZpZyE6IExvb2t1cENvbmZpZztcbiAgICBASW5wdXQoKSBzdWdnZXN0aW9uczogdW5rbm93bltdID0gW107XG4gICAgQElucHV0KCkgZGlhbG9nRGF0YTogTG9va3VwU2VhcmNoUmVzcG9uc2UgPSB7IGl0ZW1zOiBbXSwgdG90YWxSZWNvcmRzOiAwIH07XG4gICAgQElucHV0KCkgZGlhbG9nTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLy8gLS0tIE91dHB1dHMgLS0tXG4gICAgQE91dHB1dCgpIG9uTG9va3VwUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIEBPdXRwdXQoKSBvbkRpYWxvZ1NlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8TG9va3VwU2VhcmNoUmVxdWVzdD4oKTtcbiAgICBAT3V0cHV0KCkgb25EaWFsb2dPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSB2YWx1ZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duPigpO1xuXG4gICAgLy8gLS0tIEludGVybmFsIHN0YXRlIC0tLVxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb21wb25lbnRJZCA9IExvb2t1cENvbXBvbmVudC5hbGxvY2F0ZUNvbXBvbmVudElkKCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlucHV0VmFsdWUgPSBzaWduYWwoJycpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBwYW5lbE9wZW4gPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkaWFsb2dWaXNpYmxlID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlhbG9nUXVlcnkgPSBzaWduYWwoJycpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkaWFsb2dQYWdlID0gc2lnbmFsKDApO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJzRXhwYW5kZWQgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJWYWx1ZXMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkaWFsb2dTZWxlY3Rpb24gPSBzaWduYWw8dW5rbm93bltdPihbXSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFnZVNpemUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZz8ucGFnZVNpemUgPz8gREVGQVVMVF9QQUdFX1NJWkUpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc011bHRpcGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWc/Lm11bHRpcGxlID09PSB0cnVlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGFzRmlsdGVycyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmNvbmZpZz8uZmlsdGVycz8ubGVuZ3RoID8/IDApID4gMCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlhbG9nVGFibGVDb25maWcgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgICBzZWFyY2g6IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgICAgLy8gJ2FwaScgbW9kZTogZGlhbG9nRGF0YS5pdGVtcyBpcyBhIHNpbmdsZSBleHRlcm5hbGx5LWZldGNoZWQgcGFnZSAodmlhIG9uRGlhbG9nU2VhcmNoKSxcbiAgICAgICAgLy8gbm90IHRoZSBmdWxsIGRhdGFzZXQuIFRoaXMgYWxzbyB0ZWxscyBzZGMtdGFibGUgdG8gcHJlc2VydmUgbXVsdGktc2VsZWN0IGFjcm9zcyBwYWdlXG4gICAgICAgIC8vIGNoYW5nZXMgaW5zdGVhZCBvZiBkcm9wcGluZyByb3dzIHRoYXQgYXJlbid0IG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UuXG4gICAgICAgIHRhYmxlOiB7IHRvdGFsUmVjb3Jkc0xhYmVsOiAnJywgcmVzcG9uc2l2ZTogZmFsc2UsIG1vZGU6ICdhcGknIGFzIGNvbnN0IH0sXG4gICAgICAgIHBhZ2luYXRpb246IHsgc2hvdzogZmFsc2UgfSxcbiAgICAgICAgZW1wdHk6IHsgc2hvdzogdHJ1ZSwgdGl0bGU6ICdOZW5odW0gcmVzdWx0YWRvJywgdGV4dDogJ1RlbnRlIGFqdXN0YXIgYSBidXNjYS4nIH0sXG4gICAgICAgIGNlbGxzOiB7XG4gICAgICAgICAgICBjaGVja2JveDogeyBzZWxlY3RBbGw6IHRydWUgfVxuICAgICAgICB9XG4gICAgfSkpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYmxlQ29sdW1ucyA9IGNvbXB1dGVkPFRhYmxlQ29sdW1uW10+KCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZz8uZ3JpZEZpZWxkcykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmllbGRDb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gdGhpcy5jb25maWcuZ3JpZEZpZWxkcy5tYXAoKGZpZWxkOiBMb29rdXBHcmlkRmllbGQpID0+ICh7XG4gICAgICAgICAgICBmaWVsZDogZmllbGQubmFtZSxcbiAgICAgICAgICAgIGhlYWRlcjogZmllbGQubGFiZWwsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLm1hcEZpZWxkVHlwZShmaWVsZC50eXBlKSxcbiAgICAgICAgICAgIHdpZHRoOiBmaWVsZC53aWR0aFxuICAgICAgICB9IGFzIFRhYmxlQ29sdW1uKSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlwbGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkQ29sdW1ucztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoZWNrYm94Q29sdW1uOiBUYWJsZUNvbHVtbiA9IHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLmNvbmZpZy5kYXRhS2V5LFxuICAgICAgICAgICAgaGVhZGVyOiAncGxhdGZvcm0uZGF0YWNvcmUubG9va3VwX3NlbGVjdF9jb2x1bW4nLFxuICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94LXNlbGVjdGlvbicsXG4gICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBhbGlnbjogJ2NlbnRlcidcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gW2NoZWNrYm94Q29sdW1uLCAuLi5maWVsZENvbHVtbnNdO1xuICAgIH0pO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRpYWxvZ0ZpcnN0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kaWFsb2dQYWdlKCkgKiB0aGlzLnBhZ2VTaXplKCkpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhc0RpYWxvZ1NlbGVjdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGlhbG9nU2VsZWN0aW9uKCkubGVuZ3RoID4gMCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlhbG9nTW9kYWxGb290ZXJCdXR0b25zID0gY29tcHV0ZWQ8TW9kYWxCdXR0b25bXT4oKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aXBsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBgJHt0aGlzLmNvbXBvbmVudElkfS1jb25maXJtLXNlbGVjdGlvbmAsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdwbGF0Zm9ybS5kYXRhY29yZS5sb29rdXBfY29uZmlybV9zZWxlY3Rpb24nLFxuICAgICAgICAgICAgICAgIHNldmVyaXR5OiAncHJpbWFyeScsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLmhhc0RpYWxvZ1NlbGVjdGlvbigpLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5jb25maXJtTXVsdGlwbGVTZWxlY3Rpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5pbnB1dFN1YmplY3QucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZShMT09LVVBfREVCT1VOQ0VfTVMpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgICApLnN1YnNjcmliZSgocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkxvb2t1cFJlcXVlc3QuZW1pdChxdWVyeSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNtaXNzV2F0Y2hlciA9IHdhdGNoT3ZlcmxheURpc21pc3Moe1xuICAgICAgICAgICAgZ2V0VHJpZ2dlckVsZW1lbnQ6ICgpID0+IHRoaXMuY29udGFpbmVyRGl2Py5uYXRpdmVFbGVtZW50ID8/IG51bGwsXG4gICAgICAgICAgICBpc09wZW46ICgpID0+IHRoaXMucGFuZWxPcGVuKCksXG4gICAgICAgICAgICBvbkRpc21pc3M6ICgpID0+IHRoaXMuY2xvc2VQYW5lbCgpLFxuICAgICAgICAgICAgcm91dGVyOiB0aGlzLnJvdXRlclxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kaXNtaXNzV2F0Y2hlcj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIC0tLSBWYWx1ZSBhY2Nlc3NvciBvdmVycmlkZXMgLS0tXG4gICAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXREaXNwbGF5KCk7XG4gICAgfVxuXG4gICAgLy8gLS0tIEZpbHRlcnMgLS0tXG4gICAgcHJvdGVjdGVkIHRvZ2dsZUZpbHRlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsdGVyc0V4cGFuZGVkLnNldCghdGhpcy5maWx0ZXJzRXhwYW5kZWQoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRmlsdGVyVmFsdWVDaGFuZ2UobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlclZhbHVlcy5zZXQoeyAuLi50aGlzLmZpbHRlclZhbHVlcygpLCBbbmFtZV06IHZhbHVlID8/ICcnIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmaWx0ZXJWYWx1ZUZvcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJWYWx1ZXMoKVtuYW1lXSA/PyAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbWFwRmlsdGVyT3B0aW9ucyhvcHRpb25zOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdIHwgdW5kZWZpbmVkKTogeyB2YWx1ZTogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdIHtcbiAgICAgICAgcmV0dXJuIChvcHRpb25zID8/IFtdKS5tYXAoKG9wdGlvbikgPT4gKHsgdmFsdWU6IG9wdGlvbi52YWx1ZSwgdGV4dDogb3B0aW9uLmxhYmVsIH0pKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXBwbHlGaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1BhZ2Uuc2V0KDApO1xuICAgICAgICB0aGlzLmVtaXREaWFsb2dTZWFyY2goKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xlYXJGaWx0ZXJzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlclZhbHVlcy5zZXQoe30pO1xuICAgICAgICB0aGlzLmRpYWxvZ1BhZ2Uuc2V0KDApO1xuICAgICAgICB0aGlzLmVtaXREaWFsb2dTZWFyY2goKTtcbiAgICB9XG5cbiAgICAvLyAtLS0gQXV0b2NvbXBsZXRlIGlucHV0IC0tLVxuICAgIHByb3RlY3RlZCBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0YXJnZXQ/LnZhbHVlID8/ICcnO1xuICAgICAgICB0aGlzLmlucHV0VmFsdWUuc2V0KHF1ZXJ5KTtcbiAgICAgICAgdGhpcy5pbnB1dFN1YmplY3QubmV4dChxdWVyeSk7XG5cbiAgICAgICAgaWYgKHF1ZXJ5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxPcGVuLnNldCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxPcGVuLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmNvbW1pdFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZVNlbGVjdGVkLmVtaXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25JbnB1dEZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwICYmIHRoaXMuaW5wdXRWYWx1ZSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxPcGVuLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbG9zZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBhbmVsT3Blbi5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZWxlY3RTdWdnZXN0aW9uKGl0ZW06IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW0pO1xuICAgICAgICB0aGlzLnBhbmVsT3Blbi5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWUoaXRlbTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXRlbSB8fCAhdGhpcy5jb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIHJldHVybiBTdHJpbmcocmVjb3JkW3RoaXMuY29uZmlnLmRpc3BsYXlGaWVsZF0gPz8gJycpO1xuICAgIH1cblxuICAgIC8vIC0tLSBEaWFsb2cgLS0tXG4gICAgcHJvdGVjdGVkIG9wZW5EaWFsb2coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nVmlzaWJsZS5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGlhbG9nUXVlcnkuc2V0KCcnKTtcbiAgICAgICAgdGhpcy5kaWFsb2dQYWdlLnNldCgwKTtcbiAgICAgICAgdGhpcy5maWx0ZXJzRXhwYW5kZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5kaWFsb2dTZWxlY3Rpb24uc2V0KHRoaXMuaXNNdWx0aXBsZSgpICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyBbLi4udGhpcy52YWx1ZV0gOiBbXSk7XG4gICAgICAgIHRoaXMub25EaWFsb2dPcGVuLmVtaXQoKTtcbiAgICAgICAgdGhpcy5lbWl0RGlhbG9nU2VhcmNoKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRGlhbG9nVmlzaWJsZUNoYW5nZSh2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nVmlzaWJsZS5zZXQodmlzaWJsZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRGlhbG9nU2VhcmNoRXZlbnQocXVlcnk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1F1ZXJ5LnNldChxdWVyeSk7XG4gICAgICAgIHRoaXMuZGlhbG9nUGFnZS5zZXQoMCk7XG4gICAgICAgIHRoaXMuZW1pdERpYWxvZ1NlYXJjaCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkRpYWxvZ1BhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2luYXRvclN0YXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUGFnZS5zZXQoZXZlbnQucGFnZSk7XG4gICAgICAgIHRoaXMuZW1pdERpYWxvZ1NlYXJjaCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkRpYWxvZ1Jvd0NsaWNrKHJvdzogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKCkpIHtcbiAgICAgICAgICAgIC8vIEluIG11bHRpcGxlIG1vZGUsIGEgcm93IGNsaWNrIHRvZ2dsZXMgdGhlIGNoZWNrYm94IGluc3RlYWQgb2YgY29tbWl0dGluZ1xuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIHNvIHRoZSB1c2VyIGNhbiBwaWNrIHNldmVyYWwgcm93cyBiZWZvcmUgY29uZmlybWluZy5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRGlhbG9nUm93U2VsZWN0aW9uKHJvdyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdEl0ZW0ocm93KTtcbiAgICAgICAgdGhpcy5kaWFsb2dWaXNpYmxlLnNldChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRGlhbG9nU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbjogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VsZWN0aW9uLnNldChzZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb25maXJtTXVsdGlwbGVTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZGlhbG9nU2VsZWN0aW9uKCk7XG5cbiAgICAgICAgaWYgKHNlbGVjdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3Rpb247XG4gICAgICAgIHRoaXMub25DaGFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMudmFsdWVTZWxlY3RlZC5lbWl0KHNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXREaXNwbGF5KCk7XG4gICAgICAgIHRoaXMuZGlhbG9nVmlzaWJsZS5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIC0tLSBIZWxwZXJzIC0tLVxuICAgIHByaXZhdGUgc2VsZWN0SXRlbShpdGVtOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IHN0b3JlZFZhbHVlID0gcmVjb3JkW3RoaXMuY29uZmlnLmRhdGFLZXldID8/IGl0ZW07XG4gICAgICAgIHRoaXMudmFsdWUgPSBpdGVtO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHN0b3JlZFZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHN0b3JlZFZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dERpc3BsYXkoKTtcbiAgICAgICAgdGhpcy52YWx1ZVNlbGVjdGVkLmVtaXQoaXRlbSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVEaWFsb2dSb3dTZWxlY3Rpb24ocm93OiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmRpYWxvZ1NlbGVjdGlvbigpO1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmRhdGFLZXlPZihyb3cpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGN1cnJlbnQuZmluZEluZGV4KChpdGVtKSA9PiB0aGlzLmRhdGFLZXlPZihpdGVtKSA9PT0ga2V5KTtcblxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZWxlY3Rpb24uc2V0KFsuLi5jdXJyZW50LnNsaWNlKDAsIGluZGV4KSwgLi4uY3VycmVudC5zbGljZShpbmRleCArIDEpXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlbGVjdGlvbi5zZXQoWy4uLmN1cnJlbnQsIHJvd10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkYXRhS2V5T2YoaXRlbTogdW5rbm93bik6IHVua25vd24ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICByZXR1cm4gcmVjb3JkPy5bdGhpcy5jb25maWc/LmRhdGFLZXldO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW5wdXREaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKCkgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFZhbHVlLnNldChcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcCgoaXRlbSkgPT4gdGhpcy5nZXREaXNwbGF5VmFsdWUoaXRlbSkpLmpvaW4oJywgJylcbiAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWUuc2V0KHRoaXMuZ2V0RGlzcGxheVZhbHVlKHRoaXMudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRWYWx1ZS5zZXQoJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0RGlhbG9nU2VhcmNoKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBMb29rdXBTZWFyY2hSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgcXVlcnk6IHRoaXMuZGlhbG9nUXVlcnkoKSxcbiAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplKCksXG4gICAgICAgICAgICBwYWdlOiB0aGlzLmRpYWxvZ1BhZ2UoKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0ZpbHRlcnMoKSkge1xuICAgICAgICAgICAgcmVxdWVzdC5maWx0ZXJzID0gdGhpcy5maWx0ZXJWYWx1ZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25EaWFsb2dTZWFyY2guZW1pdChyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcEZpZWxkVHlwZSh0eXBlPzogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdudW1lcmljJztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOiByZXR1cm4gJ2RhdGUnO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZGMtbG9va3VwXCIgW25nU3R5bGVdPVwiZ2V0SW5wdXRTdHlsZSgpXCI+XG4gIEBpZiAobGFiZWxLZXkoKSkge1xuICAgIDxsYWJlbCBjbGFzcz1cInNkYy1sb29rdXBfX2xhYmVsXCIgW2Zvcl09XCJjb21wb25lbnRJZFwiPlxuICAgICAge3sgbGFiZWxLZXkoKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgQGlmIChyZXF1aXJlZCkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1sb29rdXBfX3JlcXVpcmVkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kjwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2xhYmVsPlxuICB9XG5cbiAgPGRpdlxuICAgICNjb250YWluZXJEaXZcbiAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICBjbGFzcz1cInNkYy1sb29rdXBfX2NvbnRyb2xcIlxuICAgIFtjbGFzcy5zZGMtbG9va3VwX19jb250cm9sLS1pbnZhbGlkXT1cImludmFsaWRcIlxuICAgIFtjbGFzcy5zZGMtbG9va3VwX19jb250cm9sLS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIFtpZF09XCJjb21wb25lbnRJZFwiXG4gICAgICBjbGFzcz1cInNkYy1sb29rdXBfX2lucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwicGFuZWxPcGVuKCkgPyAndHJ1ZScgOiAnZmFsc2UnXCJcbiAgICAgIGFyaWEtY29udHJvbHM9XCJzZGMtbG9va3VwLWxpc3Rib3hcIlxuICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJjb21wb25lbnRJZCArICctbGlzdGJveCdcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwbGFjZWhvbGRlciB8fCAoY29uZmlnLnBsYWNlaG9sZGVyID8/ICcnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiKGNvbmZpZy5wbGFjZWhvbGRlciA/PyBwbGFjZWhvbGRlcikgfCB0cmFuc2xhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFt2YWx1ZV09XCJpbnB1dFZhbHVlKClcIlxuICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxuICAgIC8+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwic2RjLWxvb2t1cF9fc2VhcmNoLWJ1dHRvblwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm0uZGF0YWNvcmUubG9va3VwX29wZW5fZGlhbG9nJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAoY2xpY2spPVwib3BlbkRpYWxvZygpXCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1zZWFyY2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQXV0b2NvbXBsZXRlIGRyb3Bkb3duIC0tPlxuICBAaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIlxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInBhbmVsT3BlbigpXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cIm92ZXJsYXlQb3NpdGlvbnNcIlxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneV09XCJzY3JvbGxTdHJhdGVneVwiXG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVZpZXdwb3J0TWFyZ2luXT1cIjhcIlxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcF09XCJ0cnVlXCJcbiAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzPVwiY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BcIlxuICAgICAgKGJhY2tkcm9wQ2xpY2spPVwiY2xvc2VQYW5lbCgpXCJcbiAgICAgIChkZXRhY2gpPVwiY2xvc2VQYW5lbCgpXCJcbiAgICA+XG4gICAgICA8IS0tIE5PU09OQVI6IGN1c3RvbSBhdXRvY29tcGxldGUgcG9wdXAgaW50ZW50aW9uYWxseSB1c2VzIEFSSUEgbGlzdGJveCBzZW1hbnRpY3MgaW5zdGVhZCBvZiBhIG5hdGl2ZSBzZWxlY3QgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwic2RjLWxvb2t1cF9fcGFuZWxcIlxuICAgICAgICBbaWRdPVwiY29tcG9uZW50SWQgKyAnLWxpc3Rib3gnXCJcbiAgICAgICAgW2F0dHIucm9sZV09XCInbGlzdGJveCdcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29udGFpbmVyRGl2Py5vZmZzZXRXaWR0aCA/PyBudWxsXCJcbiAgICAgID5cbiAgICAgICAgPHVsIGNsYXNzPVwic2RjLWxvb2t1cF9fbGlzdFwiPlxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc3VnZ2VzdGlvbnM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8IS0tIE5PU09OQVIgLS0+XG4gICAgICAgICAgICA8IS0tIHRoZSBjdXN0b20gbGlzdGJveCBrZWVwcyBvcHRpb24gc2VtYW50aWNzIG9uIHRoZSBmb2N1c2FibGUgYWN0aW9uIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIC0tPlxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgIGNsYXNzPVwic2RjLWxvb2t1cF9fb3B0aW9uXCJcbiAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCInb3B0aW9uJ1wiXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICBbaWRdPVwiY29tcG9uZW50SWQgKyAnLW9wdGlvbi0nICsgaVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiJ2ZhbHNlJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RTdWdnZXN0aW9uKGl0ZW0pXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VsZWN0U3VnZ2VzdGlvbihpdGVtKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShpdGVtKSB9fVxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICB9XG5cbiAgQGlmIChtZXNzYWdlS2V5KCkpIHtcbiAgICA8c21hbGxcbiAgICAgIGNsYXNzPVwic2RjLWxvb2t1cF9fbWVzc2FnZVwiXG4gICAgICBbY2xhc3Muc2RjLWxvb2t1cF9fbWVzc2FnZS0taW52YWxpZF09XCJpbnZhbGlkXCJcbiAgICA+XG4gICAgICB7eyBtZXNzYWdlS2V5KCkgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NtYWxsPlxuICB9XG48L2Rpdj5cblxuPCEtLSBTZWFyY2ggRGlhbG9nIC0tPlxuPHNkYy1tb2RhbFxuICBbdmlzaWJsZV09XCJkaWFsb2dWaXNpYmxlKClcIlxuICAodmlzaWJsZUNoYW5nZSk9XCJvbkRpYWxvZ1Zpc2libGVDaGFuZ2UoJGV2ZW50KVwiXG4gIFtoZWFkZXJdPVwiY29uZmlnLmRpYWxvZ1RpdGxlID8/ICdwbGF0Zm9ybS5kYXRhY29yZS5sb29rdXBfZGlhbG9nX3RpdGxlJ1wiXG4gIFtmb290ZXJCdXR0b25zXT1cImRpYWxvZ01vZGFsRm9vdGVyQnV0dG9ucygpXCJcbiAgW3dpZHRoXT1cIjgwMFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJzZGMtbG9va3VwX19kaWFsb2dcIj5cbiAgICBAaWYgKGNvbmZpZy5zaG93U2VhcmNoICE9PSBmYWxzZSkge1xuICAgICAgPGRpdiBjbGFzcz1cInNkYy1sb29rdXBfX2RpYWxvZy1zZWFyY2hcIj5cbiAgICAgICAgPHNkYy1zZWFyY2hib3hcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsYXRmb3JtLmRhdGFjb3JlLmxvb2t1cF9zZWFyY2hfcGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAob25TZWFyY2gpPVwib25EaWFsb2dTZWFyY2hFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgPjwvc2RjLXNlYXJjaGJveD5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoaGFzRmlsdGVycygpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwic2RjLWxvb2t1cF9fZGlhbG9nLWZpbHRlcnNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2RjLWxvb2t1cF9fZmlsdGVycy10b2dnbGVcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZmlsdGVyc0V4cGFuZGVkKClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiY29tcG9uZW50SWQgKyAnLWZpbHRlcnMtcGFuZWwnXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVycygpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbHRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICB7eyAncGxhdGZvcm0uZGF0YWNvcmUubG9va3VwX2ZpbHRlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tZG93biBzZGMtbG9va3VwX19maWx0ZXJzLXRvZ2dsZS1jYXJldFwiXG4gICAgICAgICAgICBbY2xhc3Muc2RjLWxvb2t1cF9fZmlsdGVycy10b2dnbGUtY2FyZXQtLW9wZW5dPVwiZmlsdGVyc0V4cGFuZGVkKClcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICBAaWYgKGZpbHRlcnNFeHBhbmRlZCgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1sb29rdXBfX2ZpbHRlcnMtcGFuZWxcIiBbaWRdPVwiY29tcG9uZW50SWQgKyAnLWZpbHRlcnMtcGFuZWwnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLWxvb2t1cF9fZmlsdGVycy1ncmlkXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGZpbHRlciBvZiBjb25maWcuZmlsdGVyczsgdHJhY2sgZmlsdGVyLm5hbWUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2RjLWxvb2t1cF9fZmlsdGVycy1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXIudHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNkYy1jb21ib2JveFxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJmaWx0ZXIubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXIucGxhY2Vob2xkZXIgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIm1hcEZpbHRlck9wdGlvbnMoZmlsdGVyLm9wdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJWYWx1ZUZvcihmaWx0ZXIubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmlsdGVyVmFsdWVDaGFuZ2UoZmlsdGVyLm5hbWUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgID48L3NkYy1jb21ib2JveD5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8c2RjLXRleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmlsdGVyLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnBsYWNlaG9sZGVyID8/ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJWYWx1ZUZvcihmaWx0ZXIubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmlsdGVyVmFsdWVDaGFuZ2UoZmlsdGVyLm5hbWUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgID48L3NkYy10ZXh0Ym94PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1sb29rdXBfX2ZpbHRlcnMtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZGMtbG9va3VwX19maWx0ZXJzLWFjdGlvbiBzZGMtbG9va3VwX19maWx0ZXJzLWFjdGlvbi0tc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWx0ZXJzKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtLmRhdGFjb3JlLmxvb2t1cF9jbGVhcl9maWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWxvb2t1cF9fZmlsdGVycy1hY3Rpb24gc2RjLWxvb2t1cF9fZmlsdGVycy1hY3Rpb24tLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm0uZGF0YWNvcmUubG9va3VwX2FwcGx5X2ZpbHRlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJzZGMtbG9va3VwX19kaWFsb2ctdGFibGVcIj5cbiAgICAgIDxzZGMtdGFibGVcbiAgICAgICAgW2NvbHNdPVwidGFibGVDb2x1bW5zKClcIlxuICAgICAgICBbZGF0YV09XCJkaWFsb2dEYXRhLml0ZW1zXCJcbiAgICAgICAgW2xvYWRpbmddPVwiZGlhbG9nTG9hZGluZ1wiXG4gICAgICAgIFtjb25maWddPVwiZGlhbG9nVGFibGVDb25maWcoKVwiXG4gICAgICAgIChyb3dDbGljayk9XCJvbkRpYWxvZ1Jvd0NsaWNrKCRldmVudClcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uRGlhbG9nU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvc2RjLXRhYmxlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInNkYy1sb29rdXBfX2RpYWxvZy1wYWdpbmF0b3JcIj5cbiAgICAgIDxzZGMtcGFnaW5hdG9yXG4gICAgICAgIFtmaXJzdF09XCJkaWFsb2dGaXJzdCgpXCJcbiAgICAgICAgW3Jvd3NdPVwicGFnZVNpemUoKVwiXG4gICAgICAgIFt0b3RhbFJlY29yZHNdPVwiZGlhbG9nRGF0YS50b3RhbFJlY29yZHNcIlxuICAgICAgICAocGFnZUNoYW5nZSk9XCJvbkRpYWxvZ1BhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+PC9zZGMtcGFnaW5hdG9yPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvc2RjLW1vZGFsPlxuIl19