@festo-ui/angular 4.0.3-pre-20221124.8 → 5.0.0-dev.102

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 (251) hide show
  1. package/README.md +13 -53
  2. package/css/bundle.css +1 -1
  3. package/css/image-gallery.css +1 -1
  4. package/css/popover.css +1 -1
  5. package/esm2020/festo-ui-angular.mjs +2 -2
  6. package/esm2020/lib/components/accordion/accordion-header/accordion-header.component.mjs +6 -6
  7. package/esm2020/lib/components/accordion/accordion-item/accordion-item-body/accordion-item-body.component.mjs +6 -6
  8. package/esm2020/lib/components/accordion/accordion-item/accordion-item-header/accordion-item-header.component.mjs +11 -11
  9. package/esm2020/lib/components/accordion/accordion-item/accordion-item.component.mjs +41 -36
  10. package/esm2020/lib/components/accordion/accordion.component.mjs +21 -21
  11. package/esm2020/lib/components/accordion/index.mjs +1 -1
  12. package/esm2020/lib/components/breadcrumb/breadcrumb.component.mjs +9 -6
  13. package/esm2020/lib/components/buttons/button/button.component.mjs +8 -7
  14. package/esm2020/lib/components/buttons/link-button/link-button.component.mjs +8 -7
  15. package/esm2020/lib/components/chips/chip/chip.component.mjs +7 -6
  16. package/esm2020/lib/components/chips/chip-container/chip-container.component.mjs +7 -6
  17. package/esm2020/lib/components/components.module.mjs +202 -208
  18. package/esm2020/lib/components/loading-indicator/loading-indicator.component.mjs +7 -6
  19. package/esm2020/lib/components/mobile-flyout/mobile-flyout-item/mobile-flyout-item.component.mjs +8 -7
  20. package/esm2020/lib/components/mobile-flyout/mobile-flyout-page/mobile-flyout-page.component.mjs +10 -9
  21. package/esm2020/lib/components/mobile-flyout/mobile-flyout.component.mjs +10 -10
  22. package/esm2020/lib/components/pagination/pagination.component.mjs +15 -13
  23. package/esm2020/lib/components/popovers/legend/legend.component.mjs +14 -14
  24. package/esm2020/lib/components/popovers/legend/legend.directive.mjs +8 -8
  25. package/esm2020/lib/components/popovers/popover/popover.component.mjs +11 -11
  26. package/esm2020/lib/components/popovers/popover-content/popover-content.component.mjs +16 -18
  27. package/esm2020/lib/components/popovers/popover-content/popover-content.directive.mjs +7 -7
  28. package/esm2020/lib/components/popovers/popover-menu/popover-menu.component.mjs +18 -19
  29. package/esm2020/lib/components/popovers/popover-ref.mjs +2 -2
  30. package/esm2020/lib/components/popovers/popover.defaults.mjs +17 -18
  31. package/esm2020/lib/components/popovers/popover.models.mjs +7 -23
  32. package/esm2020/lib/components/popovers/popover.service.mjs +31 -32
  33. package/esm2020/lib/components/popovers/tooltip/tooltip.directive.mjs +18 -18
  34. package/esm2020/lib/components/progress/progress.component.mjs +8 -6
  35. package/esm2020/lib/components/scroll/index.mjs +1 -1
  36. package/esm2020/lib/components/scroll/scrollable.directive.mjs +10 -7
  37. package/esm2020/lib/components/search-input/search-input.component.mjs +20 -10
  38. package/esm2020/lib/components/snackbar/snackbar-container.component.mjs +7 -7
  39. package/esm2020/lib/components/snackbar/snackbar-container.directive.mjs +12 -15
  40. package/esm2020/lib/components/snackbar/snackbar.component.mjs +9 -7
  41. package/esm2020/lib/components/snackbar/snackbar.models.mjs +1 -1
  42. package/esm2020/lib/components/snackbar/snackbar.module.mjs +12 -14
  43. package/esm2020/lib/components/snackbar/snackbar.service.mjs +5 -5
  44. package/esm2020/lib/components/stepper-horizontal/step-horizontal/step-horizontal.component.mjs +6 -6
  45. package/esm2020/lib/components/stepper-horizontal/stepper-horizontal.component.mjs +10 -9
  46. package/esm2020/lib/components/stepper-vertical/step-vertical/step-vertical.component.mjs +8 -7
  47. package/esm2020/lib/components/stepper-vertical/stepper-vertical.component.mjs +9 -9
  48. package/esm2020/lib/components/table-header-cell/table-header-cell.directive.mjs +9 -8
  49. package/esm2020/lib/components/tabs/tab-pane/tab-pane.component.mjs +8 -8
  50. package/esm2020/lib/components/tabs/tabs.component.mjs +113 -27
  51. package/esm2020/lib/directives/click-outside.directive.mjs +29 -0
  52. package/esm2020/lib/festo-angular.module.mjs +9 -72
  53. package/esm2020/lib/forms/checkbox/checkbox.component.mjs +29 -24
  54. package/esm2020/lib/forms/color-indicator/color-indicator.component.mjs +29 -9
  55. package/esm2020/lib/forms/color-picker/color-helper.mjs +16 -8
  56. package/esm2020/lib/forms/color-picker/color-picker.component.mjs +38 -19
  57. package/esm2020/lib/forms/date-picker/date-picker.component.mjs +29 -26
  58. package/esm2020/lib/forms/date-range-picker/date-range-picker.component.mjs +33 -29
  59. package/esm2020/lib/forms/flatpickr/flatpickr.component.mjs +55 -0
  60. package/esm2020/lib/forms/forms.module.mjs +117 -110
  61. package/esm2020/lib/forms/radio/radio.component.mjs +54 -50
  62. package/esm2020/lib/forms/segment/segment-control/segment-control.component.mjs +22 -14
  63. package/esm2020/lib/forms/segment/segment.component.mjs +60 -30
  64. package/esm2020/lib/forms/select/chip-text.pipe.mjs +16 -11
  65. package/esm2020/lib/forms/select/select-option/select-option.component.mjs +8 -7
  66. package/esm2020/lib/forms/select/select.component.mjs +55 -47
  67. package/esm2020/lib/forms/slider/slider.component.mjs +27 -24
  68. package/esm2020/lib/forms/switch/switch.component.mjs +21 -20
  69. package/esm2020/lib/forms/text-area/text-area.component.mjs +19 -12
  70. package/esm2020/lib/forms/text-editor/text-editor.component.mjs +73 -65
  71. package/esm2020/lib/forms/text-input/text-input.component.mjs +40 -15
  72. package/esm2020/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.mjs +9 -7
  73. package/esm2020/lib/forms/time-picker/time-picker.component.mjs +23 -20
  74. package/esm2020/lib/forms/unique-selection-dispatcher.mjs +8 -6
  75. package/esm2020/lib/forms/value-accessor-base.mjs +6 -6
  76. package/esm2020/lib/modals/alert/alert.component.mjs +54 -0
  77. package/esm2020/lib/modals/confirm/confirm.component.mjs +55 -0
  78. package/esm2020/lib/modals/custom-modal/custom-modal.component.mjs +70 -0
  79. package/esm2020/lib/modals/image-gallery/image-gallery.component.mjs +62 -0
  80. package/esm2020/lib/modals/index.mjs +2 -0
  81. package/esm2020/lib/modals/modal.service.mjs +118 -0
  82. package/esm2020/lib/modals/modals.module.mjs +25 -0
  83. package/esm2020/lib/modals/prompt/prompt.component.mjs +106 -0
  84. package/esm2020/lib/pipes/safe-html.pipe.mjs +7 -7
  85. package/esm2020/public-api.mjs +66 -0
  86. package/fesm2015/festo-ui-angular.mjs +4757 -4593
  87. package/fesm2015/festo-ui-angular.mjs.map +1 -1
  88. package/fesm2020/festo-ui-angular.mjs +4929 -4805
  89. package/fesm2020/festo-ui-angular.mjs.map +1 -1
  90. package/index.d.ts +5 -13
  91. package/lib/components/accordion/accordion-header/accordion-header.component.d.ts +3 -3
  92. package/lib/components/accordion/accordion-item/accordion-item-body/accordion-item-body.component.d.ts +3 -3
  93. package/lib/components/accordion/accordion-item/accordion-item-header/accordion-item-header.component.d.ts +5 -5
  94. package/lib/components/accordion/accordion-item/accordion-item.component.d.ts +9 -8
  95. package/lib/components/accordion/accordion.component.d.ts +7 -7
  96. package/lib/components/breadcrumb/breadcrumb.component.d.ts +3 -3
  97. package/lib/components/buttons/button/button.component.d.ts +6 -6
  98. package/lib/components/buttons/link-button/link-button.component.d.ts +6 -6
  99. package/lib/components/chips/chip/chip.component.d.ts +4 -4
  100. package/lib/components/chips/chip-container/chip-container.component.d.ts +3 -3
  101. package/lib/components/components.module.d.ts +35 -69
  102. package/lib/components/loading-indicator/loading-indicator.component.d.ts +3 -3
  103. package/lib/components/mobile-flyout/mobile-flyout-item/mobile-flyout-item.component.d.ts +3 -3
  104. package/lib/components/mobile-flyout/mobile-flyout-page/mobile-flyout-page.component.d.ts +5 -5
  105. package/lib/components/mobile-flyout/mobile-flyout.component.d.ts +5 -5
  106. package/lib/components/pagination/pagination.component.d.ts +6 -6
  107. package/lib/components/popovers/legend/legend.component.d.ts +10 -10
  108. package/lib/components/popovers/legend/legend.directive.d.ts +5 -5
  109. package/lib/components/popovers/popover/popover.component.d.ts +6 -6
  110. package/lib/components/popovers/popover-content/popover-content.component.d.ts +13 -13
  111. package/lib/components/popovers/popover-content/popover-content.directive.d.ts +5 -5
  112. package/lib/components/popovers/popover-menu/popover-menu.component.d.ts +15 -15
  113. package/lib/components/popovers/popover-ref.d.ts +4 -4
  114. package/lib/components/popovers/popover.defaults.d.ts +4 -4
  115. package/lib/components/popovers/popover.models.d.ts +18 -30
  116. package/lib/components/popovers/popover.service.d.ts +7 -7
  117. package/lib/components/popovers/tooltip/tooltip.directive.d.ts +9 -9
  118. package/lib/components/progress/progress.component.d.ts +3 -3
  119. package/lib/components/scroll/scrollable.directive.d.ts +4 -4
  120. package/lib/components/search-input/search-input.component.d.ts +9 -9
  121. package/lib/components/snackbar/snackbar-container.component.d.ts +5 -5
  122. package/lib/components/snackbar/snackbar-container.directive.d.ts +8 -11
  123. package/lib/components/snackbar/snackbar.component.d.ts +5 -5
  124. package/lib/components/snackbar/snackbar.models.d.ts +2 -2
  125. package/lib/components/snackbar/snackbar.module.d.ts +1 -2
  126. package/lib/components/snackbar/snackbar.service.d.ts +8 -8
  127. package/lib/components/stepper-horizontal/step-horizontal/step-horizontal.component.d.ts +3 -3
  128. package/lib/components/stepper-horizontal/stepper-horizontal.component.d.ts +5 -5
  129. package/lib/components/stepper-vertical/step-vertical/step-vertical.component.d.ts +4 -4
  130. package/lib/components/stepper-vertical/stepper-vertical.component.d.ts +5 -5
  131. package/lib/components/table-header-cell/table-header-cell.directive.d.ts +11 -11
  132. package/lib/components/tabs/tab-pane/tab-pane.component.d.ts +9 -9
  133. package/lib/components/tabs/tabs.component.d.ts +24 -24
  134. package/lib/directives/click-outside.directive.d.ts +10 -0
  135. package/lib/festo-angular.module.d.ts +6 -11
  136. package/lib/forms/checkbox/checkbox.component.d.ts +3 -3
  137. package/lib/forms/color-indicator/color-indicator.component.d.ts +3 -3
  138. package/lib/forms/color-picker/color-helper.d.ts +4 -4
  139. package/lib/forms/color-picker/color-picker.component.d.ts +8 -8
  140. package/lib/forms/date-picker/date-picker.component.d.ts +15 -15
  141. package/lib/forms/date-range-picker/date-range-picker.component.d.ts +16 -16
  142. package/lib/forms/flatpickr/flatpickr.component.d.ts +19 -0
  143. package/lib/forms/forms.module.d.ts +17 -37
  144. package/lib/forms/radio/radio.component.d.ts +22 -22
  145. package/lib/forms/segment/segment-control/segment-control.component.d.ts +14 -15
  146. package/lib/forms/segment/segment.component.d.ts +20 -11
  147. package/lib/forms/select/chip-text.pipe.d.ts +3 -3
  148. package/lib/forms/select/select-option/select-option.component.d.ts +5 -5
  149. package/lib/forms/select/select.component.d.ts +15 -15
  150. package/lib/forms/slider/slider.component.d.ts +8 -8
  151. package/lib/forms/switch/switch.component.d.ts +7 -7
  152. package/lib/forms/text-area/text-area.component.d.ts +14 -14
  153. package/lib/forms/text-editor/text-editor.component.d.ts +22 -22
  154. package/lib/forms/text-input/text-input.component.d.ts +6 -7
  155. package/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.d.ts +8 -8
  156. package/lib/forms/time-picker/time-picker.component.d.ts +11 -11
  157. package/lib/forms/unique-selection-dispatcher.d.ts +5 -5
  158. package/lib/forms/value-accessor-base.d.ts +6 -6
  159. package/lib/{components/modals → modals}/alert/alert.component.d.ts +6 -6
  160. package/lib/{components/modals → modals}/confirm/confirm.component.d.ts +6 -6
  161. package/lib/modals/custom-modal/custom-modal.component.d.ts +21 -0
  162. package/lib/{components → modals}/image-gallery/image-gallery.component.d.ts +8 -8
  163. package/lib/{components/modals → modals}/index.d.ts +1 -1
  164. package/lib/modals/modal.service.d.ts +22 -0
  165. package/lib/{components/modals → modals}/modals.module.d.ts +1 -6
  166. package/lib/{components/modals → modals}/prompt/prompt.component.d.ts +6 -6
  167. package/lib/pipes/safe-html.pipe.d.ts +3 -3
  168. package/package.json +13 -16
  169. package/public-api.d.ts +62 -0
  170. package/scss/base/image-gallery.scss +3 -0
  171. package/scss/base/popover.scss +9 -0
  172. package/scss/base/styles.scss +5 -0
  173. package/esm2020/index.mjs +0 -26
  174. package/esm2020/lib/components/click-outside.directive.mjs +0 -28
  175. package/esm2020/lib/components/image-gallery/image-gallery.component.mjs +0 -60
  176. package/esm2020/lib/components/image-gallery/image-gallery.module.mjs +0 -22
  177. package/esm2020/lib/components/modals/alert/alert.component.mjs +0 -52
  178. package/esm2020/lib/components/modals/confirm/confirm.component.mjs +0 -53
  179. package/esm2020/lib/components/modals/custom-modal/custom-modal.component.mjs +0 -70
  180. package/esm2020/lib/components/modals/index.mjs +0 -2
  181. package/esm2020/lib/components/modals/modal.service.mjs +0 -121
  182. package/esm2020/lib/components/modals/modals.module.mjs +0 -31
  183. package/esm2020/lib/components/modals/prompt/prompt.component.mjs +0 -102
  184. package/esm2020/lib/content/content.module.mjs +0 -20
  185. package/esm2020/lib/content/icon/icon.component.mjs +0 -17
  186. package/esm2020/lib/forms/container-host.mjs +0 -27
  187. package/esm2020/lib/forms/date-picker.module.mjs +0 -28
  188. package/esm2020/lib/forms/text-editor/text-editor.module.mjs +0 -25
  189. package/esm2020/lib/layout/layout.module.mjs +0 -18
  190. package/esm2020/lib/pipes/pipes.module.mjs +0 -20
  191. package/esm2020/lib/wrappers/flatpickr/flatpickr.component.mjs +0 -59
  192. package/lib/components/click-outside.directive.d.ts +0 -10
  193. package/lib/components/image-gallery/image-gallery.module.d.ts +0 -11
  194. package/lib/components/modals/custom-modal/custom-modal.component.d.ts +0 -21
  195. package/lib/components/modals/modal.service.d.ts +0 -22
  196. package/lib/content/content.module.d.ts +0 -9
  197. package/lib/content/icon/icon.component.d.ts +0 -45
  198. package/lib/forms/container-host.d.ts +0 -11
  199. package/lib/forms/date-picker.module.d.ts +0 -17
  200. package/lib/forms/text-editor/text-editor.module.d.ts +0 -14
  201. package/lib/layout/layout.module.d.ts +0 -7
  202. package/lib/pipes/pipes.module.d.ts +0 -9
  203. package/lib/wrappers/flatpickr/flatpickr.component.d.ts +0 -19
  204. package/scss/base/components/accordion/accordion-header/accordion-header.component.scss +0 -12
  205. package/scss/base/components/accordion/accordion-item/accordion-item-body/accordion-item-body.component.scss +0 -109
  206. package/scss/base/components/accordion/accordion-item/accordion-item-header/accordion-item-header.component.scss +0 -9
  207. package/scss/base/components/accordion/accordion-item/accordion-item.component.scss +0 -71
  208. package/scss/base/components/accordion/accordion.component.scss +0 -6
  209. package/scss/base/components/breadcrumb/breadcrumb.component.scss +0 -0
  210. package/scss/base/components/buttons/button/button.component.scss +0 -7
  211. package/scss/base/components/buttons/link-button/link-button.component.scss +0 -0
  212. package/scss/base/components/chips/chip/chip.component.scss +0 -0
  213. package/scss/base/components/chips/chip-container/chip-container.component.scss +0 -0
  214. package/scss/base/components/image-gallery/image-gallery.component.scss +0 -0
  215. package/scss/base/components/image-gallery/styles.scss +0 -5
  216. package/scss/base/components/loading-indicator/loading-indicator.component.scss +0 -0
  217. package/scss/base/components/modals/alert/alert.component.scss +0 -0
  218. package/scss/base/components/modals/confirm/confirm.component.scss +0 -0
  219. package/scss/base/components/modals/prompt/prompt.component.scss +0 -0
  220. package/scss/base/components/pagination/pagination.component.scss +0 -0
  221. package/scss/base/components/popovers/legend/legend.component.scss +0 -9
  222. package/scss/base/components/popovers/popover/popover.component.scss +0 -0
  223. package/scss/base/components/popovers/popover/styles.scss +0 -84
  224. package/scss/base/components/popovers/popover-content/popover-content.component.scss +0 -12
  225. package/scss/base/components/popovers/popover-menu/popover-menu.component.scss +0 -0
  226. package/scss/base/components/scroll/scroll-story-helper.scss +0 -12
  227. package/scss/base/components/search-input/search-input.component.scss +0 -7
  228. package/scss/base/components/snackbar/snackbar-container.component.scss +0 -3
  229. package/scss/base/components/snackbar/snackbar.component.scss +0 -3
  230. package/scss/base/components/stepper-horizontal/step-horizontal/step-horizontal.component.scss +0 -23
  231. package/scss/base/components/stepper-vertical/step-vertical/step-vertical.component.scss +0 -6
  232. package/scss/base/components/tabs/tab-pane/tab-pane.component.scss +0 -7
  233. package/scss/base/components/tabs/tabs.component.scss +0 -326
  234. package/scss/base/content/icon/icon.component.scss +0 -0
  235. package/scss/base/forms/checkbox/checkbox.component.scss +0 -160
  236. package/scss/base/forms/color-indicator/color-indicator.component.scss +0 -59
  237. package/scss/base/forms/color-picker/color-picker.component.scss +0 -207
  238. package/scss/base/forms/date-picker/date-picker.component.scss +0 -5
  239. package/scss/base/forms/date-range-picker/date-range-picker.component.scss +0 -34
  240. package/scss/base/forms/radio/radio.component.scss +0 -9
  241. package/scss/base/forms/segment/segment-control/segment-control.component.scss +0 -0
  242. package/scss/base/forms/segment/segment.component.scss +0 -0
  243. package/scss/base/forms/select/select-option/select-option.component.scss +0 -0
  244. package/scss/base/forms/select/select.component.scss +0 -251
  245. package/scss/base/forms/slider/slider.component.scss +0 -20
  246. package/scss/base/forms/switch/switch.component.scss +0 -145
  247. package/scss/base/forms/text-area/text-area.component.scss +0 -43
  248. package/scss/base/forms/text-editor/text-editor.component.scss +0 -294
  249. package/scss/base/forms/text-input/text-input.component.scss +0 -60
  250. package/scss/base/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.scss +0 -10
  251. package/scss/base/forms/time-picker/time-picker.component.scss +0 -5
@@ -1,34 +1,14 @@
1
- import { Component, Input, HostBinding, ViewEncapsulation, Renderer2, Inject, forwardRef, ViewChild, ElementRef, QueryList, ContentChildren, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';
2
- import { DOCUMENT } from '@angular/common';
1
+ import { Component, Input, HostBinding, ViewEncapsulation, Inject, forwardRef, ViewChild, ContentChildren, Output, EventEmitter } from '@angular/core';
2
+ import { CommonModule, DOCUMENT } from '@angular/common';
3
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
5
- import { SelectOptionComponent } from './select-option/select-option.component';
5
+ import { FngSelectOptionComponent } from './select-option/select-option.component';
6
+ import { FngChipTextPipe } from './chip-text.pipe';
7
+ import { OverlayModule } from '@angular/cdk/overlay';
6
8
  import * as i0 from "@angular/core";
7
9
  import * as i1 from "@angular/common";
8
10
  import * as i2 from "@angular/cdk/overlay";
9
- import * as i3 from "@angular/cdk/observers";
10
- import * as i4 from "./chip-text.pipe";
11
- export class SelectComponent {
12
- constructor(document, renderer, cd) {
13
- this.document = document;
14
- this.renderer = renderer;
15
- this.cd = cd;
16
- this._disabled = false;
17
- this._required = false;
18
- this.touched = false;
19
- this.id = `input-control-${++SelectComponent.nextId}`;
20
- this.options = [];
21
- this.label = '';
22
- this.hideLabel = false;
23
- this.hint = '';
24
- this.fngChange = new EventEmitter();
25
- this.selectPanelClasses = ['fng-select-panel'];
26
- this.showOptions = false;
27
- this.checked = new Map();
28
- this.hasProjectedOptions = false;
29
- this.projectedHtml = [];
30
- this.body = this.document.body;
31
- }
11
+ export class FngSelectComponent {
32
12
  get disabled() {
33
13
  return this._disabled;
34
14
  }
@@ -64,6 +44,29 @@ export class SelectComponent {
64
44
  }
65
45
  this.fngChange.emit(this.value);
66
46
  }
47
+ constructor(document, renderer, cd) {
48
+ this.document = document;
49
+ this.renderer = renderer;
50
+ this.cd = cd;
51
+ this._disabled = false;
52
+ this._required = false;
53
+ this.touched = false;
54
+ this.id = `input-control-${++FngSelectComponent.nextId}`;
55
+ this.multiple = false;
56
+ this.size = 0;
57
+ this.options = [];
58
+ this.label = '';
59
+ this.hideLabel = false;
60
+ this.hint = '';
61
+ this.fngChange = new EventEmitter();
62
+ this.selectPanelClasses = ['fng-select-panel'];
63
+ this.showOptions = false;
64
+ this.empty = false;
65
+ this.checked = new Map();
66
+ this.hasProjectedOptions = false;
67
+ this.projectedHtml = [];
68
+ this.body = this.document.body;
69
+ }
67
70
  ngOnInit() {
68
71
  if (this.size != null) {
69
72
  this.selectPanelClasses.push('fng-select-panel-options-' + this.size);
@@ -74,7 +77,7 @@ export class SelectComponent {
74
77
  }
75
78
  }
76
79
  ngAfterViewInit() {
77
- this.triggerWidth = this.elementRef.nativeElement?.getBoundingClientRect()?.width;
80
+ this.triggerWidth = this.elementRef?.nativeElement?.getBoundingClientRect()?.width;
78
81
  this.initProjectedOptions();
79
82
  }
80
83
  registerOnChange(fn) {
@@ -93,7 +96,7 @@ export class SelectComponent {
93
96
  if (this.multiple === true) {
94
97
  this._value = value;
95
98
  // set checkmarks in overlay panel, so that it is displayed correctly when user opens it
96
- value?.forEach(v => {
99
+ value?.forEach((v) => {
97
100
  this.checked.set(v, 'checked');
98
101
  });
99
102
  }
@@ -102,9 +105,10 @@ export class SelectComponent {
102
105
  }
103
106
  }
104
107
  getOptionText(index) {
105
- if (this.options[index] != null && this.options[index][this.optionsTextKey] != null) {
108
+ if (this.options[index] && this.optionsTextKey && this.options[index][this.optionsTextKey] != null) {
106
109
  return this.options[index][this.optionsTextKey];
107
110
  }
111
+ return undefined;
108
112
  }
109
113
  getOptionValue(index) {
110
114
  // if set to true the complete option object is returned as value
@@ -117,9 +121,10 @@ export class SelectComponent {
117
121
  return v;
118
122
  }
119
123
  // try to map the value to a property of the option by given key
120
- if (this.options[index] != null && this.options[index][this.optionsValueKey] != null) {
124
+ if (this.options[index] && this.optionsValueKey && this.options[index][this.optionsValueKey] != null) {
121
125
  return this.options[index][this.optionsValueKey];
122
126
  }
127
+ return undefined;
123
128
  }
124
129
  removeChip(event, chip) {
125
130
  event.stopPropagation();
@@ -142,7 +147,7 @@ export class SelectComponent {
142
147
  }
143
148
  toggle() {
144
149
  if (false === this.disabled) {
145
- this.triggerWidth = this.elementRef.nativeElement?.getBoundingClientRect()?.width;
150
+ this.triggerWidth = this.elementRef?.nativeElement?.getBoundingClientRect()?.width;
146
151
  this.showOptions = !this.showOptions;
147
152
  this.onOpenedChange(this.showOptions);
148
153
  this.isEmpty();
@@ -167,7 +172,8 @@ export class SelectComponent {
167
172
  this.touched = true;
168
173
  }
169
174
  }
170
- onContentChange(changes) {
175
+ onContentChange(event) {
176
+ const changes = event;
171
177
  if (changes != null) {
172
178
  this.options = [];
173
179
  this.projectedHtml = [];
@@ -175,13 +181,15 @@ export class SelectComponent {
175
181
  }
176
182
  }
177
183
  initProjectedOptions() {
178
- if (this.fngSelectOptions.length > 0) {
184
+ if (this.fngSelectOptions?.length) {
179
185
  this.hasProjectedOptions = true;
180
186
  this.fngSelectOptions.forEach(component => {
181
187
  component.update().then(el => {
182
- this.options.push({ value: component.value, text: el.textContent.trim() });
183
- this.projectedHtml.push(el.innerHTML);
184
- this.cd.detectChanges();
188
+ if (el) {
189
+ this.options.push({ value: component.value, text: el.textContent?.trim() });
190
+ this.projectedHtml.push(el.innerHTML);
191
+ this.cd.detectChanges();
192
+ }
185
193
  });
186
194
  });
187
195
  }
@@ -196,24 +204,24 @@ export class SelectComponent {
196
204
  }
197
205
  }
198
206
  }
199
- SelectComponent.nextId = 0;
200
- SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: SelectComponent, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
201
- SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: SelectComponent, selector: "fng-select", inputs: { disabled: "disabled", required: "required", multiple: "multiple", size: "size", options: "options", optionsValueKey: "optionsValueKey", optionsTextKey: "optionsTextKey", optionObjectAsValue: "optionObjectAsValue", error: "error", label: "label", hideLabel: "hideLabel", hint: "hint", resetOption: "resetOption" }, outputs: { fngChange: "fngChange" }, host: { properties: { "id": "this.id" } }, providers: [
207
+ FngSelectComponent.nextId = 0;
208
+ FngSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngSelectComponent, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
209
+ FngSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: FngSelectComponent, isStandalone: true, selector: "fng-select", inputs: { disabled: "disabled", required: "required", multiple: "multiple", size: "size", options: "options", optionsValueKey: "optionsValueKey", optionsTextKey: "optionsTextKey", optionObjectAsValue: "optionObjectAsValue", error: "error", label: "label", hideLabel: "hideLabel", hint: "hint", resetOption: "resetOption" }, outputs: { fngChange: "fngChange" }, host: { properties: { "id": "this.id" } }, providers: [
202
210
  {
203
211
  provide: NG_VALUE_ACCESSOR,
204
- useExisting: forwardRef(() => SelectComponent),
212
+ useExisting: forwardRef(() => FngSelectComponent),
205
213
  multi: true
206
214
  }
207
- ], queries: [{ propertyName: "fngSelectOptions", predicate: SelectOptionComponent }], viewQueries: [{ propertyName: "elementRef", first: true, predicate: ["div"], descendants: true }], ngImport: i0, template: "<div #div class=\"fwe-select-wrapper\" [class.fwe-disabled]=\"disabled\" [class.fng-hide-label]=\"hideLabel\">\n <div\n class=\"fwe-select\"\n (click)=\"toggle()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [class.fwe-focus]=\"showOptions\"\n [class.fwe-required]=\"required\"\n [class.fwe-disabled]=\"disabled\"\n [class.fwe-pty]=\"empty\"\n >\n <div class=\"fwe-select-content\">\n <ng-container *ngIf=\"!multiple; else chips\">\n {{ value != null && value | fngChipText: options:optionsValueKey:optionsTextKey }}\n </ng-container>\n <ng-template #chips>\n <div class=\"fwe-chip-container\">\n <div\n *ngFor=\"let v of value\"\n class=\"fwe-chip chip-text-truncate fwe-pr-4\"\n [style.max-width.px]=\"triggerWidth\"\n [title]=\"v | fngChipText: options:optionsValueKey:optionsTextKey\"\n >\n {{ v | fngChipText: options:optionsValueKey:optionsTextKey }}\n <span class=\"chip-removable\" (click)=\"removeChip($event, v)\"></span>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayMinWidth]=\"triggerWidth\"\n [cdkConnectedOverlayOpen]=\"showOptions\"\n [cdkConnectedOverlayPanelClass]=\"selectPanelClasses\"\n (backdropClick)=\"close()\"\n >\n <div class=\"fng-select-panel-wrap\">\n <ul class=\"fwe-select-options-container\">\n <li class=\"fwe-select-option\" *ngIf=\"resetOption != null && !multiple\" (click)=\"select(null, $event)\">{{ resetOption }}</li>\n <li\n class=\"fwe-select-option\"\n *ngFor=\"let option of options; let i = index\"\n (click)=\"select(getOptionValue(i), $event)\"\n [title]=\"getOptionText(i) || option?.text\"\n >\n <span class=\"fwe-select-option-content\">\n <span\n *ngIf=\"multiple\"\n class=\"fng-select-pseudo-checkbox\"\n [ngClass]=\"{ 'fng-select-pseudo-checkbox-checked': checked.get(getOptionValue(i)) === 'checked' }\"\n ></span>\n <span *ngIf=\"hasProjectedOptions; else defaultTemplate\" [innerHTML]=\"projectedHtml[i]\"></span>\n <ng-template #defaultTemplate>{{ getOptionText(i) || option?.text }}</ng-template>\n </span>\n </li>\n </ul>\n </div>\n </ng-template>\n <label class=\"fwe-select-label\" [for]=\"id\" [class.fwe-sr-only]=\"hideLabel\">{{ label }}</label>\n <div class=\"fwe-select-description\" *ngIf=\"hint\">\n {{ hint }}\n </div>\n <div class=\"fwe-select-invalid\" *ngIf=\"error\">\n {{ error }}\n </div>\n</div>\n<div class=\"fwe-d-none\" (cdkObserveContent)=\"onContentChange($event)\">\n <ng-content></ng-content>\n</div>\n", styles: ["@charset \"UTF-8\";.fng-select-panel-open .fng-select-panel{opacity:1!important}fng-select{width:auto}fng-select.ng-invalid:not(.ng-pristine) .fwe-select:hover{border-color:var(--fwe-red)}fng-select.ng-invalid:not(.ng-pristine) .fwe-select.fwe-required~.fwe-select-invalid{display:block}fng-select.ng-invalid:not(.ng-pristine) .fwe-select.fwe-required~.fwe-select-description{display:none}.fng-select-panel{opacity:0!important}.fng-select-panel.fng-select-panel-options-3 .fwe-select-options-container{max-height:162px}.fng-select-panel.fng-select-panel-options-4 .fwe-select-options-container{max-height:210px}.fng-select-panel.fng-select-panel-options-5 .fwe-select-options-container{max-height:258px}.fng-select-panel.fng-select-panel-options-6 .fwe-select-options-container{max-height:306px}.fng-select-panel.fng-select-panel-options-7 .fwe-select-options-container{max-height:354px}.fng-select-panel.fng-select-panel-options-8 .fwe-select-options-container{max-height:402px}.fng-select-panel.fng-select-panel-options-9 .fwe-select-options-container{max-height:450px}.fng-select-panel.fng-select-panel-options-10 .fwe-select-options-container{max-height:498px}.fng-select-panel .fwe-select-options-container{scrollbar-width:thin;scrollbar-color:var(--fwe-control-scrollbar) var(--fwe-gray-100)}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar{width:12px}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar-track{background:transparent}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar-thumb{overflow:visible;background-color:var(--fwe-control-scrollbar);border:3px solid rgba(242,243,245,0);-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:6px}.fng-select-panel-wrap{flex-basis:100%}.fwe-select-options-container{position:relative;top:4px;left:0px;max-height:258px;min-width:calc(100% + 0px)!important;max-width:280px;overflow:auto;font-size:var(--fwe-font-size-base);background-color:var(--fwe-white);border-radius:4px;padding:8px;margin:0;border:1px solid var(--fwe-gray-200);box-shadow:0 1px 4px #00000029;list-style:none;outline:0}.fwe-select-options-container .fwe-select-option{position:relative;line-height:24px;padding:12px 8px;min-height:24px;cursor:pointer}.fwe-select-options-container .fwe-select-option:hover{background-color:var(--fwe-gray-100)}.fwe-select-options-container .fwe-select-option:last-child{border-bottom:none}.fwe-select-options-container .fwe-select-option .fwe-select-option-content{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;line-height:24px;min-height:24px}.fng-select-pseudo-checkbox{width:16px;height:16px;border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;color:var(--fwe-control-border);border:1px solid;transition:none;margin-right:12px;top:-1px}.fng-select-pseudo-checkbox:after{color:var(--fwe-white);position:absolute;display:block;opacity:0;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.fng-select-pseudo-checkbox.fng-select-pseudo-checkbox-checked{background:var(--fwe-caerul);border:1px solid var(--fwe-caerul)}.fng-select-pseudo-checkbox.fng-select-pseudo-checkbox-checked:after{top:3px;left:2px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}.chip-text-truncate{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chip-removable:after{position:absolute;right:5px;top:4px;color:var(--fwe-text);font-family:var(--fwe-font-family-icons-16);font-size:var(--fwe-font-size-base);content:\"\\ea1c\";line-height:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fwe-select-wrapper{display:flex;width:inherit;min-width:48px}.fwe-select-wrapper:before{bottom:unset;top:24px}.fwe-select-wrapper.fng-hide-label{margin-top:18px}.fwe-select-wrapper.fng-hide-label:before{top:6px}.fwe-select-wrapper.fwe-disabled:before{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select{cursor:pointer;height:unset;min-height:33px}.fwe-select-wrapper .fwe-select .fwe-select-content{padding-right:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.5rem}.fwe-select-wrapper .fwe-select.fwe-required:not(.fwe-disabled)~.fwe-select-label:after{position:relative;left:3px;display:inline-block;content:\"*\"}.fwe-select-wrapper .fwe-select.fwe-disabled{cursor:default;border-color:var(--fwe-control-disabled)!important}.fwe-select-wrapper .fwe-select.fwe-disabled~.fwe-select-label{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-select-content{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-chip{color:var(--fwe-text-disabled);border:1px solid var(--fwe-control-disabled);pointer-events:none}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-chip .chip-removable:after{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select-label:empty~.fwe-select-options-container,.fwe-select-wrapper .fwe-select-label.fwe-sr-only~.fwe-select-options-container{top:38px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i3.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }, { kind: "pipe", type: i4.ChipTextPipe, name: "fngChipText" }], encapsulation: i0.ViewEncapsulation.None });
208
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: SelectComponent, decorators: [{
215
+ ], queries: [{ propertyName: "fngSelectOptions", predicate: FngSelectOptionComponent }], viewQueries: [{ propertyName: "elementRef", first: true, predicate: ["div"], descendants: true }], ngImport: i0, template: "<div #div class=\"fwe-select-wrapper\" [class.fwe-disabled]=\"disabled\" [class.fng-hide-label]=\"hideLabel\">\n <div\n class=\"fwe-select\"\n (click)=\"toggle()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [class.fwe-focus]=\"showOptions\"\n [class.fwe-required]=\"required\"\n [class.fwe-disabled]=\"disabled\"\n [class.fwe-pty]=\"empty\"\n >\n <div class=\"fwe-select-content\">\n <ng-container *ngIf=\"!multiple; else chips\">\n {{ value != null && value | fngChipText: options:optionsValueKey:optionsTextKey }}\n </ng-container>\n <ng-template #chips>\n <div class=\"fwe-chip-container\">\n <div\n *ngFor=\"let v of value\"\n class=\"fwe-chip chip-text-truncate fwe-pr-4\"\n [style.max-width.px]=\"triggerWidth\"\n [title]=\"v | fngChipText: options:optionsValueKey:optionsTextKey\"\n >\n {{ v | fngChipText: options:optionsValueKey:optionsTextKey }}\n <span class=\"chip-removable\" (click)=\"removeChip($event, v)\"></span>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayMinWidth]=\"triggerWidth\"\n [cdkConnectedOverlayOpen]=\"showOptions\"\n [cdkConnectedOverlayPanelClass]=\"selectPanelClasses\"\n (backdropClick)=\"close()\"\n >\n <div class=\"fng-select-panel-wrap\">\n <ul class=\"fwe-select-options-container\">\n <li class=\"fwe-select-option\" *ngIf=\"resetOption != null && !multiple\" (click)=\"select(null, $event)\">{{ resetOption }}</li>\n <li\n class=\"fwe-select-option\"\n *ngFor=\"let option of options; let i = index\"\n (click)=\"select(getOptionValue(i), $event)\"\n [title]=\"getOptionText(i) || option?.text\"\n >\n <span class=\"fwe-select-option-content\">\n <span\n *ngIf=\"multiple\"\n class=\"fng-select-pseudo-checkbox\"\n [ngClass]=\"{ 'fng-select-pseudo-checkbox-checked': checked.get(getOptionValue(i)) === 'checked' }\"\n ></span>\n <span *ngIf=\"hasProjectedOptions; else defaultTemplate\" [innerHTML]=\"projectedHtml[i]\"></span>\n <ng-template #defaultTemplate>{{ getOptionText(i) || option?.text }}</ng-template>\n </span>\n </li>\n </ul>\n </div>\n </ng-template>\n <label class=\"fwe-select-label\" [for]=\"id\" [class.fwe-sr-only]=\"hideLabel\">{{ label }}</label>\n <div class=\"fwe-select-description\" *ngIf=\"hint\">\n {{ hint }}\n </div>\n <div class=\"fwe-select-invalid\" *ngIf=\"error\">\n {{ error }}\n </div>\n</div>\n<div class=\"fwe-d-none\" (cdkObserveContent)=\"onContentChange($event)\">\n <ng-content></ng-content>\n</div>\n", styles: [".fng-select-panel-open .fng-select-panel{opacity:1!important}fng-select{width:auto}fng-select.ng-invalid:not(.ng-pristine) .fwe-select:hover{border-color:var(--fwe-red)}fng-select.ng-invalid:not(.ng-pristine) .fwe-select.fwe-required~.fwe-select-invalid{display:block}fng-select.ng-invalid:not(.ng-pristine) .fwe-select.fwe-required~.fwe-select-description{display:none}.fng-select-panel{opacity:0!important}.fng-select-panel.fng-select-panel-options-3 .fwe-select-options-container{max-height:162px}.fng-select-panel.fng-select-panel-options-4 .fwe-select-options-container{max-height:210px}.fng-select-panel.fng-select-panel-options-5 .fwe-select-options-container{max-height:258px}.fng-select-panel.fng-select-panel-options-6 .fwe-select-options-container{max-height:306px}.fng-select-panel.fng-select-panel-options-7 .fwe-select-options-container{max-height:354px}.fng-select-panel.fng-select-panel-options-8 .fwe-select-options-container{max-height:402px}.fng-select-panel.fng-select-panel-options-9 .fwe-select-options-container{max-height:450px}.fng-select-panel.fng-select-panel-options-10 .fwe-select-options-container{max-height:498px}.fng-select-panel .fwe-select-options-container{scrollbar-width:thin;scrollbar-color:var(--fwe-control-scrollbar) var(--fwe-gray-100)}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar{width:12px}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar-track{background:transparent}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar-thumb{overflow:visible;background-color:var(--fwe-control-scrollbar);border:3px solid rgba(242,243,245,0);-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:6px}.fng-select-panel-wrap{flex-basis:100%}.fwe-select-options-container{position:relative;top:4px;left:0;max-height:258px;min-width:calc(100% + 0px)!important;max-width:280px;overflow:auto;font-size:var(--fwe-font-size-base);background-color:var(--fwe-white);border-radius:4px;padding:8px;margin:0;border:1px solid var(--fwe-gray-200);box-shadow:0 1px 4px #00000029;list-style:none;outline:0}.fwe-select-options-container .fwe-select-option{position:relative;line-height:24px;padding:12px 8px;min-height:24px;cursor:pointer}.fwe-select-options-container .fwe-select-option:hover{background-color:var(--fwe-gray-100)}.fwe-select-options-container .fwe-select-option:last-child{border-bottom:none}.fwe-select-options-container .fwe-select-option .fwe-select-option-content{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;line-height:24px;min-height:24px}.fng-select-pseudo-checkbox{width:16px;height:16px;border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;color:var(--fwe-control-border);border:1px solid;transition:none;margin-right:12px;top:-1px}.fng-select-pseudo-checkbox:after{color:var(--fwe-white);position:absolute;display:block;opacity:0;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.fng-select-pseudo-checkbox.fng-select-pseudo-checkbox-checked{background:var(--fwe-caerul);border:1px solid var(--fwe-caerul)}.fng-select-pseudo-checkbox.fng-select-pseudo-checkbox-checked:after{top:3px;left:2px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}.chip-text-truncate{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chip-removable:after{position:absolute;right:5px;top:4px;color:var(--fwe-text);font-family:var(--fwe-font-family-icons-16);font-size:var(--fwe-font-size-base);content:\"\\ea1c\";line-height:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fwe-select-wrapper{display:flex;width:inherit;min-width:48px}.fwe-select-wrapper:before{bottom:unset;top:24px}.fwe-select-wrapper.fng-hide-label{margin-top:18px}.fwe-select-wrapper.fng-hide-label:before{top:6px}.fwe-select-wrapper.fwe-disabled:before{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select{cursor:pointer;height:unset;min-height:33px}.fwe-select-wrapper .fwe-select .fwe-select-content{padding-right:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.5rem}.fwe-select-wrapper .fwe-select.fwe-required:not(.fwe-disabled)~.fwe-select-label:after{position:relative;left:3px;display:inline-block;content:\"*\"}.fwe-select-wrapper .fwe-select.fwe-disabled{cursor:default;border-color:var(--fwe-control-disabled)!important}.fwe-select-wrapper .fwe-select.fwe-disabled~.fwe-select-label{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-select-content{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-chip{color:var(--fwe-text-disabled);border:1px solid var(--fwe-control-disabled);pointer-events:none}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-chip .chip-removable:after{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select-label:empty~.fwe-select-options-container,.fwe-select-wrapper .fwe-select-label.fwe-sr-only~.fwe-select-options-container{top:38px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: FngChipTextPipe, name: "fngChipText" }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i2.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"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], encapsulation: i0.ViewEncapsulation.None });
216
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngSelectComponent, decorators: [{
209
217
  type: Component,
210
- args: [{ selector: 'fng-select', encapsulation: ViewEncapsulation.None, providers: [
218
+ args: [{ standalone: true, imports: [CommonModule, FngChipTextPipe, FngSelectOptionComponent, OverlayModule], selector: 'fng-select', encapsulation: ViewEncapsulation.None, providers: [
211
219
  {
212
220
  provide: NG_VALUE_ACCESSOR,
213
- useExisting: forwardRef(() => SelectComponent),
221
+ useExisting: forwardRef(() => FngSelectComponent),
214
222
  multi: true
215
223
  }
216
- ], template: "<div #div class=\"fwe-select-wrapper\" [class.fwe-disabled]=\"disabled\" [class.fng-hide-label]=\"hideLabel\">\n <div\n class=\"fwe-select\"\n (click)=\"toggle()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [class.fwe-focus]=\"showOptions\"\n [class.fwe-required]=\"required\"\n [class.fwe-disabled]=\"disabled\"\n [class.fwe-pty]=\"empty\"\n >\n <div class=\"fwe-select-content\">\n <ng-container *ngIf=\"!multiple; else chips\">\n {{ value != null && value | fngChipText: options:optionsValueKey:optionsTextKey }}\n </ng-container>\n <ng-template #chips>\n <div class=\"fwe-chip-container\">\n <div\n *ngFor=\"let v of value\"\n class=\"fwe-chip chip-text-truncate fwe-pr-4\"\n [style.max-width.px]=\"triggerWidth\"\n [title]=\"v | fngChipText: options:optionsValueKey:optionsTextKey\"\n >\n {{ v | fngChipText: options:optionsValueKey:optionsTextKey }}\n <span class=\"chip-removable\" (click)=\"removeChip($event, v)\"></span>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayMinWidth]=\"triggerWidth\"\n [cdkConnectedOverlayOpen]=\"showOptions\"\n [cdkConnectedOverlayPanelClass]=\"selectPanelClasses\"\n (backdropClick)=\"close()\"\n >\n <div class=\"fng-select-panel-wrap\">\n <ul class=\"fwe-select-options-container\">\n <li class=\"fwe-select-option\" *ngIf=\"resetOption != null && !multiple\" (click)=\"select(null, $event)\">{{ resetOption }}</li>\n <li\n class=\"fwe-select-option\"\n *ngFor=\"let option of options; let i = index\"\n (click)=\"select(getOptionValue(i), $event)\"\n [title]=\"getOptionText(i) || option?.text\"\n >\n <span class=\"fwe-select-option-content\">\n <span\n *ngIf=\"multiple\"\n class=\"fng-select-pseudo-checkbox\"\n [ngClass]=\"{ 'fng-select-pseudo-checkbox-checked': checked.get(getOptionValue(i)) === 'checked' }\"\n ></span>\n <span *ngIf=\"hasProjectedOptions; else defaultTemplate\" [innerHTML]=\"projectedHtml[i]\"></span>\n <ng-template #defaultTemplate>{{ getOptionText(i) || option?.text }}</ng-template>\n </span>\n </li>\n </ul>\n </div>\n </ng-template>\n <label class=\"fwe-select-label\" [for]=\"id\" [class.fwe-sr-only]=\"hideLabel\">{{ label }}</label>\n <div class=\"fwe-select-description\" *ngIf=\"hint\">\n {{ hint }}\n </div>\n <div class=\"fwe-select-invalid\" *ngIf=\"error\">\n {{ error }}\n </div>\n</div>\n<div class=\"fwe-d-none\" (cdkObserveContent)=\"onContentChange($event)\">\n <ng-content></ng-content>\n</div>\n", styles: ["@charset \"UTF-8\";.fng-select-panel-open .fng-select-panel{opacity:1!important}fng-select{width:auto}fng-select.ng-invalid:not(.ng-pristine) .fwe-select:hover{border-color:var(--fwe-red)}fng-select.ng-invalid:not(.ng-pristine) .fwe-select.fwe-required~.fwe-select-invalid{display:block}fng-select.ng-invalid:not(.ng-pristine) .fwe-select.fwe-required~.fwe-select-description{display:none}.fng-select-panel{opacity:0!important}.fng-select-panel.fng-select-panel-options-3 .fwe-select-options-container{max-height:162px}.fng-select-panel.fng-select-panel-options-4 .fwe-select-options-container{max-height:210px}.fng-select-panel.fng-select-panel-options-5 .fwe-select-options-container{max-height:258px}.fng-select-panel.fng-select-panel-options-6 .fwe-select-options-container{max-height:306px}.fng-select-panel.fng-select-panel-options-7 .fwe-select-options-container{max-height:354px}.fng-select-panel.fng-select-panel-options-8 .fwe-select-options-container{max-height:402px}.fng-select-panel.fng-select-panel-options-9 .fwe-select-options-container{max-height:450px}.fng-select-panel.fng-select-panel-options-10 .fwe-select-options-container{max-height:498px}.fng-select-panel .fwe-select-options-container{scrollbar-width:thin;scrollbar-color:var(--fwe-control-scrollbar) var(--fwe-gray-100)}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar{width:12px}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar-track{background:transparent}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar-thumb{overflow:visible;background-color:var(--fwe-control-scrollbar);border:3px solid rgba(242,243,245,0);-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:6px}.fng-select-panel-wrap{flex-basis:100%}.fwe-select-options-container{position:relative;top:4px;left:0px;max-height:258px;min-width:calc(100% + 0px)!important;max-width:280px;overflow:auto;font-size:var(--fwe-font-size-base);background-color:var(--fwe-white);border-radius:4px;padding:8px;margin:0;border:1px solid var(--fwe-gray-200);box-shadow:0 1px 4px #00000029;list-style:none;outline:0}.fwe-select-options-container .fwe-select-option{position:relative;line-height:24px;padding:12px 8px;min-height:24px;cursor:pointer}.fwe-select-options-container .fwe-select-option:hover{background-color:var(--fwe-gray-100)}.fwe-select-options-container .fwe-select-option:last-child{border-bottom:none}.fwe-select-options-container .fwe-select-option .fwe-select-option-content{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;line-height:24px;min-height:24px}.fng-select-pseudo-checkbox{width:16px;height:16px;border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;color:var(--fwe-control-border);border:1px solid;transition:none;margin-right:12px;top:-1px}.fng-select-pseudo-checkbox:after{color:var(--fwe-white);position:absolute;display:block;opacity:0;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.fng-select-pseudo-checkbox.fng-select-pseudo-checkbox-checked{background:var(--fwe-caerul);border:1px solid var(--fwe-caerul)}.fng-select-pseudo-checkbox.fng-select-pseudo-checkbox-checked:after{top:3px;left:2px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}.chip-text-truncate{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chip-removable:after{position:absolute;right:5px;top:4px;color:var(--fwe-text);font-family:var(--fwe-font-family-icons-16);font-size:var(--fwe-font-size-base);content:\"\\ea1c\";line-height:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fwe-select-wrapper{display:flex;width:inherit;min-width:48px}.fwe-select-wrapper:before{bottom:unset;top:24px}.fwe-select-wrapper.fng-hide-label{margin-top:18px}.fwe-select-wrapper.fng-hide-label:before{top:6px}.fwe-select-wrapper.fwe-disabled:before{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select{cursor:pointer;height:unset;min-height:33px}.fwe-select-wrapper .fwe-select .fwe-select-content{padding-right:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.5rem}.fwe-select-wrapper .fwe-select.fwe-required:not(.fwe-disabled)~.fwe-select-label:after{position:relative;left:3px;display:inline-block;content:\"*\"}.fwe-select-wrapper .fwe-select.fwe-disabled{cursor:default;border-color:var(--fwe-control-disabled)!important}.fwe-select-wrapper .fwe-select.fwe-disabled~.fwe-select-label{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-select-content{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-chip{color:var(--fwe-text-disabled);border:1px solid var(--fwe-control-disabled);pointer-events:none}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-chip .chip-removable:after{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select-label:empty~.fwe-select-options-container,.fwe-select-wrapper .fwe-select-label.fwe-sr-only~.fwe-select-options-container{top:38px}\n"] }]
224
+ ], template: "<div #div class=\"fwe-select-wrapper\" [class.fwe-disabled]=\"disabled\" [class.fng-hide-label]=\"hideLabel\">\n <div\n class=\"fwe-select\"\n (click)=\"toggle()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [class.fwe-focus]=\"showOptions\"\n [class.fwe-required]=\"required\"\n [class.fwe-disabled]=\"disabled\"\n [class.fwe-pty]=\"empty\"\n >\n <div class=\"fwe-select-content\">\n <ng-container *ngIf=\"!multiple; else chips\">\n {{ value != null && value | fngChipText: options:optionsValueKey:optionsTextKey }}\n </ng-container>\n <ng-template #chips>\n <div class=\"fwe-chip-container\">\n <div\n *ngFor=\"let v of value\"\n class=\"fwe-chip chip-text-truncate fwe-pr-4\"\n [style.max-width.px]=\"triggerWidth\"\n [title]=\"v | fngChipText: options:optionsValueKey:optionsTextKey\"\n >\n {{ v | fngChipText: options:optionsValueKey:optionsTextKey }}\n <span class=\"chip-removable\" (click)=\"removeChip($event, v)\"></span>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayMinWidth]=\"triggerWidth\"\n [cdkConnectedOverlayOpen]=\"showOptions\"\n [cdkConnectedOverlayPanelClass]=\"selectPanelClasses\"\n (backdropClick)=\"close()\"\n >\n <div class=\"fng-select-panel-wrap\">\n <ul class=\"fwe-select-options-container\">\n <li class=\"fwe-select-option\" *ngIf=\"resetOption != null && !multiple\" (click)=\"select(null, $event)\">{{ resetOption }}</li>\n <li\n class=\"fwe-select-option\"\n *ngFor=\"let option of options; let i = index\"\n (click)=\"select(getOptionValue(i), $event)\"\n [title]=\"getOptionText(i) || option?.text\"\n >\n <span class=\"fwe-select-option-content\">\n <span\n *ngIf=\"multiple\"\n class=\"fng-select-pseudo-checkbox\"\n [ngClass]=\"{ 'fng-select-pseudo-checkbox-checked': checked.get(getOptionValue(i)) === 'checked' }\"\n ></span>\n <span *ngIf=\"hasProjectedOptions; else defaultTemplate\" [innerHTML]=\"projectedHtml[i]\"></span>\n <ng-template #defaultTemplate>{{ getOptionText(i) || option?.text }}</ng-template>\n </span>\n </li>\n </ul>\n </div>\n </ng-template>\n <label class=\"fwe-select-label\" [for]=\"id\" [class.fwe-sr-only]=\"hideLabel\">{{ label }}</label>\n <div class=\"fwe-select-description\" *ngIf=\"hint\">\n {{ hint }}\n </div>\n <div class=\"fwe-select-invalid\" *ngIf=\"error\">\n {{ error }}\n </div>\n</div>\n<div class=\"fwe-d-none\" (cdkObserveContent)=\"onContentChange($event)\">\n <ng-content></ng-content>\n</div>\n", styles: [".fng-select-panel-open .fng-select-panel{opacity:1!important}fng-select{width:auto}fng-select.ng-invalid:not(.ng-pristine) .fwe-select:hover{border-color:var(--fwe-red)}fng-select.ng-invalid:not(.ng-pristine) .fwe-select.fwe-required~.fwe-select-invalid{display:block}fng-select.ng-invalid:not(.ng-pristine) .fwe-select.fwe-required~.fwe-select-description{display:none}.fng-select-panel{opacity:0!important}.fng-select-panel.fng-select-panel-options-3 .fwe-select-options-container{max-height:162px}.fng-select-panel.fng-select-panel-options-4 .fwe-select-options-container{max-height:210px}.fng-select-panel.fng-select-panel-options-5 .fwe-select-options-container{max-height:258px}.fng-select-panel.fng-select-panel-options-6 .fwe-select-options-container{max-height:306px}.fng-select-panel.fng-select-panel-options-7 .fwe-select-options-container{max-height:354px}.fng-select-panel.fng-select-panel-options-8 .fwe-select-options-container{max-height:402px}.fng-select-panel.fng-select-panel-options-9 .fwe-select-options-container{max-height:450px}.fng-select-panel.fng-select-panel-options-10 .fwe-select-options-container{max-height:498px}.fng-select-panel .fwe-select-options-container{scrollbar-width:thin;scrollbar-color:var(--fwe-control-scrollbar) var(--fwe-gray-100)}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar{width:12px}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar-track{background:transparent}.fng-select-panel .fwe-select-options-container::-webkit-scrollbar-thumb{overflow:visible;background-color:var(--fwe-control-scrollbar);border:3px solid rgba(242,243,245,0);-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:6px}.fng-select-panel-wrap{flex-basis:100%}.fwe-select-options-container{position:relative;top:4px;left:0;max-height:258px;min-width:calc(100% + 0px)!important;max-width:280px;overflow:auto;font-size:var(--fwe-font-size-base);background-color:var(--fwe-white);border-radius:4px;padding:8px;margin:0;border:1px solid var(--fwe-gray-200);box-shadow:0 1px 4px #00000029;list-style:none;outline:0}.fwe-select-options-container .fwe-select-option{position:relative;line-height:24px;padding:12px 8px;min-height:24px;cursor:pointer}.fwe-select-options-container .fwe-select-option:hover{background-color:var(--fwe-gray-100)}.fwe-select-options-container .fwe-select-option:last-child{border-bottom:none}.fwe-select-options-container .fwe-select-option .fwe-select-option-content{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;line-height:24px;min-height:24px}.fng-select-pseudo-checkbox{width:16px;height:16px;border-radius:2px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;color:var(--fwe-control-border);border:1px solid;transition:none;margin-right:12px;top:-1px}.fng-select-pseudo-checkbox:after{color:var(--fwe-white);position:absolute;display:block;opacity:0;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.fng-select-pseudo-checkbox.fng-select-pseudo-checkbox-checked{background:var(--fwe-caerul);border:1px solid var(--fwe-caerul)}.fng-select-pseudo-checkbox.fng-select-pseudo-checkbox-checked:after{top:3px;left:2px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box}.chip-text-truncate{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chip-removable:after{position:absolute;right:5px;top:4px;color:var(--fwe-text);font-family:var(--fwe-font-family-icons-16);font-size:var(--fwe-font-size-base);content:\"\\ea1c\";line-height:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fwe-select-wrapper{display:flex;width:inherit;min-width:48px}.fwe-select-wrapper:before{bottom:unset;top:24px}.fwe-select-wrapper.fng-hide-label{margin-top:18px}.fwe-select-wrapper.fng-hide-label:before{top:6px}.fwe-select-wrapper.fwe-disabled:before{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select{cursor:pointer;height:unset;min-height:33px}.fwe-select-wrapper .fwe-select .fwe-select-content{padding-right:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.5rem}.fwe-select-wrapper .fwe-select.fwe-required:not(.fwe-disabled)~.fwe-select-label:after{position:relative;left:3px;display:inline-block;content:\"*\"}.fwe-select-wrapper .fwe-select.fwe-disabled{cursor:default;border-color:var(--fwe-control-disabled)!important}.fwe-select-wrapper .fwe-select.fwe-disabled~.fwe-select-label{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-select-content{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-chip{color:var(--fwe-text-disabled);border:1px solid var(--fwe-control-disabled);pointer-events:none}.fwe-select-wrapper .fwe-select.fwe-disabled .fwe-chip .chip-removable:after{color:var(--fwe-text-disabled)}.fwe-select-wrapper .fwe-select-label:empty~.fwe-select-options-container,.fwe-select-wrapper .fwe-select-label.fwe-sr-only~.fwe-select-options-container{top:38px}\n"] }]
217
225
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
218
226
  type: Inject,
219
227
  args: [DOCUMENT]
@@ -247,11 +255,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
247
255
  type: Input
248
256
  }], fngSelectOptions: [{
249
257
  type: ContentChildren,
250
- args: [SelectOptionComponent]
258
+ args: [FngSelectOptionComponent]
251
259
  }], elementRef: [{
252
260
  type: ViewChild,
253
261
  args: ['div']
254
262
  }], fngChange: [{
255
263
  type: Output
256
264
  }] } });
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL2Zvcm1zL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZm9ybXMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBRVgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxNQUFNLEVBQ04sVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBRVYsU0FBUyxFQUNULGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7QUFvQmhGLE1BQU0sT0FBTyxlQUFlO0lBK0UxQixZQUF3QyxRQUFhLEVBQVksUUFBbUIsRUFBWSxFQUFxQjtRQUE3RSxhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQVksYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFZLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBNUUzRyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUErQzVCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFHaEIsT0FBRSxHQUFHLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUl4QyxZQUFPLEdBQUcsRUFB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QkFHUCxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDOzRCQUM5QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs7MEJBaUZZLE1BQU07MkJBQUMsUUFBUTtvR0F0RXhCLFFBQVE7c0JBRFgsS0FBSztnQkFTRixRQUFRO3NCQURYLEtBQUs7Z0JBc0NOLEVBQUU7c0JBREQsV0FBVztnQkFHSCxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ2tDLGdCQUFnQjtzQkFBdkQsZUFBZTt1QkFBQyxxQkFBcUI7Z0JBQ3BCLFVBQVU7c0JBQTNCLFNBQVM7dUJBQUMsS0FBSztnQkFDTixTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgSG9zdEJpbmRpbmcsXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIFJlbmRlcmVyMixcbiAgSW5qZWN0LFxuICBmb3J3YXJkUmVmLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEFmdGVyVmlld0luaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uL3NlbGVjdC1vcHRpb24uY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RPcHRpb24ge1xuICB2YWx1ZTogYW55O1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZuZy1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBzdGF0aWMgbmV4dElkID0gMDtcblxuICBwcm90ZWN0ZWQgX2Rpc2FibGVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfcmVxdWlyZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF92YWx1ZTogYW55O1xuICBwcm90ZWN0ZWQgYm9keTogSFRNTEVsZW1lbnQ7XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG4gIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdmFsdWUuaW5kZXhPZih2YWx1ZSk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICB0aGlzLmNoZWNrZWQuc2V0KHZhbHVlLCAnY2hlY2tlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5jaGVja2VkLnNldCh2YWx1ZSwgbnVsbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub25DaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5mbmdDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIG9uQ2hhbmdlOiAoXzogYW55KSA9PiB2b2lkO1xuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQ7XG5cbiAgdG91Y2hlZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygpXG4gIGlkID0gYGlucHV0LWNvbnRyb2wtJHsrK1NlbGVjdENvbXBvbmVudC5uZXh0SWR9YDtcblxuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2l6ZTogbnVtYmVyO1xuICBASW5wdXQoKSBvcHRpb25zID0gW107XG4gIEBJbnB1dCgpIG9wdGlvbnNWYWx1ZUtleTogc3RyaW5nO1xuICBASW5wdXQoKSBvcHRpb25zVGV4dEtleTogc3RyaW5nO1xuICBASW5wdXQoKSBvcHRpb25PYmplY3RBc1ZhbHVlOiBib29sZWFuO1xuICBASW5wdXQoKSBlcnJvcjogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuICBASW5wdXQoKSBoaWRlTGFiZWwgPSBmYWxzZTtcbiAgQElucHV0KCkgaGludCA9ICcnO1xuICBASW5wdXQoKSByZXNldE9wdGlvbjogc3RyaW5nO1xuICBAQ29udGVudENoaWxkcmVuKFNlbGVjdE9wdGlvbkNvbXBvbmVudCkgZm5nU2VsZWN0T3B0aW9uczogUXVlcnlMaXN0PFNlbGVjdE9wdGlvbkNvbXBvbmVudD47XG4gIEBWaWV3Q2hpbGQoJ2RpdicpIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gIEBPdXRwdXQoKSBmbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBzZWxlY3RQYW5lbENsYXNzZXM6IHN0cmluZ1tdID0gWydmbmctc2VsZWN0LXBhbmVsJ107XG4gIHNob3dPcHRpb25zID0gZmFsc2U7XG4gIGVtcHR5OiBib29sZWFuO1xuICB0cmlnZ2VyV2lkdGg6IGFueTtcbiAgY2hlY2tlZCA9IG5ldyBNYXAoKTtcbiAgaGFzUHJvamVjdGVkT3B0aW9ucyA9IGZhbHNlO1xuICBwcm9qZWN0ZWRIdG1sID0gW107XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJvdGVjdGVkIGRvY3VtZW50OiBhbnksIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLCBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5ib2R5ID0gKHRoaXMuZG9jdW1lbnQgYXMgRG9jdW1lbnQpLmJvZHk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaXplICE9IG51bGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0UGFuZWxDbGFzc2VzLnB1c2goJ2ZuZy1zZWxlY3QtcGFuZWwtb3B0aW9ucy0nICsgdGhpcy5zaXplKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0UGFuZWxDbGFzc2VzLnB1c2goJ2ZuZy1zZWxlY3QtcGFuZWwtbXVsdGlwbGUnKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyV2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/LndpZHRoO1xuICAgIHRoaXMuaW5pdFByb2plY3RlZE9wdGlvbnMoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShzaG91bGREaXNhYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IHNob3VsZERpc2FibGU7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIHNldCBjaGVja21hcmtzIGluIG92ZXJsYXkgcGFuZWwsIHNvIHRoYXQgaXQgaXMgZGlzcGxheWVkIGNvcnJlY3RseSB3aGVuIHVzZXIgb3BlbnMgaXRcbiAgICAgIHZhbHVlPy5mb3JFYWNoKHYgPT4ge1xuICAgICAgICB0aGlzLmNoZWNrZWQuc2V0KHYsICdjaGVja2VkJyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRPcHRpb25UZXh0KGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zW2luZGV4XSAhPSBudWxsICYmIHRoaXMub3B0aW9uc1tpbmRleF1bdGhpcy5vcHRpb25zVGV4dEtleV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1tpbmRleF1bdGhpcy5vcHRpb25zVGV4dEtleV07XG4gICAgfVxuICB9XG5cbiAgZ2V0T3B0aW9uVmFsdWUoaW5kZXg6IG51bWJlcikge1xuICAgIC8vIGlmIHNldCB0byB0cnVlIHRoZSBjb21wbGV0ZSBvcHRpb24gb2JqZWN0IGlzIHJldHVybmVkIGFzIHZhbHVlXG4gICAgaWYgKHRoaXMub3B0aW9uT2JqZWN0QXNWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1tpbmRleF07XG4gICAgfVxuXG4gICAgLy8gdHJ5IHRvIGFjY2VzcyBzdGFuZGFyZCBwcm9wZXJ0eSAndmFsdWUnXG4gICAgY29uc3QgdiA9IHRoaXMub3B0aW9uc1tpbmRleF1bJ3ZhbHVlJ107XG5cbiAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdjtcbiAgICB9XG5cbiAgICAvLyB0cnkgdG8gbWFwIHRoZSB2YWx1ZSB0byBhIHByb3BlcnR5IG9mIHRoZSBvcHRpb24gYnkgZ2l2ZW4ga2V5XG4gICAgaWYgKHRoaXMub3B0aW9uc1tpbmRleF0gIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnNbaW5kZXhdW3RoaXMub3B0aW9uc1ZhbHVlS2V5XSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zW2luZGV4XVt0aGlzLm9wdGlvbnNWYWx1ZUtleV07XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlQ2hpcChldmVudDogYW55LCBjaGlwOiBzdHJpbmcpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIHRoaXMudmFsdWUgPSBjaGlwO1xuICAgIH1cbiAgfVxuXG4gIG9uT3BlbmVkQ2hhbmdlKGlzT3BlbjogYm9vbGVhbikge1xuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ib2R5LCAnZm5nLXNlbGVjdC1wYW5lbC1vcGVuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ib2R5LCAnZm5nLXNlbGVjdC1wYW5lbC1vcGVuJyk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5zaG93T3B0aW9ucyA9IGZhbHNlO1xuICAgIHRoaXMuaXNFbXB0eSgpO1xuICB9XG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmIChmYWxzZSA9PT0gdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy50cmlnZ2VyV2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/LndpZHRoO1xuICAgICAgdGhpcy5zaG93T3B0aW9ucyA9ICF0aGlzLnNob3dPcHRpb25zO1xuICAgICAgdGhpcy5vbk9wZW5lZENoYW5nZSh0aGlzLnNob3dPcHRpb25zKTtcbiAgICAgIHRoaXMuaXNFbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdCh2YWx1ZTogYW55LCBldmVudDogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSAhPT0gdHJ1ZSkge1xuICAgICAgICAvLyBjbG9zZXMgb3ZlcmxheSBwYW5lbFxuICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1RvdWNoZWQoKSB7XG4gICAgaWYgKCF0aGlzLnRvdWNoZWQpIHtcbiAgICAgIGlmICh0aGlzLm9uVG91Y2hlZCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uQ29udGVudENoYW5nZShjaGFuZ2VzOiBNdXRhdGlvblJlY29yZFtdKSB7XG4gICAgaWYgKGNoYW5nZXMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICB0aGlzLnByb2plY3RlZEh0bWwgPSBbXTtcbiAgICAgIHRoaXMuaW5pdFByb2plY3RlZE9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFByb2plY3RlZE9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuZm5nU2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmhhc1Byb2plY3RlZE9wdGlvbnMgPSB0cnVlO1xuICAgICAgdGhpcy5mbmdTZWxlY3RPcHRpb25zLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgICAgY29tcG9uZW50LnVwZGF0ZSgpLnRoZW4oZWwgPT4ge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKHsgdmFsdWU6IGNvbXBvbmVudC52YWx1ZSwgdGV4dDogZWwudGV4dENvbnRlbnQudHJpbSgpIH0pO1xuICAgICAgICAgIHRoaXMucHJvamVjdGVkSHRtbC5wdXNoKGVsLmlubmVySFRNTCk7XG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzRW1wdHkoKSB7XG4gICAgaWYgKCF0aGlzLnNob3dPcHRpb25zICYmICghdGhpcy5fdmFsdWUgfHwgJycgPT09IHRoaXMuX3ZhbHVlKSkge1xuICAgICAgdGhpcy5lbXB0eSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1wdHkgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI2RpdiBjbGFzcz1cImZ3ZS1zZWxlY3Qtd3JhcHBlclwiIFtjbGFzcy5md2UtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbY2xhc3MuZm5nLWhpZGUtbGFiZWxdPVwiaGlkZUxhYmVsXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZ3ZS1zZWxlY3RcIlxuICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgY2RrT3ZlcmxheU9yaWdpblxuICAgICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICAgW2NsYXNzLmZ3ZS1mb2N1c109XCJzaG93T3B0aW9uc1wiXG4gICAgW2NsYXNzLmZ3ZS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW2NsYXNzLmZ3ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2NsYXNzLmZ3ZS1wdHldPVwiZW1wdHlcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZ3ZS1zZWxlY3QtY29udGVudFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtdWx0aXBsZTsgZWxzZSBjaGlwc1wiPlxuICAgICAgICB7eyB2YWx1ZSAhPSBudWxsICYmIHZhbHVlIHwgZm5nQ2hpcFRleHQ6IG9wdGlvbnM6b3B0aW9uc1ZhbHVlS2V5Om9wdGlvbnNUZXh0S2V5IH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY2hpcHM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmd2UtY2hpcC1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgdiBvZiB2YWx1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZ3ZS1jaGlwIGNoaXAtdGV4dC10cnVuY2F0ZSBmd2UtcHItNFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cInRyaWdnZXJXaWR0aFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwidiB8IGZuZ0NoaXBUZXh0OiBvcHRpb25zOm9wdGlvbnNWYWx1ZUtleTpvcHRpb25zVGV4dEtleVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdiB8IGZuZ0NoaXBUZXh0OiBvcHRpb25zOm9wdGlvbnNWYWx1ZUtleTpvcHRpb25zVGV4dEtleSB9fVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLXJlbW92YWJsZVwiIChjbGljayk9XCJyZW1vdmVDaGlwKCRldmVudCwgdilcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZVxuICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3BcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcz1cImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoXT1cInRyaWdnZXJXaWR0aFwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInNob3dPcHRpb25zXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3NdPVwic2VsZWN0UGFuZWxDbGFzc2VzXCJcbiAgICAoYmFja2Ryb3BDbGljayk9XCJjbG9zZSgpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmbmctc2VsZWN0LXBhbmVsLXdyYXBcIj5cbiAgICAgIDx1bCBjbGFzcz1cImZ3ZS1zZWxlY3Qtb3B0aW9ucy1jb250YWluZXJcIj5cbiAgICAgICAgPGxpIGNsYXNzPVwiZndlLXNlbGVjdC1vcHRpb25cIiAqbmdJZj1cInJlc2V0T3B0aW9uICE9IG51bGwgJiYgIW11bHRpcGxlXCIgKGNsaWNrKT1cInNlbGVjdChudWxsLCAkZXZlbnQpXCI+e3sgcmVzZXRPcHRpb24gfX08L2xpPlxuICAgICAgICA8bGlcbiAgICAgICAgICBjbGFzcz1cImZ3ZS1zZWxlY3Qtb3B0aW9uXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoZ2V0T3B0aW9uVmFsdWUoaSksICRldmVudClcIlxuICAgICAgICAgIFt0aXRsZV09XCJnZXRPcHRpb25UZXh0KGkpIHx8IG9wdGlvbj8udGV4dFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3ZS1zZWxlY3Qtb3B0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZuZy1zZWxlY3QtcHNldWRvLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZm5nLXNlbGVjdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCc6IGNoZWNrZWQuZ2V0KGdldE9wdGlvblZhbHVlKGkpKSA9PT0gJ2NoZWNrZWQnIH1cIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzUHJvamVjdGVkT3B0aW9uczsgZWxzZSBkZWZhdWx0VGVtcGxhdGVcIiBbaW5uZXJIVE1MXT1cInByb2plY3RlZEh0bWxbaV1cIj48L3NwYW4+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZT57eyBnZXRPcHRpb25UZXh0KGkpIHx8IG9wdGlvbj8udGV4dCB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGxhYmVsIGNsYXNzPVwiZndlLXNlbGVjdC1sYWJlbFwiIFtmb3JdPVwiaWRcIiBbY2xhc3MuZndlLXNyLW9ubHldPVwiaGlkZUxhYmVsXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICA8ZGl2IGNsYXNzPVwiZndlLXNlbGVjdC1kZXNjcmlwdGlvblwiICpuZ0lmPVwiaGludFwiPlxuICAgIHt7IGhpbnQgfX1cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmd2Utc2VsZWN0LWludmFsaWRcIiAqbmdJZj1cImVycm9yXCI+XG4gICAge3sgZXJyb3IgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJmd2UtZC1ub25lXCIgKGNka09ic2VydmVDb250ZW50KT1cIm9uQ29udGVudENoYW5nZSgkZXZlbnQpXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9mb3Jtcy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9mb3Jtcy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFFWCxpQkFBaUIsRUFFakIsTUFBTSxFQUNOLFVBQVUsRUFDVixTQUFTLEVBSVQsZUFBZSxFQUNmLE1BQU0sRUFDTixZQUFZLEVBRWIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQXNCckQsTUFBTSxPQUFPLGtCQUFrQjtJQVE3QixJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQWM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsS0FBVTtRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ3BDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQy9CO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQjtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBaUNELFlBQXdDLFFBQWEsRUFBWSxRQUFtQixFQUFZLEVBQXFCO1FBQTdFLGFBQVEsR0FBUixRQUFRLENBQUs7UUFBWSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVksT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUE1RTNHLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQStDNUIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUdoQixPQUFFLEdBQUcsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFM0MsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFLcEIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUlULGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTlDLHVCQUFrQixHQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNwRCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixVQUFLLEdBQVksS0FBSyxDQUFDO1FBRXZCLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQUd4QixJQUFJLENBQUMsSUFBSSxHQUFJLElBQUksQ0FBQyxRQUFxQixDQUFDLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxFQUFFLEtBQUssQ0FBQztRQUNuRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsYUFBc0I7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7SUFDaEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFpQjtRQUMxQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQix3RkFBd0Y7WUFDeEYsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDekIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ2xHLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDakQ7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsaUVBQWlFO1FBQ2pFLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLElBQUksRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFFRCwwQ0FBMEM7UUFDMUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDbkIsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUVELGdFQUFnRTtRQUNoRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDcEcsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNsRDtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVSxFQUFFLElBQVk7UUFDakMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsTUFBZTtRQUM1QixJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztTQUM1RDthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxLQUFLLENBQUM7WUFDbkYsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFVLEVBQUUsS0FBWTtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBRW5CLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQzFCLHVCQUF1QjtnQkFDdkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ2Y7U0FDRjtJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ2xCO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVk7UUFDMUIsTUFBTSxPQUFPLEdBQUcsS0FBb0MsQ0FBQztRQUNyRCxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRVMsb0JBQW9CO1FBQzVCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRTtZQUNqQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3hDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQzNCLElBQUksRUFBRSxFQUFFO3dCQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUM1RSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7cUJBQ3pCO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVTLE9BQU87UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ25CO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUNwQjtJQUNILENBQUM7O0FBNU9NLHlCQUFNLEdBQUcsQ0FBQyxDQUFDOytHQURQLGtCQUFrQixrQkErRVQsUUFBUTttR0EvRWpCLGtCQUFrQiw2Y0FSbEI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztZQUNqRCxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsMkRBcUVnQix3QkFBd0IsZ0lDaEgzQyxzN0ZBeUVBLHdrS0R6Q1ksWUFBWSx5VkFBRSxlQUFlLG1EQUE0QixhQUFhOzJGQWFyRSxrQkFBa0I7a0JBZjlCLFNBQVM7aUNBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxhQUFhLENBQUMsWUFDdkUsWUFBWSxpQkFHUCxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDOzRCQUNqRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs7MEJBaUZZLE1BQU07MkJBQUMsUUFBUTtvR0F0RXhCLFFBQVE7c0JBRFgsS0FBSztnQkFTRixRQUFRO3NCQURYLEtBQUs7Z0JBc0NOLEVBQUU7c0JBREQsV0FBVztnQkFHSCxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ3FDLGdCQUFnQjtzQkFBMUQsZUFBZTt1QkFBQyx3QkFBd0I7Z0JBQ3ZCLFVBQVU7c0JBQTNCLFNBQVM7dUJBQUMsS0FBSztnQkFDTixTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgSG9zdEJpbmRpbmcsXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIFJlbmRlcmVyMixcbiAgSW5qZWN0LFxuICBmb3J3YXJkUmVmLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEFmdGVyVmlld0luaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBGbmdTZWxlY3RPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL3NlbGVjdC1vcHRpb24vc2VsZWN0LW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm5nQ2hpcFRleHRQaXBlIH0gZnJvbSAnLi9jaGlwLXRleHQucGlwZSc7XG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZuZ1NlbGVjdE9wdGlvbiB7XG4gIHZhbHVlOiBhbnk7XG4gIHRleHQ6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZuZ0NoaXBUZXh0UGlwZSwgRm5nU2VsZWN0T3B0aW9uQ29tcG9uZW50LCBPdmVybGF5TW9kdWxlXSxcbiAgc2VsZWN0b3I6ICdmbmctc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZuZ1NlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGbmdTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgX3JlcXVpcmVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfdmFsdWU6IGFueTtcbiAgcHJvdGVjdGVkIGJvZHk6IEhUTUxFbGVtZW50O1xuXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLm11bHRpcGxlID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3ZhbHVlLmluZGV4T2YodmFsdWUpO1xuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICB0aGlzLl92YWx1ZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgdGhpcy5jaGVja2VkLnNldCh2YWx1ZSwgJ2NoZWNrZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuY2hlY2tlZC5zZXQodmFsdWUsIG51bGwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9uQ2hhbmdlICE9IG51bGwpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuZm5nQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gIH1cblxuICBvbkNoYW5nZTogKChfOiBhbnkpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBvblRvdWNoZWQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICB0b3VjaGVkID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKClcbiAgaWQgPSBgaW5wdXQtY29udHJvbC0keysrRm5nU2VsZWN0Q29tcG9uZW50Lm5leHRJZH1gO1xuXG4gIEBJbnB1dCgpIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNpemU6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIG9wdGlvbnNWYWx1ZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBvcHRpb25zVGV4dEtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBvcHRpb25PYmplY3RBc1ZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBlcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuICBASW5wdXQoKSBoaWRlTGFiZWwgPSBmYWxzZTtcbiAgQElucHV0KCkgaGludCA9ICcnO1xuICBASW5wdXQoKSByZXNldE9wdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBAQ29udGVudENoaWxkcmVuKEZuZ1NlbGVjdE9wdGlvbkNvbXBvbmVudCkgZm5nU2VsZWN0T3B0aW9uczogUXVlcnlMaXN0PEZuZ1NlbGVjdE9wdGlvbkNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoJ2RpdicpIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG4gIEBPdXRwdXQoKSBmbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBzZWxlY3RQYW5lbENsYXNzZXM6IHN0cmluZ1tdID0gWydmbmctc2VsZWN0LXBhbmVsJ107XG4gIHNob3dPcHRpb25zID0gZmFsc2U7XG4gIGVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIHRyaWdnZXJXaWR0aDogYW55O1xuICBjaGVja2VkID0gbmV3IE1hcCgpO1xuICBoYXNQcm9qZWN0ZWRPcHRpb25zID0gZmFsc2U7XG4gIHByb2plY3RlZEh0bWw6IGFueVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJvdGVjdGVkIGRvY3VtZW50OiBhbnksIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLCBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5ib2R5ID0gKHRoaXMuZG9jdW1lbnQgYXMgRG9jdW1lbnQpLmJvZHk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaXplICE9IG51bGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0UGFuZWxDbGFzc2VzLnB1c2goJ2ZuZy1zZWxlY3QtcGFuZWwtb3B0aW9ucy0nICsgdGhpcy5zaXplKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tdWx0aXBsZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0UGFuZWxDbGFzc2VzLnB1c2goJ2ZuZy1zZWxlY3QtcGFuZWwtbXVsdGlwbGUnKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyV2lkdGggPSB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPy53aWR0aDtcbiAgICB0aGlzLmluaXRQcm9qZWN0ZWRPcHRpb25zKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoc2hvdWxkRGlzYWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBzaG91bGREaXNhYmxlO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBzZXQgY2hlY2ttYXJrcyBpbiBvdmVybGF5IHBhbmVsLCBzbyB0aGF0IGl0IGlzIGRpc3BsYXllZCBjb3JyZWN0bHkgd2hlbiB1c2VyIG9wZW5zIGl0XG4gICAgICB2YWx1ZT8uZm9yRWFjaCgodjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tlZC5zZXQodiwgJ2NoZWNrZWQnKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldE9wdGlvblRleHQoaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLm9wdGlvbnNbaW5kZXhdICYmIHRoaXMub3B0aW9uc1RleHRLZXkgJiYgdGhpcy5vcHRpb25zW2luZGV4XVt0aGlzLm9wdGlvbnNUZXh0S2V5XSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zW2luZGV4XVt0aGlzLm9wdGlvbnNUZXh0S2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldE9wdGlvblZhbHVlKGluZGV4OiBudW1iZXIpIHtcbiAgICAvLyBpZiBzZXQgdG8gdHJ1ZSB0aGUgY29tcGxldGUgb3B0aW9uIG9iamVjdCBpcyByZXR1cm5lZCBhcyB2YWx1ZVxuICAgIGlmICh0aGlzLm9wdGlvbk9iamVjdEFzVmFsdWUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbaW5kZXhdO1xuICAgIH1cblxuICAgIC8vIHRyeSB0byBhY2Nlc3Mgc3RhbmRhcmQgcHJvcGVydHkgJ3ZhbHVlJ1xuICAgIGNvbnN0IHYgPSB0aGlzLm9wdGlvbnNbaW5kZXhdWyd2YWx1ZSddO1xuXG4gICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHY7XG4gICAgfVxuXG4gICAgLy8gdHJ5IHRvIG1hcCB0aGUgdmFsdWUgdG8gYSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9uIGJ5IGdpdmVuIGtleVxuICAgIGlmICh0aGlzLm9wdGlvbnNbaW5kZXhdICYmIHRoaXMub3B0aW9uc1ZhbHVlS2V5ICYmIHRoaXMub3B0aW9uc1tpbmRleF1bdGhpcy5vcHRpb25zVmFsdWVLZXldICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbaW5kZXhdW3RoaXMub3B0aW9uc1ZhbHVlS2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlbW92ZUNoaXAoZXZlbnQ6IGFueSwgY2hpcDogc3RyaW5nKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICB0aGlzLnZhbHVlID0gY2hpcDtcbiAgICB9XG4gIH1cblxuICBvbk9wZW5lZENoYW5nZShpc09wZW46IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuYm9keSwgJ2ZuZy1zZWxlY3QtcGFuZWwtb3BlbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuYm9keSwgJ2ZuZy1zZWxlY3QtcGFuZWwtb3BlbicpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuc2hvd09wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLmlzRW1wdHkoKTtcbiAgfVxuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAoZmFsc2UgPT09IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudHJpZ2dlcldpZHRoID0gdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8ud2lkdGg7XG4gICAgICB0aGlzLnNob3dPcHRpb25zID0gIXRoaXMuc2hvd09wdGlvbnM7XG4gICAgICB0aGlzLm9uT3BlbmVkQ2hhbmdlKHRoaXMuc2hvd09wdGlvbnMpO1xuICAgICAgdGhpcy5pc0VtcHR5KCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0KHZhbHVlOiBhbnksIGV2ZW50OiBFdmVudCkge1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgIGlmICh0aGlzLm11bHRpcGxlICE9PSB0cnVlKSB7XG4gICAgICAgIC8vIGNsb3NlcyBvdmVybGF5IHBhbmVsXG4gICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0FzVG91Y2hlZCgpIHtcbiAgICBpZiAoIXRoaXMudG91Y2hlZCkge1xuICAgICAgaWYgKHRoaXMub25Ub3VjaGVkICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25Db250ZW50Q2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGNoYW5nZXMgPSBldmVudCBhcyB1bmtub3duIGFzIE11dGF0aW9uUmVjb3JkW107XG4gICAgaWYgKGNoYW5nZXMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICB0aGlzLnByb2plY3RlZEh0bWwgPSBbXTtcbiAgICAgIHRoaXMuaW5pdFByb2plY3RlZE9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFByb2plY3RlZE9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuZm5nU2VsZWN0T3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmhhc1Byb2plY3RlZE9wdGlvbnMgPSB0cnVlO1xuICAgICAgdGhpcy5mbmdTZWxlY3RPcHRpb25zLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgICAgY29tcG9uZW50LnVwZGF0ZSgpLnRoZW4oZWwgPT4ge1xuICAgICAgICAgIGlmIChlbCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnB1c2goeyB2YWx1ZTogY29tcG9uZW50LnZhbHVlLCB0ZXh0OiBlbC50ZXh0Q29udGVudD8udHJpbSgpIH0pO1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0ZWRIdG1sLnB1c2goZWwuaW5uZXJIVE1MKTtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNFbXB0eSgpIHtcbiAgICBpZiAoIXRoaXMuc2hvd09wdGlvbnMgJiYgKCF0aGlzLl92YWx1ZSB8fCAnJyA9PT0gdGhpcy5fdmFsdWUpKSB7XG4gICAgICB0aGlzLmVtcHR5ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbXB0eSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAjZGl2IGNsYXNzPVwiZndlLXNlbGVjdC13cmFwcGVyXCIgW2NsYXNzLmZ3ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtjbGFzcy5mbmctaGlkZS1sYWJlbF09XCJoaWRlTGFiZWxcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZndlLXNlbGVjdFwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICBbY2xhc3MuZndlLWZvY3VzXT1cInNob3dPcHRpb25zXCJcbiAgICBbY2xhc3MuZndlLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbY2xhc3MuZndlLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbY2xhc3MuZndlLXB0eV09XCJlbXB0eVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZndlLXNlbGVjdC1jb250ZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW11bHRpcGxlOyBlbHNlIGNoaXBzXCI+XG4gICAgICAgIHt7IHZhbHVlICE9IG51bGwgJiYgdmFsdWUgfCBmbmdDaGlwVGV4dDogb3B0aW9uczpvcHRpb25zVmFsdWVLZXk6b3B0aW9uc1RleHRLZXkgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjaGlwcz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZ3ZS1jaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2IG9mIHZhbHVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZndlLWNoaXAgY2hpcC10ZXh0LXRydW5jYXRlIGZ3ZS1wci00XCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwidHJpZ2dlcldpZHRoXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJ2IHwgZm5nQ2hpcFRleHQ6IG9wdGlvbnM6b3B0aW9uc1ZhbHVlS2V5Om9wdGlvbnNUZXh0S2V5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB2IHwgZm5nQ2hpcFRleHQ6IG9wdGlvbnM6b3B0aW9uc1ZhbHVlS2V5Om9wdGlvbnNUZXh0S2V5IH19XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXAtcmVtb3ZhYmxlXCIgKGNsaWNrKT1cInJlbW92ZUNoaXAoJGV2ZW50LCB2KVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlXG4gICAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcFxuICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzPVwiY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3BcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGhdPVwidHJpZ2dlcldpZHRoXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwic2hvd09wdGlvbnNcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzc109XCJzZWxlY3RQYW5lbENsYXNzZXNcIlxuICAgIChiYWNrZHJvcENsaWNrKT1cImNsb3NlKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZuZy1zZWxlY3QtcGFuZWwtd3JhcFwiPlxuICAgICAgPHVsIGNsYXNzPVwiZndlLXNlbGVjdC1vcHRpb25zLWNvbnRhaW5lclwiPlxuICAgICAgICA8bGkgY2xhc3M9XCJmd2Utc2VsZWN0LW9wdGlvblwiICpuZ0lmPVwicmVzZXRPcHRpb24gIT0gbnVsbCAmJiAhbXVsdGlwbGVcIiAoY2xpY2spPVwic2VsZWN0KG51bGwsICRldmVudClcIj57eyByZXNldE9wdGlvbiB9fTwvbGk+XG4gICAgICAgIDxsaVxuICAgICAgICAgIGNsYXNzPVwiZndlLXNlbGVjdC1vcHRpb25cIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChnZXRPcHRpb25WYWx1ZShpKSwgJGV2ZW50KVwiXG4gICAgICAgICAgW3RpdGxlXT1cImdldE9wdGlvblRleHQoaSkgfHwgb3B0aW9uPy50ZXh0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZndlLXNlbGVjdC1vcHRpb24tY29udGVudFwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm5nLXNlbGVjdC1wc2V1ZG8tY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdmbmctc2VsZWN0LXBzZXVkby1jaGVja2JveC1jaGVja2VkJzogY2hlY2tlZC5nZXQoZ2V0T3B0aW9uVmFsdWUoaSkpID09PSAnY2hlY2tlZCcgfVwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJoYXNQcm9qZWN0ZWRPcHRpb25zOyBlbHNlIGRlZmF1bHRUZW1wbGF0ZVwiIFtpbm5lckhUTUxdPVwicHJvamVjdGVkSHRtbFtpXVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlPnt7IGdldE9wdGlvblRleHQoaSkgfHwgb3B0aW9uPy50ZXh0IH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuICA8bGFiZWwgY2xhc3M9XCJmd2Utc2VsZWN0LWxhYmVsXCIgW2Zvcl09XCJpZFwiIFtjbGFzcy5md2Utc3Itb25seV09XCJoaWRlTGFiZWxcIj57eyBsYWJlbCB9fTwvbGFiZWw+XG4gIDxkaXYgY2xhc3M9XCJmd2Utc2VsZWN0LWRlc2NyaXB0aW9uXCIgKm5nSWY9XCJoaW50XCI+XG4gICAge3sgaGludCB9fVxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZ3ZS1zZWxlY3QtaW52YWxpZFwiICpuZ0lmPVwiZXJyb3JcIj5cbiAgICB7eyBlcnJvciB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImZ3ZS1kLW5vbmVcIiAoY2RrT2JzZXJ2ZUNvbnRlbnQpPVwib25Db250ZW50Q2hhbmdlKCRldmVudClcIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
@@ -1,19 +1,12 @@
1
- import { Component, forwardRef, ViewEncapsulation, Input, ElementRef, HostListener } from '@angular/core';
1
+ import { Component, forwardRef, ViewEncapsulation, Input, HostListener } from '@angular/core';
2
2
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
3
  import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
4
- import { Subject } from 'rxjs';
4
+ import { Subscription, Subject } from 'rxjs';
5
5
  import { debounceTime } from 'rxjs/operators';
6
+ import { CommonModule } from '@angular/common';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@angular/common";
8
- export class SliderComponent {
9
- constructor(elementRef) {
10
- this.elementRef = elementRef;
11
- this.large = false;
12
- this.min = 0;
13
- this.max = 100;
14
- this.innerDisabled = false;
15
- this.resizeSubject = new Subject();
16
- }
9
+ export class FngSliderComponent {
17
10
  get disabled() {
18
11
  return this.innerDisabled;
19
12
  }
@@ -33,16 +26,26 @@ export class SliderComponent {
33
26
  }
34
27
  this.updateValuePosition();
35
28
  }
29
+ constructor(elementRef) {
30
+ this.elementRef = elementRef;
31
+ this.large = false;
32
+ this.min = 0;
33
+ this.max = 100;
34
+ this.step = 0;
35
+ this.left = 0;
36
+ this.innerDisabled = false;
37
+ this.innerValue = 0;
38
+ this.resizeSub = new Subscription();
39
+ this.resizeSubject = new Subject();
40
+ }
36
41
  onResize() {
37
42
  this.resizeSubject.next(true);
38
43
  }
39
44
  ngAfterViewInit() {
40
- this.resizeSub = this.resizeSubject.pipe(debounceTime(25)).subscribe(() => this.updateValuePosition());
45
+ this.resizeSub.add(this.resizeSubject.pipe(debounceTime(25)).subscribe(() => this.updateValuePosition()));
41
46
  }
42
47
  ngOnDestroy() {
43
- if (this.resizeSub != null) {
44
- this.resizeSub.unsubscribe();
45
- }
48
+ this.resizeSub.unsubscribe();
46
49
  }
47
50
  writeValue(value) {
48
51
  this.innerValue = coerceNumberProperty(value);
@@ -68,23 +71,23 @@ export class SliderComponent {
68
71
  }
69
72
  }
70
73
  }
71
- SliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: SliderComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
72
- SliderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: SliderComponent, selector: "fng-slider", inputs: { label: "label", large: "large", min: "min", max: "max", step: "step", digitsInfo: "digitsInfo", locale: "locale", disabled: "disabled", value: "value" }, host: { listeners: { "window:resize": "onResize()" } }, providers: [
74
+ FngSliderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngSliderComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
75
+ FngSliderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: FngSliderComponent, isStandalone: true, selector: "fng-slider", inputs: { label: "label", large: "large", min: "min", max: "max", step: "step", digitsInfo: "digitsInfo", locale: "locale", disabled: "disabled", value: "value" }, host: { listeners: { "window:resize": "onResize()" } }, providers: [
73
76
  {
74
77
  provide: NG_VALUE_ACCESSOR,
75
- useExisting: forwardRef(() => SliderComponent),
78
+ useExisting: forwardRef(() => FngSliderComponent),
76
79
  multi: true
77
80
  }
78
- ], ngImport: i0, template: "<label class=\"fwe-slider\" [class.fwe-slider-lg]=\"large\" [class.fng-slider-label]=\"label != null\">\n <span *ngIf=\"label\">{{ label }}</span>\n <input\n type=\"range\"\n class=\"fwe-slider-input\"\n [disabled]=\"disabled\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.step]=\"step\"\n autocomplete=\"off\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n />\n <span *ngIf=\"left != null\" class=\"fng-slider-value\" [style.left]=\"left + 'px'\">{{ value | number: digitsInfo:locale }}</span>\n</label>\n", styles: ["label.fwe-slider{display:block;height:56px;position:relative}label.fwe-slider.fng-slider-label{height:83px}label.fwe-slider .fng-slider-value{color:var(--fwe-text);font-size:var(--fwe-font-size-base);margin-bottom:0;position:absolute;bottom:0px;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }], encapsulation: i0.ViewEncapsulation.None });
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: SliderComponent, decorators: [{
81
+ ], ngImport: i0, template: "<label class=\"fwe-slider\" [class.fwe-slider-lg]=\"large\" [class.fng-slider-label]=\"label != null\">\n <span *ngIf=\"label\">{{ label }}</span>\n <input\n type=\"range\"\n class=\"fwe-slider-input\"\n [disabled]=\"disabled\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.step]=\"step\"\n autocomplete=\"off\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n />\n <span *ngIf=\"left != null\" class=\"fng-slider-value\" [style.left]=\"left + 'px'\">{{ value | number: digitsInfo:locale }}</span>\n</label>\n", styles: ["label.fwe-slider{display:block;height:56px;position:relative}label.fwe-slider.fng-slider-label{height:83px}label.fwe-slider .fng-slider-value{color:var(--fwe-text);font-size:var(--fwe-font-size-base);margin-bottom:0;position:absolute;bottom:0;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }], encapsulation: i0.ViewEncapsulation.None });
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngSliderComponent, decorators: [{
80
83
  type: Component,
81
- args: [{ selector: 'fng-slider', providers: [
84
+ args: [{ standalone: true, imports: [CommonModule], selector: 'fng-slider', providers: [
82
85
  {
83
86
  provide: NG_VALUE_ACCESSOR,
84
- useExisting: forwardRef(() => SliderComponent),
87
+ useExisting: forwardRef(() => FngSliderComponent),
85
88
  multi: true
86
89
  }
87
- ], encapsulation: ViewEncapsulation.None, template: "<label class=\"fwe-slider\" [class.fwe-slider-lg]=\"large\" [class.fng-slider-label]=\"label != null\">\n <span *ngIf=\"label\">{{ label }}</span>\n <input\n type=\"range\"\n class=\"fwe-slider-input\"\n [disabled]=\"disabled\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.step]=\"step\"\n autocomplete=\"off\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n />\n <span *ngIf=\"left != null\" class=\"fng-slider-value\" [style.left]=\"left + 'px'\">{{ value | number: digitsInfo:locale }}</span>\n</label>\n", styles: ["label.fwe-slider{display:block;height:56px;position:relative}label.fwe-slider.fng-slider-label{height:83px}label.fwe-slider .fng-slider-value{color:var(--fwe-text);font-size:var(--fwe-font-size-base);margin-bottom:0;position:absolute;bottom:0px;-webkit-user-select:none;user-select:none}\n"] }]
90
+ ], encapsulation: ViewEncapsulation.None, template: "<label class=\"fwe-slider\" [class.fwe-slider-lg]=\"large\" [class.fng-slider-label]=\"label != null\">\n <span *ngIf=\"label\">{{ label }}</span>\n <input\n type=\"range\"\n class=\"fwe-slider-input\"\n [disabled]=\"disabled\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.step]=\"step\"\n autocomplete=\"off\"\n [value]=\"value\"\n (input)=\"onInput($event)\"\n />\n <span *ngIf=\"left != null\" class=\"fng-slider-value\" [style.left]=\"left + 'px'\">{{ value | number: digitsInfo:locale }}</span>\n</label>\n", styles: ["label.fwe-slider{display:block;height:56px;position:relative}label.fwe-slider.fng-slider-label{height:83px}label.fwe-slider .fng-slider-value{color:var(--fwe-text);font-size:var(--fwe-font-size-base);margin-bottom:0;position:absolute;bottom:0;-webkit-user-select:none;user-select:none}\n"] }]
88
91
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { label: [{
89
92
  type: Input
90
93
  }], large: [{
@@ -107,4 +110,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
107
110
  type: HostListener,
108
111
  args: ['window:resize']
109
112
  }] } });
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL2Zvcm1zL3NsaWRlci9zbGlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZm9ybXMvc2xpZGVyL3NsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsU0FBUyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFpQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEksT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BGLE9BQU8sRUFBZ0IsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBZTlDLE1BQU0sT0FBTyxlQUFlO0lBa0QxQixZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBaERqQyxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBR3ZCLFFBQUcsR0FBRyxDQUFDLENBQUM7UUFHUixRQUFHLEdBQUcsR0FBRyxDQUFDO1FBYUEsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUEyQnhCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztJQUVGLENBQUM7SUE1QjlDLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFDSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFH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QWlCLENBQUMsSUFBSTtpR0FHNUIsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHTixHQUFHO3NCQURGLEtBQUs7Z0JBSU4sR0FBRztzQkFERixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQVVGLFFBQVE7c0JBRFgsS0FBSztnQkFXRixLQUFLO3NCQURSLEtBQUs7Z0JBcUJ5QixRQUFRO3NCQUF0QyxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkRlc3Ryb3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0LCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZuZy1zbGlkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vc2xpZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2xpZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2xpZGVyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBsYXJnZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIG1pbiA9IDA7XG5cbiAgQElucHV0KClcbiAgbWF4ID0gMTAwO1xuXG4gIEBJbnB1dCgpXG4gIHN0ZXA6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBkaWdpdHNJbmZvOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbG9jYWxlOiBzdHJpbmc7XG5cbiAgbGVmdDogbnVtYmVyO1xuXG4gIHByb3RlY3RlZCBpbm5lckRpc2FibGVkID0gZmFsc2U7XG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lckRpc2FibGVkO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaW5uZXJEaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5uZXJWYWx1ZTogbnVtYmVyO1xuICBnZXQgdmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lclZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmlubmVyVmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKHRoaXMub25DaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uVG91Y2hlZCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZhbHVlUG9zaXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcmVzaXplU3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIG9uQ2hhbmdlOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcblxuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQ7XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpIG9uUmVzaXplKCkge1xuICAgIHRoaXMucmVzaXplU3ViamVjdC5uZXh0KHRydWUpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMucmVzaXplU3ViID0gdGhpcy5yZXNpemVTdWJqZWN0LnBpcGUoZGVib3VuY2VUaW1lKDI1KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlVmFsdWVQb3NpdGlvbigpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnJlc2l6ZVN1YiAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc2l6ZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaW5uZXJWYWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlUG9zaXRpb24oKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gIH1cblxuICB1cGRhdGVWYWx1ZVBvc2l0aW9uKCkge1xuICAgIGlmICh0aGlzLmVsZW1lbnRSZWYgIT0gbnVsbCAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBiY3IgPSAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZGlmZiA9IHRoaXMubWF4IC0gdGhpcy5taW47XG4gICAgICB0aGlzLmxlZnQgPSAoKHRoaXMudmFsdWUgLSB0aGlzLm1pbikgLyBkaWZmKSAqIChiY3Iud2lkdGggLSAxNik7XG4gICAgfVxuICB9XG59XG4iLCI8bGFiZWwgY2xhc3M9XCJmd2Utc2xpZGVyXCIgW2NsYXNzLmZ3ZS1zbGlkZXItbGddPVwibGFyZ2VcIiBbY2xhc3MuZm5nLXNsaWRlci1sYWJlbF09XCJsYWJlbCAhPSBudWxsXCI+XG4gIDxzcGFuICpuZ0lmPVwibGFiZWxcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgPGlucHV0XG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICBjbGFzcz1cImZ3ZS1zbGlkZXItaW5wdXRcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2F0dHIubWluXT1cIm1pblwiXG4gICAgW2F0dHIubWF4XT1cIm1heFwiXG4gICAgW2F0dHIuc3RlcF09XCJzdGVwXCJcbiAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gIC8+XG4gIDxzcGFuICpuZ0lmPVwibGVmdCAhPSBudWxsXCIgY2xhc3M9XCJmbmctc2xpZGVyLXZhbHVlXCIgW3N0eWxlLmxlZnRdPVwibGVmdCArICdweCdcIj57eyB2YWx1ZSB8IG51bWJlcjogZGlnaXRzSW5mbzpsb2NhbGUgfX08L3NwYW4+XG48L2xhYmVsPlxuIl19
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9mb3Jtcy9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2xpYi9mb3Jtcy9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYSxTQUFTLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBNkIsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BJLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFpQi9DLE1BQU0sT0FBTyxrQkFBa0I7SUFzQjdCLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFDSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFHRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQ0ksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FB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QWY5QixTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxZQUNiLFlBQVksYUFHWDt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0YsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTtpR0FHNUIsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFHTixHQUFHO3NCQURGLEtBQUs7Z0JBSU4sR0FBRztzQkFERixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQVVGLFFBQVE7c0JBRFgsS0FBSztnQkFXRixLQUFLO3NCQURSLEtBQUs7Z0JBcUJ5QixRQUFRO3NCQUF0QyxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkRlc3Ryb3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0LCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHNlbGVjdG9yOiAnZm5nLXNsaWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zbGlkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGbmdTbGlkZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRm5nU2xpZGVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGxhcmdlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbWluID0gMDtcblxuICBASW5wdXQoKVxuICBtYXggPSAxMDA7XG5cbiAgQElucHV0KClcbiAgc3RlcDogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKVxuICBkaWdpdHNJbmZvOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgbG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgbGVmdDogbnVtYmVyID0gMDtcblxuICBwcm90ZWN0ZWQgaW5uZXJEaXNhYmxlZCA9IGZhbHNlO1xuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJEaXNhYmxlZDtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlubmVyRGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlubmVyVmFsdWU6IG51bWJlciA9IDA7XG4gIGdldCB2YWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlubmVyVmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuaW5uZXJWYWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAodGhpcy5vbkNoYW5nZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25Ub3VjaGVkICE9IG51bGwpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVmFsdWVQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNpemVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgcmVzaXplU3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIG9uQ2hhbmdlOiAoKHZhbHVlOiBudW1iZXIpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIG9uVG91Y2hlZDogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKSBvblJlc2l6ZSgpIHtcbiAgICB0aGlzLnJlc2l6ZVN1YmplY3QubmV4dCh0cnVlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnJlc2l6ZVN1Yi5hZGQodGhpcy5yZXNpemVTdWJqZWN0LnBpcGUoZGVib3VuY2VUaW1lKDI1KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlVmFsdWVQb3NpdGlvbigpKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlc2l6ZVN1Yi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pbm5lclZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVQb3NpdGlvbigpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgfVxuXG4gIHVwZGF0ZVZhbHVlUG9zaXRpb24oKSB7XG4gICAgaWYgKHRoaXMuZWxlbWVudFJlZiAhPSBudWxsICYmIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGJjciA9ICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBkaWZmID0gdGhpcy5tYXggLSB0aGlzLm1pbjtcbiAgICAgIHRoaXMubGVmdCA9ICgodGhpcy52YWx1ZSAtIHRoaXMubWluKSAvIGRpZmYpICogKGJjci53aWR0aCAtIDE2KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxsYWJlbCBjbGFzcz1cImZ3ZS1zbGlkZXJcIiBbY2xhc3MuZndlLXNsaWRlci1sZ109XCJsYXJnZVwiIFtjbGFzcy5mbmctc2xpZGVyLWxhYmVsXT1cImxhYmVsICE9IG51bGxcIj5cbiAgPHNwYW4gKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICA8aW5wdXRcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIGNsYXNzPVwiZndlLXNsaWRlci1pbnB1dFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYXR0ci5taW5dPVwibWluXCJcbiAgICBbYXR0ci5tYXhdPVwibWF4XCJcbiAgICBbYXR0ci5zdGVwXT1cInN0ZXBcIlxuICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgLz5cbiAgPHNwYW4gKm5nSWY9XCJsZWZ0ICE9IG51bGxcIiBjbGFzcz1cImZuZy1zbGlkZXItdmFsdWVcIiBbc3R5bGUubGVmdF09XCJsZWZ0ICsgJ3B4J1wiPnt7IHZhbHVlIHwgbnVtYmVyOiBkaWdpdHNJbmZvOmxvY2FsZSB9fTwvc3Bhbj5cbjwvbGFiZWw+XG4iXX0=