@seniorsistemas/angular-components 19.0.5 → 19.0.6

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 (439) hide show
  1. package/accordion/lib/accordion/accordion.component.d.ts +25 -0
  2. package/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.d.ts +60 -0
  3. package/alert/lib/alert/alert.component.d.ts +40 -0
  4. package/autocomplete/lib/autocomplete/autocomplete.component.d.ts +51 -0
  5. package/badge/lib/badge/badge.component.d.ts +20 -0
  6. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +46 -1
  7. package/breadcrumb/lib/breadcrumb/breadcrumb.component.d.ts +12 -0
  8. package/button/lib/button/button.component.d.ts +101 -0
  9. package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +24 -0
  10. package/card/lib/card/card.component.d.ts +18 -0
  11. package/chat/lib/chat/chat.component.d.ts +20 -2
  12. package/chat/lib/chat/components/chat-message/chat-message.component.d.ts +18 -2
  13. package/checkbox/lib/checkbox/checkbox.component.d.ts +23 -3
  14. package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +20 -0
  15. package/chips/lib/chips/chip-item/chip-item.component.d.ts +15 -0
  16. package/chips/lib/chips/chips/chips.component.d.ts +41 -0
  17. package/code-editor/lib/code-editor/code-editor.component.d.ts +40 -0
  18. package/collapse-link/lib/collapse-link/collapse-link.component.d.ts +18 -0
  19. package/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.d.ts +5 -0
  20. package/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.d.ts +19 -0
  21. package/content-generator/lib/content-generator/content-generator.component.d.ts +30 -0
  22. package/control-errors/lib/control-errors/control-errors.component.d.ts +36 -0
  23. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +36 -0
  24. package/currency/lib/currency.service.d.ts +15 -2
  25. package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +31 -0
  26. package/dialog/lib/src/dialog/dialog.component.d.ts +51 -0
  27. package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -2
  28. package/dialog/lib/src/dialog/services/internal-dialog.service.d.ts +1 -1
  29. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +6 -5
  30. package/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.d.ts +5 -0
  31. package/dynamic-form/dynamic-form/configurations/structure/fieldset.d.ts +14 -0
  32. package/dynamic-form/dynamic-form/configurations/structure/row.d.ts +67 -0
  33. package/dynamic-form/dynamic-form/configurations/structure/section.d.ts +8 -0
  34. package/dynamic-form/dynamic-form/configurations/structure/structure.d.ts +19 -0
  35. package/dynamic-form/dynamic-form/dynamic-form.component.d.ts +21 -1
  36. package/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +45 -0
  37. package/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +59 -0
  38. package/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.d.ts +55 -0
  39. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +35 -0
  40. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +17 -0
  41. package/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.d.ts +23 -0
  42. package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +66 -0
  43. package/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +15 -0
  44. package/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.d.ts +30 -0
  45. package/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.d.ts +47 -2
  46. package/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.d.ts +26 -0
  47. package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +18 -1
  48. package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +44 -0
  49. package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +112 -4
  50. package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +42 -3
  51. package/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.d.ts +48 -0
  52. package/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +62 -0
  53. package/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.d.ts +34 -0
  54. package/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.d.ts +63 -0
  55. package/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.d.ts +47 -1
  56. package/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +23 -0
  57. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +37 -1
  58. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +65 -2
  59. package/dynamic-form/public-api.d.ts +1 -0
  60. package/editable-overlay/lib/editable-overlay/editable-overlay.directive.d.ts +16 -0
  61. package/empty-state/lib/empty-state/empty-state.component.d.ts +59 -0
  62. package/esm2022/accordion/lib/accordion/accordion.component.mjs +26 -1
  63. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +61 -1
  64. package/esm2022/alert/lib/alert/alert.component.mjs +41 -1
  65. package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +52 -1
  66. package/esm2022/badge/lib/badge/badge.component.mjs +21 -1
  67. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +47 -2
  68. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +13 -1
  69. package/esm2022/button/lib/button/button.component.mjs +102 -1
  70. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +72 -47
  71. package/esm2022/card/lib/card/card.component.mjs +21 -6
  72. package/esm2022/chat/lib/chat/chat.component.mjs +23 -5
  73. package/esm2022/chat/lib/chat/components/chat-message/chat-message.component.mjs +20 -4
  74. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +24 -4
  75. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +22 -2
  76. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +17 -2
  77. package/esm2022/chips/lib/chips/chips/chips.component.mjs +42 -1
  78. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +41 -1
  79. package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +19 -1
  80. package/esm2022/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.mjs +6 -1
  81. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +20 -1
  82. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +31 -1
  83. package/esm2022/control-errors/lib/control-errors/control-errors.component.mjs +37 -1
  84. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +37 -1
  85. package/esm2022/currency/lib/currency.service.mjs +21 -8
  86. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +32 -1
  87. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +66 -11
  88. package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -10
  89. package/esm2022/dialog/lib/src/dialog/services/internal-dialog.service.mjs +3 -3
  90. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +1 -1
  91. package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.mjs +2 -0
  92. package/esm2022/dynamic-form/dynamic-form/configurations/structure/fieldset.mjs +1 -1
  93. package/esm2022/dynamic-form/dynamic-form/configurations/structure/row.mjs +1 -1
  94. package/esm2022/dynamic-form/dynamic-form/configurations/structure/section.mjs +1 -1
  95. package/esm2022/dynamic-form/dynamic-form/configurations/structure/structure.mjs +1 -1
  96. package/esm2022/dynamic-form/dynamic-form/dynamic-form.component.mjs +22 -2
  97. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +1 -1
  98. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +1 -1
  99. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.mjs +1 -1
  100. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.mjs +1 -1
  101. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +1 -1
  102. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.mjs +1 -1
  103. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +1 -1
  104. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +1 -1
  105. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.mjs +1 -1
  106. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.mjs +1 -1
  107. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +1 -1
  108. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
  109. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +1 -2
  110. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
  111. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
  112. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.mjs +1 -1
  113. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.mjs +1 -1
  114. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +6 -1
  115. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.mjs +1 -1
  116. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.mjs +1 -1
  117. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +1 -1
  118. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.mjs +1 -1
  119. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +1 -1
  120. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +3 -3
  121. package/esm2022/dynamic-form/public-api.mjs +2 -2
  122. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.directive.mjs +17 -1
  123. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +60 -1
  124. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +25 -5
  125. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +48 -1
  126. package/esm2022/gantt/lib/gantt/gantt.component.mjs +32 -1
  127. package/esm2022/global-search/lib/global-search/global-search.component.mjs +30 -1
  128. package/esm2022/grid-menu/lib/grid-menu/grid-menu.component.mjs +40 -1
  129. package/esm2022/help-popover/lib/help-popover/help-popover.directive.mjs +83 -27
  130. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +40 -3
  131. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +18 -2
  132. package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +33 -4
  133. package/esm2022/inline-edit/lib/inline-edit/inline-edit.component.mjs +16 -1
  134. package/esm2022/insights/lib/insights/insights.component.mjs +23 -1
  135. package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +21 -1
  136. package/esm2022/kanban/lib/kanban/kanban.component.mjs +34 -16
  137. package/esm2022/label-value/lib/label-value/label-value.component.mjs +14 -1
  138. package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +37 -1
  139. package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +24 -1
  140. package/esm2022/locale/lib/locale/locale.service.mjs +8 -1
  141. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +17 -1
  142. package/esm2022/mask/lib/mask/mask-formatter.pipe.mjs +13 -1
  143. package/esm2022/mouse-events/lib/mouse-events/double-click.directive.mjs +16 -3
  144. package/esm2022/mouse-events/lib/mouse-events/long-press.directive.mjs +24 -10
  145. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +20 -1
  146. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +32 -12
  147. package/esm2022/numeric/lib/numeric.pipe.mjs +16 -1
  148. package/esm2022/numeric/lib/numeric.service.mjs +21 -1
  149. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +9 -6
  150. package/esm2022/object-card/lib/object-card/object-card.component.mjs +24 -1
  151. package/esm2022/optional-fields/editor/editor-field.mjs +1 -1
  152. package/esm2022/paginator/lib/paginator/paginator.component.mjs +20 -1
  153. package/esm2022/panel/lib/panel/panel.component.mjs +44 -23
  154. package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +25 -1
  155. package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +54 -1
  156. package/esm2022/picklist/lib/picklist/picklist.component.mjs +33 -2
  157. package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +29 -34
  158. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +86 -2
  159. package/esm2022/progressbar/lib/progressbar/progressbar.component.mjs +53 -3
  160. package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +28 -1
  161. package/esm2022/radio-button/lib/radio-button-group/radio-button-group.component.mjs +27 -1
  162. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +39 -7
  163. package/esm2022/select/lib/select/select.component.mjs +35 -1
  164. package/esm2022/select-button/lib/select-button/select-button.component.mjs +35 -1
  165. package/esm2022/shared/lib/shared/border-button/border-button.component.mjs +11 -3
  166. package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +54 -1
  167. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +76 -36
  168. package/esm2022/slider/lib/slider/slider.component.mjs +90 -9
  169. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +25 -4
  170. package/esm2022/split-button/lib/split-button/split-button.component.mjs +24 -2
  171. package/esm2022/star-rating/star-rating/star-rating.component.mjs +17 -1
  172. package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +32 -10
  173. package/esm2022/stepper/lib/stepper/stepper.component.mjs +20 -1
  174. package/esm2022/structure/lib/structure/footer.component.mjs +11 -1
  175. package/esm2022/switch/lib/switch/switch.component.mjs +22 -2
  176. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +16 -1
  177. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +29 -3
  178. package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +33 -2
  179. package/esm2022/tabs/lib/tabs/tabs.component.mjs +35 -3
  180. package/esm2022/template/lib/template/template.directive.mjs +14 -2
  181. package/esm2022/text-area/lib/text-area/text-area.component.mjs +28 -1
  182. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +25 -1
  183. package/esm2022/thumbnails/lib/thumbnails/thumbnails.component.mjs +28 -3
  184. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +30 -1
  185. package/esm2022/tile/lib/tile/tile.component.mjs +26 -1
  186. package/esm2022/timeline/lib/timeline/timeline.component.mjs +26 -3
  187. package/esm2022/toast/lib/toast/toast.component.mjs +24 -4
  188. package/esm2022/token-list/lib/token-list/token-list.component.mjs +22 -1
  189. package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +66 -1
  190. package/esm2022/topbar/lib/topbar/topbar.component.mjs +18 -1
  191. package/esm2022/tree/lib/tree/tree.component.mjs +28 -1
  192. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +47 -1
  193. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +85 -0
  194. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  195. package/fesm2022/seniorsistemas-angular-components-alert.mjs +40 -0
  196. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  197. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +51 -0
  198. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
  199. package/fesm2022/seniorsistemas-angular-components-badge.mjs +20 -0
  200. package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
  201. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +46 -1
  202. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  203. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +12 -0
  204. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  205. package/fesm2022/seniorsistemas-angular-components-button.mjs +101 -0
  206. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  207. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +71 -46
  208. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  209. package/fesm2022/seniorsistemas-angular-components-card.mjs +19 -4
  210. package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
  211. package/fesm2022/seniorsistemas-angular-components-chat.mjs +39 -5
  212. package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
  213. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +21 -1
  214. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  215. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +23 -3
  216. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  217. package/fesm2022/seniorsistemas-angular-components-chips.mjs +57 -1
  218. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  219. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +40 -0
  220. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  221. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +18 -0
  222. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
  223. package/fesm2022/seniorsistemas-angular-components-common.mjs +5 -0
  224. package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
  225. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +19 -0
  226. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
  227. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +30 -0
  228. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  229. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +36 -0
  230. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
  231. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +36 -0
  232. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  233. package/fesm2022/seniorsistemas-angular-components-currency.mjs +19 -6
  234. package/fesm2022/seniorsistemas-angular-components-currency.mjs.map +1 -1
  235. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +31 -0
  236. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
  237. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +74 -16
  238. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  239. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +29 -4
  240. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  241. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +16 -0
  242. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
  243. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +59 -0
  244. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  245. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +21 -1
  246. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  247. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +47 -0
  248. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  249. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +31 -0
  250. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  251. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +29 -0
  252. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  253. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +39 -0
  254. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
  255. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +80 -24
  256. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  257. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +38 -1
  258. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  259. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +17 -1
  260. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
  261. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +30 -1
  262. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  263. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +15 -0
  264. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  265. package/fesm2022/seniorsistemas-angular-components-insights.mjs +22 -0
  266. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
  267. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +20 -0
  268. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  269. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +28 -10
  270. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  271. package/fesm2022/seniorsistemas-angular-components-label-value.mjs +13 -0
  272. package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
  273. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +59 -0
  274. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  275. package/fesm2022/seniorsistemas-angular-components-locale.mjs +7 -0
  276. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  277. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +16 -0
  278. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
  279. package/fesm2022/seniorsistemas-angular-components-mask.mjs +12 -0
  280. package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
  281. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +35 -8
  282. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
  283. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +19 -0
  284. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  285. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +31 -11
  286. package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
  287. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +8 -5
  288. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  289. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +35 -0
  290. package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
  291. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +23 -0
  292. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  293. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -1
  294. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +19 -0
  295. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  296. package/fesm2022/seniorsistemas-angular-components-panel.mjs +39 -18
  297. package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
  298. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +77 -0
  299. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
  300. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +32 -1
  301. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  302. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +28 -33
  303. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  304. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +85 -1
  305. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  306. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +52 -2
  307. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
  308. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +53 -0
  309. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
  310. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +36 -4
  311. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  312. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +34 -0
  313. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  314. package/fesm2022/seniorsistemas-angular-components-select.mjs +34 -0
  315. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  316. package/fesm2022/seniorsistemas-angular-components-shared.mjs +9 -1
  317. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  318. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +53 -0
  319. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  320. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +71 -31
  321. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
  322. package/fesm2022/seniorsistemas-angular-components-slider.mjs +89 -8
  323. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  324. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +24 -3
  325. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  326. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +22 -0
  327. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  328. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +16 -0
  329. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  330. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +30 -8
  331. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  332. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +19 -0
  333. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
  334. package/fesm2022/seniorsistemas-angular-components-structure.mjs +10 -0
  335. package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
  336. package/fesm2022/seniorsistemas-angular-components-switch.mjs +20 -0
  337. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  338. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +28 -2
  339. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  340. package/fesm2022/seniorsistemas-angular-components-table.mjs +15 -0
  341. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  342. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +65 -2
  343. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
  344. package/fesm2022/seniorsistemas-angular-components-template.mjs +13 -1
  345. package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
  346. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +27 -0
  347. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  348. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +24 -0
  349. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  350. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +26 -1
  351. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
  352. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +29 -0
  353. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  354. package/fesm2022/seniorsistemas-angular-components-tile.mjs +25 -0
  355. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  356. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +25 -2
  357. package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
  358. package/fesm2022/seniorsistemas-angular-components-toast.mjs +22 -2
  359. package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
  360. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +21 -0
  361. package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
  362. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +65 -0
  363. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  364. package/fesm2022/seniorsistemas-angular-components-topbar.mjs +17 -0
  365. package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
  366. package/fesm2022/seniorsistemas-angular-components-tree.mjs +27 -0
  367. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  368. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +46 -0
  369. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  370. package/fieldset/lib/fieldset/fieldset.component.d.ts +23 -3
  371. package/file-picker/lib/file-picker/file-picker.component.d.ts +47 -0
  372. package/gantt/lib/gantt/gantt.component.d.ts +31 -0
  373. package/global-search/lib/global-search/global-search.component.d.ts +29 -0
  374. package/grid-menu/lib/grid-menu/grid-menu.component.d.ts +39 -0
  375. package/help-popover/lib/help-popover/help-popover.directive.d.ts +67 -17
  376. package/image-cropper/lib/image-cropper/image-cropper.component.d.ts +38 -0
  377. package/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.d.ts +15 -0
  378. package/info-sign/lib/info-sign/info-sign.directive.d.ts +30 -1
  379. package/inline-edit/lib/inline-edit/inline-edit.component.d.ts +15 -0
  380. package/insights/lib/insights/insights.component.d.ts +22 -0
  381. package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +20 -0
  382. package/kanban/lib/kanban/kanban.component.d.ts +25 -5
  383. package/label-value/lib/label-value/label-value.component.d.ts +13 -0
  384. package/loading-state/lib/loading-state/loading-state.component.d.ts +36 -0
  385. package/loading-state/lib/loading-state/loading-state.directive.d.ts +23 -0
  386. package/locale/lib/locale/locale.service.d.ts +7 -0
  387. package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +16 -0
  388. package/mask/lib/mask/mask-formatter.pipe.d.ts +12 -0
  389. package/mouse-events/lib/mouse-events/double-click.directive.d.ts +13 -0
  390. package/mouse-events/lib/mouse-events/long-press.directive.d.ts +16 -2
  391. package/navigation-button/lib/navigation-button/navigation-button.component.d.ts +19 -0
  392. package/number-input/lib/number-input/number-input.directive.d.ts +19 -1
  393. package/numeric/lib/numeric.pipe.d.ts +15 -0
  394. package/numeric/lib/numeric.service.d.ts +20 -0
  395. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +5 -4
  396. package/object-card/lib/object-card/object-card.component.d.ts +23 -0
  397. package/optional-fields/editor/editor-field.d.ts +19 -0
  398. package/package.json +12 -12
  399. package/paginator/lib/paginator/paginator.component.d.ts +19 -0
  400. package/panel/lib/panel/panel.component.d.ts +24 -3
  401. package/password-strength/lib/password-strength/password-strength.component.d.ts +24 -0
  402. package/password-strength/lib/password-strength/password-strength.directive.d.ts +53 -0
  403. package/picklist/lib/picklist/picklist.component.d.ts +29 -0
  404. package/pin-code-field/lib/pin-code-field/pin-code-field.component.d.ts +28 -33
  405. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +85 -1
  406. package/progressbar/lib/progressbar/progressbar.component.d.ts +50 -0
  407. package/radio-button/lib/radio-button/radio-button.component.d.ts +27 -0
  408. package/radio-button/lib/radio-button-group/radio-button-group.component.d.ts +26 -0
  409. package/rating-scale/lib/rating-scale/rating-scale.component.d.ts +30 -2
  410. package/select/lib/select/select.component.d.ts +34 -0
  411. package/select-button/lib/select-button/select-button.component.d.ts +34 -0
  412. package/shared/lib/shared/border-button/border-button.component.d.ts +10 -2
  413. package/sidebar/lib/sidebar/sidebar.component.d.ts +53 -0
  414. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +53 -2
  415. package/slider/lib/slider/slider.component.d.ts +72 -0
  416. package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +18 -0
  417. package/split-button/lib/split-button/split-button.component.d.ts +22 -0
  418. package/star-rating/star-rating/star-rating.component.d.ts +16 -0
  419. package/stats-card/lib/stats-card/stats-card.component.d.ts +28 -0
  420. package/stepper/lib/stepper/stepper.component.d.ts +19 -0
  421. package/structure/lib/structure/footer.component.d.ts +10 -0
  422. package/switch/lib/switch/switch.component.d.ts +20 -0
  423. package/table/lib/table/table-column/table-columns.component.d.ts +15 -0
  424. package/table-header/lib/table-header/table-header-checkbox.component.d.ts +18 -0
  425. package/tabs/lib/tab-item/tab-item.component.d.ts +31 -0
  426. package/tabs/lib/tabs/tabs.component.d.ts +28 -0
  427. package/template/lib/template/template.directive.d.ts +12 -0
  428. package/text-area/lib/text-area/text-area.component.d.ts +27 -0
  429. package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +24 -0
  430. package/thumbnails/lib/thumbnails/thumbnails.component.d.ts +27 -2
  431. package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +29 -0
  432. package/tile/lib/tile/tile.component.d.ts +25 -0
  433. package/timeline/lib/timeline/timeline.component.d.ts +24 -0
  434. package/toast/lib/toast/toast.component.d.ts +22 -2
  435. package/token-list/lib/token-list/token-list.component.d.ts +21 -0
  436. package/tooltip/lib/tooltip/tooltip.directive.d.ts +65 -0
  437. package/topbar/lib/topbar/topbar.component.d.ts +17 -0
  438. package/tree/lib/tree/tree.component.d.ts +27 -0
  439. package/workspace-switch/lib/workspace-switch/workspace-switch.component.d.ts +46 -0
@@ -2,17 +2,70 @@ import { Directive, HostListener, Input, } from '@angular/core';
2
2
  import { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';
3
3
  import { PasswordStrengthComponent } from './password-strength.component';
4
4
  import * as i0 from "@angular/core";
5
+ /**
6
+ * @description Diretiva que adiciona o comportamento de verificação de força de senha
7
+ * a um campo de input existente. Ao receber foco ou a cada tecla digitada, exibe o
8
+ * componente {@link PasswordStrengthComponent} posicionado dinamicamente ao redor do campo,
9
+ * fornecendo feedback visual sobre a força da senha informada.
10
+ *
11
+ * @example
12
+ * ```html
13
+ * <input
14
+ * type="password"
15
+ * [sPasswordStrength]="true"
16
+ * passwordStrengthDescription="A senha deve conter letras maiúsculas, números e caracteres especiais."
17
+ * [passwordStrengthValidation]="myValidator" />
18
+ * ```
19
+ *
20
+ * @category Inputs
21
+ */
5
22
  export class PasswordStrengthDirective {
6
23
  elementRef;
7
24
  appRef;
8
25
  componentFactoryResolver;
9
26
  injector;
27
+ /**
28
+ * @description Habilita ou desabilita o comportamento da diretiva.
29
+ * Quando `false`, o indicador de força não será exibido.
30
+ *
31
+ * @default true
32
+ */
10
33
  enabled = true;
34
+ /**
35
+ * @description Função customizada de validação da força da senha.
36
+ * Recebe o conteúdo atual do campo e deve retornar um valor do tipo {@link PasswordStrengths}
37
+ * (`'veryWeak'`, `'weak'`, `'medium'` ou `'strong'`).
38
+ * Se não informada, utiliza a validação padrão baseada em critérios de comprimento,
39
+ * letras maiúsculas/minúsculas, números e caracteres especiais.
40
+ */
11
41
  passwordStrengthValidation;
42
+ /**
43
+ * @description Posição preferencial onde o indicador de força será exibido em relação ao campo.
44
+ * Aceita `'right'`, `'left'` ou `'top'`. O componente tenta posicionar automaticamente
45
+ * em outro lado caso não haja espaço suficiente na posição especificada.
46
+ *
47
+ * @default 'right'
48
+ */
12
49
  passwordStrengthPosition = 'right';
50
+ /**
51
+ * @description Texto personalizado exibido quando a senha é classificada como fraca.
52
+ * Se não informado, utiliza a tradução padrão.
53
+ */
13
54
  passwordStrengthWeakTitle;
55
+ /**
56
+ * @description Texto personalizado exibido quando a senha é classificada como média.
57
+ * Se não informado, utiliza a tradução padrão.
58
+ */
14
59
  passwordStrengthMediumTitle;
60
+ /**
61
+ * @description Texto personalizado exibido quando a senha é classificada como forte.
62
+ * Se não informado, utiliza a tradução padrão.
63
+ */
15
64
  passwordStrengthStrongTitle;
65
+ /**
66
+ * @description Descrição complementar exibida no indicador de força de senha,
67
+ * orientando o usuário sobre os requisitos da senha. Campo obrigatório.
68
+ */
16
69
  passwordStrengthDescription;
17
70
  componentRef;
18
71
  constructor(elementRef, appRef,
@@ -207,4 +260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
207
260
  type: HostListener,
208
261
  args: ['blur']
209
262
  }] } });
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtc3RyZW5ndGguZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3NyYy9saWIvcGFzc3dvcmQtc3RyZW5ndGgvcGFzc3dvcmQtc3RyZW5ndGguZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLSCxTQUFTLEVBR1QsWUFBWSxFQUVaLEtBQUssR0FFUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFPMUUsTUFBTSxPQUFPLHlCQUF5QjtJQXlCYjtJQUNBO0lBRUE7SUFDQTtJQTNCZCxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBR2YsMEJBQTBCLENBQTBDO0lBR3BFLHdCQUF3QixHQUE4QixPQUFPLENBQUM7SUFHOUQseUJBQXlCLENBQVU7SUFHbkMsMkJBQTJCLENBQVU7SUFHckMsMkJBQTJCLENBQVU7SUFHckMsMkJBQTJCLENBQVU7SUFFcEMsWUFBWSxDQUFrRDtJQUV0RSxZQUNxQixVQUFzQixFQUN0QixNQUFzQjtJQUN2QyxzREFBc0Q7SUFDckMsd0JBQWtELEVBQ2xELFFBQWtCO1FBSmxCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFFdEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQ3BDLENBQUM7SUFFRyxRQUFRO1FBQ1gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUlNLE9BQU87UUFDVixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBRTFELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDO1FBQzlDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNiLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7Z0JBQ2xDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN6RSxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixTQUFTLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNMLENBQUM7SUFHTSxNQUFNO1FBQ1QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVPLHNCQUFzQjtRQUMxQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsdUJBQXVCLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUMxRyxJQUFJLENBQUMsWUFBWSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRCxNQUFNLE9BQU8sR0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQWlDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztZQUNqRyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsc0NBQXNDLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNoQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQzlDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUdBQWlHO0lBQ3pGLHNDQUFzQztRQUMxQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1FBQ3RFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUM7UUFDMUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1FBRTFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTNGLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixNQUFNLGdCQUFnQixHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDdEMsTUFBTSxlQUFlLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNyQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFFdEIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLE1BQU0sY0FBYyxHQUFnQyxFQUFFLENBQUM7UUFFdkQsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pCLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDeEcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBRUQsUUFBUSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNULE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztvQkFDckIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBRXZCLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO29CQUVyQyxJQUNJLFFBQVEsSUFBSSxnQkFBZ0IsR0FBRyxTQUFTO3dCQUN4QyxVQUFVLEdBQUcseUJBQXlCO3dCQUN0QyxTQUFTLEdBQUcseUJBQXlCLEVBQ3ZDLENBQUM7d0JBQ0MsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE9BQU8sQ0FBQzt3QkFDeEMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDM0IsTUFBTTtvQkFDVixDQUFDO29CQUVELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztvQkFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztvQkFDekUsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFDbEIsTUFBTTtnQkFDVixDQUFDO2dCQUNELEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDWCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBRXJELElBQUksVUFBVSxJQUFJLGVBQWUsR0FBRyxTQUFTLEVBQUUsQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE1BQU0sQ0FBQzt3QkFDdkMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDN0IsTUFBTTtvQkFDVixDQUFDO29CQUVELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDeEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUM3RCxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUNsQixNQUFNO2dCQUNWLENBQUM7Z0JBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNWLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQztvQkFFdkIsSUFBSSxTQUFTLElBQUksZUFBZSxHQUFHLFNBQVMsRUFBRSxDQUFDO3dCQUMzQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO3dCQUN0QyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUM1QixNQUFNO29CQUNWLENBQUM7b0JBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN4RSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQzVELFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ2xCLE1BQU07Z0JBQ1YsQ0FBQztnQkFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNOLE1BQU07Z0JBQ1YsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1FBQ3hFLENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsMEJBQTBCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9GLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsT0FBZTtRQUNwQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztRQUM5QixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDeEIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztRQUUxQixNQUFNLGlCQUFpQixHQUFHO1lBQ3RCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGFBQWEsRUFBRSxZQUFZO1lBQzNCLGFBQWEsRUFBRSxZQUFZO1lBQzNCLHlCQUF5QixFQUFFLG9CQUFvQjtTQUNsRCxDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEMsTUFBTSxFQUFFLENBQUM7UUFDYixDQUFDO1FBRUQsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDckMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sRUFBRSxDQUFDO1lBQ2IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLEdBQUcsYUFBYSxFQUFFLENBQUM7WUFDekIsT0FBTyxVQUFVLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBQzNCLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRyxlQUFlLEVBQUUsQ0FBQztZQUMzQixPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzt3R0FwTlEseUJBQXlCOzRGQUF6Qix5QkFBeUI7OzRGQUF6Qix5QkFBeUI7a0JBSHJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtpQkFDbEM7MEtBR1UsT0FBTztzQkFEYixLQUFLO3VCQUFDLG1CQUFtQjtnQkFJbkIsMEJBQTBCO3NCQURoQyxLQUFLO2dCQUlDLHdCQUF3QjtzQkFEOUIsS0FBSztnQkFJQyx5QkFBeUI7c0JBRC9CLEtBQUs7Z0JBSUMsMkJBQTJCO3NCQURqQyxLQUFLO2dCQUlDLDJCQUEyQjtzQkFEakMsS0FBSztnQkFJQywyQkFBMkI7c0JBRGpDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQW1CbEIsT0FBTztzQkFGYixZQUFZO3VCQUFDLE9BQU87O3NCQUNwQixZQUFZO3VCQUFDLE9BQU87Z0JBbUJkLE1BQU07c0JBRFosWUFBWTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICAvLyBOT1NPTkFSIC0gJ0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcicgaXMgZGVwcmVjYXRlZC5cbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5cbmltcG9ydCB7IFBhc3N3b3JkU3RyZW5ndGhDb21wb25lbnQgfSBmcm9tICcuL3Bhc3N3b3JkLXN0cmVuZ3RoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZFN0cmVuZ3RoUG9zaXRpb25zIH0gZnJvbSAnLi90eXBlcy9wYXNzd29yZC1wb3NpdGlvbnMnO1xuaW1wb3J0IHsgUGFzc3dvcmRTdHJlbmd0aHMgfSBmcm9tICcuL3R5cGVzL3Bhc3N3b3JkLXN0cmVuZ3Rocyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3NQYXNzd29yZFN0cmVuZ3RoXScsXG59KVxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkU3RyZW5ndGhEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgnc1Bhc3N3b3JkU3RyZW5ndGgnKVxuICAgIHB1YmxpYyBlbmFibGVkID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhWYWxpZGF0aW9uPzogKGNvbnRlbnQ6IHN0cmluZykgPT4gUGFzc3dvcmRTdHJlbmd0aHM7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwYXNzd29yZFN0cmVuZ3RoUG9zaXRpb246IFBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbnMgPSAncmlnaHQnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aFdlYWtUaXRsZT86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhNZWRpdW1UaXRsZT86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhTdHJvbmdUaXRsZT86IHN0cmluZztcblxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhEZXNjcmlwdGlvbiE6IHN0cmluZztcblxuICAgIHByaXZhdGUgY29tcG9uZW50UmVmPzogbnVsbCB8IENvbXBvbmVudFJlZjxQYXNzd29yZFN0cmVuZ3RoQ29tcG9uZW50PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgLy8gTk9TT05BUiAtICdDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXInIGlzIGRlcHJlY2F0ZWQuXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVByb3BlcnRpZXMoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXl1cCcpXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIHB1YmxpYyBvbkZvY3VzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPz8gJyc7XG5cbiAgICAgICAgdGhpcy5jcmVhdGVQYXNzd29yZFN0cmVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZTtcbiAgICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFzc3dvcmRTdHJlbmd0aFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQudXBkYXRlSW5kaWNhdG9ycyh0aGlzLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGF0aW9uKGNvbnRlbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC51cGRhdGVJbmRpY2F0b3JzKCd2ZXJ5V2VhaycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gICAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95UGFzc3dvcmRTdHJlbmd0aCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUGFzc3dvcmRTdHJlbmd0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiBpc051bGxPclVuZGVmaW5lZCh0aGlzLmNvbXBvbmVudFJlZikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShQYXNzd29yZFN0cmVuZ3RoQ29tcG9uZW50KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gY29tcG9uZW50RmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3Rvcik7XG4gICAgICAgICAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgICAgIGNvbnN0IGRvbUVsZW0gPSAodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9tRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnNldFBhc3N3b3JkU3RyZW5ndGhDb21wb25lbnRQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dQYXNzd29yZFN0cmVuZ3RoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dQYXNzd29yZFN0cmVuZ3RoKCkge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTk9TT05BUiAtIFJlZmFjdG9yIHRoaXMgZnVuY3Rpb24gdG8gcmVkdWNlIGl0cyBDb2duaXRpdmUgQ29tcGxleGl0eSBmcm9tIDE2IHRvIHRoZSAxNSBhbGxvd2VkLlxuICAgIHByaXZhdGUgc2V0UGFzc3dvcmRTdHJlbmd0aENvbXBvbmVudFByb3BlcnRpZXMoKSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmNvbXBvbmVudFJlZikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnBvc2l0aW9uID0gdGhpcy5wYXNzd29yZFN0cmVuZ3RoUG9zaXRpb247XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLndlYWtUaXRsZSA9IHRoaXMucGFzc3dvcmRTdHJlbmd0aFdlYWtUaXRsZTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubWVkaXVtVGl0bGUgPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhNZWRpdW1UaXRsZTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc3Ryb25nVGl0bGUgPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTdHJvbmdUaXRsZTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuZGVzY3JpcHRpb24gPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhEZXNjcmlwdGlvbjtcblxuICAgICAgICBjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgbWFyZ2luID0gMjA7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWZIZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWZXaWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgY29uc3Qgc2FmZVNwYWNlID0gMTUwO1xuXG4gICAgICAgIGxldCBwb3NpdGlvbmVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGludmFsaWRPcHRpb25zOiBQYXNzd29yZFN0cmVuZ3RoUG9zaXRpb25zW10gPSBbXTtcblxuICAgICAgICB3aGlsZSAoIXBvc2l0aW9uZWQpIHtcbiAgICAgICAgICAgIGlmIChpbnZhbGlkT3B0aW9ucy5pbmNsdWRlcygndG9wJykgJiYgaW52YWxpZE9wdGlvbnMuaW5jbHVkZXMoJ3JpZ2h0JykgJiYgaW52YWxpZE9wdGlvbnMuaW5jbHVkZXMoJ2xlZnQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveVBhc3N3b3JkU3RyZW5ndGgoKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNwYWNlIHRvIHNob3cgcGFzc3dvcmQgc3RyZW5ndGgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3RvcCc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9wU2hpZnQgPSB0b3A7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0U2hpZnQgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIC0gcmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRTaGlmdCA9IGxlZnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgTUlOX0hPUklaT05UQUxfU0FGRV9TUEFDRSA9IDUwO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcFNoaWZ0IDw9IGVsZW1lbnRSZWZIZWlnaHQgKyBzYWZlU3BhY2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0U2hpZnQgPCBNSU5fSE9SSVpPTlRBTF9TQUZFX1NQQUNFIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U2hpZnQgPCBNSU5fSE9SSVpPTlRBTF9TQUZFX1NQQUNFXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoUG9zaXRpb24gPSAncmlnaHQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZE9wdGlvbnMucHVzaCgndG9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQodG9wIC0gbWFyZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubGVmdCA9IE1hdGgucm91bmQoZWxlbWVudFJlZldpZHRoIC8gMiArIGxlZnQpO1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0Jzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByaWdodFNoaWZ0ID0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCAtIHJpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyaWdodFNoaWZ0IDw9IGVsZW1lbnRSZWZXaWR0aCArIHNhZmVTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoUG9zaXRpb24gPSAnbGVmdCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT3B0aW9ucy5wdXNoKCdyaWdodCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS50b3AgPSBNYXRoLnJvdW5kKHRvcCArIGVsZW1lbnRSZWZIZWlnaHQgLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubGVmdCA9IE1hdGgucm91bmQocmlnaHQgKyBtYXJnaW4pO1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2xlZnQnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRTaGlmdCA9IGxlZnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRTaGlmdCA8PSBlbGVtZW50UmVmV2lkdGggKyBzYWZlU3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFBvc2l0aW9uID0gJ3RvcCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT3B0aW9ucy5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQodG9wICsgZWxlbWVudFJlZkhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZChsZWZ0IC0gbWFyZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UucG9zaXRpb24gPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVQcm9wZXJ0aWVzKCkge1xuICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGF0aW9uID0gdGhpcy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRhdGlvbiB8fCB0aGlzLmRlZmF1bHRWYWxpZGF0b3I7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95UGFzc3dvcmRTdHJlbmd0aCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aGlzLmFwcFJlZi5kZXRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVmYXVsdFZhbGlkYXRvcihjb250ZW50OiBzdHJpbmcpOiBQYXNzd29yZFN0cmVuZ3RocyB7XG4gICAgICAgIGxldCBwb2ludHMgPSAwO1xuICAgICAgICBjb25zdCBQQVNTV09SRF9NSU5fTEVOR1RIID0gNjtcbiAgICAgICAgY29uc3QgV0VFS19DUklURVJJQSA9IDE7XG4gICAgICAgIGNvbnN0IE1FRElVTV9DUklURVJJQSA9IDQ7XG4gICAgICAgIGNvbnN0IFNUUk9OR19DUklURVJJQSA9IDU7XG5cbiAgICAgICAgY29uc3QgcmVnRXhwVmFsaWRhdGlvbnMgPSBbXG4gICAgICAgICAgICAvKD89LipcXGQpLywgLy8gbnVtYmVyXG4gICAgICAgICAgICAvKD89LipbYS16XSkvLCAvLyBsb3dlcmNhc2VcbiAgICAgICAgICAgIC8oPz0uKltBLVpdKS8sIC8vIHVwcGVyY2FzZVxuICAgICAgICAgICAgLyg/PS4qWyFAIyQlJiouXFxcXD0rXn4tXSkvLCAvLyBzcGVjaWFsIGNoYXJhY3RlclxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA+PSBQQVNTV09SRF9NSU5fTEVOR1RIKSB7XG4gICAgICAgICAgICBwb2ludHMrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ0V4cFZhbGlkYXRpb25zLmZvckVhY2goKHZhbGlkYXRpb24pID0+IHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uLnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICBwb2ludHMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHBvaW50cyA8IFdFRUtfQ1JJVEVSSUEpIHtcbiAgICAgICAgICAgIHJldHVybiAndmVyeVdlYWsnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb2ludHMgPCBNRURJVU1fQ1JJVEVSSUEpIHtcbiAgICAgICAgICAgIHJldHVybiAnd2Vhayc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvaW50cyA8IFNUUk9OR19DUklURVJJQSkge1xuICAgICAgICAgICAgcmV0dXJuICdtZWRpdW0nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnc3Ryb25nJztcbiAgICB9XG59XG4iXX0=
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtc3RyZW5ndGguZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3NyYy9saWIvcGFzc3dvcmQtc3RyZW5ndGgvcGFzc3dvcmQtc3RyZW5ndGguZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLSCxTQUFTLEVBR1QsWUFBWSxFQUVaLEtBQUssR0FFUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFJMUU7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFJSCxNQUFNLE9BQU8seUJBQXlCO0lBNkRiO0lBQ0E7SUFFQTtJQUNBO0lBaEVyQjs7Ozs7T0FLRztJQUVJLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFFdEI7Ozs7OztPQU1HO0lBRUksMEJBQTBCLENBQTBDO0lBRTNFOzs7Ozs7T0FNRztJQUVJLHdCQUF3QixHQUE4QixPQUFPLENBQUM7SUFFckU7OztPQUdHO0lBRUkseUJBQXlCLENBQVU7SUFFMUM7OztPQUdHO0lBRUksMkJBQTJCLENBQVU7SUFFNUM7OztPQUdHO0lBRUksMkJBQTJCLENBQVU7SUFFNUM7OztPQUdHO0lBRUksMkJBQTJCLENBQVU7SUFFcEMsWUFBWSxDQUFrRDtJQUV0RSxZQUNxQixVQUFzQixFQUN0QixNQUFzQjtJQUN2QyxzREFBc0Q7SUFDckMsd0JBQWtELEVBQ2xELFFBQWtCO1FBSmxCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFFdEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQ3BDLENBQUM7SUFFRyxRQUFR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WUFBWTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICAvLyBOT1NPTkFSIC0gJ0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcicgaXMgZGVwcmVjYXRlZC5cbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5cbmltcG9ydCB7IFBhc3N3b3JkU3RyZW5ndGhDb21wb25lbnQgfSBmcm9tICcuL3Bhc3N3b3JkLXN0cmVuZ3RoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZFN0cmVuZ3RoUG9zaXRpb25zIH0gZnJvbSAnLi90eXBlcy9wYXNzd29yZC1wb3NpdGlvbnMnO1xuaW1wb3J0IHsgUGFzc3dvcmRTdHJlbmd0aHMgfSBmcm9tICcuL3R5cGVzL3Bhc3N3b3JkLXN0cmVuZ3Rocyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERpcmV0aXZhIHF1ZSBhZGljaW9uYSBvIGNvbXBvcnRhbWVudG8gZGUgdmVyaWZpY2HDp8OjbyBkZSBmb3LDp2EgZGUgc2VuaGFcbiAqIGEgdW0gY2FtcG8gZGUgaW5wdXQgZXhpc3RlbnRlLiBBbyByZWNlYmVyIGZvY28gb3UgYSBjYWRhIHRlY2xhIGRpZ2l0YWRhLCBleGliZSBvXG4gKiBjb21wb25lbnRlIHtAbGluayBQYXNzd29yZFN0cmVuZ3RoQ29tcG9uZW50fSBwb3NpY2lvbmFkbyBkaW5hbWljYW1lbnRlIGFvIHJlZG9yIGRvIGNhbXBvLFxuICogZm9ybmVjZW5kbyBmZWVkYmFjayB2aXN1YWwgc29icmUgYSBmb3LDp2EgZGEgc2VuaGEgaW5mb3JtYWRhLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aW5wdXRcbiAqICAgdHlwZT1cInBhc3N3b3JkXCJcbiAqICAgW3NQYXNzd29yZFN0cmVuZ3RoXT1cInRydWVcIlxuICogICBwYXNzd29yZFN0cmVuZ3RoRGVzY3JpcHRpb249XCJBIHNlbmhhIGRldmUgY29udGVyIGxldHJhcyBtYWnDunNjdWxhcywgbsO6bWVyb3MgZSBjYXJhY3RlcmVzIGVzcGVjaWFpcy5cIlxuICogICBbcGFzc3dvcmRTdHJlbmd0aFZhbGlkYXRpb25dPVwibXlWYWxpZGF0b3JcIiAvPlxuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IElucHV0c1xuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tzUGFzc3dvcmRTdHJlbmd0aF0nLFxufSlcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFN0cmVuZ3RoRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgb3UgZGVzYWJpbGl0YSBvIGNvbXBvcnRhbWVudG8gZGEgZGlyZXRpdmEuXG4gICAgICogUXVhbmRvIGBmYWxzZWAsIG8gaW5kaWNhZG9yIGRlIGZvcsOnYSBuw6NvIHNlcsOhIGV4aWJpZG8uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KCdzUGFzc3dvcmRTdHJlbmd0aCcpXG4gICAgcHVibGljIGVuYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZ1bsOnw6NvIGN1c3RvbWl6YWRhIGRlIHZhbGlkYcOnw6NvIGRhIGZvcsOnYSBkYSBzZW5oYS5cbiAgICAgKiBSZWNlYmUgbyBjb250ZcO6ZG8gYXR1YWwgZG8gY2FtcG8gZSBkZXZlIHJldG9ybmFyIHVtIHZhbG9yIGRvIHRpcG8ge0BsaW5rIFBhc3N3b3JkU3RyZW5ndGhzfVxuICAgICAqIChgJ3ZlcnlXZWFrJ2AsIGAnd2VhaydgLCBgJ21lZGl1bSdgIG91IGAnc3Ryb25nJ2ApLlxuICAgICAqIFNlIG7Do28gaW5mb3JtYWRhLCB1dGlsaXphIGEgdmFsaWRhw6fDo28gcGFkcsOjbyBiYXNlYWRhIGVtIGNyaXTDqXJpb3MgZGUgY29tcHJpbWVudG8sXG4gICAgICogbGV0cmFzIG1hacO6c2N1bGFzL21pbsO6c2N1bGFzLCBuw7ptZXJvcyBlIGNhcmFjdGVyZXMgZXNwZWNpYWlzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhWYWxpZGF0aW9uPzogKGNvbnRlbnQ6IHN0cmluZykgPT4gUGFzc3dvcmRTdHJlbmd0aHM7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUG9zacOnw6NvIHByZWZlcmVuY2lhbCBvbmRlIG8gaW5kaWNhZG9yIGRlIGZvcsOnYSBzZXLDoSBleGliaWRvIGVtIHJlbGHDp8OjbyBhbyBjYW1wby5cbiAgICAgKiBBY2VpdGEgYCdyaWdodCdgLCBgJ2xlZnQnYCBvdSBgJ3RvcCdgLiBPIGNvbXBvbmVudGUgdGVudGEgcG9zaWNpb25hciBhdXRvbWF0aWNhbWVudGVcbiAgICAgKiBlbSBvdXRybyBsYWRvIGNhc28gbsOjbyBoYWphIGVzcGHDp28gc3VmaWNpZW50ZSBuYSBwb3Npw6fDo28gZXNwZWNpZmljYWRhLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ3JpZ2h0J1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbjogUGFzc3dvcmRTdHJlbmd0aFBvc2l0aW9ucyA9ICdyaWdodCc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gcGVyc29uYWxpemFkbyBleGliaWRvIHF1YW5kbyBhIHNlbmhhIMOpIGNsYXNzaWZpY2FkYSBjb21vIGZyYWNhLlxuICAgICAqIFNlIG7Do28gaW5mb3JtYWRvLCB1dGlsaXphIGEgdHJhZHXDp8OjbyBwYWRyw6NvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhXZWFrVGl0bGU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gcGVyc29uYWxpemFkbyBleGliaWRvIHF1YW5kbyBhIHNlbmhhIMOpIGNsYXNzaWZpY2FkYSBjb21vIG3DqWRpYS5cbiAgICAgKiBTZSBuw6NvIGluZm9ybWFkbywgdXRpbGl6YSBhIHRyYWR1w6fDo28gcGFkcsOjby5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwYXNzd29yZFN0cmVuZ3RoTWVkaXVtVGl0bGU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gcGVyc29uYWxpemFkbyBleGliaWRvIHF1YW5kbyBhIHNlbmhhIMOpIGNsYXNzaWZpY2FkYSBjb21vIGZvcnRlLlxuICAgICAqIFNlIG7Do28gaW5mb3JtYWRvLCB1dGlsaXphIGEgdHJhZHXDp8OjbyBwYWRyw6NvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhc3N3b3JkU3RyZW5ndGhTdHJvbmdUaXRsZT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXNjcmnDp8OjbyBjb21wbGVtZW50YXIgZXhpYmlkYSBubyBpbmRpY2Fkb3IgZGUgZm9yw6dhIGRlIHNlbmhhLFxuICAgICAqIG9yaWVudGFuZG8gbyB1c3XDoXJpbyBzb2JyZSBvcyByZXF1aXNpdG9zIGRhIHNlbmhhLiBDYW1wbyBvYnJpZ2F0w7NyaW8uXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aERlc2NyaXB0aW9uITogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBjb21wb25lbnRSZWY/OiBudWxsIHwgQ29tcG9uZW50UmVmPFBhc3N3b3JkU3RyZW5ndGhDb21wb25lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICAvLyBOT1NPTkFSIC0gJ0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcicgaXMgZGVwcmVjYXRlZC5cbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlUHJvcGVydGllcygpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleXVwJylcbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgcHVibGljIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA/PyAnJztcblxuICAgICAgICB0aGlzLmNyZWF0ZVBhc3N3b3JkU3RyZW5ndGgoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlO1xuICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC51cGRhdGVJbmRpY2F0b3JzKHRoaXMucGFzc3dvcmRTdHJlbmd0aFZhbGlkYXRpb24oY29udGVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcG9uZW50LnVwZGF0ZUluZGljYXRvcnMoJ3ZlcnlXZWFrJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgICBwdWJsaWMgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3lQYXNzd29yZFN0cmVuZ3RoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQYXNzd29yZFN0cmVuZ3RoKCkge1xuICAgICAgICBpZiAodGhpcy5lbmFibGVkICYmIGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuY29tcG9uZW50UmVmKSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFBhc3N3b3JkU3RyZW5ndGhDb21wb25lbnQpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcbiAgICAgICAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgY29uc3QgZG9tRWxlbSA9ICh0aGlzLmNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb21FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFzc3dvcmRTdHJlbmd0aENvbXBvbmVudFByb3BlcnRpZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1Bhc3N3b3JkU3RyZW5ndGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1Bhc3N3b3JkU3RyZW5ndGgoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOT1NPTkFSIC0gUmVmYWN0b3IgdGhpcyBmdW5jdGlvbiB0byByZWR1Y2UgaXRzIENvZ25pdGl2ZSBDb21wbGV4aXR5IGZyb20gMTYgdG8gdGhlIDE1IGFsbG93ZWQuXG4gICAgcHJpdmF0ZSBzZXRQYXNzd29yZFN0cmVuZ3RoQ29tcG9uZW50UHJvcGVydGllcygpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuY29tcG9uZW50UmVmKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UucG9zaXRpb24gPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbjtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uud2Vha1RpdGxlID0gdGhpcy5wYXNzd29yZFN0cmVuZ3RoV2Vha1RpdGxlO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5tZWRpdW1UaXRsZSA9IHRoaXMucGFzc3dvcmRTdHJlbmd0aE1lZGl1bVRpdGxlO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zdHJvbmdUaXRsZSA9IHRoaXMucGFzc3dvcmRTdHJlbmd0aFN0cm9uZ1RpdGxlO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5kZXNjcmlwdGlvbiA9IHRoaXMucGFzc3dvcmRTdHJlbmd0aERlc2NyaXB0aW9uO1xuXG4gICAgICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBtYXJnaW4gPSAyMDtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlZkhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlZldpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICBjb25zdCBzYWZlU3BhY2UgPSAxNTA7XG5cbiAgICAgICAgbGV0IHBvc2l0aW9uZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaW52YWxpZE9wdGlvbnM6IFBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbnNbXSA9IFtdO1xuXG4gICAgICAgIHdoaWxlICghcG9zaXRpb25lZCkge1xuICAgICAgICAgICAgaWYgKGludmFsaWRPcHRpb25zLmluY2x1ZGVzKCd0b3AnKSAmJiBpbnZhbGlkT3B0aW9ucy5pbmNsdWRlcygncmlnaHQnKSAmJiBpbnZhbGlkT3B0aW9ucy5pbmNsdWRlcygnbGVmdCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95UGFzc3dvcmRTdHJlbmd0aCgpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc3BhY2UgdG8gc2hvdyBwYXNzd29yZCBzdHJlbmd0aCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMucGFzc3dvcmRTdHJlbmd0aFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndG9wJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3BTaGlmdCA9IHRvcDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmlnaHRTaGlmdCA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggLSByaWdodDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdFNoaWZ0ID0gbGVmdDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBNSU5fSE9SSVpPTlRBTF9TQUZFX1NQQUNFID0gNTA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wU2hpZnQgPD0gZWxlbWVudFJlZkhlaWdodCArIHNhZmVTcGFjZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRTaGlmdCA8IE1JTl9IT1JJWk9OVEFMX1NBRkVfU1BBQ0UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTaGlmdCA8IE1JTl9IT1JJWk9OVEFMX1NBRkVfU1BBQ0VcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbiA9ICdyaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT3B0aW9ucy5wdXNoKCd0b3AnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudG9wID0gTWF0aC5yb3VuZCh0b3AgLSBtYXJnaW4pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZChlbGVtZW50UmVmV2lkdGggLyAyICsgbGVmdCk7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0U2hpZnQgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIC0gcmlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0U2hpZnQgPD0gZWxlbWVudFJlZldpZHRoICsgc2FmZVNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhQb3NpdGlvbiA9ICdsZWZ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRPcHRpb25zLnB1c2goJ3JpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQodG9wICsgZWxlbWVudFJlZkhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZChyaWdodCArIG1hcmdpbik7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbGVmdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdFNoaWZ0ID0gbGVmdDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobGVmdFNoaWZ0IDw9IGVsZW1lbnRSZWZXaWR0aCArIHNhZmVTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoUG9zaXRpb24gPSAndG9wJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRPcHRpb25zLnB1c2goJ2xlZnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudG9wID0gTWF0aC5yb3VuZCh0b3AgKyBlbGVtZW50UmVmSGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmxlZnQgPSBNYXRoLnJvdW5kKGxlZnQgLSBtYXJnaW4pO1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5wb3NpdGlvbiA9IHRoaXMucGFzc3dvcmRTdHJlbmd0aFBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVByb3BlcnRpZXMoKSB7XG4gICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFZhbGlkYXRpb24gPSB0aGlzLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGF0aW9uIHx8IHRoaXMuZGVmYXVsdFZhbGlkYXRvcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lQYXNzd29yZFN0cmVuZ3RoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWZhdWx0VmFsaWRhdG9yKGNvbnRlbnQ6IHN0cmluZyk6IFBhc3N3b3JkU3RyZW5ndGhzIHtcbiAgICAgICAgbGV0IHBvaW50cyA9IDA7XG4gICAgICAgIGNvbnN0IFBBU1NXT1JEX01JTl9MRU5HVEggPSA2O1xuICAgICAgICBjb25zdCBXRUVLX0NSSVRFUklBID0gMTtcbiAgICAgICAgY29uc3QgTUVESVVNX0NSSVRFUklBID0gNDtcbiAgICAgICAgY29uc3QgU1RST05HX0NSSVRFUklBID0gNTtcblxuICAgICAgICBjb25zdCByZWdFeHBWYWxpZGF0aW9ucyA9IFtcbiAgICAgICAgICAgIC8oPz0uKlxcZCkvLCAvLyBudW1iZXJcbiAgICAgICAgICAgIC8oPz0uKlthLXpdKS8sIC8vIGxvd2VyY2FzZVxuICAgICAgICAgICAgLyg/PS4qW0EtWl0pLywgLy8gdXBwZXJjYXNlXG4gICAgICAgICAgICAvKD89LipbIUAjJCUmKi5cXFxcPStefi1dKS8sIC8vIHNwZWNpYWwgY2hhcmFjdGVyXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID49IFBBU1NXT1JEX01JTl9MRU5HVEgpIHtcbiAgICAgICAgICAgIHBvaW50cysrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnRXhwVmFsaWRhdGlvbnMuZm9yRWFjaCgodmFsaWRhdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24udGVzdChjb250ZW50KSkge1xuICAgICAgICAgICAgICAgIHBvaW50cysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocG9pbnRzIDwgV0VFS19DUklURVJJQSkge1xuICAgICAgICAgICAgcmV0dXJuICd2ZXJ5V2Vhayc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvaW50cyA8IE1FRElVTV9DUklURVJJQSkge1xuICAgICAgICAgICAgcmV0dXJuICd3ZWFrJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9pbnRzIDwgU1RST05HX0NSSVRFUklBKSB7XG4gICAgICAgICAgICByZXR1cm4gJ21lZGl1bSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdzdHJvbmcnO1xuICAgIH1cbn1cblxuIl19
@@ -8,21 +8,50 @@ import * as i2 from "@angular/cdk/drag-drop";
8
8
  import * as i3 from "@angular/forms";
9
9
  import * as i4 from "@seniorsistemas/angular-components/button";
10
10
  import * as i5 from "@ngx-translate/core";
11
+ /**
12
+ * @description Componente de lista de dupla seleção (picklist) com suporte a
13
+ * arrastar e soltar, filtro, checkboxes e template customizável para cada item.
14
+ * Emite eventos ao mover itens entre as listas.
15
+ *
16
+ * @example
17
+ * ```html
18
+ * <s-picklist
19
+ * [itensToSelect]="itensDisponiveis"
20
+ * [selectedItens]="itensSelecionados"
21
+ * (selectedItensChange)="onSelecaoMudou($event)" />
22
+ * ```
23
+ *
24
+ * @category Data
25
+ */
11
26
  export class PicklistComponent {
12
27
  cdr;
28
+ /** @description Lista de itens disponíveis para seleção (coluna esquerda). @default [] */
13
29
  itensToSelect = [];
30
+ /** @description Lista de itens já selecionados (coluna direita). @default [] */
14
31
  selectedItens = [];
32
+ /** @description Rótulo do título da lista de disponíveis. */
15
33
  availableItensLabel;
34
+ /** @description Placeholder da busca na lista de disponíveis. */
16
35
  availableItensPlaceholder;
36
+ /** @description Rótulo do botão de adicionar itens selecionados. */
17
37
  addSelectedItensLabel;
38
+ /** @description Rótulo do botão de adicionar todos os itens. */
18
39
  addAllItensLabel;
40
+ /** @description Rótulo do título da lista de selecionados. */
19
41
  selectedItensLabel;
42
+ /** @description Placeholder da busca na lista de selecionados. */
20
43
  selectedItensPlaceholder;
44
+ /** @description Rótulo do botão de remover itens selecionados. */
21
45
  removeSelectedItemsLabel;
46
+ /** @description Rótulo do botão de remover todos os itens. */
22
47
  removeAllItemsLabel;
48
+ /** @description Exibe checkbox nos itens das listas. @default false */
23
49
  showCheckbox = false;
50
+ /** @description Propriedade usada para filtrar os itens das listas. @default '' */
24
51
  filterBy = '';
52
+ /** @description Emitido quando a lista de selecionados muda. */
25
53
  selectedItensChange = new EventEmitter();
54
+ /** @description Emitido quando a lista de disponíveis muda. */
26
55
  itensToSelectChange = new EventEmitter();
27
56
  availableItensFilter = '';
28
57
  selectedItensFilter = '';
@@ -216,7 +245,9 @@ export class PicklistComponent {
216
245
  this.cdr.detectChanges();
217
246
  }
218
247
  getAllElementsByListId(listId) {
219
- return listId === this.selectedItensId ? this.selectedItensFilterUtil.rawSelectedItens : this.itensToSelectFilterUtil.rawItensToSelect;
248
+ return listId === this.selectedItensId
249
+ ? this.selectedItensFilterUtil.rawSelectedItens
250
+ : this.itensToSelectFilterUtil.rawItensToSelect;
220
251
  }
221
252
  getOppositiveId(listId) {
222
253
  return listId === this.selectedItensId ? this.itensToSelectId : this.selectedItensId;
@@ -296,4 +327,4 @@ export const parseItensPickList = (array, disabledFn) => {
296
327
  };
297
328
  });
298
329
  };
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdILFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7Ozs7QUFjaEYsTUFBTSxPQUFPLGlCQUFpQjtJQTJFTjtJQXpFYixhQUFhLEdBQXdCLEVBQUUsQ0FBQztJQUd4QyxhQUFhLEdBQXdCLEVBQUUsQ0FBQztJQUd4QyxtQkFBbUIsQ0FBVTtJQUc3Qix5QkFBeUIsQ0FBVTtJQUduQyxxQkFBcUIsQ0FBVTtJQUcvQixnQkFBZ0IsQ0FBVTtJQUcxQixrQkFBa0IsQ0FBVTtJQUc1Qix3QkFBd0IsQ0FBVTtJQUdsQyx3QkFBd0IsQ0FBVTtJQUdsQyxtQkFBbUIsQ0FBVTtJQUc3QixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBR3JCLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFHZCxtQkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBR2hELG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7SUFFaEQsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0lBRTFCLG1CQUFtQixHQUFHLEVB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QUFDLENBQUMsS0FBSztTQUMvQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGlja0xpc3RJdGVtIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyByYW5kb21IYXNoIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdGVtcGxhdGUnO1xuXG5pbnRlcmZhY2UgSW50ZXJuYWxQaWNrbGlzdEl0ZW08VCA9IGFueT4gZXh0ZW5kcyBQaWNrTGlzdEl0ZW08VD4ge1xuICAgIGludmlzaWJsZT86IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG50eXBlIENka0RyYWdFdmVudCA9IHsgc291cmNlOiBDZGtEcmFnPEludGVybmFsUGlja2xpc3RJdGVtPGFueT4+IH07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1waWNrbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BpY2tsaXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9waWNrbGlzdC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQaWNrbGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdDogUGlja0xpc3RJdGVtPGFueT5bXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuczogUGlja0xpc3RJdGVtPGFueT5bXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNMYWJlbD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGF2YWlsYWJsZUl0ZW5zUGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRTZWxlY3RlZEl0ZW5zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRBbGxJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuc1BsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlQWxsSXRlbXNMYWJlbD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dDaGVja2JveCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmlsdGVyQnkgPSAnJztcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBpdGVuc1RvU2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIHB1YmxpYyBhdmFpbGFibGVJdGVuc0ZpbHRlciA9ICcnO1xuXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNGaWx0ZXIgPSAnJztcblxuICAgIHB1YmxpYyBpdGVtVG9TZWxlY3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIGl0ZW1TZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdEZpbHRlclV0aWw6IHtcbiAgICAgICAgcmF3SXRlbnNUb1NlbGVjdDogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXTtcbiAgICAgICAgZmlsdGVyZWRJdGVuc1RvU2VsZWN0OiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgIH0gPSB7XG4gICAgICAgICAgICByYXdJdGVuc1RvU2VsZWN0OiBbXSxcbiAgICAgICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogW10sXG4gICAgICAgIH07XG5cbiAgICBzZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbDoge1xuICAgICAgICByYXdTZWxlY3RlZEl0ZW5zOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgICAgICBmaWx0ZXJlZFNlbGVjdGVkSXRlbnM6IEludGVybmFsUGlja2xpc3RJdGVtW107XG4gICAgfSA9IHtcbiAgICAgICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IFtdLFxuICAgICAgICAgICAgZmlsdGVyZWRTZWxlY3RlZEl0ZW5zOiBbXSxcbiAgICAgICAgfTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zTWFwOiBTZXQ8SW50ZXJuYWxQaWNrbGlzdEl0ZW0+ID0gbmV3IFNldCgpO1xuICAgIHB1YmxpYyBpdGVuc1RvU2VsZWN0SWQgPSByYW5kb21IYXNoKCdpdGVuc1RvU2VsZWN0Jyk7XG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNJZCA9IHJhbmRvbUhhc2goJ3NlbGVjdGVkSXRlbnMnKTtcblxuICAgIHByaXZhdGUgX2xvZ0Vycm9yVGVtcGxhdGUgPSB0cnVlO1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZURpcmVjdGl2ZT4gfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlcz8uZmluZCgoeCkgPT4geC50eXBlID09PSAnaXRlbS10by1zZWxlY3QnKT8udGVtcGxhdGUgPz8gbnVsbDtcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzPy5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICdzZWxlY3RlZC1pdGVtJyk/LnRlbXBsYXRlID8/IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9sb2dFcnJvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnaXRlbS10by1zZWxlY3QnIGFkZCB0aGlzIHRlbXBsYXRlIHVzaW5nIHNUZW1wbGF0ZSBkaXJlY3RpdmUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVNlbGVjdGVkVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnc2VsZWN0ZWQtaXRlbScgYWRkIHRoaXMgdGVtcGxhdGUgdXNpbmcgc1RlbXBsYXRlIGRpcmVjdGl2ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW5zVG9TZWxlY3QnXT8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwgPSB7XG4gICAgICAgICAgICAgICAgcmF3SXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZW5zJ10/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsID0ge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkU2VsZWN0ZWRJdGVuczogdGhpcy5zZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IHRoaXMuc2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RlZChpbnRlcm5hbFBpY2tsaXN0SXRlbTogSW50ZXJuYWxQaWNrbGlzdEl0ZW0sIGNvbnRhaW5lckxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbnRlcm5hbFBpY2tsaXN0SXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQodGhpcy5nZXRPcHBvc2l0aXZlSWQoY29udGFpbmVyTGlzdElkKSk7XG4gICAgICAgIGludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkID0gIWludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkO1xuICAgICAgICBpZiAoaW50ZXJuYWxQaWNrbGlzdEl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5hZGQoaW50ZXJuYWxQaWNrbGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpbnRlcm5hbFBpY2tsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHJlbW92ZShhbGwgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBpdGVucyA9IGZpbHRlckVuYWJsZWQoYWxsID8gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zIDogdGhpcy5zZWxlY3RlZEl0ZW5zTWFwKTtcbiAgICAgICAgaWYgKCFpdGVucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpdGVucy5mb3JFYWNoKChpdGVtUmVtb3ZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QucHVzaChpdGVtUmVtb3ZlKTtcbiAgICAgICAgICAgIGl0ZW1SZW1vdmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5kZWxldGUoaXRlbVJlbW92ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnMuZmlsdGVyKCh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnM7XG4gICAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWRJdGVucygpO1xuICAgICAgICB0aGlzLmZpbHRlckl0ZW5zVG9TZWxlY3QoKTtcbiAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYWRkKGFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGl0ZW5zID0gZmlsdGVyRW5hYmxlZChhbGwgPyB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgOiB0aGlzLnNlbGVjdGVkSXRlbnNNYXApO1xuICAgICAgICBpZiAoIWl0ZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW5zLmZvckVhY2goKGl0ZW1SZW1vdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVucy5wdXNoKGl0ZW1SZW1vdmUpO1xuICAgICAgICAgICAgaXRlbVJlbW92ZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpdGVtUmVtb3ZlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdC5maWx0ZXIoKHgpID0+ICFpdGVucy5pbmNsdWRlcyh4KSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdDtcbiAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgIHRoaXMuZmlsdGVySXRlbnNUb1NlbGVjdCgpO1xuICAgICAgICB0aGlzLmVtaXREYXRhKCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJJdGVuc1RvU2VsZWN0KCkge1xuICAgICAgICBsZXQgc2VhcmNoVGVybSA9IHRoaXMuYXZhaWxhYmxlSXRlbnNGaWx0ZXI7XG4gICAgICAgIHNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0ID0gdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0LmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBjb21wYXJlU3RyaW5ncyhpdGVtLmRhdGFbdGhpcy5maWx0ZXJCeV0sIHNlYXJjaFRlcm0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0ID0gdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJTZWxlY3RlZEl0ZW5zKCkge1xuICAgICAgICBsZXQgc2VhcmNoVGVybSA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlcjtcbiAgICAgICAgc2VhcmNoVGVybSA9IHNlYXJjaFRlcm0udHJpbSgpO1xuICAgICAgICBpZiAoc2VhcmNoVGVybSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKGl0ZW0uZGF0YVt0aGlzLmZpbHRlckJ5XSwgc2VhcmNoVGVybSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxJbnRlcm5hbFBpY2tsaXN0SXRlbVtdPikge1xuICAgICAgICBjb25zdCBpc0RpZmZlcmVudENvbnRhaW5lciA9IGV2ZW50LmNvbnRhaW5lciAhPT0gZXZlbnQucHJldmlvdXNDb250YWluZXI7XG4gICAgICAgIGlmICghaXNEaWZmZXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUmVtb3ZlZEl0ZW5zID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkO1xuICAgICAgICBpZiAoaXNSZW1vdmVkSXRlbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogQ2RrRHJhZ0V2ZW50LCBkcmFnTGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkSXRlbnNCeUxpc3RJZCh0aGlzLmdldE9wcG9zaXRpdmVJZChkcmFnTGlzdElkKSk7XG4gICAgICAgIGV2ZW50LnNvdXJjZS5kYXRhLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmFkZChldmVudC5zb3VyY2UuZGF0YSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5mb3JFYWNoKCh4KSA9PiAoeC5pbnZpc2libGUgPSB0cnVlKSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdSZWxlYXNlKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZm9yRWFjaCgoaXRlbSkgPT4gKGl0ZW0uaW52aXNpYmxlID0gZmFsc2UpKTtcbiAgICB9XG5cbiAgICBjaGVja0FsbEF2YWlsYWJsZUl0ZW5zQ2hhbmdlKHRhcmdldDogSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjaGVja2VkID0gdGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShjaGVja2VkLCB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCwgdGhpcy5pdGVuc1RvU2VsZWN0SWQpO1xuICAgIH1cblxuICAgIGNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZSh0YXJnZXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY2hlY2tlZCA9IHRhcmdldC5jaGVja2VkO1xuICAgICAgICB0aGlzLl9jaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UoY2hlY2tlZCwgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMsIHRoaXMuc2VsZWN0ZWRJdGVuc0lkKTtcbiAgICB9XG5cbiAgICBnZXQgZGlzYWJsZVNlbGVjdGVkSXRlbnNDaGVja2JveCgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlckVuYWJsZWQodGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBnZXQgZGlzYWJsZUl0ZW5zVG9TZWxlY3RDaGVja2JveCgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlckVuYWJsZWQodGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBnZXQgaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEJ5TGlzdCh0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCk7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRCeUxpc3QodGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMpO1xuICAgIH1cblxuICAgIGdldCBjYW5BZGRJdGVucygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLml0ZW5zVG9TZWxlY3QgYXMgSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXSkuZmlsdGVyKCh4KSA9PiB4Py5zZWxlY3RlZCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBnZXQgY2FuUmVtb3ZlSXRlbnMoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZEl0ZW5zIGFzIEludGVybmFsUGlja2xpc3RJdGVtW10pLmZpbHRlcigoeCkgPT4geD8uc2VsZWN0ZWQpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tBbGxTZWxlY3RlZEJ5TGlzdChsaXN0OiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdKSB7XG4gICAgICAgIGNvbnN0IF9saXN0SXRlbnMgPSBmaWx0ZXJFbmFibGVkKGxpc3QpO1xuICAgICAgICBpZiAoIV9saXN0SXRlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX2xpc3RJdGVucy5ldmVyeSgoeCkgPT4geC5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UoY2hlY2tlZDogYm9vbGVhbiwgbGlzdDogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXSwgbGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkSXRlbnNCeUxpc3RJZChsaXN0SWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkID8gdGhpcy5pdGVuc1RvU2VsZWN0SWQgOiB0aGlzLnNlbGVjdGVkSXRlbnNJZCk7XG4gICAgICAgIGZpbHRlckVuYWJsZWQobGlzdCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA9IGNoZWNrZWQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuYWRkKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQobGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgY2xlYXJMaXN0ID0gdGhpcy5nZXRBbGxFbGVtZW50c0J5TGlzdElkKGxpc3RJZCk7XG4gICAgICAgIGNsZWFyTGlzdC5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICB4LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZGVsZXRlKHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWxsRWxlbWVudHNCeUxpc3RJZChsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbGlzdElkID09PSB0aGlzLnNlbGVjdGVkSXRlbnNJZCA/IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyA6IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9wcG9zaXRpdmVJZChsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbGlzdElkID09PSB0aGlzLnNlbGVjdGVkSXRlbnNJZCA/IHRoaXMuaXRlbnNUb1NlbGVjdElkIDogdGhpcy5zZWxlY3RlZEl0ZW5zSWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0Q2hhbmdlLmVtaXQocGFyc2VWYWx1ZUVtaXQodGhpcy5pdGVuc1RvU2VsZWN0KSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0NoYW5nZS5lbWl0KHBhcnNlVmFsdWVFbWl0KHRoaXMuc2VsZWN0ZWRJdGVucykpO1xuICAgIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplU3RyaW5nID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gc3RyaW5ncyBieSBub3JtYWxpemluZyB0aGVtIHRvIGEgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgYWNjZW50LWZyZWUgZm9ybSxcbiAqIGFuZCBjaGVja3MgaWYgdGhlIG1haW4gc3RyaW5nIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcuXG4gKlxuICogQHBhcmFtIG1haW5TdHJpbmcgLSBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkLlxuICogQHBhcmFtIHN1YnN0cmluZyAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvciB3aXRoaW4gdGhlIG1haW4gc3RyaW5nLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbm9ybWFsaXplZCBtYWluIHN0cmluZyBjb250YWlucyB0aGUgbm9ybWFsaXplZCBzdWJzdHJpbmcuXG4gKi9cblxuY29uc3QgY29tcGFyZVN0cmluZ3MgPSAobWFpblN0cmluZzogc3RyaW5nLCBzdWJzdHJpbmc6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBub3JtYWxpemVTdHJpbmcobWFpblN0cmluZykuaW5jbHVkZXMobm9ybWFsaXplU3RyaW5nKHN1YnN0cmluZykpO1xufTtcblxuY29uc3QgZmlsdGVyRW5hYmxlZCA9IChsaXN0OiBQaWNrTGlzdEl0ZW08YW55PltdIHwgU2V0PEludGVybmFsUGlja2xpc3RJdGVtPik6IEludGVybmFsUGlja2xpc3RJdGVtW10gPT4ge1xuICAgIGNvbnN0IF9saXN0ID0gbGlzdCBpbnN0YW5jZW9mIFNldCA/IEFycmF5LmZyb20obGlzdCkgOiBsaXN0O1xuICAgIHJldHVybiBfbGlzdC5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKTtcbn07XG5cbmNvbnN0IG1hcERhdGEgPSAobGlzdDogUGlja0xpc3RJdGVtPGFueT5bXSkgPT4ge1xuICAgIHJldHVybiBsaXN0Lm1hcCgoeCkgPT4geC5kYXRhKTtcbn07XG5cbmNvbnN0IHBhcnNlVmFsdWVFbWl0ID0gcGlwZShmaWx0ZXJFbmFibGVkLCBtYXBEYXRhKTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSXRlbnNQaWNrTGlzdCA9IDxUPihhcnJheTogVFtdLCBkaXNhYmxlZEZuPzogKGl0ZW06IFQpID0+IGJvb2xlYW4pOiBQaWNrTGlzdEl0ZW08VD5bXSA9PiB7XG4gICAgcmV0dXJuIGFycmF5Lm1hcCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogeCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZEZuID8gZGlzYWJsZWRGbih4KSA6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH0pO1xufTtcbiIsIjxuZy10ZW1wbGF0ZVxuICAgICNwcmV2aWV3UmVuZGVyXG4gICAgbGV0LWl0ZW5zPVwiaXRlbnNcIlxuICAgIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCJcbj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInBpY2tsaXN0LWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0uZGF0YSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjcGlja2xpc3RJdGVuc1JlbmRlclxuICAgIGxldC1pZD1cImlkXCJcbiAgICBsZXQtaXRlbnM9XCJpdGVuc1wiXG4gICAgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIlxuICAgIGxldC1saXN0Q29ubmVjdGVkVG89XCJsaXN0Q29ubmVjdGVkVG9cIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwaWNrbGlzdC1pdGVtc1wiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJpdGVuc1wiXG4gICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImxpc3RDb25uZWN0ZWRUb1wiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0ZWQoaXRlbSwgaWQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpZClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnUmVsZWFzZWQpPVwib25EcmFnUmVsZWFzZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpY2tsaXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucGlja2xpc3QtaXRlbS1pbnZpc2libGVdPVwiaXRlbS5pbnZpc2libGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1pdGVtLWFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtOiBpdGVtLmRhdGEsIHNlbGVjdGVkOiBpdGVtLnNlbGVjdGVkLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrRHJhZ1ByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmV2aWV3UmVuZGVyOyBjb250ZXh0OiB7IGl0ZW5zOiBzZWxlY3RlZEl0ZW5zTWFwLCB0ZW1wbGF0ZTogdGVtcGxhdGUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAgICNjaGVja2JveFRpdGxlUmVuZGVyXG4gICAgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIGxldC1jaGVja2VkPVwiY2hlY2tlZFwiXG4gICAgbGV0LWNoYW5nZUZuPVwiY2hhbmdlRm5cIlxuPlxuICAgIEBpZiAoc2hvd0NoZWNrYm94KSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jaGVja2JveFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VGbigkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAgIC8+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cInBpY2tsaXN0LWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVJdGVuc1RvU2VsZWN0Q2hlY2tib3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGl0ZW5zVG9TZWxlY3RBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IGNoZWNrQWxsQXZhaWxhYmxlSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGlja2xpc3QtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXZhaWxhYmxlSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmF2YWlsYWJsZS1pdGVtcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZmlsdGVyQnkgJiYgc2hvd0NoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tsaXN0LWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94VGl0bGVSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZUl0ZW5zVG9TZWxlY3RDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGbjogY2hlY2tBbGxBdmFpbGFibGVJdGVuc0NoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF2YWlsYWJsZUl0ZW5zRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJJdGVuc1RvU2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJhdmFpbGFibGVJdGVuc1BsYWNlaG9sZGVyIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGlja2xpc3QtcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHBpY2tsaXN0SXRlbnNSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVuczogaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IGl0ZW1Ub1NlbGVjdFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbm5lY3RlZFRvOiBzZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRTZWxlY3RlZEl0ZW5zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5hZGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHJpZ2h0SWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctcmlnaHRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQWRkSXRlbnNcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImFkZCgpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRBbGxJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYWRkX2FsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwibGlua1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiYWRkKHRydWUpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZVNlbGVjdGVkSXRlbnNDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUZuOiBjaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tsaXN0LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnNlbGVjdGVkLWl0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGlja2xpc3QtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5ICYmIHNob3dDaGVja2JveFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3hUaXRsZVJlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZGlzYWJsZWQ6IGRpc2FibGVTZWxlY3RlZEl0ZW5zQ2hlY2tib3gsIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCwgY2hhbmdlRm46IGNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZS5iaW5kKHRoaXMpIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRJdGVuc0ZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJTZWxlY3RlZEl0ZW5zKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkSXRlbnNQbGFjZWhvbGRlciB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpY2tsaXN0LXBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgcGlja2xpc3RJdGVuc1JlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHNlbGVjdGVkSXRlbnNJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW5zOiBzZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogaXRlbVNlbGVjdGVkVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0Q29ubmVjdGVkVG86IGl0ZW5zVG9TZWxlY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZVNlbGVjdGVkSXRlbXNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctbGVmdFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5SZW1vdmVJdGVuc1wiXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlKClcIlxuICAgICAgICAgICAgICAgIFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUFsbEl0ZW1zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmVfYWxsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmUodHJ1ZSlcIlxuICAgICAgICAgICAgICAgIFthdXhpbGlhcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdILFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7Ozs7QUFTaEY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFNSCxNQUFNLE9BQU8saUJBQWlCO0lBeUZOO0lBeEZwQiwwRkFBMEY7SUFFbkYsYUFBYSxHQUF3QixFQUFFLENBQUM7SUFFL0MsZ0ZBQWdGO0lBRXpFLGFBQWEsR0FBd0IsRUFBRSxDQUFDO0lBRS9DLDZEQUE2RDtJQUV0RCxtQkFBbUIsQ0FBVTtJQUVwQyxpRUFBaUU7SUFFMUQseUJBQXlCLENBQVU7SUFFMUMsb0VBQW9FO0lBRTdELHFCQUFxQixDQUFVO0lBRXRDLGdFQUFnRTtJQUV6RCxnQkFBZ0IsQ0FBVTtJQUVqQyw4REFBOEQ7SUFFdkQsa0JBQWtCLENBQVU7SUFFbkMsa0VBQWtFO0lBRTNELHdCQUF3QixDQUFVO0lBRXpDLGtFQUFrRTtJQUUzRCx3QkFBd0IsQ0FBVTtJQUV6Qyw4REFBOEQ7SUFFdkQsbUJBQW1CLENBQVU7SUFFcEMsdUVBQXVFO0lBRWhFLFlB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Q0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFJLEtBQVUsRUFBRSxVQUFpQyxFQUFxQixFQUFFO0lBQ3RHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ25CLE9BQU87WUFDSCxJQUFJLEVBQUUsQ0FBQztZQUNQLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztTQUMvQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGlja0xpc3RJdGVtIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyByYW5kb21IYXNoIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdGVtcGxhdGUnO1xuXG5pbnRlcmZhY2UgSW50ZXJuYWxQaWNrbGlzdEl0ZW08VCA9IGFueT4gZXh0ZW5kcyBQaWNrTGlzdEl0ZW08VD4ge1xuICAgIGludmlzaWJsZT86IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG50eXBlIENka0RyYWdFdmVudCA9IHsgc291cmNlOiBDZGtEcmFnPEludGVybmFsUGlja2xpc3RJdGVtPGFueT4+IH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgbGlzdGEgZGUgZHVwbGEgc2VsZcOnw6NvIChwaWNrbGlzdCkgY29tIHN1cG9ydGUgYVxuICogYXJyYXN0YXIgZSBzb2x0YXIsIGZpbHRybywgY2hlY2tib3hlcyBlIHRlbXBsYXRlIGN1c3RvbWl6w6F2ZWwgcGFyYSBjYWRhIGl0ZW0uXG4gKiBFbWl0ZSBldmVudG9zIGFvIG1vdmVyIGl0ZW5zIGVudHJlIGFzIGxpc3Rhcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHMtcGlja2xpc3RcbiAqICAgW2l0ZW5zVG9TZWxlY3RdPVwiaXRlbnNEaXNwb25pdmVpc1wiXG4gKiAgIFtzZWxlY3RlZEl0ZW5zXT1cIml0ZW5zU2VsZWNpb25hZG9zXCJcbiAqICAgKHNlbGVjdGVkSXRlbnNDaGFuZ2UpPVwib25TZWxlY2FvTXVkb3UoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgRGF0YVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3MtcGlja2xpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9waWNrbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcGlja2xpc3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUGlja2xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgaXRlbnMgZGlzcG9uw612ZWlzIHBhcmEgc2VsZcOnw6NvIChjb2x1bmEgZXNxdWVyZGEpLiBAZGVmYXVsdCBbXSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGl0ZW5zVG9TZWxlY3Q6IFBpY2tMaXN0SXRlbTxhbnk+W10gPSBbXTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgaXRlbnMgasOhIHNlbGVjaW9uYWRvcyAoY29sdW5hIGRpcmVpdGEpLiBAZGVmYXVsdCBbXSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnM6IFBpY2tMaXN0SXRlbTxhbnk+W10gPSBbXTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyB0w610dWxvIGRhIGxpc3RhIGRlIGRpc3BvbsOtdmVpcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhdmFpbGFibGVJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBQbGFjZWhvbGRlciBkYSBidXNjYSBuYSBsaXN0YSBkZSBkaXNwb27DrXZlaXMuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgYWRpY2lvbmFyIGl0ZW5zIHNlbGVjaW9uYWRvcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRTZWxlY3RlZEl0ZW5zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFLDs3R1bG8gZG8gYm90w6NvIGRlIGFkaWNpb25hciB0b2RvcyBvcyBpdGVucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRBbGxJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIHTDrXR1bG8gZGEgbGlzdGEgZGUgc2VsZWNpb25hZG9zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNMYWJlbD86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUGxhY2Vob2xkZXIgZGEgYnVzY2EgbmEgbGlzdGEgZGUgc2VsZWNpb25hZG9zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgcmVtb3ZlciBpdGVucyBzZWxlY2lvbmFkb3MuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIGJvdMOjbyBkZSByZW1vdmVyIHRvZG9zIG9zIGl0ZW5zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlbW92ZUFsbEl0ZW1zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIGNoZWNrYm94IG5vcyBpdGVucyBkYXMgbGlzdGFzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dDaGVja2JveCA9IGZhbHNlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBQcm9wcmllZGFkZSB1c2FkYSBwYXJhIGZpbHRyYXIgb3MgaXRlbnMgZGFzIGxpc3Rhcy4gQGRlZmF1bHQgJycgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWx0ZXJCeSA9ICcnO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBhIGxpc3RhIGRlIHNlbGVjaW9uYWRvcyBtdWRhLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gYSBsaXN0YSBkZSBkaXNwb27DrXZlaXMgbXVkYS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNGaWx0ZXIgPSAnJztcblxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zRmlsdGVyID0gJyc7XG5cbiAgICBwdWJsaWMgaXRlbVRvU2VsZWN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBpdGVtU2VsZWN0ZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIGl0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsOiB7XG4gICAgICAgIHJhd0l0ZW5zVG9TZWxlY3Q6IEludGVybmFsUGlja2xpc3RJdGVtW107XG4gICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXTtcbiAgICB9ID0ge1xuICAgICAgICByYXdJdGVuc1RvU2VsZWN0OiBbXSxcbiAgICAgICAgZmlsdGVyZWRJdGVuc1RvU2VsZWN0OiBbXSxcbiAgICB9O1xuXG4gICAgc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWw6IHtcbiAgICAgICAgcmF3U2VsZWN0ZWRJdGVuczogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXTtcbiAgICAgICAgZmlsdGVyZWRTZWxlY3RlZEl0ZW5zOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgIH0gPSB7XG4gICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IFtdLFxuICAgICAgICBmaWx0ZXJlZFNlbGVjdGVkSXRlbnM6IFtdLFxuICAgIH07XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuc01hcDogU2V0PEludGVybmFsUGlja2xpc3RJdGVtPiA9IG5ldyBTZXQoKTtcbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdElkID0gcmFuZG9tSGFzaCgnaXRlbnNUb1NlbGVjdCcpO1xuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zSWQgPSByYW5kb21IYXNoKCdzZWxlY3RlZEl0ZW5zJyk7XG5cbiAgICBwcml2YXRlIF9sb2dFcnJvclRlbXBsYXRlID0gdHJ1ZTtcbiAgICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8VGVtcGxhdGVEaXJlY3RpdmU+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlcz8uZmluZCgoeCkgPT4geC50eXBlID09PSAnaXRlbS10by1zZWxlY3QnKT8udGVtcGxhdGUgPz8gbnVsbDtcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzPy5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICdzZWxlY3RlZC1pdGVtJyk/LnRlbXBsYXRlID8/IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9sb2dFcnJvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnaXRlbS10by1zZWxlY3QnIGFkZCB0aGlzIHRlbXBsYXRlIHVzaW5nIHNUZW1wbGF0ZSBkaXJlY3RpdmUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVNlbGVjdGVkVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnc2VsZWN0ZWQtaXRlbScgYWRkIHRoaXMgdGVtcGxhdGUgdXNpbmcgc1RlbXBsYXRlIGRpcmVjdGl2ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW5zVG9TZWxlY3QnXT8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwgPSB7XG4gICAgICAgICAgICAgICAgcmF3SXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZW5zJ10/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsID0ge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkU2VsZWN0ZWRJdGVuczogdGhpcy5zZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IHRoaXMuc2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RlZChpbnRlcm5hbFBpY2tsaXN0SXRlbTogSW50ZXJuYWxQaWNrbGlzdEl0ZW0sIGNvbnRhaW5lckxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbnRlcm5hbFBpY2tsaXN0SXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQodGhpcy5nZXRPcHBvc2l0aXZlSWQoY29udGFpbmVyTGlzdElkKSk7XG4gICAgICAgIGludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkID0gIWludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkO1xuICAgICAgICBpZiAoaW50ZXJuYWxQaWNrbGlzdEl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5hZGQoaW50ZXJuYWxQaWNrbGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpbnRlcm5hbFBpY2tsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHJlbW92ZShhbGwgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBpdGVucyA9IGZpbHRlckVuYWJsZWQoYWxsID8gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zIDogdGhpcy5zZWxlY3RlZEl0ZW5zTWFwKTtcbiAgICAgICAgaWYgKCFpdGVucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpdGVucy5mb3JFYWNoKChpdGVtUmVtb3ZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QucHVzaChpdGVtUmVtb3ZlKTtcbiAgICAgICAgICAgIGl0ZW1SZW1vdmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5kZWxldGUoaXRlbVJlbW92ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnMuZmlsdGVyKCh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnM7XG4gICAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWRJdGVucygpO1xuICAgICAgICB0aGlzLmZpbHRlckl0ZW5zVG9TZWxlY3QoKTtcbiAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYWRkKGFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGl0ZW5zID0gZmlsdGVyRW5hYmxlZChhbGwgPyB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgOiB0aGlzLnNlbGVjdGVkSXRlbnNNYXApO1xuICAgICAgICBpZiAoIWl0ZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW5zLmZvckVhY2goKGl0ZW1SZW1vdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVucy5wdXNoKGl0ZW1SZW1vdmUpO1xuICAgICAgICAgICAgaXRlbVJlbW92ZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpdGVtUmVtb3ZlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdC5maWx0ZXIoKHgpID0+ICFpdGVucy5pbmNsdWRlcyh4KSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdDtcbiAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgIHRoaXMuZmlsdGVySXRlbnNUb1NlbGVjdCgpO1xuICAgICAgICB0aGlzLmVtaXREYXRhKCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJJdGVuc1RvU2VsZWN0KCkge1xuICAgICAgICBsZXQgc2VhcmNoVGVybSA9IHRoaXMuYXZhaWxhYmxlSXRlbnNGaWx0ZXI7XG4gICAgICAgIHNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0ID0gdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0LmZpbHRlcihcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gY29tcGFyZVN0cmluZ3MoaXRlbS5kYXRhW3RoaXMuZmlsdGVyQnldLCBzZWFyY2hUZXJtKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZmlsdGVyU2VsZWN0ZWRJdGVucygpIHtcbiAgICAgICAgbGV0IHNlYXJjaFRlcm0gPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXI7XG4gICAgICAgIHNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zID0gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gY29tcGFyZVN0cmluZ3MoaXRlbS5kYXRhW3RoaXMuZmlsdGVyQnldLCBzZWFyY2hUZXJtKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPEludGVybmFsUGlja2xpc3RJdGVtW10+KSB7XG4gICAgICAgIGNvbnN0IGlzRGlmZmVyZW50Q29udGFpbmVyID0gZXZlbnQuY29udGFpbmVyICE9PSBldmVudC5wcmV2aW91c0NvbnRhaW5lcjtcbiAgICAgICAgaWYgKCFpc0RpZmZlcmVudENvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNSZW1vdmVkSXRlbnMgPSBldmVudC5wcmV2aW91c0NvbnRhaW5lci5pZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQ7XG4gICAgICAgIGlmIChpc1JlbW92ZWRJdGVucykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0KGV2ZW50OiBDZGtEcmFnRXZlbnQsIGRyYWdMaXN0SWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWRJdGVuc0J5TGlzdElkKHRoaXMuZ2V0T3Bwb3NpdGl2ZUlkKGRyYWdMaXN0SWQpKTtcbiAgICAgICAgZXZlbnQuc291cmNlLmRhdGEuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuYWRkKGV2ZW50LnNvdXJjZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmZvckVhY2goKHgpID0+ICh4LmludmlzaWJsZSA9IHRydWUpKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uRHJhZ1JlbGVhc2UoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS5pbnZpc2libGUgPSBmYWxzZSkpO1xuICAgIH1cblxuICAgIGNoZWNrQWxsQXZhaWxhYmxlSXRlbnNDaGFuZ2UodGFyZ2V0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSB0YXJnZXQuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKFxuICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKHRhcmdldDogSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjaGVja2VkID0gdGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShcbiAgICAgICAgICAgIGNoZWNrZWQsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0lkLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBkaXNhYmxlU2VsZWN0ZWRJdGVuc0NoZWNrYm94KCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyRW5hYmxlZCh0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucykubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGdldCBkaXNhYmxlSXRlbnNUb1NlbGVjdENoZWNrYm94KCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyRW5hYmxlZCh0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGdldCBpdGVuc1RvU2VsZWN0QWxsU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja0FsbFNlbGVjdGVkQnlMaXN0KHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0KTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRJdGVuc0FsbFNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEJ5TGlzdCh0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyk7XG4gICAgfVxuXG4gICAgZ2V0IGNhbkFkZEl0ZW5zKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXRlbnNUb1NlbGVjdCBhcyBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdKS5maWx0ZXIoKHgpID0+IHg/LnNlbGVjdGVkKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGdldCBjYW5SZW1vdmVJdGVucygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkSXRlbnMgYXMgSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXSkuZmlsdGVyKCh4KSA9PiB4Py5zZWxlY3RlZCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja0FsbFNlbGVjdGVkQnlMaXN0KGxpc3Q6IEludGVybmFsUGlja2xpc3RJdGVtW10pIHtcbiAgICAgICAgY29uc3QgX2xpc3RJdGVucyA9IGZpbHRlckVuYWJsZWQobGlzdCk7XG4gICAgICAgIGlmICghX2xpc3RJdGVucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfbGlzdEl0ZW5zLmV2ZXJ5KCh4KSA9PiB4LnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShjaGVja2VkOiBib29sZWFuLCBsaXN0OiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdLCBsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWRJdGVuc0J5TGlzdElkKGxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQgPyB0aGlzLml0ZW5zVG9TZWxlY3RJZCA6IHRoaXMuc2VsZWN0ZWRJdGVuc0lkKTtcbiAgICAgICAgZmlsdGVyRW5hYmxlZChsaXN0KS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gY2hlY2tlZDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5hZGQoaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnNlbGVjdGVkSXRlbnNCeUxpc3RJZChsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBjbGVhckxpc3QgPSB0aGlzLmdldEFsbEVsZW1lbnRzQnlMaXN0SWQobGlzdElkKTtcbiAgICAgICAgY2xlYXJMaXN0LmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIHguc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5kZWxldGUoeCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxFbGVtZW50c0J5TGlzdElkKGxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBsaXN0SWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkXG4gICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVuc1xuICAgICAgICAgICAgOiB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcHBvc2l0aXZlSWQobGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQgPyB0aGlzLml0ZW5zVG9TZWxlY3RJZCA6IHRoaXMuc2VsZWN0ZWRJdGVuc0lkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdERhdGEoKSB7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdENoYW5nZS5lbWl0KHBhcnNlVmFsdWVFbWl0KHRoaXMuaXRlbnNUb1NlbGVjdCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNDaGFuZ2UuZW1pdChwYXJzZVZhbHVlRW1pdCh0aGlzLnNlbGVjdGVkSXRlbnMpKTtcbiAgICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVN0cmluZyA9IChzdHI6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBzdHJcbiAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKTtcbn07XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIHN0cmluZ3MgYnkgbm9ybWFsaXppbmcgdGhlbSB0byBhIGNhc2UtaW5zZW5zaXRpdmUgYW5kIGFjY2VudC1mcmVlIGZvcm0sXG4gKiBhbmQgY2hlY2tzIGlmIHRoZSBtYWluIHN0cmluZyBjb250YWlucyB0aGUgc3Vic3RyaW5nLlxuICpcbiAqIEBwYXJhbSBtYWluU3RyaW5nIC0gVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZC5cbiAqIEBwYXJhbSBzdWJzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3Igd2l0aGluIHRoZSBtYWluIHN0cmluZy5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG5vcm1hbGl6ZWQgbWFpbiBzdHJpbmcgY29udGFpbnMgdGhlIG5vcm1hbGl6ZWQgc3Vic3RyaW5nLlxuICovXG5cbmNvbnN0IGNvbXBhcmVTdHJpbmdzID0gKG1haW5TdHJpbmc6IHN0cmluZywgc3Vic3RyaW5nOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gbm9ybWFsaXplU3RyaW5nKG1haW5TdHJpbmcpLmluY2x1ZGVzKG5vcm1hbGl6ZVN0cmluZyhzdWJzdHJpbmcpKTtcbn07XG5cbmNvbnN0IGZpbHRlckVuYWJsZWQgPSAobGlzdDogUGlja0xpc3RJdGVtPGFueT5bXSB8IFNldDxJbnRlcm5hbFBpY2tsaXN0SXRlbT4pOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdID0+IHtcbiAgICBjb25zdCBfbGlzdCA9IGxpc3QgaW5zdGFuY2VvZiBTZXQgPyBBcnJheS5mcm9tKGxpc3QpIDogbGlzdDtcbiAgICByZXR1cm4gX2xpc3QuZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCk7XG59O1xuXG5jb25zdCBtYXBEYXRhID0gKGxpc3Q6IFBpY2tMaXN0SXRlbTxhbnk+W10pID0+IHtcbiAgICByZXR1cm4gbGlzdC5tYXAoKHgpID0+IHguZGF0YSk7XG59O1xuXG5jb25zdCBwYXJzZVZhbHVlRW1pdCA9IHBpcGUoZmlsdGVyRW5hYmxlZCwgbWFwRGF0YSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUl0ZW5zUGlja0xpc3QgPSA8VD4oYXJyYXk6IFRbXSwgZGlzYWJsZWRGbj86IChpdGVtOiBUKSA9PiBib29sZWFuKTogUGlja0xpc3RJdGVtPFQ+W10gPT4ge1xuICAgIHJldHVybiBhcnJheS5tYXAoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IHgsXG4gICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWRGbiA/IGRpc2FibGVkRm4oeCkgOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn07XG5cbiIsIjxuZy10ZW1wbGF0ZVxuICAgICNwcmV2aWV3UmVuZGVyXG4gICAgbGV0LWl0ZW5zPVwiaXRlbnNcIlxuICAgIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCJcbj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInBpY2tsaXN0LWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0uZGF0YSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjcGlja2xpc3RJdGVuc1JlbmRlclxuICAgIGxldC1pZD1cImlkXCJcbiAgICBsZXQtaXRlbnM9XCJpdGVuc1wiXG4gICAgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIlxuICAgIGxldC1saXN0Q29ubmVjdGVkVG89XCJsaXN0Q29ubmVjdGVkVG9cIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwaWNrbGlzdC1pdGVtc1wiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJpdGVuc1wiXG4gICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImxpc3RDb25uZWN0ZWRUb1wiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0ZWQoaXRlbSwgaWQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpZClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnUmVsZWFzZWQpPVwib25EcmFnUmVsZWFzZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpY2tsaXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucGlja2xpc3QtaXRlbS1pbnZpc2libGVdPVwiaXRlbS5pbnZpc2libGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1pdGVtLWFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtOiBpdGVtLmRhdGEsIHNlbGVjdGVkOiBpdGVtLnNlbGVjdGVkLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrRHJhZ1ByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmV2aWV3UmVuZGVyOyBjb250ZXh0OiB7IGl0ZW5zOiBzZWxlY3RlZEl0ZW5zTWFwLCB0ZW1wbGF0ZTogdGVtcGxhdGUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAgICNjaGVja2JveFRpdGxlUmVuZGVyXG4gICAgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIGxldC1jaGVja2VkPVwiY2hlY2tlZFwiXG4gICAgbGV0LWNoYW5nZUZuPVwiY2hhbmdlRm5cIlxuPlxuICAgIEBpZiAoc2hvd0NoZWNrYm94KSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jaGVja2JveFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VGbigkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAgIC8+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cInBpY2tsaXN0LWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVJdGVuc1RvU2VsZWN0Q2hlY2tib3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGl0ZW5zVG9TZWxlY3RBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IGNoZWNrQWxsQXZhaWxhYmxlSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGlja2xpc3QtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXZhaWxhYmxlSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmF2YWlsYWJsZS1pdGVtcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZmlsdGVyQnkgJiYgc2hvd0NoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tsaXN0LWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94VGl0bGVSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZUl0ZW5zVG9TZWxlY3RDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGbjogY2hlY2tBbGxBdmFpbGFibGVJdGVuc0NoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF2YWlsYWJsZUl0ZW5zRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJJdGVuc1RvU2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJhdmFpbGFibGVJdGVuc1BsYWNlaG9sZGVyIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGlja2xpc3QtcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHBpY2tsaXN0SXRlbnNSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVuczogaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IGl0ZW1Ub1NlbGVjdFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbm5lY3RlZFRvOiBzZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRTZWxlY3RlZEl0ZW5zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5hZGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHJpZ2h0SWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctcmlnaHRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQWRkSXRlbnNcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImFkZCgpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRBbGxJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYWRkX2FsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwibGlua1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiYWRkKHRydWUpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZVNlbGVjdGVkSXRlbnNDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUZuOiBjaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tsaXN0LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnNlbGVjdGVkLWl0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGlja2xpc3QtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5ICYmIHNob3dDaGVja2JveFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3hUaXRsZVJlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZGlzYWJsZWQ6IGRpc2FibGVTZWxlY3RlZEl0ZW5zQ2hlY2tib3gsIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCwgY2hhbmdlRm46IGNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZS5iaW5kKHRoaXMpIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRJdGVuc0ZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJTZWxlY3RlZEl0ZW5zKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkSXRlbnNQbGFjZWhvbGRlciB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpY2tsaXN0LXBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgcGlja2xpc3RJdGVuc1JlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHNlbGVjdGVkSXRlbnNJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW5zOiBzZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogaXRlbVNlbGVjdGVkVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0Q29ubmVjdGVkVG86IGl0ZW5zVG9TZWxlY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZVNlbGVjdGVkSXRlbXNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctbGVmdFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5SZW1vdmVJdGVuc1wiXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlKClcIlxuICAgICAgICAgICAgICAgIFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUFsbEl0ZW1zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmVfYWxsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmUodHJ1ZSlcIlxuICAgICAgICAgICAgICAgIFthdXhpbGlhcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==