ngx-tethys 18.0.7 → 18.1.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/alert/alert.component.d.ts +11 -19
  3. package/anchor/anchor.component.d.ts +1 -3
  4. package/badge/badge.component.d.ts +12 -3
  5. package/date-picker/lib/date/date-table-cell.component.d.ts +1 -1
  6. package/date-picker/lib/popups/date-popup.component.d.ts +0 -1
  7. package/date-picker/lib/popups/inner-popup.component.d.ts +2 -1
  8. package/date-range/date-range.component.d.ts +2 -8
  9. package/divider/divider.component.d.ts +8 -2
  10. package/esm2022/action/action.component.mjs +3 -4
  11. package/esm2022/alert/alert.component.mjs +55 -81
  12. package/esm2022/anchor/anchor-link.component.mjs +15 -7
  13. package/esm2022/anchor/anchor.component.mjs +17 -9
  14. package/esm2022/arrow-switcher/arrow-switcher.component.mjs +4 -5
  15. package/esm2022/autocomplete/autocomplete.component.mjs +5 -5
  16. package/esm2022/avatar/avatar-list/avatar-list.component.mjs +4 -4
  17. package/esm2022/avatar/avatar.component.mjs +4 -4
  18. package/esm2022/back-top/back-top.component.mjs +4 -4
  19. package/esm2022/badge/badge.component.mjs +3 -4
  20. package/esm2022/breadcrumb/breadcrumb.component.mjs +4 -6
  21. package/esm2022/button/button-icon.component.mjs +4 -4
  22. package/esm2022/button/button.component.mjs +4 -4
  23. package/esm2022/calendar/calendar-header.component.mjs +4 -4
  24. package/esm2022/calendar/calendar.component.mjs +3 -4
  25. package/esm2022/card/header.component.mjs +4 -4
  26. package/esm2022/carousel/carousel.component.mjs +4 -4
  27. package/esm2022/cascader/cascader-li.component.mjs +4 -4
  28. package/esm2022/cascader/cascader-search-option.component.mjs +4 -4
  29. package/esm2022/cascader/cascader.component.mjs +5 -7
  30. package/esm2022/checkbox/checkbox.component.mjs +5 -5
  31. package/esm2022/collapse/collapse-item.component.mjs +4 -4
  32. package/esm2022/color-picker/color-picker-panel.component.mjs +4 -4
  33. package/esm2022/comment/comment.component.mjs +4 -4
  34. package/esm2022/date-picker/date-picker.component.mjs +5 -6
  35. package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +3 -4
  36. package/esm2022/date-picker/lib/date/date-header.component.mjs +4 -4
  37. package/esm2022/date-picker/lib/date/date-table-cell.component.mjs +4 -4
  38. package/esm2022/date-picker/lib/date/date-table.component.mjs +4 -4
  39. package/esm2022/date-picker/lib/date-carousel/date-carousel.component.mjs +5 -5
  40. package/esm2022/date-picker/lib/decade/decade-header.component.mjs +4 -4
  41. package/esm2022/date-picker/lib/decade/decade-table.component.mjs +4 -4
  42. package/esm2022/date-picker/lib/month/month-header.component.mjs +4 -4
  43. package/esm2022/date-picker/lib/month/month-table.component.mjs +4 -4
  44. package/esm2022/date-picker/lib/popups/date-popup.component.mjs +4 -18
  45. package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +3 -8
  46. package/esm2022/date-picker/lib/quarter/quarter-table.component.mjs +4 -4
  47. package/esm2022/date-picker/lib/year/year-header.component.mjs +4 -4
  48. package/esm2022/date-picker/lib/year/year-table.component.mjs +4 -4
  49. package/esm2022/date-picker/month-picker.component.mjs +4 -5
  50. package/esm2022/date-picker/picker.component.mjs +4 -14
  51. package/esm2022/date-picker/quarter-picker.component.mjs +4 -5
  52. package/esm2022/date-picker/range-picker.component.mjs +4 -5
  53. package/esm2022/date-picker/week-picker.component.mjs +4 -5
  54. package/esm2022/date-picker/year-picker.component.mjs +4 -5
  55. package/esm2022/date-range/date-range.component.mjs +4 -4
  56. package/esm2022/date-range/optional-dates/optional-dates.component.mjs +3 -6
  57. package/esm2022/dialog/footer/dialog-footer.component.mjs +4 -4
  58. package/esm2022/dialog/header/dialog-header.component.mjs +4 -4
  59. package/esm2022/divider/divider.component.mjs +21 -13
  60. package/esm2022/dropdown/dropdown-menu.component.mjs +11 -7
  61. package/esm2022/empty/empty.component.mjs +4 -4
  62. package/esm2022/form/form-group-error/form-group-error.component.mjs +4 -4
  63. package/esm2022/form/form-group.component.mjs +4 -4
  64. package/esm2022/form/from-group-footer/form-group-footer.component.mjs +4 -4
  65. package/esm2022/guider/guider-hint/guider-hint.component.mjs +4 -4
  66. package/esm2022/image/preview/image-preview.component.mjs +3 -4
  67. package/esm2022/input/input-group.component.mjs +4 -4
  68. package/esm2022/input/input-search.component.mjs +3 -4
  69. package/esm2022/input/input.component.mjs +4 -4
  70. package/esm2022/layout/header.component.mjs +4 -4
  71. package/esm2022/layout/sidebar-header.component.mjs +4 -4
  72. package/esm2022/layout/sidebar.component.mjs +81 -71
  73. package/esm2022/list/list-item-meta.component.mjs +4 -4
  74. package/esm2022/loading/loading.component.mjs +3 -4
  75. package/esm2022/mention/suggestions/suggestions.component.mjs +4 -4
  76. package/esm2022/menu/group/menu-group.component.mjs +4 -4
  77. package/esm2022/menu/item/menu-item.component.mjs +3 -4
  78. package/esm2022/message/message-container.component.mjs +13 -5
  79. package/esm2022/message/message.component.mjs +3 -4
  80. package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +4 -5
  81. package/esm2022/nav/nav.component.mjs +4 -6
  82. package/esm2022/notify/notify-container.component.mjs +4 -4
  83. package/esm2022/notify/notify.component.mjs +4 -4
  84. package/esm2022/pagination/pagination.component.mjs +4 -4
  85. package/esm2022/popover/header/popover-header.component.mjs +4 -4
  86. package/esm2022/progress/progress-circle.component.mjs +4 -7
  87. package/esm2022/progress/progress.component.mjs +5 -8
  88. package/esm2022/property/property-item.component.mjs +4 -4
  89. package/esm2022/property-operation/property-operation.component.mjs +4 -4
  90. package/esm2022/radio/radio.component.mjs +5 -5
  91. package/esm2022/rate/rate.component.mjs +5 -5
  92. package/esm2022/resizable/resize-handle.component.mjs +10 -7
  93. package/esm2022/resizable/resize-handles.component.mjs +12 -5
  94. package/esm2022/result/result.component.mjs +4 -4
  95. package/esm2022/segment/segment-item.component.mjs +4 -4
  96. package/esm2022/segment/segment.component.mjs +4 -5
  97. package/esm2022/select/custom-select/custom-select.component.mjs +6 -8
  98. package/esm2022/select/native-select/native-select.component.mjs +5 -6
  99. package/esm2022/shared/option/list-option/list-option.component.mjs +3 -4
  100. package/esm2022/shared/option/option.component.mjs +3 -4
  101. package/esm2022/shared/select/select-control/select-control.component.mjs +5 -5
  102. package/esm2022/skeleton/stylized/bullet-list.component.mjs +8 -9
  103. package/esm2022/skeleton/stylized/list.component.mjs +8 -9
  104. package/esm2022/skeleton/stylized/paragraph.component.mjs +8 -9
  105. package/esm2022/slide/slide-header/slide-header.component.mjs +4 -4
  106. package/esm2022/space/space.component.mjs +4 -4
  107. package/esm2022/statistic/statistic.component.mjs +4 -4
  108. package/esm2022/stepper/stepper.component.mjs +5 -5
  109. package/esm2022/switch/switch.component.mjs +6 -6
  110. package/esm2022/table/table-skeleton.component.mjs +4 -7
  111. package/esm2022/table/table.component.mjs +5 -7
  112. package/esm2022/tabs/tab-content.component.mjs +9 -9
  113. package/esm2022/tabs/tabs.component.mjs +4 -7
  114. package/esm2022/time-picker/inner/inner-time-picker.component.mjs +3 -4
  115. package/esm2022/time-picker/time-picker-panel.component.mjs +5 -8
  116. package/esm2022/time-picker/time-picker.component.mjs +5 -15
  117. package/esm2022/timeline/timeline-item.component.mjs +4 -4
  118. package/esm2022/timeline/timeline.component.mjs +9 -9
  119. package/esm2022/tooltip/tooltip.component.mjs +4 -4
  120. package/esm2022/transfer/transfer-list.component.mjs +4 -4
  121. package/esm2022/transfer/transfer.component.mjs +4 -4
  122. package/esm2022/tree/tree-node.component.mjs +4 -4
  123. package/esm2022/tree/tree.component.mjs +5 -7
  124. package/esm2022/tree-select/tree-select.component.mjs +7 -10
  125. package/esm2022/typography/text/text.component.mjs +3 -4
  126. package/esm2022/version.mjs +2 -2
  127. package/esm2022/vote/vote.component.mjs +4 -4
  128. package/fesm2022/ngx-tethys-action.mjs +3 -3
  129. package/fesm2022/ngx-tethys-action.mjs.map +1 -1
  130. package/fesm2022/ngx-tethys-alert.mjs +54 -80
  131. package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
  132. package/fesm2022/ngx-tethys-anchor.mjs +29 -13
  133. package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
  134. package/fesm2022/ngx-tethys-arrow-switcher.mjs +4 -4
  135. package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
  136. package/fesm2022/ngx-tethys-autocomplete.mjs +4 -4
  137. package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
  138. package/fesm2022/ngx-tethys-avatar.mjs +5 -5
  139. package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
  140. package/fesm2022/ngx-tethys-back-top.mjs +3 -3
  141. package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
  142. package/fesm2022/ngx-tethys-badge.mjs +3 -3
  143. package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
  144. package/fesm2022/ngx-tethys-breadcrumb.mjs +3 -5
  145. package/fesm2022/ngx-tethys-breadcrumb.mjs.map +1 -1
  146. package/fesm2022/ngx-tethys-button.mjs +5 -5
  147. package/fesm2022/ngx-tethys-button.mjs.map +1 -1
  148. package/fesm2022/ngx-tethys-calendar.mjs +5 -5
  149. package/fesm2022/ngx-tethys-calendar.mjs.map +1 -1
  150. package/fesm2022/ngx-tethys-card.mjs +3 -3
  151. package/fesm2022/ngx-tethys-card.mjs.map +1 -1
  152. package/fesm2022/ngx-tethys-carousel.mjs +3 -3
  153. package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
  154. package/fesm2022/ngx-tethys-cascader.mjs +8 -10
  155. package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
  156. package/fesm2022/ngx-tethys-checkbox.mjs +4 -4
  157. package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
  158. package/fesm2022/ngx-tethys-collapse.mjs +3 -3
  159. package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
  160. package/fesm2022/ngx-tethys-color-picker.mjs +3 -3
  161. package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
  162. package/fesm2022/ngx-tethys-comment.mjs +3 -3
  163. package/fesm2022/ngx-tethys-comment.mjs.map +1 -1
  164. package/fesm2022/ngx-tethys-date-picker.mjs +51 -79
  165. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  166. package/fesm2022/ngx-tethys-date-range.mjs +5 -7
  167. package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
  168. package/fesm2022/ngx-tethys-dialog.mjs +5 -5
  169. package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
  170. package/fesm2022/ngx-tethys-divider.mjs +20 -12
  171. package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
  172. package/fesm2022/ngx-tethys-dropdown.mjs +10 -6
  173. package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
  174. package/fesm2022/ngx-tethys-empty.mjs +3 -3
  175. package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
  176. package/fesm2022/ngx-tethys-form.mjs +7 -7
  177. package/fesm2022/ngx-tethys-form.mjs.map +1 -1
  178. package/fesm2022/ngx-tethys-guider.mjs +3 -3
  179. package/fesm2022/ngx-tethys-guider.mjs.map +1 -1
  180. package/fesm2022/ngx-tethys-image.mjs +3 -3
  181. package/fesm2022/ngx-tethys-image.mjs.map +1 -1
  182. package/fesm2022/ngx-tethys-input.mjs +7 -7
  183. package/fesm2022/ngx-tethys-input.mjs.map +1 -1
  184. package/fesm2022/ngx-tethys-layout.mjs +84 -74
  185. package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
  186. package/fesm2022/ngx-tethys-list.mjs +3 -3
  187. package/fesm2022/ngx-tethys-list.mjs.map +1 -1
  188. package/fesm2022/ngx-tethys-loading.mjs +3 -3
  189. package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
  190. package/fesm2022/ngx-tethys-mention.mjs +3 -3
  191. package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
  192. package/fesm2022/ngx-tethys-menu.mjs +5 -5
  193. package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
  194. package/fesm2022/ngx-tethys-message.mjs +14 -6
  195. package/fesm2022/ngx-tethys-message.mjs.map +1 -1
  196. package/fesm2022/ngx-tethys-nav.mjs +6 -8
  197. package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
  198. package/fesm2022/ngx-tethys-notify.mjs +5 -5
  199. package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
  200. package/fesm2022/ngx-tethys-pagination.mjs +3 -3
  201. package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
  202. package/fesm2022/ngx-tethys-popover.mjs +3 -3
  203. package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
  204. package/fesm2022/ngx-tethys-progress.mjs +6 -12
  205. package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
  206. package/fesm2022/ngx-tethys-property-operation.mjs +3 -3
  207. package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
  208. package/fesm2022/ngx-tethys-property.mjs +3 -3
  209. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  210. package/fesm2022/ngx-tethys-radio.mjs +4 -4
  211. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  212. package/fesm2022/ngx-tethys-rate.mjs +4 -4
  213. package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
  214. package/fesm2022/ngx-tethys-resizable.mjs +21 -9
  215. package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
  216. package/fesm2022/ngx-tethys-result.mjs +3 -3
  217. package/fesm2022/ngx-tethys-result.mjs.map +1 -1
  218. package/fesm2022/ngx-tethys-segment.mjs +6 -6
  219. package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
  220. package/fesm2022/ngx-tethys-select.mjs +9 -11
  221. package/fesm2022/ngx-tethys-select.mjs.map +1 -1
  222. package/fesm2022/ngx-tethys-shared.mjs +8 -8
  223. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  224. package/fesm2022/ngx-tethys-skeleton.mjs +22 -22
  225. package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
  226. package/fesm2022/ngx-tethys-slide.mjs +3 -3
  227. package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
  228. package/fesm2022/ngx-tethys-space.mjs +3 -3
  229. package/fesm2022/ngx-tethys-space.mjs.map +1 -1
  230. package/fesm2022/ngx-tethys-statistic.mjs +3 -3
  231. package/fesm2022/ngx-tethys-statistic.mjs.map +1 -1
  232. package/fesm2022/ngx-tethys-stepper.mjs +4 -4
  233. package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
  234. package/fesm2022/ngx-tethys-switch.mjs +5 -5
  235. package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
  236. package/fesm2022/ngx-tethys-table.mjs +6 -11
  237. package/fesm2022/ngx-tethys-table.mjs.map +1 -1
  238. package/fesm2022/ngx-tethys-tabs.mjs +10 -13
  239. package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
  240. package/fesm2022/ngx-tethys-time-picker.mjs +9 -22
  241. package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
  242. package/fesm2022/ngx-tethys-timeline.mjs +10 -10
  243. package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
  244. package/fesm2022/ngx-tethys-tooltip.mjs +3 -3
  245. package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
  246. package/fesm2022/ngx-tethys-transfer.mjs +5 -5
  247. package/fesm2022/ngx-tethys-transfer.mjs.map +1 -1
  248. package/fesm2022/ngx-tethys-tree-select.mjs +6 -9
  249. package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
  250. package/fesm2022/ngx-tethys-tree.mjs +6 -8
  251. package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
  252. package/fesm2022/ngx-tethys-typography.mjs +3 -3
  253. package/fesm2022/ngx-tethys-typography.mjs.map +1 -1
  254. package/fesm2022/ngx-tethys-vote.mjs +3 -3
  255. package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
  256. package/fesm2022/ngx-tethys.mjs +1 -1
  257. package/fesm2022/ngx-tethys.mjs.map +1 -1
  258. package/menu/group/menu-group.component.d.ts +42 -6
  259. package/package.json +1 -1
  260. package/pagination/pagination.component.d.ts +15 -5
  261. package/progress/progress-circle.component.d.ts +0 -1
  262. package/progress/progress.component.d.ts +0 -1
  263. package/property/property-item.component.d.ts +1 -4
  264. package/resizable/resize-handle.component.d.ts +1 -4
  265. package/schematics/version.d.ts +1 -1
  266. package/schematics/version.js +1 -1
  267. package/segment/segment.component.d.ts +1 -5
  268. package/shared/option/list-option/list-option.component.d.ts +5 -1
  269. package/skeleton/stylized/bullet-list.component.d.ts +9 -1
  270. package/table/table-skeleton.component.d.ts +10 -3
  271. package/tabs/tabs.component.d.ts +0 -1
  272. package/time-picker/time-picker-panel.component.d.ts +0 -1
  273. package/tree/tree-node.component.d.ts +10 -10
@@ -1,5 +1,4 @@
1
1
  import { CdkDrag } from '@angular/cdk/drag-drop';
2
- import { NgFor, NgIf } from '@angular/common';
3
2
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EventEmitter, NgZone, Output, ViewChild, ViewEncapsulation, inject } from '@angular/core';
4
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
4
  import { DomSanitizer } from '@angular/platform-browser';
@@ -398,14 +397,14 @@ export class ThyImagePreview {
398
397
  this.previewImageWrapperTransform = `translate3d(${this.position.x}px, ${this.position.y}px, 0)`;
399
398
  }
400
399
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyImagePreview, deps: [{ token: i1.ThyDialog }, { token: i2.ThyFullscreen }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i3.ThyNotifyService }, { token: i0.ElementRef }, { token: i4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
401
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: ThyImagePreview, isStandalone: true, selector: "thy-image-preview", outputs: { downloadClicked: "downloadClicked" }, host: { properties: { "class.thy-image-preview-moving": "isDragging" }, classAttribute: "thy-image-preview-wrap" }, viewQueries: [{ propertyName: "imageRef", first: true, predicate: ["imgRef"], descendants: true }, { propertyName: "imagePreviewWrapper", first: true, predicate: ["imagePreviewWrapper"], descendants: true, static: true }], exportAs: ["thyImagePreview"], ngImport: i0, template: "<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n <div class=\"thy-image-preview-header pl-10 pr-8\" *ngIf=\"!isFullScreen\">\n <div class=\"thy-image-preview-header-info\">\n <p class=\"thy-image-name text-truncate\" [thyTooltipDisabled]=\"previewImage?.name?.length < 32\" [thyTooltip]=\"previewImage?.name\">\n {{ previewImage?.name }}\n </p>\n <span class=\"thy-image-size\"> {{ previewImage?.size }}</span>\n </div>\n <a thyAction thyIcon=\"close\" thyTooltip=\"\u9000\u51FA\u9884\u89C8\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n *ngIf=\"isFullScreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"\u9000\u51FA\u9884\u89C8\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"\u9000\u51FA\u5168\u5C4F\"\n ></a>\n <div\n class=\"thy-image-preview-img-wrapper\"\n #imagePreviewWrapper\n cdkDrag\n [class.thy-image-preview-inside]=\"isInsideScreen\"\n [style.transform]=\"previewImageWrapperTransform\"\n [cdkDragFreeDragPosition]=\"position\"\n (cdkDragReleased)=\"dragReleased()\"\n >\n <ng-container *ngFor=\"let image of images; index as imageIndex\">\n <img\n #imgRef\n *ngIf=\"previewIndex === imageIndex && isLoadingDone\"\n class=\"thy-image-preview-img\"\n [src]=\"image.objectURL || image.src\"\n [style.transform]=\"previewImageTransform\"\n />\n </ng-container>\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n <ng-container *ngIf=\"images.length > 1 && !isFullScreen\">\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n thyTooltip=\"\u4E0A\u4E00\u5F20\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\"\n >\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n thyTooltip=\"\u4E0B\u4E00\u5F20\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\"\n >\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n </ng-container>\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\" *ngIf=\"!isFullScreen\">\n <ng-container *ngFor=\"let option of previewOperations; let i = index\">\n <a\n *ngIf=\"!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"\n ></a>\n <span class=\"mr-2\" *ngIf=\"option?.type === 'zoom-out'\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\" *ngIf=\"option?.type === 'rotate-right'\"></thy-divider>\n <a\n *ngIf=\"option.type === 'copyLink'\"\n href=\"javascript:;\"\n thyAction\n [thyCopyTips]=\"option.name\"\n [thyActionIcon]=\"option.icon\"\n [thyCopyTipsOffset]=\"13\"\n (thyCopy)=\"copyLink($event)\"\n [thyCopyContent]=\"previewImageOriginSrc\"\n [thyShowNotify]=\"false\"\n ></a>\n </ng-container>\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyActions, selector: "thy-actions", inputs: ["thySize"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "directive", type: ThyCopyDirective, selector: "[thyCopy]", inputs: ["thyCopySuccessText", "thyCopyTips", "thyCopyTipsOffset", "thyCopyContent", "thyShowNotify"], outputs: ["thyCopy"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
400
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: ThyImagePreview, isStandalone: true, selector: "thy-image-preview", outputs: { downloadClicked: "downloadClicked" }, host: { properties: { "class.thy-image-preview-moving": "isDragging" }, classAttribute: "thy-image-preview-wrap" }, viewQueries: [{ propertyName: "imageRef", first: true, predicate: ["imgRef"], descendants: true }, { propertyName: "imagePreviewWrapper", first: true, predicate: ["imagePreviewWrapper"], descendants: true, static: true }], exportAs: ["thyImagePreview"], ngImport: i0, template: "<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n @if (!isFullScreen) {\n <div class=\"thy-image-preview-header pl-10 pr-8\">\n <div class=\"thy-image-preview-header-info\">\n <p class=\"thy-image-name text-truncate\" [thyTooltipDisabled]=\"previewImage?.name?.length < 32\" [thyTooltip]=\"previewImage?.name\">\n {{ previewImage?.name }}\n </p>\n <span class=\"thy-image-size\"> {{ previewImage?.size }}</span>\n </div>\n <a thyAction thyIcon=\"close\" thyTooltip=\"\u9000\u51FA\u9884\u89C8\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n }\n @if (isFullScreen) {\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"\u9000\u51FA\u9884\u89C8\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"\u9000\u51FA\u5168\u5C4F\"></a>\n }\n <div\n class=\"thy-image-preview-img-wrapper\"\n #imagePreviewWrapper\n cdkDrag\n [class.thy-image-preview-inside]=\"isInsideScreen\"\n [style.transform]=\"previewImageWrapperTransform\"\n [cdkDragFreeDragPosition]=\"position\"\n (cdkDragReleased)=\"dragReleased()\">\n @for (image of images; track $index; let imageIndex = $index) {\n @if (previewIndex === imageIndex && isLoadingDone) {\n <img #imgRef class=\"thy-image-preview-img\" [src]=\"image.objectURL || image.src\" [style.transform]=\"previewImageTransform\" />\n }\n }\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n @if (images.length > 1 && !isFullScreen) {\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n thyTooltip=\"\u4E0A\u4E00\u5F20\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\">\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n thyTooltip=\"\u4E0B\u4E00\u5F20\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\">\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n }\n @if (!isFullScreen) {\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\">\n @for (option of previewOperations; track $index; let i = $index) {\n @if (!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type) {\n <a\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"></a>\n }\n @if (option?.type === 'zoom-out') {\n <span class=\"mr-2\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n }\n @if (option?.type === 'rotate-right') {\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\"></thy-divider>\n }\n @if (option.type === 'copyLink') {\n <a\n href=\"javascript:;\"\n thyAction\n [thyCopyTips]=\"option.name\"\n [thyActionIcon]=\"option.icon\"\n [thyCopyTipsOffset]=\"13\"\n (thyCopy)=\"copyLink($event)\"\n [thyCopyContent]=\"previewImageOriginSrc\"\n [thyShowNotify]=\"false\"></a>\n }\n }\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n }\n</div>\n", dependencies: [{ kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyActions, selector: "thy-actions", inputs: ["thySize"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "directive", type: ThyCopyDirective, selector: "[thyCopy]", inputs: ["thyCopySuccessText", "thyCopyTips", "thyCopyTipsOffset", "thyCopyContent", "thyShowNotify"], outputs: ["thyCopy"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
402
401
  }
403
402
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyImagePreview, decorators: [{
404
403
  type: Component,
405
404
  args: [{ selector: 'thy-image-preview', exportAs: 'thyImagePreview', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
406
405
  class: 'thy-image-preview-wrap',
407
406
  '[class.thy-image-preview-moving]': 'isDragging'
408
- }, standalone: true, imports: [NgIf, ThyTooltipDirective, ThyAction, CdkDrag, NgFor, ThyLoading, ThyIcon, ThyActions, ThyDivider, ThyCopyDirective], template: "<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n <div class=\"thy-image-preview-header pl-10 pr-8\" *ngIf=\"!isFullScreen\">\n <div class=\"thy-image-preview-header-info\">\n <p class=\"thy-image-name text-truncate\" [thyTooltipDisabled]=\"previewImage?.name?.length < 32\" [thyTooltip]=\"previewImage?.name\">\n {{ previewImage?.name }}\n </p>\n <span class=\"thy-image-size\"> {{ previewImage?.size }}</span>\n </div>\n <a thyAction thyIcon=\"close\" thyTooltip=\"\u9000\u51FA\u9884\u89C8\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n *ngIf=\"isFullScreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"\u9000\u51FA\u9884\u89C8\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"\u9000\u51FA\u5168\u5C4F\"\n ></a>\n <div\n class=\"thy-image-preview-img-wrapper\"\n #imagePreviewWrapper\n cdkDrag\n [class.thy-image-preview-inside]=\"isInsideScreen\"\n [style.transform]=\"previewImageWrapperTransform\"\n [cdkDragFreeDragPosition]=\"position\"\n (cdkDragReleased)=\"dragReleased()\"\n >\n <ng-container *ngFor=\"let image of images; index as imageIndex\">\n <img\n #imgRef\n *ngIf=\"previewIndex === imageIndex && isLoadingDone\"\n class=\"thy-image-preview-img\"\n [src]=\"image.objectURL || image.src\"\n [style.transform]=\"previewImageTransform\"\n />\n </ng-container>\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n <ng-container *ngIf=\"images.length > 1 && !isFullScreen\">\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n thyTooltip=\"\u4E0A\u4E00\u5F20\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\"\n >\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n thyTooltip=\"\u4E0B\u4E00\u5F20\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\"\n >\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n </ng-container>\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\" *ngIf=\"!isFullScreen\">\n <ng-container *ngFor=\"let option of previewOperations; let i = index\">\n <a\n *ngIf=\"!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"\n ></a>\n <span class=\"mr-2\" *ngIf=\"option?.type === 'zoom-out'\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\" *ngIf=\"option?.type === 'rotate-right'\"></thy-divider>\n <a\n *ngIf=\"option.type === 'copyLink'\"\n href=\"javascript:;\"\n thyAction\n [thyCopyTips]=\"option.name\"\n [thyActionIcon]=\"option.icon\"\n [thyCopyTipsOffset]=\"13\"\n (thyCopy)=\"copyLink($event)\"\n [thyCopyContent]=\"previewImageOriginSrc\"\n [thyShowNotify]=\"false\"\n ></a>\n </ng-container>\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n</div>\n" }]
407
+ }, standalone: true, imports: [ThyTooltipDirective, ThyAction, CdkDrag, ThyLoading, ThyIcon, ThyActions, ThyDivider, ThyCopyDirective], template: "<div class=\"thy-image-preview\" [class.thy-image-preview-fullscreen]=\"isFullScreen\">\n @if (!isFullScreen) {\n <div class=\"thy-image-preview-header pl-10 pr-8\">\n <div class=\"thy-image-preview-header-info\">\n <p class=\"thy-image-name text-truncate\" [thyTooltipDisabled]=\"previewImage?.name?.length < 32\" [thyTooltip]=\"previewImage?.name\">\n {{ previewImage?.name }}\n </p>\n <span class=\"thy-image-size\"> {{ previewImage?.size }}</span>\n </div>\n <a thyAction thyIcon=\"close\" thyTooltip=\"\u9000\u51FA\u9884\u89C8\" href=\"javascript:;\" (click)=\"thyDialog.close()\"></a>\n </div>\n }\n @if (isFullScreen) {\n <a\n class=\"thy-image-preview-exit-fullscreen\"\n thyAction\n thyIcon=\"close\"\n thyTooltip=\"\u9000\u51FA\u9884\u89C8\"\n href=\"javascript:;\"\n (click)=\"thyFullscreen.exit()\"\n thyTooltip=\"\u9000\u51FA\u5168\u5C4F\"></a>\n }\n <div\n class=\"thy-image-preview-img-wrapper\"\n #imagePreviewWrapper\n cdkDrag\n [class.thy-image-preview-inside]=\"isInsideScreen\"\n [style.transform]=\"previewImageWrapperTransform\"\n [cdkDragFreeDragPosition]=\"position\"\n (cdkDragReleased)=\"dragReleased()\">\n @for (image of images; track $index; let imageIndex = $index) {\n @if (previewIndex === imageIndex && isLoadingDone) {\n <img #imgRef class=\"thy-image-preview-img\" [src]=\"image.objectURL || image.src\" [style.transform]=\"previewImageTransform\" />\n }\n }\n <thy-loading [thyDone]=\"isLoadingDone\"></thy-loading>\n </div>\n\n @if (images.length > 1 && !isFullScreen) {\n <div\n class=\"thy-image-preview-switch-left\"\n [thyTooltipDisabled]=\"previewIndex <= 0\"\n thyTooltip=\"\u4E0A\u4E00\u5F20\"\n [class.thy-image-preview-switch-left-disabled]=\"previewIndex <= 0\"\n (click)=\"prev()\">\n <thy-icon thyIconName=\"angle-left-bold\"></thy-icon>\n </div>\n <div\n class=\"thy-image-preview-switch-right\"\n thyTooltip=\"\u4E0B\u4E00\u5F20\"\n [thyTooltipDisabled]=\"previewIndex >= images.length - 1\"\n [class.thy-image-preview-switch-right-disabled]=\"previewIndex >= images.length - 1\"\n (click)=\"next()\">\n <thy-icon thyIconName=\"angle-right-bold\"> </thy-icon>\n </div>\n }\n @if (!isFullScreen) {\n <thy-actions thySize=\"xs\" class=\"thy-image-preview-operations py-3 px-4\">\n @for (option of previewOperations; track $index; let i = $index) {\n @if (!['original-scale', 'fit-screen', 'copyLink'].includes(option.type) || currentImageMode === option.type) {\n <a\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"option.icon\"\n [thyTooltip]=\"option.name\"\n [thyTooltipOffset]=\"13\"\n (click)=\"option.action(previewImage)\"></a>\n }\n @if (option?.type === 'zoom-out') {\n <span class=\"mr-2\"> {{ (zoom * 100).toFixed(0) + '%' }} </span>\n }\n @if (option?.type === 'rotate-right') {\n <thy-divider class=\"ml-2\" [thyVertical]=\"true\"></thy-divider>\n }\n @if (option.type === 'copyLink') {\n <a\n href=\"javascript:;\"\n thyAction\n [thyCopyTips]=\"option.name\"\n [thyActionIcon]=\"option.icon\"\n [thyCopyTipsOffset]=\"13\"\n (thyCopy)=\"copyLink($event)\"\n [thyCopyContent]=\"previewImageOriginSrc\"\n [thyShowNotify]=\"false\"></a>\n }\n }\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <span class=\"thy-image-preview-operations-text\"> {{ previewIndex + 1 }} / {{ images.length }} </span>\n </thy-actions>\n }\n</div>\n" }]
409
408
  }], ctorParameters: () => [{ type: i1.ThyDialog }, { type: i2.ThyFullscreen }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i3.ThyNotifyService }, { type: i0.ElementRef }, { type: i4.DomSanitizer }], propDecorators: { downloadClicked: [{
410
409
  type: Output
411
410
  }], imageRef: [{
@@ -415,4 +414,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
415
414
  type: ViewChild,
416
415
  args: ['imagePreviewWrapper', { static: true }]
417
416
  }] } });
418
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1hZ2UvcHJldmlldy9pbWFnZS1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9pbWFnZS9wcmV2aWV3L2ltYWdlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFFTixNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFF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QUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUM7a1BBR3BILGVBQWU7c0JBQXhCLE1BQU07Z0JBc0hpQyxRQUFRO3NCQUEvQyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ2MsbUJBQW1CO3NCQUF0RSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWcgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgTmdab25lLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgVGh5QWN0aW9uLCBUaHlBY3Rpb25zIH0gZnJvbSAnbmd4LXRldGh5cy9hY3Rpb24nO1xuaW1wb3J0IHsgVGh5Q29weURpcmVjdGl2ZSwgVGh5Q29weUV2ZW50IH0gZnJvbSAnbmd4LXRldGh5cy9jb3B5JztcbmltcG9ydCB7IFRoeURpYWxvZyB9IGZyb20gJ25neC10ZXRoeXMvZGlhbG9nJztcbmltcG9ydCB7IFRoeURpdmlkZXIgfSBmcm9tICduZ3gtdGV0aHlzL2RpdmlkZXInO1xuaW1wb3J0IHsgVGh5RnVsbHNjcmVlbiB9IGZyb20gJ25neC10ZXRoeXMvZnVsbHNjcmVlbic7XG5pbXBvcnQgeyBUaHlJY29uIH0gZnJvbSAnbmd4LXRldGh5cy9pY29uJztcbmltcG9ydCB7IFRoeUxvYWRpbmcgfSBmcm9tICduZ3gtdGV0aHlzL2xvYWRpbmcnO1xuaW1wb3J0IHsgVGh5Tm90aWZ5U2VydmljZSB9IGZyb20gJ25neC10ZXRoeXMvbm90aWZ5JztcbmltcG9ydCB7IFRoeVRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50U2l6ZSwgZ2V0Rml0Q29udGVudFBvc2l0aW9uLCBnZXRPZmZzZXQsIGhlbHBlcnMsIGh1bWFuaXplQnl0ZXMsIGlzTnVtYmVyLCBpc1VuZGVmaW5lZE9yTnVsbCB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEludGVybmFsSW1hZ2VJbmZvLCBUaHlJbWFnZUluZm8sIFRoeUltYWdlUHJldmlld01vZGUsIFRoeUltYWdlUHJldmlld09wZXJhdGlvbiwgVGh5SW1hZ2VQcmV2aWV3T3B0aW9ucyB9IGZyb20gJy4uL2ltYWdlLmNsYXNzJztcbmltcG9ydCB7IGZldGNoSW1hZ2VCbG9iIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBpbml0aWFsUG9zaXRpb24gPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG59O1xuY29uc3QgSU1BR0VfTUFYX1pPT00gPSAzO1xuY29uc3QgSU1BR0VfTUlOX1pPT00gPSAwLjE7XG5jb25zdCBIT1JJWk9OVEFMX1NQQUNFID0gMTAwICogMjsgLy8gbGVmdDogMTAwcHg7IHJpZ2h0OiAxMDBweFxuY29uc3QgVkVSVElDQUxfU1BBQ0UgPSA5NiArIDEwNjsgLy8gdG9wOiA5NnB4OyBib3R0b206IDEwNnB4XG5cbi8qKlxuICog5Zu+54mH6aKE6KeI57uE5Lu2XG4gKiBAbmFtZSB0aHktaW1hZ2UtcHJldmlld1xuICogQG9yZGVyIDIwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LWltYWdlLXByZXZpZXcnLFxuICAgIGV4cG9ydEFzOiAndGh5SW1hZ2VQcmV2aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2UtcHJldmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGh5LWltYWdlLXByZXZpZXctd3JhcCcsXG4gICAgICAgICdbY2xhc3MudGh5LWltYWdlLXByZXZpZXctbW92aW5nXSc6ICdpc0RyYWdnaW5nJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgVGh5VG9vbHRpcERpcmVjdGl2ZSwgVGh5QWN0aW9uLCBDZGtEcmFnLCBOZ0ZvciwgVGh5TG9hZGluZywgVGh5SWNvbiwgVGh5QWN0aW9ucywgVGh5RGl2aWRlciwgVGh5Q29weURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgVGh5SW1hZ2VQcmV2aWV3IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAT3V0cHV0KCkgZG93bmxvYWRDbGlja2VkOiBFdmVudEVtaXR0ZXI8VGh5SW1hZ2VJbmZvPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIGltYWdlczogSW50ZXJuYWxJbWFnZUluZm9bXSA9IFtdO1xuICAgIHByZXZpZXdJbmRleDogbnVtYmVyID0gMDtcbiAgICBwcmV2aWV3Q29uZmlnOiBUaHlJbWFnZVByZXZpZXdPcHRpb25zO1xuICAgIHByZXZpZXdJbWFnZVRyYW5zZm9ybSA9ICcnO1xuICAgIHByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0gPSAnJztcbiAgICB6b29tRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB6b29tOiBudW1iZXIgPSAxO1xuICAgIHBvc2l0aW9uID0geyAuLi5pbml0aWFsUG9zaXRpb24gfTtcbiAgICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgaXNMb2FkaW5nRG9uZSA9IGZhbHNlO1xuICAgIGlzRnVsbFNjcmVlbiA9IGZhbHNlO1xuICAgIGlzSW5zaWRlU2NyZWVuID0gdHJ1ZTtcbiAgICBjdXJyZW50SW1hZ2VNb2RlOiBUaHlJbWFnZVByZXZpZXdNb2RlID0gJ29yaWdpbmFsLXNjYWxlJztcbiAgICBwcmV2aWV3T3BlcmF0aW9uczogVGh5SW1hZ2VQcmV2aWV3T3BlcmF0aW9uW107XG4gICAgZGVmYXVsdFByZXZpZXdPcGVyYXRpb25zOiBUaHlJbWFnZVByZXZpZXdPcGVyYXRpb25bXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ3pvb20tb3V0JyxcbiAgICAgICAgICAgIG5hbWU6ICfnvKnlsI8nLFxuICAgICAgICAgICAgYWN0aW9uOiAoaW1hZ2U6IFRoeUltYWdlSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuem9vbU91dCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICd6b29tLW91dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ3pvb20taW4nLFxuICAgICAgICAgICAgbmFtZTogJ+aUvuWkpycsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy56b29tSW4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnem9vbS1pbidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ29uZS10by1vbmUnLFxuICAgICAgICAgICAgbmFtZTogJ+WOn+Wni+avlOS+iycsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW5hbFNpemUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnb3JpZ2luYWwtc2NhbGUnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdtYXgtdmlldycsXG4gICAgICAgICAgICBuYW1lOiAn6YCC5bqU5bGP5bmVJyxcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rml0U2NyZWVuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2ZpdC1zY3JlZW4nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdleHBhbmQtYXJyb3dzJyxcbiAgICAgICAgICAgIG5hbWU6ICflhajlsY/mmL7npLonLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsU2NyZWVuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2Z1bGwtc2NyZWVuJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAncm90YXRlLXJpZ2h0JyxcbiAgICAgICAgICAgIG5hbWU6ICfml4vovawnLFxuICAgICAgICAgICAgYWN0aW9uOiAoaW1hZ2U6IFRoeUltYWdlSW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm90YXRlUmlnaHQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAncm90YXRlLXJpZ2h0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnZG93bmxvYWQnLFxuICAgICAgICAgICAgbmFtZTogJ+S4i+i9vScsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZChpbWFnZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ2Rvd25sb2FkJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAncHJldmlldycsXG4gICAgICAgICAgICBuYW1lOiAn5p+l55yL5Y6f5Zu+JyxcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld09yaWdpbmFsKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ3ZpZXctb3JpZ2luYWwnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdsaW5rLWluc2VydCcsXG4gICAgICAgICAgICBuYW1lOiAn5aSN5Yi26ZO+5o6lJyxcbiAgICAgICAgICAgIHR5cGU6ICdjb3B5TGluaydcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBwcml2YXRlIHJvdGF0ZTogbnVtYmVyO1xuXG4gICAgZ2V0IHByZXZpZXdJbWFnZSgpOiBJbnRlcm5hbEltYWdlSW5mbyB7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5pbWFnZXNbdGhpcy5wcmV2aWV3SW5kZXhdO1xuICAgICAgICBpZiAoaW1hZ2Uuc2l6ZSkge1xuICAgICAgICAgICAgaW1hZ2Uuc2l6ZSA9IGlzTnVtYmVyKGltYWdlLnNpemUpID8gaHVtYW5pemVCeXRlcyhpbWFnZS5zaXplKSA6IGltYWdlLnNpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgIH1cblxuICAgIGdldCBwcmV2aWV3SW1hZ2VPcmlnaW5TcmMoKSB7XG4gICAgICAgIGxldCBpbWFnZVNyYyA9IHRoaXMucHJldmlld0ltYWdlLm9yaWdpbj8uc3JjIHx8IHRoaXMucHJldmlld0ltYWdlLnNyYztcbiAgICAgICAgaWYgKGltYWdlU3JjLnN0YXJ0c1dpdGgoJy4vJykpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvJyArIGltYWdlU3JjLnNwbGl0KCcuLycpWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbWFnZVNyYztcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdFpvb20oKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlld0NvbmZpZz8uem9vbSAmJiB0aGlzLnByZXZpZXdDb25maWc/Lnpvb20gPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2aWV3Q29uZmlnLnpvb20gPj0gSU1BR0VfTUFYX1pPT01cbiAgICAgICAgICAgICAgICA/IElNQUdFX01BWF9aT09NXG4gICAgICAgICAgICAgICAgOiB0aGlzLnByZXZpZXdDb25maWcuem9vbSA8PSBJTUFHRV9NSU5fWk9PTVxuICAgICAgICAgICAgICAgICAgPyBJTUFHRV9NSU5fWk9PTVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnByZXZpZXdDb25maWcuem9vbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoJ2ltZ1JlZicsIHsgc3RhdGljOiBmYWxzZSB9KSBpbWFnZVJlZiE6IEVsZW1lbnRSZWY8SFRNTEltYWdlRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnaW1hZ2VQcmV2aWV3V3JhcHBlcicsIHsgc3RhdGljOiB0cnVlIH0pIGltYWdlUHJldmlld1dyYXBwZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgdGh5RGlhbG9nOiBUaHlEaWFsb2csXG4gICAgICAgIHB1YmxpYyB0aHlGdWxsc2NyZWVuOiBUaHlGdWxsc2NyZWVuLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogVGh5Tm90aWZ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxuICAgICkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRQcmV2aWV3KCk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgJ2NsaWNrJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmlzSW5zaWRlU2NyZWVuICYmIHRoaXMuaW1hZ2VQcmV2aWV3V3JhcHBlci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMucHJldmlld0NvbmZpZz8uZGlzYWJsZUNsb3NlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+ICF0aGlzLmlzRnVsbFNjcmVlbiAmJiB0aGlzLnRoeURpYWxvZy5jbG9zZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5pbWFnZVByZXZpZXdXcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSAhdGhpcy5pc0luc2lkZVNjcmVlbiAmJiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRPcmlnaW5hbFNpemUoKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2VNb2RlID0gJ2ZpdC1zY3JlZW4nO1xuICAgICAgICB0aGlzLnpvb20gPSAxO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUluc2lkZVNjcmVlbigpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgc2V0Rml0U2NyZWVuKCkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuaXNJbnNpZGVTY3JlZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZSgpO1xuICAgIH1cblxuICAgIHVzZURlZmF1bHRab29tVXBkYXRlKGlzVXBkYXRlSW1hZ2VXcmFwcGVyOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuem9vbSA9IHRoaXMuZGVmYXVsdFpvb207XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk7XG4gICAgICAgIGlmIChpc1VwZGF0ZUltYWdlV3JhcHBlcikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VXcmFwcGVyVHJhbnNmb3JtKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHVzZUNhbGN1bGF0ZVpvb21VcGRhdGUoaXNVcGRhdGVJbWFnZVdyYXBwZXI/OiBib29sZWFuKSB7XG4gICAgICAgIGxldCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgaW1nLnNyYyA9IHRoaXMucHJldmlld0ltYWdlLnNyYztcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGg6IG9mZnNldFdpZHRoLCBoZWlnaHQ6IG9mZnNldEhlaWdodCB9ID0gZ2V0Q2xpZW50U2l6ZSgpO1xuICAgICAgICAgICAgY29uc3QgaW5uZXJXaWR0aCA9IG9mZnNldFdpZHRoIC0gSE9SSVpPTlRBTF9TUEFDRTtcbiAgICAgICAgICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0IC0gVkVSVElDQUxfU1BBQ0U7XG4gICAgICAgICAgICBjb25zdCB7IG5hdHVyYWxXaWR0aCwgbmF0dXJhbEhlaWdodCB9ID0gaW1nO1xuICAgICAgICAgICAgY29uc3QgeFJhdGlvID0gaW5uZXJXaWR0aCAvIG5hdHVyYWxXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHlSYXRpbyA9IGlubmVySGVpZ2h0IC8gbmF0dXJhbEhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHpvb20gPSBNYXRoLm1pbih4UmF0aW8sIHlSYXRpbyk7XG4gICAgICAgICAgICBpZiAoem9vbSA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvb20gPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvb20gPSB6b29tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICBpZiAoaXNVcGRhdGVJbWFnZVdyYXBwZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB1cGRhdGVQcmV2aWV3SW1hZ2UoKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVByZXZpZXdJbWFnZSgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAvLyBlcnJvclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaW1hZ2Ugc2l6ZVxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZpZXdJbWFnZS5zaXplICYmIHRoaXMucHJldmlld0ltYWdlLmJsb2IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdJbWFnZS5zaXplID0gaHVtYW5pemVCeXRlcyh0aGlzLnByZXZpZXdJbWFnZS5ibG9iLnNpemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFpvb20pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZURlZmF1bHRab29tVXBkYXRlKHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUNhbGN1bGF0ZVpvb21VcGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzb2x2ZVByZXZpZXdJbWFnZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPEJvb2xlYW4+KHN1YnNjcmliZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0ltYWdlLnNyYy5zdGFydHNXaXRoKCdibG9iOicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2Uub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybCh0aGlzLnByZXZpZXdJbWFnZS5zcmMpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0ltYWdlLm9iamVjdFVSTCB8fCAhdGhpcy5wcmV2aWV3Q29uZmlnLnJlc29sdmVTaXplKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hJbWFnZUJsb2IodGhpcy5wcmV2aWV3SW1hZ2Uuc3JjKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgIGJsb2IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQ3JlYXRvciA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdFVSTCA9IHVybENyZWF0b3IuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2Uub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChvYmplY3RVUkwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2UuYmxvYiA9IGJsb2I7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0UHJldmlldygpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5wcmV2aWV3Q29uZmlnPy5vcGVyYXRpb25zKSAmJiB0aGlzLnByZXZpZXdDb25maWc/Lm9wZXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0T3BlcmF0aW9uc01hcCA9IGhlbHBlcnMua2V5QnkodGhpcy5kZWZhdWx0UHJldmlld09wZXJhdGlvbnMsICd0eXBlJyk7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdPcGVyYXRpb25zID0gdGhpcy5wcmV2aWV3Q29uZmlnPy5vcGVyYXRpb25zLm1hcChvcGVyYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChoZWxwZXJzLmlzU3RyaW5nKG9wZXJhdGlvbikgJiYgZGVmYXVsdE9wZXJhdGlvbnNNYXBbb3BlcmF0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9wZXJhdGlvbnNNYXBbb3BlcmF0aW9uXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uIGFzIFRoeUltYWdlUHJldmlld09wZXJhdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlld09wZXJhdGlvbnMgPSB0aGlzLmRlZmF1bHRQcmV2aWV3T3BlcmF0aW9ucztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvdGF0ZSA9IHRoaXMucHJldmlld0NvbmZpZz8ucm90YXRlID8/IDA7XG4gICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlKCk7XG4gICAgfVxuXG4gICAgZG93bmxvYWQoaW1hZ2U6IFRoeUltYWdlSW5mbykge1xuICAgICAgICB0aGlzLmRvd25sb2FkQ2xpY2tlZC5lbWl0KGltYWdlKTtcbiAgICAgICAgY29uc3Qgc3JjID0gaW1hZ2Uub3JpZ2luPy5zcmMgfHwgaW1hZ2Uuc3JjO1xuICAgICAgICBmZXRjaEltYWdlQmxvYihzcmMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYmxvYiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsQ3JlYXRvciA9IHdpbmRvdy5VUkwgfHwgd2luZG93LndlYmtpdFVSTDtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3RVUkwgPSB1cmxDcmVhdG9yLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gaW1hZ2UubmFtZSB8fCAnZGVmYXVsdC5wbmcnO1xuICAgICAgICAgICAgICAgIGEuaHJlZiA9IG9iamVjdFVSTDtcbiAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB6b29tSW4oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnpvb20gPCBJTUFHRV9NQVhfWk9PTSkge1xuICAgICAgICAgICAgdGhpcy56b29tID0gTWF0aC5taW4odGhpcy56b29tICsgMC4xLCBJTUFHRV9NQVhfWk9PTSk7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUluc2lkZVNjcmVlbigpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7IC4uLmluaXRpYWxQb3NpdGlvbiB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgem9vbU91dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuem9vbSA+IElNQUdFX01JTl9aT09NKSB7XG4gICAgICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1heCh0aGlzLnpvb20gLSAwLjEsIElNQUdFX01JTl9aT09NKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlSW5zaWRlU2NyZWVuKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4uaW5pdGlhbFBvc2l0aW9uIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxjdWxhdGVJbnNpZGVTY3JlZW4oKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5pbWFnZVJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBjbGllbnRXaWR0aCwgaGVpZ2h0OiBjbGllbnRIZWlnaHQgfSA9IGdldENsaWVudFNpemUoKTtcbiAgICAgICAgaWYgKHdpZHRoID49IGNsaWVudFdpZHRoIHx8IGhlaWdodCA+PSBjbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnNpZGVTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnNpZGVTY3JlZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmlld09yaWdpbmFsKCkge1xuICAgICAgICB3aW5kb3cub3Blbih0aGlzLnByZXZpZXdJbWFnZT8ub3JpZ2luPy5zcmMgfHwgdGhpcy5wcmV2aWV3SW1hZ2Uuc3JjLCAnX2JsYW5rJyk7XG4gICAgfVxuXG4gICAgcm90YXRlUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm90YXRlICs9IDkwO1xuICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgIH1cblxuICAgIGZ1bGxTY3JlZW4oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGh5LWltYWdlLXByZXZpZXcnKTtcbiAgICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSB0cnVlO1xuICAgICAgICBjb25zdCBmdWxsc2NyZWVuUmVmID0gdGhpcy50aHlGdWxsc2NyZWVuLmxhdW5jaCh7XG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldEVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bGxzY3JlZW5SZWYuYWZ0ZXJFeGl0ZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb3B5TGluayhldmVudDogVGh5Q29weUV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5zdWNjZXNzKCflpI3liLblm77niYflnLDlnYDmiJDlip8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5lcnJvcign5aSN5Yi25Zu+54mH5Zyw5Z2A5aSx6LSlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmV2KCkge1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3SW5kZXggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdJbmRleC0tO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmV4dCgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlld0luZGV4IDwgdGhpcy5pbWFnZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3SW5kZXgrKztcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYWdSZWxlYXNlZCgpIHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5pbWFnZVJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICogdGhpcy56b29tO1xuICAgICAgICBjb25zdCB7IGxlZnQsIHRvcCB9ID0gZ2V0T2Zmc2V0KHRoaXMuaW1hZ2VSZWYubmF0aXZlRWxlbWVudCwgd2luZG93KTtcbiAgICAgICAgY29uc3QgeyB3aWR0aDogY2xpZW50V2lkdGgsIGhlaWdodDogY2xpZW50SGVpZ2h0IH0gPSBnZXRDbGllbnRTaXplKCk7XG4gICAgICAgIGNvbnN0IGlzUm90YXRlID0gdGhpcy5yb3RhdGUgJSAxODAgIT09IDA7XG4gICAgICAgIGNvbnN0IGZpdENvbnRlbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICB3aWR0aDogaXNSb3RhdGUgPyBoZWlnaHQgOiB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogaXNSb3RhdGUgPyB3aWR0aCA6IGhlaWdodCxcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBjbGllbnRXaWR0aCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaXRDb250ZW50UG9zID0gZ2V0Rml0Q29udGVudFBvc2l0aW9uKGZpdENvbnRlbnRQYXJhbXMpO1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkT3JOdWxsKGZpdENvbnRlbnRQb3MueCkgfHwgIWlzVW5kZWZpbmVkT3JOdWxsKGZpdENvbnRlbnRQb3MueSkpIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB7IC4uLnRoaXMucG9zaXRpb24sIC4uLmZpdENvbnRlbnRQb3MgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudEltYWdlTW9kZSA9ICdvcmlnaW5hbC1zY2FsZSc7XG4gICAgICAgIHRoaXMucm90YXRlID0gdGhpcy5wcmV2aWV3Q29uZmlnPy5yb3RhdGUgPz8gMDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4uaW5pdGlhbFBvc2l0aW9uIH07XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcmV2aWV3SW1hZ2VUcmFuc2Zvcm0gPSBgc2NhbGUzZCgke3RoaXMuem9vbX0sICR7dGhpcy56b29tfSwgMSkgcm90YXRlKCR7dGhpcy5yb3RhdGV9ZGVnKWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcmV2aWV3SW1hZ2VXcmFwcGVyVHJhbnNmb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHt0aGlzLnBvc2l0aW9uLnh9cHgsICR7dGhpcy5wb3NpdGlvbi55fXB4LCAwKWA7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3XCIgW2NsYXNzLnRoeS1pbWFnZS1wcmV2aWV3LWZ1bGxzY3JlZW5dPVwiaXNGdWxsU2NyZWVuXCI+XG4gIDxkaXYgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1oZWFkZXIgcGwtMTAgcHItOFwiICpuZ0lmPVwiIWlzRnVsbFNjcmVlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1oZWFkZXItaW5mb1wiPlxuICAgICAgPHAgY2xhc3M9XCJ0aHktaW1hZ2UtbmFtZSB0ZXh0LXRydW5jYXRlXCIgW3RoeVRvb2x0aXBEaXNhYmxlZF09XCJwcmV2aWV3SW1hZ2U/Lm5hbWU/Lmxlbmd0aCA8IDMyXCIgW3RoeVRvb2x0aXBdPVwicHJldmlld0ltYWdlPy5uYW1lXCI+XG4gICAgICAgIHt7IHByZXZpZXdJbWFnZT8ubmFtZSB9fVxuICAgICAgPC9wPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0aHktaW1hZ2Utc2l6ZVwiPiB7eyBwcmV2aWV3SW1hZ2U/LnNpemUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGEgdGh5QWN0aW9uIHRoeUljb249XCJjbG9zZVwiIHRoeVRvb2x0aXA9XCLpgIDlh7rpooTop4hcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cInRoeURpYWxvZy5jbG9zZSgpXCI+PC9hPlxuICA8L2Rpdj5cbiAgPGFcbiAgICBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWV4aXQtZnVsbHNjcmVlblwiXG4gICAgKm5nSWY9XCJpc0Z1bGxTY3JlZW5cIlxuICAgIHRoeUFjdGlvblxuICAgIHRoeUljb249XCJjbG9zZVwiXG4gICAgdGh5VG9vbHRpcD1cIumAgOWHuumihOiniFwiXG4gICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgKGNsaWNrKT1cInRoeUZ1bGxzY3JlZW4uZXhpdCgpXCJcbiAgICB0aHlUb29sdGlwPVwi6YCA5Ye65YWo5bGPXCJcbiAgPjwvYT5cbiAgPGRpdlxuICAgIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctaW1nLXdyYXBwZXJcIlxuICAgICNpbWFnZVByZXZpZXdXcmFwcGVyXG4gICAgY2RrRHJhZ1xuICAgIFtjbGFzcy50aHktaW1hZ2UtcHJldmlldy1pbnNpZGVdPVwiaXNJbnNpZGVTY3JlZW5cIlxuICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwicHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybVwiXG4gICAgW2Nka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uXT1cInBvc2l0aW9uXCJcbiAgICAoY2RrRHJhZ1JlbGVhc2VkKT1cImRyYWdSZWxlYXNlZCgpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltYWdlIG9mIGltYWdlczsgaW5kZXggYXMgaW1hZ2VJbmRleFwiPlxuICAgICAgPGltZ1xuICAgICAgICAjaW1nUmVmXG4gICAgICAgICpuZ0lmPVwicHJldmlld0luZGV4ID09PSBpbWFnZUluZGV4ICYmIGlzTG9hZGluZ0RvbmVcIlxuICAgICAgICBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWltZ1wiXG4gICAgICAgIFtzcmNdPVwiaW1hZ2Uub2JqZWN0VVJMIHx8IGltYWdlLnNyY1wiXG4gICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwicHJldmlld0ltYWdlVHJhbnNmb3JtXCJcbiAgICAgIC8+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPHRoeS1sb2FkaW5nIFt0aHlEb25lXT1cImlzTG9hZGluZ0RvbmVcIj48L3RoeS1sb2FkaW5nPlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1hZ2VzLmxlbmd0aCA+IDEgJiYgIWlzRnVsbFNjcmVlblwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctc3dpdGNoLWxlZnRcIlxuICAgICAgW3RoeVRvb2x0aXBEaXNhYmxlZF09XCJwcmV2aWV3SW5kZXggPD0gMFwiXG4gICAgICB0aHlUb29sdGlwPVwi5LiK5LiA5bygXCJcbiAgICAgIFtjbGFzcy50aHktaW1hZ2UtcHJldmlldy1zd2l0Y2gtbGVmdC1kaXNhYmxlZF09XCJwcmV2aWV3SW5kZXggPD0gMFwiXG4gICAgICAoY2xpY2spPVwicHJldigpXCJcbiAgICA+XG4gICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJhbmdsZS1sZWZ0LWJvbGRcIj48L3RoeS1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctc3dpdGNoLXJpZ2h0XCJcbiAgICAgIHRoeVRvb2x0aXA9XCLkuIvkuIDlvKBcIlxuICAgICAgW3RoeVRvb2x0aXBEaXNhYmxlZF09XCJwcmV2aWV3SW5kZXggPj0gaW1hZ2VzLmxlbmd0aCAtIDFcIlxuICAgICAgW2NsYXNzLnRoeS1pbWFnZS1wcmV2aWV3LXN3aXRjaC1yaWdodC1kaXNhYmxlZF09XCJwcmV2aWV3SW5kZXggPj0gaW1hZ2VzLmxlbmd0aCAtIDFcIlxuICAgICAgKGNsaWNrKT1cIm5leHQoKVwiXG4gICAgPlxuICAgICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwiYW5nbGUtcmlnaHQtYm9sZFwiPiA8L3RoeS1pY29uPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPHRoeS1hY3Rpb25zIHRoeVNpemU9XCJ4c1wiIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctb3BlcmF0aW9ucyBweS0zIHB4LTRcIiAqbmdJZj1cIiFpc0Z1bGxTY3JlZW5cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJldmlld09wZXJhdGlvbnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxhXG4gICAgICAgICpuZ0lmPVwiIVsnb3JpZ2luYWwtc2NhbGUnLCAnZml0LXNjcmVlbicsICdjb3B5TGluayddLmluY2x1ZGVzKG9wdGlvbi50eXBlKSB8fCBjdXJyZW50SW1hZ2VNb2RlID09PSBvcHRpb24udHlwZVwiXG4gICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICAgICB0aHlBY3Rpb25cbiAgICAgICAgW3RoeUFjdGlvbkljb25dPVwib3B0aW9uLmljb25cIlxuICAgICAgICBbdGh5VG9vbHRpcF09XCJvcHRpb24ubmFtZVwiXG4gICAgICAgIFt0aHlUb29sdGlwT2Zmc2V0XT1cIjEzXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wdGlvbi5hY3Rpb24ocHJldmlld0ltYWdlKVwiXG4gICAgICA+PC9hPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtci0yXCIgKm5nSWY9XCJvcHRpb24/LnR5cGUgPT09ICd6b29tLW91dCdcIj4ge3sgKHpvb20gKiAxMDApLnRvRml4ZWQoMCkgKyAnJScgfX0gPC9zcGFuPlxuICAgICAgPHRoeS1kaXZpZGVyIGNsYXNzPVwibWwtMlwiIFt0aHlWZXJ0aWNhbF09XCJ0cnVlXCIgKm5nSWY9XCJvcHRpb24/LnR5cGUgPT09ICdyb3RhdGUtcmlnaHQnXCI+PC90aHktZGl2aWRlcj5cbiAgICAgIDxhXG4gICAgICAgICpuZ0lmPVwib3B0aW9uLnR5cGUgPT09ICdjb3B5TGluaydcIlxuICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgdGh5QWN0aW9uXG4gICAgICAgIFt0aHlDb3B5VGlwc109XCJvcHRpb24ubmFtZVwiXG4gICAgICAgIFt0aHlBY3Rpb25JY29uXT1cIm9wdGlvbi5pY29uXCJcbiAgICAgICAgW3RoeUNvcHlUaXBzT2Zmc2V0XT1cIjEzXCJcbiAgICAgICAgKHRoeUNvcHkpPVwiY29weUxpbmsoJGV2ZW50KVwiXG4gICAgICAgIFt0aHlDb3B5Q29udGVudF09XCJwcmV2aWV3SW1hZ2VPcmlnaW5TcmNcIlxuICAgICAgICBbdGh5U2hvd05vdGlmeV09XCJmYWxzZVwiXG4gICAgICA+PC9hPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDx0aHktZGl2aWRlciBbdGh5VmVydGljYWxdPVwidHJ1ZVwiPjwvdGh5LWRpdmlkZXI+XG4gICAgPHNwYW4gY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1vcGVyYXRpb25zLXRleHRcIj4ge3sgcHJldmlld0luZGV4ICsgMSB9fSAvIHt7IGltYWdlcy5sZW5ndGggfX0gPC9zcGFuPlxuICA8L3RoeS1hY3Rpb25zPlxuPC9kaXY+XG4iXX0=
417
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1hZ2UvcHJldmlldy9pbWFnZS1wcmV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9pbWFnZS9wcmV2aWV3L2ltYWdlLXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpELE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9C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aUMsUUFBUTtzQkFBL0MsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNjLG1CQUFtQjtzQkFBdEUsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgTmdab25lLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgVGh5QWN0aW9uLCBUaHlBY3Rpb25zIH0gZnJvbSAnbmd4LXRldGh5cy9hY3Rpb24nO1xuaW1wb3J0IHsgVGh5Q29weURpcmVjdGl2ZSwgVGh5Q29weUV2ZW50IH0gZnJvbSAnbmd4LXRldGh5cy9jb3B5JztcbmltcG9ydCB7IFRoeURpYWxvZyB9IGZyb20gJ25neC10ZXRoeXMvZGlhbG9nJztcbmltcG9ydCB7IFRoeURpdmlkZXIgfSBmcm9tICduZ3gtdGV0aHlzL2RpdmlkZXInO1xuaW1wb3J0IHsgVGh5RnVsbHNjcmVlbiB9IGZyb20gJ25neC10ZXRoeXMvZnVsbHNjcmVlbic7XG5pbXBvcnQgeyBUaHlJY29uIH0gZnJvbSAnbmd4LXRldGh5cy9pY29uJztcbmltcG9ydCB7IFRoeUxvYWRpbmcgfSBmcm9tICduZ3gtdGV0aHlzL2xvYWRpbmcnO1xuaW1wb3J0IHsgVGh5Tm90aWZ5U2VydmljZSB9IGZyb20gJ25neC10ZXRoeXMvbm90aWZ5JztcbmltcG9ydCB7IFRoeVRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50U2l6ZSwgZ2V0Rml0Q29udGVudFBvc2l0aW9uLCBnZXRPZmZzZXQsIGhlbHBlcnMsIGh1bWFuaXplQnl0ZXMsIGlzTnVtYmVyLCBpc1VuZGVmaW5lZE9yTnVsbCB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEludGVybmFsSW1hZ2VJbmZvLCBUaHlJbWFnZUluZm8sIFRoeUltYWdlUHJldmlld01vZGUsIFRoeUltYWdlUHJldmlld09wZXJhdGlvbiwgVGh5SW1hZ2VQcmV2aWV3T3B0aW9ucyB9IGZyb20gJy4uL2ltYWdlLmNsYXNzJztcbmltcG9ydCB7IGZldGNoSW1hZ2VCbG9iIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBpbml0aWFsUG9zaXRpb24gPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG59O1xuY29uc3QgSU1BR0VfTUFYX1pPT00gPSAzO1xuY29uc3QgSU1BR0VfTUlOX1pPT00gPSAwLjE7XG5jb25zdCBIT1JJWk9OVEFMX1NQQUNFID0gMTAwICogMjsgLy8gbGVmdDogMTAwcHg7IHJpZ2h0OiAxMDBweFxuY29uc3QgVkVSVElDQUxfU1BBQ0UgPSA5NiArIDEwNjsgLy8gdG9wOiA5NnB4OyBib3R0b206IDEwNnB4XG5cbi8qKlxuICog5Zu+54mH6aKE6KeI57uE5Lu2XG4gKiBAbmFtZSB0aHktaW1hZ2UtcHJldmlld1xuICogQG9yZGVyIDIwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LWltYWdlLXByZXZpZXcnLFxuICAgIGV4cG9ydEFzOiAndGh5SW1hZ2VQcmV2aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2UtcHJldmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAndGh5LWltYWdlLXByZXZpZXctd3JhcCcsXG4gICAgICAgICdbY2xhc3MudGh5LWltYWdlLXByZXZpZXctbW92aW5nXSc6ICdpc0RyYWdnaW5nJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbVGh5VG9vbHRpcERpcmVjdGl2ZSwgVGh5QWN0aW9uLCBDZGtEcmFnLCBUaHlMb2FkaW5nLCBUaHlJY29uLCBUaHlBY3Rpb25zLCBUaHlEaXZpZGVyLCBUaHlDb3B5RGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlJbWFnZVByZXZpZXcgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBPdXRwdXQoKSBkb3dubG9hZENsaWNrZWQ6IEV2ZW50RW1pdHRlcjxUaHlJbWFnZUluZm8+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgaW1hZ2VzOiBJbnRlcm5hbEltYWdlSW5mb1tdID0gW107XG4gICAgcHJldmlld0luZGV4OiBudW1iZXIgPSAwO1xuICAgIHByZXZpZXdDb25maWc6IFRoeUltYWdlUHJldmlld09wdGlvbnM7XG4gICAgcHJldmlld0ltYWdlVHJhbnNmb3JtID0gJyc7XG4gICAgcHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybSA9ICcnO1xuICAgIHpvb21EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHpvb206IG51bWJlciA9IDE7XG4gICAgcG9zaXRpb24gPSB7IC4uLmluaXRpYWxQb3NpdGlvbiB9O1xuICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBpc0xvYWRpbmdEb25lID0gZmFsc2U7XG4gICAgaXNGdWxsU2NyZWVuID0gZmFsc2U7XG4gICAgaXNJbnNpZGVTY3JlZW4gPSB0cnVlO1xuICAgIGN1cnJlbnRJbWFnZU1vZGU6IFRoeUltYWdlUHJldmlld01vZGUgPSAnb3JpZ2luYWwtc2NhbGUnO1xuICAgIHByZXZpZXdPcGVyYXRpb25zOiBUaHlJbWFnZVByZXZpZXdPcGVyYXRpb25bXTtcbiAgICBkZWZhdWx0UHJldmlld09wZXJhdGlvbnM6IFRoeUltYWdlUHJldmlld09wZXJhdGlvbltdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnem9vbS1vdXQnLFxuICAgICAgICAgICAgbmFtZTogJ+e8qeWwjycsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy56b29tT3V0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHlwZTogJ3pvb20tb3V0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnem9vbS1pbicsXG4gICAgICAgICAgICBuYW1lOiAn5pS+5aSnJyxcbiAgICAgICAgICAgIGFjdGlvbjogKGltYWdlOiBUaHlJbWFnZUluZm8pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnpvb21JbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICd6b29tLWluJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpY29uOiAnb25lLXRvLW9uZScsXG4gICAgICAgICAgICBuYW1lOiAn5Y6f5aeL5q+U5L6LJyxcbiAgICAgICAgICAgIGFjdGlvbjogKGltYWdlOiBUaHlJbWFnZUluZm8pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9yaWdpbmFsU2l6ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICdvcmlnaW5hbC1zY2FsZSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ21heC12aWV3JyxcbiAgICAgICAgICAgIG5hbWU6ICfpgILlupTlsY/luZUnLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGaXRTY3JlZW4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnZml0LXNjcmVlbidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ2V4cGFuZC1hcnJvd3MnLFxuICAgICAgICAgICAgbmFtZTogJ+WFqOWxj+aYvuekuicsXG4gICAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGxTY3JlZW4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnZnVsbC1zY3JlZW4nXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdyb3RhdGUtcmlnaHQnLFxuICAgICAgICAgICAgbmFtZTogJ+aXi+i9rCcsXG4gICAgICAgICAgICBhY3Rpb246IChpbWFnZTogVGh5SW1hZ2VJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVSaWdodCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6ICdyb3RhdGUtcmlnaHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdkb3dubG9hZCcsXG4gICAgICAgICAgICBuYW1lOiAn5LiL6L29JyxcbiAgICAgICAgICAgIGFjdGlvbjogKGltYWdlOiBUaHlJbWFnZUluZm8pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKGltYWdlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAnZG93bmxvYWQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdwcmV2aWV3JyxcbiAgICAgICAgICAgIG5hbWU6ICfmn6XnnIvljp/lm74nLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3T3JpZ2luYWwoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0eXBlOiAndmlldy1vcmlnaW5hbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ2xpbmstaW5zZXJ0JyxcbiAgICAgICAgICAgIG5hbWU6ICflpI3liLbpk77mjqUnLFxuICAgICAgICAgICAgdHlwZTogJ2NvcHlMaW5rJ1xuICAgICAgICB9XG4gICAgXTtcblxuICAgIHByaXZhdGUgcm90YXRlOiBudW1iZXI7XG5cbiAgICBnZXQgcHJldmlld0ltYWdlKCk6IEludGVybmFsSW1hZ2VJbmZvIHtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlc1t0aGlzLnByZXZpZXdJbmRleF07XG4gICAgICAgIGlmIChpbWFnZS5zaXplKSB7XG4gICAgICAgICAgICBpbWFnZS5zaXplID0gaXNOdW1iZXIoaW1hZ2Uuc2l6ZSkgPyBodW1hbml6ZUJ5dGVzKGltYWdlLnNpemUpIDogaW1hZ2Uuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW1hZ2U7XG4gICAgfVxuXG4gICAgZ2V0IHByZXZpZXdJbWFnZU9yaWdpblNyYygpIHtcbiAgICAgICAgbGV0IGltYWdlU3JjID0gdGhpcy5wcmV2aWV3SW1hZ2Uub3JpZ2luPy5zcmMgfHwgdGhpcy5wcmV2aWV3SW1hZ2Uuc3JjO1xuICAgICAgICBpZiAoaW1hZ2VTcmMuc3RhcnRzV2l0aCgnLi8nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy8nICsgaW1hZ2VTcmMuc3BsaXQoJy4vJylbMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGltYWdlU3JjO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0Wm9vbSgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3Q29uZmlnPy56b29tICYmIHRoaXMucHJldmlld0NvbmZpZz8uem9vbSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXZpZXdDb25maWcuem9vbSA+PSBJTUFHRV9NQVhfWk9PTVxuICAgICAgICAgICAgICAgID8gSU1BR0VfTUFYX1pPT01cbiAgICAgICAgICAgICAgICA6IHRoaXMucHJldmlld0NvbmZpZy56b29tIDw9IElNQUdFX01JTl9aT09NXG4gICAgICAgICAgICAgICAgICA/IElNQUdFX01JTl9aT09NXG4gICAgICAgICAgICAgICAgICA6IHRoaXMucHJldmlld0NvbmZpZy56b29tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZCgnaW1nUmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pIGltYWdlUmVmITogRWxlbWVudFJlZjxIVE1MSW1hZ2VFbGVtZW50PjtcbiAgICBAVmlld0NoaWxkKCdpbWFnZVByZXZpZXdXcmFwcGVyJywgeyBzdGF0aWM6IHRydWUgfSkgaW1hZ2VQcmV2aWV3V3JhcHBlciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyB0aHlEaWFsb2c6IFRoeURpYWxvZyxcbiAgICAgICAgcHVibGljIHRoeUZ1bGxzY3JlZW46IFRoeUZ1bGxzY3JlZW4sXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBUaHlOb3RpZnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdFByZXZpZXcoKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCAnY2xpY2snKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaXNJbnNpZGVTY3JlZW4gJiYgdGhpcy5pbWFnZVByZXZpZXdXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5wcmV2aWV3Q29uZmlnPy5kaXNhYmxlQ2xvc2VcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gIXRoaXMuaXNGdWxsU2NyZWVuICYmIHRoaXMudGh5RGlhbG9nLmNsb3NlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmltYWdlUHJldmlld1dyYXBwZXIubmF0aXZlRWxlbWVudCwgJ21vdXNlZG93bicpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9ICF0aGlzLmlzSW5zaWRlU2NyZWVuICYmIHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldE9yaWdpbmFsU2l6ZSgpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbWFnZU1vZGUgPSAnZml0LXNjcmVlbic7XG4gICAgICAgIHRoaXMuem9vbSA9IDE7XG4gICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlSW5zaWRlU2NyZWVuKCk7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBzZXRGaXRTY3JlZW4oKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgdGhpcy5pc0luc2lkZVNjcmVlbiA9IHRydWU7XG4gICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlKCk7XG4gICAgfVxuXG4gICAgdXNlRGVmYXVsdFpvb21VcGRhdGUoaXNVcGRhdGVJbWFnZVdyYXBwZXI6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy56b29tID0gdGhpcy5kZWZhdWx0Wm9vbTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VUcmFuc2Zvcm0oKTtcbiAgICAgICAgaWYgKGlzVXBkYXRlSW1hZ2VXcmFwcGVyKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgdXNlQ2FsY3VsYXRlWm9vbVVwZGF0ZShpc1VwZGF0ZUltYWdlV3JhcHBlcj86IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBpbWcuc3JjID0gdGhpcy5wcmV2aWV3SW1hZ2Uuc3JjO1xuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aDogb2Zmc2V0V2lkdGgsIGhlaWdodDogb2Zmc2V0SGVpZ2h0IH0gPSBnZXRDbGllbnRTaXplKCk7XG4gICAgICAgICAgICBjb25zdCBpbm5lcldpZHRoID0gb2Zmc2V0V2lkdGggLSBIT1JJWk9OVEFMX1NQQUNFO1xuICAgICAgICAgICAgY29uc3QgaW5uZXJIZWlnaHQgPSBvZmZzZXRIZWlnaHQgLSBWRVJUSUNBTF9TUEFDRTtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0dXJhbFdpZHRoLCBuYXR1cmFsSGVpZ2h0IH0gPSBpbWc7XG4gICAgICAgICAgICBjb25zdCB4UmF0aW8gPSBpbm5lcldpZHRoIC8gbmF0dXJhbFdpZHRoO1xuICAgICAgICAgICAgY29uc3QgeVJhdGlvID0gaW5uZXJIZWlnaHQgLyBuYXR1cmFsSGVpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgem9vbSA9IE1hdGgubWluKHhSYXRpbywgeVJhdGlvKTtcbiAgICAgICAgICAgIGlmICh6b29tID4gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuem9vbSA9IDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuem9vbSA9IHpvb207XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2VUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIGlmIChpc1VwZGF0ZUltYWdlV3JhcHBlcikge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHVwZGF0ZVByZXZpZXdJbWFnZSgpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlUHJldmlld0ltYWdlKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIC8vIGVycm9yXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpbWFnZSBzaXplXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJldmlld0ltYWdlLnNpemUgJiYgdGhpcy5wcmV2aWV3SW1hZ2UuYmxvYikge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0ltYWdlLnNpemUgPSBodW1hbml6ZUJ5dGVzKHRoaXMucHJldmlld0ltYWdlLmJsb2Iuc2l6ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0Wm9vbSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlRGVmYXVsdFpvb21VcGRhdGUodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlQ2FsY3VsYXRlWm9vbVVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXNvbHZlUHJldmlld0ltYWdlKCkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8Qm9vbGVhbj4oc3Vic2NyaWJlciA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2aWV3SW1hZ2Uuc3JjLnN0YXJ0c1dpdGgoJ2Jsb2I6JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdJbWFnZS5vYmplY3RVUkwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKHRoaXMucHJldmlld0ltYWdlLnNyYyk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2aWV3SW1hZ2Uub2JqZWN0VVJMIHx8ICF0aGlzLnByZXZpZXdDb25maWcucmVzb2x2ZVNpemUpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmZXRjaEltYWdlQmxvYih0aGlzLnByZXZpZXdJbWFnZS5zcmMpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgYmxvYiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxDcmVhdG9yID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0VVJMID0gdXJsQ3JlYXRvci5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdJbWFnZS5vYmplY3RVUkwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKG9iamVjdFVSTCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdJbWFnZS5ibG9iID0gYmxvYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRQcmV2aWV3KCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnByZXZpZXdDb25maWc/Lm9wZXJhdGlvbnMpICYmIHRoaXMucHJldmlld0NvbmZpZz8ub3BlcmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcGVyYXRpb25zTWFwID0gaGVscGVycy5rZXlCeSh0aGlzLmRlZmF1bHRQcmV2aWV3T3BlcmF0aW9ucywgJ3R5cGUnKTtcbiAgICAgICAgICAgIHRoaXMucHJldmlld09wZXJhdGlvbnMgPSB0aGlzLnByZXZpZXdDb25maWc/Lm9wZXJhdGlvbnMubWFwKG9wZXJhdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGhlbHBlcnMuaXNTdHJpbmcob3BlcmF0aW9uKSAmJiBkZWZhdWx0T3BlcmF0aW9uc01hcFtvcGVyYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0T3BlcmF0aW9uc01hcFtvcGVyYXRpb25dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb24gYXMgVGh5SW1hZ2VQcmV2aWV3T3BlcmF0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3T3BlcmF0aW9ucyA9IHRoaXMuZGVmYXVsdFByZXZpZXdPcGVyYXRpb25zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm90YXRlID0gdGhpcy5wcmV2aWV3Q29uZmlnPy5yb3RhdGUgPz8gMDtcbiAgICAgICAgdGhpcy51cGRhdGVQcmV2aWV3SW1hZ2UoKTtcbiAgICB9XG5cbiAgICBkb3dubG9hZChpbWFnZTogVGh5SW1hZ2VJbmZvKSB7XG4gICAgICAgIHRoaXMuZG93bmxvYWRDbGlja2VkLmVtaXQoaW1hZ2UpO1xuICAgICAgICBjb25zdCBzcmMgPSBpbWFnZS5vcmlnaW4/LnNyYyB8fCBpbWFnZS5zcmM7XG4gICAgICAgIGZldGNoSW1hZ2VCbG9iKHNyYylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShibG9iID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmxDcmVhdG9yID0gd2luZG93LlVSTCB8fCB3aW5kb3cud2Via2l0VVJMO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdFVSTCA9IHVybENyZWF0b3IuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgIGEuZG93bmxvYWQgPSBpbWFnZS5uYW1lIHx8ICdkZWZhdWx0LnBuZyc7XG4gICAgICAgICAgICAgICAgYS5ocmVmID0gb2JqZWN0VVJMO1xuICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHpvb21JbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuem9vbSA8IElNQUdFX01BWF9aT09NKSB7XG4gICAgICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1pbih0aGlzLnpvb20gKyAwLjEsIElNQUdFX01BWF9aT09NKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlSW5zaWRlU2NyZWVuKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4uaW5pdGlhbFBvc2l0aW9uIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB6b29tT3V0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy56b29tID4gSU1BR0VfTUlOX1pPT00pIHtcbiAgICAgICAgICAgIHRoaXMuem9vbSA9IE1hdGgubWF4KHRoaXMuem9vbSAtIDAuMSwgSU1BR0VfTUlOX1pPT00pO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVJbnNpZGVTY3JlZW4oKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0geyAuLi5pbml0aWFsUG9zaXRpb24gfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZUluc2lkZVNjcmVlbigpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKiB0aGlzLnpvb207XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaW1hZ2VSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKiB0aGlzLnpvb207XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IGNsaWVudFdpZHRoLCBoZWlnaHQ6IGNsaWVudEhlaWdodCB9ID0gZ2V0Q2xpZW50U2l6ZSgpO1xuICAgICAgICBpZiAod2lkdGggPj0gY2xpZW50V2lkdGggfHwgaGVpZ2h0ID49IGNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5pc0luc2lkZVNjcmVlbiA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0luc2lkZVNjcmVlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2aWV3T3JpZ2luYWwoKSB7XG4gICAgICAgIHdpbmRvdy5vcGVuKHRoaXMucHJldmlld0ltYWdlPy5vcmlnaW4/LnNyYyB8fCB0aGlzLnByZXZpZXdJbWFnZS5zcmMsICdfYmxhbmsnKTtcbiAgICB9XG5cbiAgICByb3RhdGVSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3RhdGUgKz0gOTA7XG4gICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk7XG4gICAgfVxuXG4gICAgZnVsbFNjcmVlbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50aHktaW1hZ2UtcHJldmlldycpO1xuICAgICAgICB0aGlzLmlzRnVsbFNjcmVlbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZ1bGxzY3JlZW5SZWYgPSB0aGlzLnRoeUZ1bGxzY3JlZW4ubGF1bmNoKHtcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0RWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgICAgZnVsbHNjcmVlblJlZi5hZnRlckV4aXRlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRnVsbFNjcmVlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvcHlMaW5rKGV2ZW50OiBUaHlDb3B5RXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLnN1Y2Nlc3MoJ+WkjeWItuWbvueJh+WcsOWdgOaIkOWKnycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmVycm9yKCflpI3liLblm77niYflnLDlnYDlpLHotKUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByZXYoKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdJbmRleCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucHJldmlld0luZGV4LS07XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlld0ltYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3SW5kZXggPCB0aGlzLmltYWdlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdJbmRleCsrO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdEb25lID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXdJbWFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhZ1JlbGVhc2VkKCkge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmltYWdlUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKiB0aGlzLnpvb207XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuaW1hZ2VSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKiB0aGlzLnpvb207XG4gICAgICAgIGNvbnN0IHsgbGVmdCwgdG9wIH0gPSBnZXRPZmZzZXQodGhpcy5pbWFnZVJlZi5uYXRpdmVFbGVtZW50LCB3aW5kb3cpO1xuICAgICAgICBjb25zdCB7IHdpZHRoOiBjbGllbnRXaWR0aCwgaGVpZ2h0OiBjbGllbnRIZWlnaHQgfSA9IGdldENsaWVudFNpemUoKTtcbiAgICAgICAgY29uc3QgaXNSb3RhdGUgPSB0aGlzLnJvdGF0ZSAlIDE4MCAhPT0gMDtcbiAgICAgICAgY29uc3QgZml0Q29udGVudFBhcmFtcyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiBpc1JvdGF0ZSA/IGhlaWdodCA6IHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBpc1JvdGF0ZSA/IHdpZHRoIDogaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGNsaWVudFdpZHRoLFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpdENvbnRlbnRQb3MgPSBnZXRGaXRDb250ZW50UG9zaXRpb24oZml0Q29udGVudFBhcmFtcyk7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWRPck51bGwoZml0Q29udGVudFBvcy54KSB8fCAhaXNVbmRlZmluZWRPck51bGwoZml0Q29udGVudFBvcy55KSkge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHsgLi4udGhpcy5wb3NpdGlvbiwgLi4uZml0Q29udGVudFBvcyB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50SW1hZ2VNb2RlID0gJ29yaWdpbmFsLXNjYWxlJztcbiAgICAgICAgdGhpcy5yb3RhdGUgPSB0aGlzLnByZXZpZXdDb25maWc/LnJvdGF0ZSA/PyAwO1xuICAgICAgICB0aGlzLnBvc2l0aW9uID0geyAuLi5pbml0aWFsUG9zaXRpb24gfTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUHJldmlld0ltYWdlVHJhbnNmb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdJbWFnZVRyYW5zZm9ybSA9IGBzY2FsZTNkKCR7dGhpcy56b29tfSwgJHt0aGlzLnpvb219LCAxKSByb3RhdGUoJHt0aGlzLnJvdGF0ZX1kZWcpYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByZXZpZXdJbWFnZVdyYXBwZXJUcmFuc2Zvcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke3RoaXMucG9zaXRpb24ueH1weCwgJHt0aGlzLnBvc2l0aW9uLnl9cHgsIDApYDtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXdcIiBbY2xhc3MudGh5LWltYWdlLXByZXZpZXctZnVsbHNjcmVlbl09XCJpc0Z1bGxTY3JlZW5cIj5cbiAgQGlmICghaXNGdWxsU2NyZWVuKSB7XG4gICAgPGRpdiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWhlYWRlciBwbC0xMCBwci04XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctaGVhZGVyLWluZm9cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0aHktaW1hZ2UtbmFtZSB0ZXh0LXRydW5jYXRlXCIgW3RoeVRvb2x0aXBEaXNhYmxlZF09XCJwcmV2aWV3SW1hZ2U/Lm5hbWU/Lmxlbmd0aCA8IDMyXCIgW3RoeVRvb2x0aXBdPVwicHJldmlld0ltYWdlPy5uYW1lXCI+XG4gICAgICAgICAge3sgcHJldmlld0ltYWdlPy5uYW1lIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aHktaW1hZ2Utc2l6ZVwiPiB7eyBwcmV2aWV3SW1hZ2U/LnNpemUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxhIHRoeUFjdGlvbiB0aHlJY29uPVwiY2xvc2VcIiB0aHlUb29sdGlwPVwi6YCA5Ye66aKE6KeIXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJ0aHlEaWFsb2cuY2xvc2UoKVwiPjwvYT5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKGlzRnVsbFNjcmVlbikge1xuICAgIDxhXG4gICAgICBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWV4aXQtZnVsbHNjcmVlblwiXG4gICAgICB0aHlBY3Rpb25cbiAgICAgIHRoeUljb249XCJjbG9zZVwiXG4gICAgICB0aHlUb29sdGlwPVwi6YCA5Ye66aKE6KeIXCJcbiAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICAgKGNsaWNrKT1cInRoeUZ1bGxzY3JlZW4uZXhpdCgpXCJcbiAgICAgIHRoeVRvb2x0aXA9XCLpgIDlh7rlhajlsY9cIj48L2E+XG4gIH1cbiAgPGRpdlxuICAgIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctaW1nLXdyYXBwZXJcIlxuICAgICNpbWFnZVByZXZpZXdXcmFwcGVyXG4gICAgY2RrRHJhZ1xuICAgIFtjbGFzcy50aHktaW1hZ2UtcHJldmlldy1pbnNpZGVdPVwiaXNJbnNpZGVTY3JlZW5cIlxuICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwicHJldmlld0ltYWdlV3JhcHBlclRyYW5zZm9ybVwiXG4gICAgW2Nka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uXT1cInBvc2l0aW9uXCJcbiAgICAoY2RrRHJhZ1JlbGVhc2VkKT1cImRyYWdSZWxlYXNlZCgpXCI+XG4gICAgQGZvciAoaW1hZ2Ugb2YgaW1hZ2VzOyB0cmFjayAkaW5kZXg7IGxldCBpbWFnZUluZGV4ID0gJGluZGV4KSB7XG4gICAgICBAaWYgKHByZXZpZXdJbmRleCA9PT0gaW1hZ2VJbmRleCAmJiBpc0xvYWRpbmdEb25lKSB7XG4gICAgICAgIDxpbWcgI2ltZ1JlZiBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LWltZ1wiIFtzcmNdPVwiaW1hZ2Uub2JqZWN0VVJMIHx8IGltYWdlLnNyY1wiIFtzdHlsZS50cmFuc2Zvcm1dPVwicHJldmlld0ltYWdlVHJhbnNmb3JtXCIgLz5cbiAgICAgIH1cbiAgICB9XG4gICAgPHRoeS1sb2FkaW5nIFt0aHlEb25lXT1cImlzTG9hZGluZ0RvbmVcIj48L3RoeS1sb2FkaW5nPlxuICA8L2Rpdj5cblxuICBAaWYgKGltYWdlcy5sZW5ndGggPiAxICYmICFpc0Z1bGxTY3JlZW4pIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LXN3aXRjaC1sZWZ0XCJcbiAgICAgIFt0aHlUb29sdGlwRGlzYWJsZWRdPVwicHJldmlld0luZGV4IDw9IDBcIlxuICAgICAgdGh5VG9vbHRpcD1cIuS4iuS4gOW8oFwiXG4gICAgICBbY2xhc3MudGh5LWltYWdlLXByZXZpZXctc3dpdGNoLWxlZnQtZGlzYWJsZWRdPVwicHJldmlld0luZGV4IDw9IDBcIlxuICAgICAgKGNsaWNrKT1cInByZXYoKVwiPlxuICAgICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwiYW5nbGUtbGVmdC1ib2xkXCI+PC90aHktaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRoeS1pbWFnZS1wcmV2aWV3LXN3aXRjaC1yaWdodFwiXG4gICAgICB0aHlUb29sdGlwPVwi5LiL5LiA5bygXCJcbiAgICAgIFt0aHlUb29sdGlwRGlzYWJsZWRdPVwicHJldmlld0luZGV4ID49IGltYWdlcy5sZW5ndGggLSAxXCJcbiAgICAgIFtjbGFzcy50aHktaW1hZ2UtcHJldmlldy1zd2l0Y2gtcmlnaHQtZGlzYWJsZWRdPVwicHJldmlld0luZGV4ID49IGltYWdlcy5sZW5ndGggLSAxXCJcbiAgICAgIChjbGljayk9XCJuZXh0KClcIj5cbiAgICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImFuZ2xlLXJpZ2h0LWJvbGRcIj4gPC90aHktaWNvbj5cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKCFpc0Z1bGxTY3JlZW4pIHtcbiAgICA8dGh5LWFjdGlvbnMgdGh5U2l6ZT1cInhzXCIgY2xhc3M9XCJ0aHktaW1hZ2UtcHJldmlldy1vcGVyYXRpb25zIHB5LTMgcHgtNFwiPlxuICAgICAgQGZvciAob3B0aW9uIG9mIHByZXZpZXdPcGVyYXRpb25zOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIEBpZiAoIVsnb3JpZ2luYWwtc2NhbGUnLCAnZml0LXNjcmVlbicsICdjb3B5TGluayddLmluY2x1ZGVzKG9wdGlvbi50eXBlKSB8fCBjdXJyZW50SW1hZ2VNb2RlID09PSBvcHRpb24udHlwZSkge1xuICAgICAgICAgIDxhXG4gICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgIHRoeUFjdGlvblxuICAgICAgICAgICAgW3RoeUFjdGlvbkljb25dPVwib3B0aW9uLmljb25cIlxuICAgICAgICAgICAgW3RoeVRvb2x0aXBdPVwib3B0aW9uLm5hbWVcIlxuICAgICAgICAgICAgW3RoeVRvb2x0aXBPZmZzZXRdPVwiMTNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wdGlvbi5hY3Rpb24ocHJldmlld0ltYWdlKVwiPjwvYT5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKG9wdGlvbj8udHlwZSA9PT0gJ3pvb20tb3V0Jykge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXItMlwiPiB7eyAoem9vbSAqIDEwMCkudG9GaXhlZCgwKSArICclJyB9fSA8L3NwYW4+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChvcHRpb24/LnR5cGUgPT09ICdyb3RhdGUtcmlnaHQnKSB7XG4gICAgICAgICAgPHRoeS1kaXZpZGVyIGNsYXNzPVwibWwtMlwiIFt0aHlWZXJ0aWNhbF09XCJ0cnVlXCI+PC90aHktZGl2aWRlcj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKG9wdGlvbi50eXBlID09PSAnY29weUxpbmsnKSB7XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICAgICAgICAgdGh5QWN0aW9uXG4gICAgICAgICAgICBbdGh5Q29weVRpcHNdPVwib3B0aW9uLm5hbWVcIlxuICAgICAgICAgICAgW3RoeUFjdGlvbkljb25dPVwib3B0aW9uLmljb25cIlxuICAgICAgICAgICAgW3RoeUNvcHlUaXBzT2Zmc2V0XT1cIjEzXCJcbiAgICAgICAgICAgICh0aHlDb3B5KT1cImNvcHlMaW5rKCRldmVudClcIlxuICAgICAgICAgICAgW3RoeUNvcHlDb250ZW50XT1cInByZXZpZXdJbWFnZU9yaWdpblNyY1wiXG4gICAgICAgICAgICBbdGh5U2hvd05vdGlmeV09XCJmYWxzZVwiPjwvYT5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgPHRoeS1kaXZpZGVyIFt0aHlWZXJ0aWNhbF09XCJ0cnVlXCI+PC90aHktZGl2aWRlcj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGh5LWltYWdlLXByZXZpZXctb3BlcmF0aW9ucy10ZXh0XCI+IHt7IHByZXZpZXdJbmRleCArIDEgfX0gLyB7eyBpbWFnZXMubGVuZ3RoIH19IDwvc3Bhbj5cbiAgICA8L3RoeS1hY3Rpb25zPlxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -2,7 +2,7 @@ import { Component, HostBinding, Input, ContentChild, TemplateRef, ViewEncapsula
2
2
  import { ThyTranslate, useHostFocusControl } from 'ngx-tethys/core';
3
3
  import { useHostRenderer } from '@tethys/cdk/dom';
4
4
  import { ThyInputDirective } from './input.directive';
5
- import { NgIf, NgTemplateOutlet } from '@angular/common';
5
+ import { NgTemplateOutlet } from '@angular/common';
6
6
  import { throttleTime } from 'rxjs/operators';
7
7
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
8
  import { Observable, of } from 'rxjs';
@@ -118,7 +118,7 @@ export class ThyInputGroup {
118
118
  this.hostFocusControl.destroy();
119
119
  }
120
120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyInputGroup, deps: [{ token: i1.ThyTranslate }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
121
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: ThyInputGroup, isStandalone: true, selector: "thy-input-group", inputs: { thyAppendText: "thyAppendText", thyAppendTextTranslateKey: "thyAppendTextTranslateKey", thyPrependText: "thyPrependText", thyPrependTextTranslateKey: "thyPrependTextTranslateKey", thySize: "thySize" }, host: { properties: { "class.form-control": "prefixTemplate || suffixTemplate", "class.thy-input-group-with-prefix": "prefixTemplate", "class.thy-input-group-with-suffix": "suffixTemplate", "class.thy-input-group-with-textarea-suffix": "isTextareaSuffix", "class.thy-input-group-with-scroll-bar": "isTextareaSuffix && hasScrollbar", "class.disabled": "this.disabled" }, classAttribute: "thy-input-group" }, queries: [{ propertyName: "appendTemplate", first: true, predicate: ["append"], descendants: true }, { propertyName: "prependTemplate", first: true, predicate: ["prepend"], descendants: true }, { propertyName: "prefixTemplate", first: true, predicate: ["prefix"], descendants: true }, { propertyName: "suffixTemplate", first: true, predicate: ["suffix"], descendants: true }, { propertyName: "inputDirective", first: true, predicate: ThyInputDirective, descendants: true }], ngImport: i0, template: "<div class=\"input-group-prepend\" *ngIf=\"prependText\">\n <span class=\"input-group-text\">{{ prependText }}</span>\n</div>\n<div class=\"input-group-prepend\" *ngIf=\"prependTemplate\">\n <ng-template *ngTemplateOutlet=\"prependTemplate\"></ng-template>\n</div>\n\n<div class=\"input-group-prefix\" *ngIf=\"prefixTemplate\">\n <ng-template *ngTemplateOutlet=\"prefixTemplate\"></ng-template>\n</div>\n\n<ng-content></ng-content>\n\n<div class=\"input-group-append\" *ngIf=\"appendText\">\n <span class=\"input-group-text\">{{ appendText }}</span>\n</div>\n<div class=\"input-group-append\" *ngIf=\"appendTemplate\">\n <ng-template *ngTemplateOutlet=\"appendTemplate\"></ng-template>\n</div>\n\n<div class=\"input-group-suffix\" *ngIf=\"suffixTemplate\">\n <ng-template *ngTemplateOutlet=\"suffixTemplate\"></ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: ThyInputGroup, isStandalone: true, selector: "thy-input-group", inputs: { thyAppendText: "thyAppendText", thyAppendTextTranslateKey: "thyAppendTextTranslateKey", thyPrependText: "thyPrependText", thyPrependTextTranslateKey: "thyPrependTextTranslateKey", thySize: "thySize" }, host: { properties: { "class.form-control": "prefixTemplate || suffixTemplate", "class.thy-input-group-with-prefix": "prefixTemplate", "class.thy-input-group-with-suffix": "suffixTemplate", "class.thy-input-group-with-textarea-suffix": "isTextareaSuffix", "class.thy-input-group-with-scroll-bar": "isTextareaSuffix && hasScrollbar", "class.disabled": "this.disabled" }, classAttribute: "thy-input-group" }, queries: [{ propertyName: "appendTemplate", first: true, predicate: ["append"], descendants: true }, { propertyName: "prependTemplate", first: true, predicate: ["prepend"], descendants: true }, { propertyName: "prefixTemplate", first: true, predicate: ["prefix"], descendants: true }, { propertyName: "suffixTemplate", first: true, predicate: ["suffix"], descendants: true }, { propertyName: "inputDirective", first: true, predicate: ThyInputDirective, descendants: true }], ngImport: i0, template: "@if (prependText) {\n <div class=\"input-group-prepend\">\n <span class=\"input-group-text\">{{ prependText }}</span>\n </div>\n}\n@if (prependTemplate) {\n <div class=\"input-group-prepend\">\n <ng-template *ngTemplateOutlet=\"prependTemplate\"></ng-template>\n </div>\n}\n\n@if (prefixTemplate) {\n <div class=\"input-group-prefix\">\n <ng-template *ngTemplateOutlet=\"prefixTemplate\"></ng-template>\n </div>\n}\n\n<ng-content></ng-content>\n\n@if (appendText) {\n <div class=\"input-group-append\">\n <span class=\"input-group-text\">{{ appendText }}</span>\n </div>\n}\n@if (appendTemplate) {\n <div class=\"input-group-append\">\n <ng-template *ngTemplateOutlet=\"appendTemplate\"></ng-template>\n </div>\n}\n\n@if (suffixTemplate) {\n <div class=\"input-group-suffix\">\n <ng-template *ngTemplateOutlet=\"suffixTemplate\"></ng-template>\n </div>\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
122
122
  }
123
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyInputGroup, decorators: [{
124
124
  type: Component,
@@ -129,7 +129,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
129
129
  '[class.thy-input-group-with-suffix]': 'suffixTemplate',
130
130
  '[class.thy-input-group-with-textarea-suffix]': 'isTextareaSuffix',
131
131
  '[class.thy-input-group-with-scroll-bar]': 'isTextareaSuffix && hasScrollbar'
132
- }, standalone: true, imports: [NgIf, NgTemplateOutlet], template: "<div class=\"input-group-prepend\" *ngIf=\"prependText\">\n <span class=\"input-group-text\">{{ prependText }}</span>\n</div>\n<div class=\"input-group-prepend\" *ngIf=\"prependTemplate\">\n <ng-template *ngTemplateOutlet=\"prependTemplate\"></ng-template>\n</div>\n\n<div class=\"input-group-prefix\" *ngIf=\"prefixTemplate\">\n <ng-template *ngTemplateOutlet=\"prefixTemplate\"></ng-template>\n</div>\n\n<ng-content></ng-content>\n\n<div class=\"input-group-append\" *ngIf=\"appendText\">\n <span class=\"input-group-text\">{{ appendText }}</span>\n</div>\n<div class=\"input-group-append\" *ngIf=\"appendTemplate\">\n <ng-template *ngTemplateOutlet=\"appendTemplate\"></ng-template>\n</div>\n\n<div class=\"input-group-suffix\" *ngIf=\"suffixTemplate\">\n <ng-template *ngTemplateOutlet=\"suffixTemplate\"></ng-template>\n</div>\n" }]
132
+ }, standalone: true, imports: [NgTemplateOutlet], template: "@if (prependText) {\n <div class=\"input-group-prepend\">\n <span class=\"input-group-text\">{{ prependText }}</span>\n </div>\n}\n@if (prependTemplate) {\n <div class=\"input-group-prepend\">\n <ng-template *ngTemplateOutlet=\"prependTemplate\"></ng-template>\n </div>\n}\n\n@if (prefixTemplate) {\n <div class=\"input-group-prefix\">\n <ng-template *ngTemplateOutlet=\"prefixTemplate\"></ng-template>\n </div>\n}\n\n<ng-content></ng-content>\n\n@if (appendText) {\n <div class=\"input-group-append\">\n <span class=\"input-group-text\">{{ appendText }}</span>\n </div>\n}\n@if (appendTemplate) {\n <div class=\"input-group-append\">\n <ng-template *ngTemplateOutlet=\"appendTemplate\"></ng-template>\n </div>\n}\n\n@if (suffixTemplate) {\n <div class=\"input-group-suffix\">\n <ng-template *ngTemplateOutlet=\"suffixTemplate\"></ng-template>\n </div>\n}\n" }]
133
133
  }], ctorParameters: () => [{ type: i1.ThyTranslate }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }], propDecorators: { disabled: [{
134
134
  type: HostBinding,
135
135
  args: ['class.disabled']
@@ -159,4 +159,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
159
159
  type: ContentChild,
160
160
  args: [ThyInputDirective]
161
161
  }] } });
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2lucHV0L2lucHV0LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9pbnB1dC9pbnB1dC1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBSXZCLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sTUFBTSxFQUNOLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUt0QyxNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO0NBQ3pCLENBQUM7QUFFRjs7OztHQUlHO0FBaUJILE1BQU0sT0FBTyxhQUFhO0lBaUJ0Qjs7T0FFRztJQUNILElBQ0ksYUFBYSxDQUFDLEtBQWE7UUFDM0IsSUFB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L0I7d0JBQ0YsS0FBSyxFQUFFLGlCQUFpQjt3QkFDeEIsc0JBQXNCLEVBQUUsa0NBQWtDO3dCQUMxRCxxQ0FBcUMsRUFBRSxnQkFBZ0I7d0JBQ3ZELHFDQUFxQyxFQUFFLGdCQUFnQjt3QkFDdkQsOENBQThDLEVBQUUsa0JBQWtCO3dCQUNsRSx5Q0FBeUMsRUFBRSxrQ0FBa0M7cUJBQ2hGLGNBQ1csSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDO3NJQWlCRixRQUFRO3NCQUF0QyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFNekIsYUFBYTtzQkFEaEIsS0FBSztnQkFTRix5QkFBeUI7c0JBRDVCLEtBQUs7Z0JBV0YsY0FBYztzQkFEakIsS0FBSztnQkFTRiwwQkFBMEI7c0JBRDdCLEtBQUs7Z0JBYUYsT0FBTztzQkFEVixLQUFLO2dCQVlrQixjQUFjO3NCQUFyQyxZQUFZO3VCQUFDLFFBQVE7Z0JBS0csZUFBZTtzQkFBdkMsWUFBWTt1QkFBQyxTQUFTO2dCQUtDLGNBQWM7c0JBQXJDLFlBQVk7dUJBQUMsUUFBUTtnQkFLRSxjQUFjO3NCQUFyQyxZQUFZO3VCQUFDLFFBQVE7Z0JBS1csY0FBYztzQkFBOUMsWUFBWTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE5nWm9uZSxcbiAgICBpbmplY3QsXG4gICAgRGVzdHJveVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoeVRyYW5zbGF0ZSwgdXNlSG9zdEZvY3VzQ29udHJvbCB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyB1c2VIb3N0UmVuZGVyZXIgfSBmcm9tICdAdGV0aHlzL2Nkay9kb20nO1xuaW1wb3J0IHsgVGh5SW5wdXREaXJlY3RpdmUgfSBmcm9tICcuL2lucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcblxuZXhwb3J0IHR5cGUgSW5wdXRHcm91cFNpemUgPSAnc20nIHwgJ2xnJyB8ICdtZCcgfCAnJztcblxuY29uc3QgaW5wdXRHcm91cFNpemVNYXAgPSB7XG4gICAgc206IFsnaW5wdXQtZ3JvdXAtc20nXSxcbiAgICBsZzogWydpbnB1dC1ncm91cC1sZyddLFxuICAgIG1kOiBbJ2lucHV0LWdyb3VwLW1kJ11cbn07XG5cbi8qKlxuICog6L6T5YWl5qGG5YiG57uEXG4gKiBAbmFtZSB0aHktaW5wdXQtZ3JvdXBcbiAqIEBvcmRlciAyMFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS1pbnB1dC1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktaW5wdXQtZ3JvdXAnLFxuICAgICAgICAnW2NsYXNzLmZvcm0tY29udHJvbF0nOiAncHJlZml4VGVtcGxhdGUgfHwgc3VmZml4VGVtcGxhdGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbnB1dC1ncm91cC13aXRoLXByZWZpeF0nOiAncHJlZml4VGVtcGxhdGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbnB1dC1ncm91cC13aXRoLXN1ZmZpeF0nOiAnc3VmZml4VGVtcGxhdGUnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbnB1dC1ncm91cC13aXRoLXRleHRhcmVhLXN1ZmZpeF0nOiAnaXNUZXh0YXJlYVN1ZmZpeCcsXG4gICAgICAgICdbY2xhc3MudGh5LWlucHV0LWdyb3VwLXdpdGgtc2Nyb2xsLWJhcl0nOiAnaXNUZXh0YXJlYVN1ZmZpeCAmJiBoYXNTY3JvbGxiYXInXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0XVxufSlcbmV4cG9ydCBjbGFzcyBUaHlJbnB1dEdyb3VwIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgaG9zdFJlbmRlcmVyID0gdXNlSG9zdFJlbmRlcmVyKCk7XG5cbiAgICBwcml2YXRlIGhvc3RGb2N1c0NvbnRyb2wgPSB1c2VIb3N0Rm9jdXNDb250cm9sKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBwdWJsaWMgYXBwZW5kVGV4dDogc3RyaW5nO1xuXG4gICAgcHVibGljIHByZXBlbmRUZXh0OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgaXNUZXh0YXJlYVN1ZmZpeDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBoYXNTY3JvbGxiYXI6IGJvb2xlYW47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJykgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOi+k+WFpeahhuS4iua3u+WKoOeahOWQjue9ruaWh+acrFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeUFwcGVuZFRleHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmFwcGVuZFRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYbkuIrmt7vliqDnmoTlkI7nva7mlofmnKzlpJror63oqIAgS2V5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5QXBwZW5kVGV4dFRyYW5zbGF0ZUtleSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRUZXh0ID0gdGhpcy50aHlUcmFuc2xhdGUuaW5zdGFudCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYbkuIrmt7vliqDnmoTliY3nva7mlofmnKxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlQcmVwZW5kVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucHJlcGVuZFRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYbkuIrmt7vliqDnmoTliY3nva7mlofmnKzlpJror63oqIAgS2V5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5UHJlcGVuZFRleHRUcmFuc2xhdGVLZXkodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucHJlcGVuZFRleHQgPSB0aGlzLnRoeVRyYW5zbGF0ZS5pbnN0YW50KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi+k+WFpeahhuWIhue7hOWkp+Wwj1xuICAgICAqIEB0eXBlICdzbScgfCAnbGcnIHwgJ21kJyB8ICcnXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlTaXplKHNpemU6IElucHV0R3JvdXBTaXplKSB7XG4gICAgICAgIGlmIChzaXplICYmIGlucHV0R3JvdXBTaXplTWFwW3NpemVdKSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci51cGRhdGVDbGFzcyhpbnB1dEdyb3VwU2l6ZU1hcFtzaXplXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci51cGRhdGVDbGFzcyhbXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkI7nva7mqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdhcHBlbmQnKSBhcHBlbmRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgICAvKipcbiAgICAgKiDliY3nva7mqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdwcmVwZW5kJykgcHJlcGVuZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIOWJjee8gFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3ByZWZpeCcpIHByZWZpeFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIOWQjue8gFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3N1ZmZpeCcpIHN1ZmZpeFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChUaHlJbnB1dERpcmVjdGl2ZSkgaW5wdXREaXJlY3RpdmU6IFRoeUlucHV0RGlyZWN0aXZlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgdGh5VHJhbnNsYXRlOiBUaHlUcmFuc2xhdGUsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmhvc3RGb2N1c0NvbnRyb2wuZm9jdXNDaGFuZ2VkID0gKG9yaWdpbjogRm9jdXNPcmlnaW4pID0+IHtcbiAgICAgICAgICAgIGlmIChvcmlnaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci5hZGRDbGFzcygnZm9ybS1jb250cm9sLWFjdGl2ZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci5yZW1vdmVDbGFzcygnZm9ybS1jb250cm9sLWFjdGl2ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9ICEhdGhpcy5pbnB1dERpcmVjdGl2ZT8ubmF0aXZlRWxlbWVudD8uaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuXG4gICAgICAgIHRoaXMuaXNUZXh0YXJlYVN1ZmZpeCA9IHRoaXMuaW5wdXREaXJlY3RpdmU/Lm5hdGl2ZUVsZW1lbnQ/LnRhZ05hbWUgPT09ICdURVhUQVJFQSc7XG4gICAgICAgIGlmICh0aGlzLmlzVGV4dGFyZWFTdWZmaXgpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0ZXJtaW5lSGFzU2Nyb2xsYmFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRldGVybWluZUhhc1Njcm9sbGJhcigpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlcih0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDEwMCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNTY3JvbGxiYXIgPSB0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gdGhpcy5pbnB1dERpcmVjdGl2ZS5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2Nyb2xsYmFyICE9PSBoYXNTY3JvbGxiYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNTY3JvbGxiYXIgPSBoYXNTY3JvbGxiYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcihlbGVtZW50OiBIVE1MRWxlbWVudCk6IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeVtdPiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnIHx8ICFSZXNpemVPYnNlcnZlclxuICAgICAgICAgICAgPyBvZihudWxsKVxuICAgICAgICAgICAgOiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXNpemUgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXM6IFJlc2l6ZU9ic2VydmVyRW50cnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZW50cmllcyk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHJlc2l6ZS5vYnNlcnZlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNpemUuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuaG9zdEZvY3VzQ29udHJvbC5kZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZXBlbmRcIiAqbmdJZj1cInByZXBlbmRUZXh0XCI+XG4gIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPnt7IHByZXBlbmRUZXh0IH19PC9zcGFuPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtcHJlcGVuZFwiICpuZ0lmPVwicHJlcGVuZFRlbXBsYXRlXCI+XG4gIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInByZXBlbmRUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZWZpeFwiICpuZ0lmPVwicHJlZml4VGVtcGxhdGVcIj5cbiAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJlZml4VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiICpuZ0lmPVwiYXBwZW5kVGV4dFwiPlxuICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj57eyBhcHBlbmRUZXh0IH19PC9zcGFuPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCIgKm5nSWY9XCJhcHBlbmRUZW1wbGF0ZVwiPlxuICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhcHBlbmRUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXN1ZmZpeFwiICpuZ0lmPVwic3VmZml4VGVtcGxhdGVcIj5cbiAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VmZml4VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2lucHV0L2lucHV0LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9pbnB1dC9pbnB1dC1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBSXZCLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sTUFBTSxFQUNOLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBS3RDLE1BQU0saUJBQWlCLEdBQUc7SUFDdEIsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7SUFDdEIsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7SUFDdEIsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7Q0FDekIsQ0FBQztBQUVGOzs7O0dBSUc7QUFpQkgsTUFBTSxPQUFPLGFBQWE7SUFpQnRCOztPQUVHO0lBQ0gsSUFDSSxhQUFhLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsVUFB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QUFpQjt3QkFDeEIsc0JBQXNCLEVBQUUsa0NBQWtDO3dCQUMxRCxxQ0FBcUMsRUFBRSxnQkFBZ0I7d0JBQ3ZELHFDQUFxQyxFQUFFLGdCQUFnQjt3QkFDdkQsOENBQThDLEVBQUUsa0JBQWtCO3dCQUNsRSx5Q0FBeUMsRUFBRSxrQ0FBa0M7cUJBQ2hGLGNBQ1csSUFBSSxXQUNQLENBQUMsZ0JBQWdCLENBQUM7c0lBaUJJLFFBQVE7c0JBQXRDLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQU16QixhQUFhO3NCQURoQixLQUFLO2dCQVNGLHlCQUF5QjtzQkFENUIsS0FBSztnQkFXRixjQUFjO3NCQURqQixLQUFLO2dCQVNGLDBCQUEwQjtzQkFEN0IsS0FBSztnQkFhRixPQUFPO3NCQURWLEtBQUs7Z0JBWWtCLGNBQWM7c0JBQXJDLFlBQVk7dUJBQUMsUUFBUTtnQkFLRyxlQUFlO3NCQUF2QyxZQUFZO3VCQUFDLFNBQVM7Z0JBS0MsY0FBYztzQkFBckMsWUFBWTt1QkFBQyxRQUFRO2dCQUtFLGNBQWM7c0JBQXJDLFlBQVk7dUJBQUMsUUFBUTtnQkFLVyxjQUFjO3NCQUE5QyxZQUFZO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgTmdab25lLFxuICAgIGluamVjdCxcbiAgICBEZXN0cm95UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGh5VHJhbnNsYXRlLCB1c2VIb3N0Rm9jdXNDb250cm9sIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IHVzZUhvc3RSZW5kZXJlciB9IGZyb20gJ0B0ZXRoeXMvY2RrL2RvbSc7XG5pbXBvcnQgeyBUaHlJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4vaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuXG5leHBvcnQgdHlwZSBJbnB1dEdyb3VwU2l6ZSA9ICdzbScgfCAnbGcnIHwgJ21kJyB8ICcnO1xuXG5jb25zdCBpbnB1dEdyb3VwU2l6ZU1hcCA9IHtcbiAgICBzbTogWydpbnB1dC1ncm91cC1zbSddLFxuICAgIGxnOiBbJ2lucHV0LWdyb3VwLWxnJ10sXG4gICAgbWQ6IFsnaW5wdXQtZ3JvdXAtbWQnXVxufTtcblxuLyoqXG4gKiDovpPlhaXmoYbliIbnu4RcbiAqIEBuYW1lIHRoeS1pbnB1dC1ncm91cFxuICogQG9yZGVyIDIwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LWlucHV0LWdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3RoeS1pbnB1dC1ncm91cCcsXG4gICAgICAgICdbY2xhc3MuZm9ybS1jb250cm9sXSc6ICdwcmVmaXhUZW1wbGF0ZSB8fCBzdWZmaXhUZW1wbGF0ZScsXG4gICAgICAgICdbY2xhc3MudGh5LWlucHV0LWdyb3VwLXdpdGgtcHJlZml4XSc6ICdwcmVmaXhUZW1wbGF0ZScsXG4gICAgICAgICdbY2xhc3MudGh5LWlucHV0LWdyb3VwLXdpdGgtc3VmZml4XSc6ICdzdWZmaXhUZW1wbGF0ZScsXG4gICAgICAgICdbY2xhc3MudGh5LWlucHV0LWdyb3VwLXdpdGgtdGV4dGFyZWEtc3VmZml4XSc6ICdpc1RleHRhcmVhU3VmZml4JyxcbiAgICAgICAgJ1tjbGFzcy50aHktaW5wdXQtZ3JvdXAtd2l0aC1zY3JvbGwtYmFyXSc6ICdpc1RleHRhcmVhU3VmZml4ICYmIGhhc1Njcm9sbGJhcidcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nVGVtcGxhdGVPdXRsZXRdXG59KVxuZXhwb3J0IGNsYXNzIFRoeUlucHV0R3JvdXAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBob3N0UmVuZGVyZXIgPSB1c2VIb3N0UmVuZGVyZXIoKTtcblxuICAgIHByaXZhdGUgaG9zdEZvY3VzQ29udHJvbCA9IHVzZUhvc3RGb2N1c0NvbnRyb2woKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIHB1YmxpYyBhcHBlbmRUZXh0OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgcHJlcGVuZFRleHQ6IHN0cmluZztcblxuICAgIHB1YmxpYyBpc1RleHRhcmVhU3VmZml4OiBib29sZWFuO1xuXG4gICAgcHVibGljIGhhc1Njcm9sbGJhcjogYm9vbGVhbjtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZWQnKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog6L6T5YWl5qGG5LiK5re75Yqg55qE5ZCO572u5paH5pysXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdGh5QXBwZW5kVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi+k+WFpeahhuS4iua3u+WKoOeahOWQjue9ruaWh+acrOWkmuivreiogCBLZXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlBcHBlbmRUZXh0VHJhbnNsYXRlS2V5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZFRleHQgPSB0aGlzLnRoeVRyYW5zbGF0ZS5pbnN0YW50KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi+k+WFpeahhuS4iua3u+WKoOeahOWJjee9ruaWh+acrFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVByZXBlbmRUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5wcmVwZW5kVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi+k+WFpeahhuS4iua3u+WKoOeahOWJjee9ruaWh+acrOWkmuivreiogCBLZXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlQcmVwZW5kVGV4dFRyYW5zbGF0ZUtleSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5wcmVwZW5kVGV4dCA9IHRoaXMudGh5VHJhbnNsYXRlLmluc3RhbnQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6L6T5YWl5qGG5YiG57uE5aSn5bCPXG4gICAgICogQHR5cGUgJ3NtJyB8ICdsZycgfCAnbWQnIHwgJydcbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeVNpemUoc2l6ZTogSW5wdXRHcm91cFNpemUpIHtcbiAgICAgICAgaWYgKHNpemUgJiYgaW5wdXRHcm91cFNpemVNYXBbc2l6ZV0pIHtcbiAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLnVwZGF0ZUNsYXNzKGlucHV0R3JvdXBTaXplTWFwW3NpemVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLnVwZGF0ZUNsYXNzKFtdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQjue9ruaooeadv1xuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2FwcGVuZCcpIGFwcGVuZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAgIC8qKlxuICAgICAqIOWJjee9ruaooeadv1xuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3ByZXBlbmQnKSBwcmVwZW5kVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gICAgLyoqXG4gICAgICog5YmN57yAXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgncHJlZml4JykgcHJlZml4VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gICAgLyoqXG4gICAgICog5ZCO57yAXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnc3VmZml4Jykgc3VmZml4VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKFRoeUlucHV0RGlyZWN0aXZlKSBpbnB1dERpcmVjdGl2ZTogVGh5SW5wdXREaXJlY3RpdmU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB0aHlUcmFuc2xhdGU6IFRoeVRyYW5zbGF0ZSxcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaG9zdEZvY3VzQ29udHJvbC5mb2N1c0NoYW5nZWQgPSAob3JpZ2luOiBGb2N1c09yaWdpbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLmFkZENsYXNzKCdmb3JtLWNvbnRyb2wtYWN0aXZlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdFJlbmRlcmVyLnJlbW92ZUNsYXNzKCdmb3JtLWNvbnRyb2wtYWN0aXZlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gISF0aGlzLmlucHV0RGlyZWN0aXZlPy5uYXRpdmVFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgdGhpcy5pc1RleHRhcmVhU3VmZml4ID0gdGhpcy5pbnB1dERpcmVjdGl2ZT8ubmF0aXZlRWxlbWVudD8udGFnTmFtZSA9PT0gJ1RFWFRBUkVBJztcbiAgICAgICAgaWYgKHRoaXMuaXNUZXh0YXJlYVN1ZmZpeCkge1xuICAgICAgICAgICAgdGhpcy5kZXRlcm1pbmVIYXNTY3JvbGxiYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGV0ZXJtaW5lSGFzU2Nyb2xsYmFyKCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyKHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgICAgICAucGlwZSh0aHJvdHRsZVRpbWUoMTAwKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc1Njcm9sbGJhciA9IHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTY3JvbGxiYXIgIT09IGhhc1Njcm9sbGJhcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1Njcm9sbGJhciA9IGhhc1Njcm9sbGJhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogT2JzZXJ2YWJsZTxSZXNpemVPYnNlcnZlckVudHJ5W10+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcgfHwgIVJlc2l6ZU9ic2VydmVyXG4gICAgICAgICAgICA/IG9mKG51bGwpXG4gICAgICAgICAgICA6IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllczogUmVzaXplT2JzZXJ2ZXJFbnRyeVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChlbnRyaWVzKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgcmVzaXplLm9ic2VydmUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZS5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5ob3N0Rm9jdXNDb250cm9sLmRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCJAaWYgKHByZXBlbmRUZXh0KSB7XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1wcmVwZW5kXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+e3sgcHJlcGVuZFRleHQgfX08L3NwYW4+XG4gIDwvZGl2PlxufVxuQGlmIChwcmVwZW5kVGVtcGxhdGUpIHtcbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZXBlbmRcIj5cbiAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmVwZW5kVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbn1cblxuQGlmIChwcmVmaXhUZW1wbGF0ZSkge1xuICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtcHJlZml4XCI+XG4gICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJlZml4VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbn1cblxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG5AaWYgKGFwcGVuZFRleHQpIHtcbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPnt7IGFwcGVuZFRleHQgfX08L3NwYW4+XG4gIDwvZGl2PlxufVxuQGlmIChhcHBlbmRUZW1wbGF0ZSkge1xuICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXBwZW5kVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbn1cblxuQGlmIChzdWZmaXhUZW1wbGF0ZSkge1xuICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtc3VmZml4XCI+XG4gICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VmZml4VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbn1cbiJdfQ==
@@ -1,5 +1,4 @@
1
1
  import { AbstractControlValueAccessor, mixinDisabled, mixinInitialized, mixinTabIndex, useHostFocusControl } from 'ngx-tethys/core';
2
- import { NgIf } from '@angular/common';
3
2
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
4
3
  import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
5
4
  import { useHostRenderer } from '@tethys/cdk/dom';
@@ -117,7 +116,7 @@ export class ThyInputSearch extends _MixinBase {
117
116
  this.hostFocusControl.destroy();
118
117
  }
119
118
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyInputSearch, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
120
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.0", type: ThyInputSearch, isStandalone: true, selector: "thy-input-search", inputs: { name: "name", placeholder: "placeholder", thyTheme: "thyTheme", thySearchFocus: ["thySearchFocus", "thySearchFocus", coerceBooleanProperty], thyIconPosition: "thyIconPosition", thySize: "thySize" }, outputs: { clear: "clear", thyClear: "thyClear" }, host: { properties: { "class.thy-input-search-ellipse": "thyTheme === \"ellipse\"", "class.thy-input-search-transparent": "thyTheme === \"transparent\"", "class.thy-input-search-before-with-clear": "searchText && iconPosition === \"before\"", "class.form-control-active": "focused", "attr.tabindex": "tabIndex" }, classAttribute: "thy-input form-control thy-input-search" }, providers: [CUSTOM_INPUT_SEARCH_CONTROL_VALUE_ACCESSOR], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<thy-icon class=\"input-prepend\" *ngIf=\"iconPosition === 'before'\" thyIconName=\"search\"></thy-icon>\n<input\n class=\"input-search-control\"\n #input\n thyInput\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [thyAutofocus]=\"autoFocus\"\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"searchModelChange()\"\n (focus)=\"!focused ? (focused = true) : null\"\n [thySize]=\"thySize\"\n tabindex=\"-1\" />\n<ng-container *ngIf=\"iconPosition === 'after'\">\n <div class=\"input-append input-append-divider\">\n <a class=\"close\" *ngIf=\"searchText; else onlyIcon\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n <ng-template #onlyIcon>\n <thy-icon class=\"text-placeholder\" thyIconName=\"search\"></thy-icon>\n </ng-template>\n </div>\n</ng-container>\n\n<a *ngIf=\"searchText && iconPosition === 'before'\" class=\"close input-append\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n</a>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyInputDirective, selector: "input[thyInput], select[thyInput], textarea[thyInput]", inputs: ["thySize"], exportAs: ["thyInput"] }, { kind: "directive", type: ThyAutofocusDirective, selector: "input[thyAutofocus],textarea[thyAutofocus]", inputs: ["thyAutofocus", "thyAutoSelect"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
119
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: ThyInputSearch, isStandalone: true, selector: "thy-input-search", inputs: { name: "name", placeholder: "placeholder", thyTheme: "thyTheme", thySearchFocus: ["thySearchFocus", "thySearchFocus", coerceBooleanProperty], thyIconPosition: "thyIconPosition", thySize: "thySize" }, outputs: { clear: "clear", thyClear: "thyClear" }, host: { properties: { "class.thy-input-search-ellipse": "thyTheme === \"ellipse\"", "class.thy-input-search-transparent": "thyTheme === \"transparent\"", "class.thy-input-search-before-with-clear": "searchText && iconPosition === \"before\"", "class.form-control-active": "focused", "attr.tabindex": "tabIndex" }, classAttribute: "thy-input form-control thy-input-search" }, providers: [CUSTOM_INPUT_SEARCH_CONTROL_VALUE_ACCESSOR], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "@if (iconPosition === 'before') {\n <thy-icon class=\"input-prepend\" thyIconName=\"search\"></thy-icon>\n}\n<input\n class=\"input-search-control\"\n #input\n thyInput\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [thyAutofocus]=\"autoFocus\"\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"searchModelChange()\"\n (focus)=\"!focused ? (focused = true) : null\"\n [thySize]=\"thySize\"\n tabindex=\"-1\" />\n@if (iconPosition === 'after') {\n <div class=\"input-append input-append-divider\">\n @if (searchText) {\n <a class=\"close\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n } @else {\n <thy-icon class=\"text-placeholder\" thyIconName=\"search\"></thy-icon>\n }\n </div>\n}\n\n@if (searchText && iconPosition === 'before') {\n <a class=\"close input-append\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n}\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyInputDirective, selector: "input[thyInput], select[thyInput], textarea[thyInput]", inputs: ["thySize"], exportAs: ["thyInput"] }, { kind: "directive", type: ThyAutofocusDirective, selector: "input[thyAutofocus],textarea[thyAutofocus]", inputs: ["thyAutofocus", "thyAutoSelect"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
121
120
  }
122
121
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: ThyInputSearch, decorators: [{
123
122
  type: Component,
@@ -128,7 +127,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
128
127
  '[class.thy-input-search-before-with-clear]': 'searchText && iconPosition === "before"',
129
128
  '[class.form-control-active]': 'focused',
130
129
  '[attr.tabindex]': 'tabIndex'
131
- }, standalone: true, imports: [NgIf, ThyIcon, ThyInputDirective, ThyAutofocusDirective, FormsModule], template: "<thy-icon class=\"input-prepend\" *ngIf=\"iconPosition === 'before'\" thyIconName=\"search\"></thy-icon>\n<input\n class=\"input-search-control\"\n #input\n thyInput\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [thyAutofocus]=\"autoFocus\"\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"searchModelChange()\"\n (focus)=\"!focused ? (focused = true) : null\"\n [thySize]=\"thySize\"\n tabindex=\"-1\" />\n<ng-container *ngIf=\"iconPosition === 'after'\">\n <div class=\"input-append input-append-divider\">\n <a class=\"close\" *ngIf=\"searchText; else onlyIcon\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n <ng-template #onlyIcon>\n <thy-icon class=\"text-placeholder\" thyIconName=\"search\"></thy-icon>\n </ng-template>\n </div>\n</ng-container>\n\n<a *ngIf=\"searchText && iconPosition === 'before'\" class=\"close input-append\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n</a>\n" }]
130
+ }, standalone: true, imports: [ThyIcon, ThyInputDirective, ThyAutofocusDirective, FormsModule], template: "@if (iconPosition === 'before') {\n <thy-icon class=\"input-prepend\" thyIconName=\"search\"></thy-icon>\n}\n<input\n class=\"input-search-control\"\n #input\n thyInput\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [thyAutofocus]=\"autoFocus\"\n [(ngModel)]=\"searchText\"\n (ngModelChange)=\"searchModelChange()\"\n (focus)=\"!focused ? (focused = true) : null\"\n [thySize]=\"thySize\"\n tabindex=\"-1\" />\n@if (iconPosition === 'after') {\n <div class=\"input-append input-append-divider\">\n @if (searchText) {\n <a class=\"close\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n } @else {\n <thy-icon class=\"text-placeholder\" thyIconName=\"search\"></thy-icon>\n }\n </div>\n}\n\n@if (searchText && iconPosition === 'before') {\n <a class=\"close input-append\" href=\"javascript:;\" (click)=\"clearSearchText($event)\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </a>\n}\n" }]
132
131
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { inputElement: [{
133
132
  type: ViewChild,
134
133
  args: ['input', { static: true }]
@@ -150,4 +149,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
150
149
  }], thyClear: [{
151
150
  type: Output
152
151
  }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbnB1dC9pbnB1dC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2lucHV0L2lucHV0LXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsNEJBQTRCLEVBRTVCLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsYUFBYSxFQUliLG1CQUFtQixFQUN0QixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQWdCLE1BQU0sbUJBQW1CLENBQUM7QUFHcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUt4RCxNQUFNLENBQUMsTUFBTSwwQ0FBMEMsR0FBUTtJQUMzRCxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQzdDLEtBQUssRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQUVGLE1B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O3dCQUN4QyxpQkFBaUIsRUFBRSxVQUFVO3FCQUNoQyxjQUNXLElBQUksV0FDUCxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxDQUFDOytHQUd6QyxZQUFZO3NCQUFqRCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBbUIzQixJQUFJO3NCQUFaLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFPRyxRQUFRO3NCQUFoQixLQUFLO2dCQU9GLGNBQWM7c0JBRGpCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUU7Z0JBVTlCLGVBQWU7c0JBQTNCLEtBQUs7Z0JBU0csT0FBTztzQkFBZixLQUFLO2dCQUtJLEtBQUs7c0JBQWQsTUFBTTtnQkFLRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIENvbnN0cnVjdG9yLFxuICAgIG1peGluRGlzYWJsZWQsXG4gICAgbWl4aW5Jbml0aWFsaXplZCxcbiAgICBtaXhpblRhYkluZGV4LFxuICAgIFRoeUNhbkRpc2FibGUsXG4gICAgVGh5SGFzVGFiSW5kZXgsXG4gICAgVGh5SW5pdGlhbGl6ZWQsXG4gICAgdXNlSG9zdEZvY3VzQ29udHJvbFxufSBmcm9tICduZ3gtdGV0aHlzL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHVzZUhvc3RSZW5kZXJlciB9IGZyb20gJ0B0ZXRoeXMvY2RrL2RvbSc7XG5pbXBvcnQgeyBUaHlJY29uIH0gZnJvbSAnbmd4LXRldGh5cy9pY29uJztcbmltcG9ydCB7IFRoeUF1dG9mb2N1c0RpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IFRoeUlucHV0RGlyZWN0aXZlLCBUaHlJbnB1dFNpemUgfSBmcm9tICcuL2lucHV0LmRpcmVjdGl2ZSc7XG5cbmltcG9ydCB7IEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcblxuZXhwb3J0IHR5cGUgVGh5SW5wdXRTZWFyY2hUaGVtZSA9ICdkZWZhdWx0JyB8ICdlbGxpcHNlJyB8ICd0cmFuc3BhcmVudCcgfCAnJztcbmV4cG9ydCB0eXBlIFRoeUlucHV0U2VhcmNoSWNvblBvc2l0aW9uID0gJ2JlZm9yZScgfCAnYWZ0ZXInO1xuXG5leHBvcnQgY29uc3QgQ1VTVE9NX0lOUFVUX1NFQVJDSF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGh5SW5wdXRTZWFyY2gpLFxuICAgIG11bHRpOiB0cnVlXG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IF9NaXhpbkJhc2U6IENvbnN0cnVjdG9yPFRoeUhhc1RhYkluZGV4PiAmXG4gICAgQ29uc3RydWN0b3I8VGh5SW5pdGlhbGl6ZWQ+ICZcbiAgICBDb25zdHJ1Y3RvcjxUaHlDYW5EaXNhYmxlPiAmXG4gICAgdHlwZW9mIEFic3RyYWN0Q29udHJvbFZhbHVlQWNjZXNzb3IgPSBtaXhpbkluaXRpYWxpemVkKG1peGluVGFiSW5kZXgobWl4aW5EaXNhYmxlZChBYnN0cmFjdENvbnRyb2xWYWx1ZUFjY2Vzc29yKSkpO1xuXG4vKipcbiAqIOaQnOe0oui+k+WFpeahhlxuICogQG5hbWUgdGh5LWlucHV0LXNlYXJjaFxuICogQG9yZGVyIDMwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LWlucHV0LXNlYXJjaCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbQ1VTVE9NX0lOUFVUX1NFQVJDSF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktaW5wdXQgZm9ybS1jb250cm9sIHRoeS1pbnB1dC1zZWFyY2gnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbnB1dC1zZWFyY2gtZWxsaXBzZV0nOiAndGh5VGhlbWUgPT09IFwiZWxsaXBzZVwiJyxcbiAgICAgICAgJ1tjbGFzcy50aHktaW5wdXQtc2VhcmNoLXRyYW5zcGFyZW50XSc6ICd0aHlUaGVtZSA9PT0gXCJ0cmFuc3BhcmVudFwiJyxcbiAgICAgICAgJ1tjbGFzcy50aHktaW5wdXQtc2VhcmNoLWJlZm9yZS13aXRoLWNsZWFyXSc6ICdzZWFyY2hUZXh0ICYmIGljb25Qb3NpdGlvbiA9PT0gXCJiZWZvcmVcIicsXG4gICAgICAgICdbY2xhc3MuZm9ybS1jb250cm9sLWFjdGl2ZV0nOiAnZm9jdXNlZCcsXG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiAndGFiSW5kZXgnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBUaHlJY29uLCBUaHlJbnB1dERpcmVjdGl2ZSwgVGh5QXV0b2ZvY3VzRGlyZWN0aXZlLCBGb3Jtc01vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgVGh5SW5wdXRTZWFyY2ggZXh0ZW5kcyBfTWl4aW5CYXNlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0RWxlbWVudDogRWxlbWVudFJlZjxhbnk+O1xuXG4gICAgcHJpdmF0ZSBob3N0UmVuZGVyZXIgPSB1c2VIb3N0UmVuZGVyZXIoKTtcblxuICAgIHByaXZhdGUgaG9zdEZvY3VzQ29udHJvbCA9IHVzZUhvc3RGb2N1c0NvbnRyb2woKTtcblxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGF1dG9Gb2N1cyA9IGZhbHNlO1xuXG4gICAgcHVibGljIGljb25Qb3NpdGlvbjogVGh5SW5wdXRTZWFyY2hJY29uUG9zaXRpb24gPSAnYmVmb3JlJztcblxuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcblxuICAgIGZvY3VzZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaQnOe0ouahhiBuYW1lIOWxnuaAp1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG5hbWUgPSAnJztcblxuICAgIC8qKlxuICAgICAqIOaQnOe0ouahhiBQbGFjZWhvbGRlclxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiDmkJzntKLmoYbpo47moLxcbiAgICAgKiBAdHlwZSAnZGVmYXVsdCcgfCAnZWxsaXBzZScgfCAndHJhbnNwYXJlbnQnXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVRoZW1lOiBUaHlJbnB1dFNlYXJjaFRoZW1lO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm6Ieq5Yqo6IGa54SmXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIHNldCB0aHlTZWFyY2hGb2N1cyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmF1dG9Gb2N1cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkJzntKLlm77moIfkvY3nva7vvIzlvZPkvKDlhaUgYWZ0ZXIg5pe277yM5pCc57Si5Zu+5qCH5Zyo6L6T5YWl5qGG5ZCO5pa55pi+56S677yM5pyJ5YaF5a655pe25pi+56S65Li65YWz6Zet5oyJ6ZKuXG4gICAgICogQHR5cGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgdGh5SWNvblBvc2l0aW9uKHZhbHVlOiBUaHlJbnB1dFNlYXJjaEljb25Qb3NpdGlvbikge1xuICAgICAgICB0aGlzLmljb25Qb3NpdGlvbiA9IHZhbHVlIHx8ICdiZWZvcmUnO1xuICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYblpKflsI9cbiAgICAgKiBAdHlwZSAneHMnIHwgJ3NtJyB8ICdtZCcgfCAnZGVmYXVsdCcgfCAnbGcnXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5U2l6ZTogVGh5SW5wdXRTaXplO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSB0aHlDbGVhclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBjbGVhcjogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDmuIXpmaTmkJzntKLkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5Q2xlYXI6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2xhc3Nlcyh0cnVlKTtcblxuICAgICAgICB0aGlzLmhvc3RGb2N1c0NvbnRyb2wuZm9jdXNDaGFuZ2VkID0gKG9yaWdpbjogRm9jdXNPcmlnaW4pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHVwZGF0ZUNsYXNzZXMoZm9yY2VVcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCB8fCBmb3JjZVVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5ob3N0UmVuZGVyZXIudXBkYXRlQ2xhc3MoW2B0aHktaW5wdXQtc2VhcmNoLSR7dGhpcy5pY29uUG9zaXRpb259YF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNlYXJjaE1vZGVsQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4odGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG5cbiAgICBjbGVhclNlYXJjaFRleHQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuaW5wdXQtc2VhcmNoLWNvbnRyb2wnKTtcbiAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICAgIHRoaXMuY2xlYXIuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMudGh5Q2xlYXIuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG9zdEZvY3VzQ29udHJvbC5kZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPHRoeS1pY29uIGNsYXNzPVwiaW5wdXQtcHJlcGVuZFwiICpuZ0lmPVwiaWNvblBvc2l0aW9uID09PSAnYmVmb3JlJ1wiIHRoeUljb25OYW1lPVwic2VhcmNoXCI+PC90aHktaWNvbj5cbjxpbnB1dFxuICBjbGFzcz1cImlucHV0LXNlYXJjaC1jb250cm9sXCJcbiAgI2lucHV0XG4gIHRoeUlucHV0XG4gIFtuYW1lXT1cIm5hbWVcIlxuICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbdGh5QXV0b2ZvY3VzXT1cImF1dG9Gb2N1c1wiXG4gIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaE1vZGVsQ2hhbmdlKClcIlxuICAoZm9jdXMpPVwiIWZvY3VzZWQgPyAoZm9jdXNlZCA9IHRydWUpIDogbnVsbFwiXG4gIFt0aHlTaXplXT1cInRoeVNpemVcIlxuICB0YWJpbmRleD1cIi0xXCIgLz5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uUG9zaXRpb24gPT09ICdhZnRlcidcIj5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWFwcGVuZCBpbnB1dC1hcHBlbmQtZGl2aWRlclwiPlxuICAgIDxhIGNsYXNzPVwiY2xvc2VcIiAqbmdJZj1cInNlYXJjaFRleHQ7IGVsc2Ugb25seUljb25cIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoVGV4dCgkZXZlbnQpXCI+XG4gICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJjbG9zZVwiPjwvdGh5LWljb24+XG4gICAgPC9hPlxuICAgIDxuZy10ZW1wbGF0ZSAjb25seUljb24+XG4gICAgICA8dGh5LWljb24gY2xhc3M9XCJ0ZXh0LXBsYWNlaG9sZGVyXCIgdGh5SWNvbk5hbWU9XCJzZWFyY2hcIj48L3RoeS1pY29uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxhICpuZ0lmPVwic2VhcmNoVGV4dCAmJiBpY29uUG9zaXRpb24gPT09ICdiZWZvcmUnXCIgY2xhc3M9XCJjbG9zZSBpbnB1dC1hcHBlbmRcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoVGV4dCgkZXZlbnQpXCI+XG4gIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImNsb3NlXCI+PC90aHktaWNvbj5cbjwvYT5cbiJdfQ==
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbnB1dC9pbnB1dC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2lucHV0L2lucHV0LXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsNEJBQTRCLEVBRTVCLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsYUFBYSxFQUliLG1CQUFtQixFQUN0QixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBZ0IsTUFBTSxtQkFBbUIsQ0FBQztBQUdwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBS3hELE1BQU0sQ0FBQyxNQUFNLDBDQUEwQyxHQUFRO0lBQzNELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7SUFDN0MsS0FBSyxFQUFFLElBQUk7Q0FDZCxDQUFDO0FBRUYsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0FBRXRC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QU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxXQUFXLENBQUM7K0dBR25DLFlBQVk7c0JBQWpELFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFtQjNCLElBQUk7c0JBQVosS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBT0YsY0FBYztzQkFEakIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRTtnQkFVOUIsZUFBZTtzQkFBM0IsS0FBSztnQkFTRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0ksS0FBSztzQkFBZCxNQUFNO2dCQUtHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFic3RyYWN0Q29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgQ29uc3RydWN0b3IsXG4gICAgbWl4aW5EaXNhYmxlZCxcbiAgICBtaXhpbkluaXRpYWxpemVkLFxuICAgIG1peGluVGFiSW5kZXgsXG4gICAgVGh5Q2FuRGlzYWJsZSxcbiAgICBUaHlIYXNUYWJJbmRleCxcbiAgICBUaHlJbml0aWFsaXplZCxcbiAgICB1c2VIb3N0Rm9jdXNDb250cm9sXG59IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHVzZUhvc3RSZW5kZXJlciB9IGZyb20gJ0B0ZXRoeXMvY2RrL2RvbSc7XG5pbXBvcnQgeyBUaHlJY29uIH0gZnJvbSAnbmd4LXRldGh5cy9pY29uJztcbmltcG9ydCB7IFRoeUF1dG9mb2N1c0RpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IFRoeUlucHV0RGlyZWN0aXZlLCBUaHlJbnB1dFNpemUgfSBmcm9tICcuL2lucHV0LmRpcmVjdGl2ZSc7XG5cbmltcG9ydCB7IEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcblxuZXhwb3J0IHR5cGUgVGh5SW5wdXRTZWFyY2hUaGVtZSA9ICdkZWZhdWx0JyB8ICdlbGxpcHNlJyB8ICd0cmFuc3BhcmVudCcgfCAnJztcbmV4cG9ydCB0eXBlIFRoeUlucHV0U2VhcmNoSWNvblBvc2l0aW9uID0gJ2JlZm9yZScgfCAnYWZ0ZXInO1xuXG5leHBvcnQgY29uc3QgQ1VTVE9NX0lOUFVUX1NFQVJDSF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGh5SW5wdXRTZWFyY2gpLFxuICAgIG11bHRpOiB0cnVlXG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IF9NaXhpbkJhc2U6IENvbnN0cnVjdG9yPFRoeUhhc1RhYkluZGV4PiAmXG4gICAgQ29uc3RydWN0b3I8VGh5SW5pdGlhbGl6ZWQ+ICZcbiAgICBDb25zdHJ1Y3RvcjxUaHlDYW5EaXNhYmxlPiAmXG4gICAgdHlwZW9mIEFic3RyYWN0Q29udHJvbFZhbHVlQWNjZXNzb3IgPSBtaXhpbkluaXRpYWxpemVkKG1peGluVGFiSW5kZXgobWl4aW5EaXNhYmxlZChBYnN0cmFjdENvbnRyb2xWYWx1ZUFjY2Vzc29yKSkpO1xuXG4vKipcbiAqIOaQnOe0oui+k+WFpeahhlxuICogQG5hbWUgdGh5LWlucHV0LXNlYXJjaFxuICogQG9yZGVyIDMwXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LWlucHV0LXNlYXJjaCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbQ1VTVE9NX0lOUFVUX1NFQVJDSF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICd0aHktaW5wdXQgZm9ybS1jb250cm9sIHRoeS1pbnB1dC1zZWFyY2gnLFxuICAgICAgICAnW2NsYXNzLnRoeS1pbnB1dC1zZWFyY2gtZWxsaXBzZV0nOiAndGh5VGhlbWUgPT09IFwiZWxsaXBzZVwiJyxcbiAgICAgICAgJ1tjbGFzcy50aHktaW5wdXQtc2VhcmNoLXRyYW5zcGFyZW50XSc6ICd0aHlUaGVtZSA9PT0gXCJ0cmFuc3BhcmVudFwiJyxcbiAgICAgICAgJ1tjbGFzcy50aHktaW5wdXQtc2VhcmNoLWJlZm9yZS13aXRoLWNsZWFyXSc6ICdzZWFyY2hUZXh0ICYmIGljb25Qb3NpdGlvbiA9PT0gXCJiZWZvcmVcIicsXG4gICAgICAgICdbY2xhc3MuZm9ybS1jb250cm9sLWFjdGl2ZV0nOiAnZm9jdXNlZCcsXG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiAndGFiSW5kZXgnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtUaHlJY29uLCBUaHlJbnB1dERpcmVjdGl2ZSwgVGh5QXV0b2ZvY3VzRGlyZWN0aXZlLCBGb3Jtc01vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgVGh5SW5wdXRTZWFyY2ggZXh0ZW5kcyBfTWl4aW5CYXNlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0RWxlbWVudDogRWxlbWVudFJlZjxhbnk+O1xuXG4gICAgcHJpdmF0ZSBob3N0UmVuZGVyZXIgPSB1c2VIb3N0UmVuZGVyZXIoKTtcblxuICAgIHByaXZhdGUgaG9zdEZvY3VzQ29udHJvbCA9IHVzZUhvc3RGb2N1c0NvbnRyb2woKTtcblxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHVibGljIGF1dG9Gb2N1cyA9IGZhbHNlO1xuXG4gICAgcHVibGljIGljb25Qb3NpdGlvbjogVGh5SW5wdXRTZWFyY2hJY29uUG9zaXRpb24gPSAnYmVmb3JlJztcblxuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcblxuICAgIGZvY3VzZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaQnOe0ouahhiBuYW1lIOWxnuaAp1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG5hbWUgPSAnJztcblxuICAgIC8qKlxuICAgICAqIOaQnOe0ouahhiBQbGFjZWhvbGRlclxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiDmkJzntKLmoYbpo47moLxcbiAgICAgKiBAdHlwZSAnZGVmYXVsdCcgfCAnZWxsaXBzZScgfCAndHJhbnNwYXJlbnQnXG4gICAgICogQGRlZmF1bHQgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVRoZW1lOiBUaHlJbnB1dFNlYXJjaFRoZW1lO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm6Ieq5Yqo6IGa54SmXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIHNldCB0aHlTZWFyY2hGb2N1cyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmF1dG9Gb2N1cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkJzntKLlm77moIfkvY3nva7vvIzlvZPkvKDlhaUgYWZ0ZXIg5pe277yM5pCc57Si5Zu+5qCH5Zyo6L6T5YWl5qGG5ZCO5pa55pi+56S677yM5pyJ5YaF5a655pe25pi+56S65Li65YWz6Zet5oyJ6ZKuXG4gICAgICogQHR5cGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgdGh5SWNvblBvc2l0aW9uKHZhbHVlOiBUaHlJbnB1dFNlYXJjaEljb25Qb3NpdGlvbikge1xuICAgICAgICB0aGlzLmljb25Qb3NpdGlvbiA9IHZhbHVlIHx8ICdiZWZvcmUnO1xuICAgICAgICB0aGlzLnVwZGF0ZUNsYXNzZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovpPlhaXmoYblpKflsI9cbiAgICAgKiBAdHlwZSAneHMnIHwgJ3NtJyB8ICdtZCcgfCAnZGVmYXVsdCcgfCAnbGcnXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5U2l6ZTogVGh5SW5wdXRTaXplO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSB0aHlDbGVhclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBjbGVhcjogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDmuIXpmaTmkJzntKLkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5Q2xlYXI6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2xhc3Nlcyh0cnVlKTtcblxuICAgICAgICB0aGlzLmhvc3RGb2N1c0NvbnRyb2wuZm9jdXNDaGFuZ2VkID0gKG9yaWdpbjogRm9jdXNPcmlnaW4pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHVwZGF0ZUNsYXNzZXMoZm9yY2VVcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCB8fCBmb3JjZVVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5ob3N0UmVuZGVyZXIudXBkYXRlQ2xhc3MoW2B0aHktaW5wdXQtc2VhcmNoLSR7dGhpcy5pY29uUG9zaXRpb259YF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNlYXJjaE1vZGVsQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4odGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG5cbiAgICBjbGVhclNlYXJjaFRleHQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuaW5wdXQtc2VhcmNoLWNvbnRyb2wnKTtcbiAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICAgIHRoaXMuY2xlYXIuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMudGh5Q2xlYXIuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG9zdEZvY3VzQ29udHJvbC5kZXN0cm95KCk7XG4gICAgfVxufVxuIiwiQGlmIChpY29uUG9zaXRpb24gPT09ICdiZWZvcmUnKSB7XG4gIDx0aHktaWNvbiBjbGFzcz1cImlucHV0LXByZXBlbmRcIiB0aHlJY29uTmFtZT1cInNlYXJjaFwiPjwvdGh5LWljb24+XG59XG48aW5wdXRcbiAgY2xhc3M9XCJpbnB1dC1zZWFyY2gtY29udHJvbFwiXG4gICNpbnB1dFxuICB0aHlJbnB1dFxuICBbbmFtZV09XCJuYW1lXCJcbiAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3RoeUF1dG9mb2N1c109XCJhdXRvRm9jdXNcIlxuICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAobmdNb2RlbENoYW5nZSk9XCJzZWFyY2hNb2RlbENoYW5nZSgpXCJcbiAgKGZvY3VzKT1cIiFmb2N1c2VkID8gKGZvY3VzZWQgPSB0cnVlKSA6IG51bGxcIlxuICBbdGh5U2l6ZV09XCJ0aHlTaXplXCJcbiAgdGFiaW5kZXg9XCItMVwiIC8+XG5AaWYgKGljb25Qb3NpdGlvbiA9PT0gJ2FmdGVyJykge1xuICA8ZGl2IGNsYXNzPVwiaW5wdXQtYXBwZW5kIGlucHV0LWFwcGVuZC1kaXZpZGVyXCI+XG4gICAgQGlmIChzZWFyY2hUZXh0KSB7XG4gICAgICA8YSBjbGFzcz1cImNsb3NlXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJjbGVhclNlYXJjaFRleHQoJGV2ZW50KVwiPlxuICAgICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJjbG9zZVwiPjwvdGh5LWljb24+XG4gICAgICA8L2E+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8dGh5LWljb24gY2xhc3M9XCJ0ZXh0LXBsYWNlaG9sZGVyXCIgdGh5SWNvbk5hbWU9XCJzZWFyY2hcIj48L3RoeS1pY29uPlxuICAgIH1cbiAgPC9kaXY+XG59XG5cbkBpZiAoc2VhcmNoVGV4dCAmJiBpY29uUG9zaXRpb24gPT09ICdiZWZvcmUnKSB7XG4gIDxhIGNsYXNzPVwiY2xvc2UgaW5wdXQtYXBwZW5kXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJjbGVhclNlYXJjaFRleHQoJGV2ZW50KVwiPlxuICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cImNsb3NlXCI+PC90aHktaWNvbj5cbiAgPC9hPlxufVxuIl19