igniteui-angular 16.0.0-beta.2 → 16.0.0-beta.3

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 (348) hide show
  1. package/esm2022/lib/accordion/accordion.component.mjs +4 -4
  2. package/esm2022/lib/accordion/accordion.module.mjs +5 -5
  3. package/esm2022/lib/action-strip/action-strip.component.mjs +7 -7
  4. package/esm2022/lib/action-strip/action-strip.module.mjs +5 -5
  5. package/esm2022/lib/action-strip/grid-actions/grid-action-button.component.mjs +4 -4
  6. package/esm2022/lib/action-strip/grid-actions/grid-actions-base.directive.mjs +4 -4
  7. package/esm2022/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +4 -4
  8. package/esm2022/lib/action-strip/grid-actions/grid-pinning-actions.component.mjs +4 -4
  9. package/esm2022/lib/avatar/avatar.component.mjs +4 -4
  10. package/esm2022/lib/avatar/avatar.module.mjs +5 -5
  11. package/esm2022/lib/badge/badge.component.mjs +4 -4
  12. package/esm2022/lib/badge/badge.module.mjs +5 -5
  13. package/esm2022/lib/banner/banner.component.mjs +4 -4
  14. package/esm2022/lib/banner/banner.directives.mjs +4 -4
  15. package/esm2022/lib/banner/banner.module.mjs +5 -5
  16. package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +4 -4
  17. package/esm2022/lib/buttonGroup/buttongroup.module.mjs +5 -5
  18. package/esm2022/lib/calendar/calendar-base.mjs +4 -4
  19. package/esm2022/lib/calendar/calendar.component.mjs +4 -4
  20. package/esm2022/lib/calendar/calendar.directives.mjs +16 -16
  21. package/esm2022/lib/calendar/calendar.module.mjs +5 -5
  22. package/esm2022/lib/calendar/days-view/day-item.component.mjs +4 -4
  23. package/esm2022/lib/calendar/days-view/days-view.component.mjs +4 -4
  24. package/esm2022/lib/calendar/days-view/daysview-navigation.service.mjs +4 -4
  25. package/esm2022/lib/calendar/month-picker/month-picker-base.mjs +4 -4
  26. package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +4 -4
  27. package/esm2022/lib/calendar/months-view/months-view.component.mjs +4 -4
  28. package/esm2022/lib/calendar/months-view.pipe.mjs +7 -7
  29. package/esm2022/lib/calendar/years-view/years-view.component.mjs +7 -7
  30. package/esm2022/lib/card/card.component.mjs +28 -28
  31. package/esm2022/lib/card/card.module.mjs +5 -5
  32. package/esm2022/lib/carousel/carousel.component.mjs +7 -7
  33. package/esm2022/lib/carousel/carousel.directives.mjs +10 -10
  34. package/esm2022/lib/carousel/carousel.module.mjs +5 -5
  35. package/esm2022/lib/carousel/slide.component.mjs +4 -4
  36. package/esm2022/lib/checkbox/checkbox.component.mjs +4 -4
  37. package/esm2022/lib/checkbox/checkbox.module.mjs +5 -5
  38. package/esm2022/lib/chips/chip.component.mjs +4 -4
  39. package/esm2022/lib/chips/chips-area.component.mjs +4 -4
  40. package/esm2022/lib/chips/chips.module.mjs +5 -5
  41. package/esm2022/lib/combo/combo-add-item.component.mjs +4 -4
  42. package/esm2022/lib/combo/combo-dropdown.component.mjs +4 -4
  43. package/esm2022/lib/combo/combo-item.component.mjs +4 -4
  44. package/esm2022/lib/combo/combo.api.mjs +4 -4
  45. package/esm2022/lib/combo/combo.common.mjs +4 -4
  46. package/esm2022/lib/combo/combo.component.mjs +4 -4
  47. package/esm2022/lib/combo/combo.directives.mjs +25 -25
  48. package/esm2022/lib/combo/combo.module.mjs +5 -5
  49. package/esm2022/lib/combo/combo.pipes.mjs +7 -7
  50. package/esm2022/lib/core/density.mjs +4 -4
  51. package/esm2022/lib/core/navigation/directives.mjs +7 -7
  52. package/esm2022/lib/core/navigation/nav.service.mjs +4 -4
  53. package/esm2022/lib/core/selection.mjs +4 -4
  54. package/esm2022/lib/core/touch.mjs +4 -4
  55. package/esm2022/lib/core/utils.mjs +4 -4
  56. package/esm2022/lib/date-common/calendar-container/calendar-container.component.mjs +4 -4
  57. package/esm2022/lib/date-common/picker-base.directive.mjs +4 -4
  58. package/esm2022/lib/date-common/picker-icons.common.mjs +10 -10
  59. package/esm2022/lib/date-picker/date-picker.component.mjs +4 -4
  60. package/esm2022/lib/date-picker/date-picker.module.mjs +5 -5
  61. package/esm2022/lib/date-range-picker/date-range-picker-inputs.common.mjs +16 -16
  62. package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +4 -4
  63. package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +5 -5
  64. package/esm2022/lib/dialog/dialog.component.mjs +4 -4
  65. package/esm2022/lib/dialog/dialog.directives.mjs +7 -7
  66. package/esm2022/lib/dialog/dialog.module.mjs +5 -5
  67. package/esm2022/lib/directives/autocomplete/autocomplete.directive.mjs +4 -4
  68. package/esm2022/lib/directives/autocomplete/autocomplete.module.mjs +5 -5
  69. package/esm2022/lib/directives/button/button.directive.mjs +4 -4
  70. package/esm2022/lib/directives/button/button.module.mjs +5 -5
  71. package/esm2022/lib/directives/date-time-editor/date-time-editor.directive.mjs +4 -4
  72. package/esm2022/lib/directives/date-time-editor/date-time-editor.module.mjs +5 -5
  73. package/esm2022/lib/directives/divider/divider.directive.mjs +4 -4
  74. package/esm2022/lib/directives/divider/divider.module.mjs +5 -5
  75. package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +13 -13
  76. package/esm2022/lib/directives/drag-drop/drag-drop.module.mjs +5 -5
  77. package/esm2022/lib/directives/filter/filter.directive.mjs +7 -7
  78. package/esm2022/lib/directives/filter/filter.module.mjs +5 -5
  79. package/esm2022/lib/directives/focus/focus.directive.mjs +4 -4
  80. package/esm2022/lib/directives/focus/focus.module.mjs +5 -5
  81. package/esm2022/lib/directives/focus-trap/focus-trap.directive.mjs +4 -4
  82. package/esm2022/lib/directives/focus-trap/focus-trap.module.mjs +5 -5
  83. package/esm2022/lib/directives/for-of/base.helper.component.mjs +4 -4
  84. package/esm2022/lib/directives/for-of/display.container.mjs +4 -4
  85. package/esm2022/lib/directives/for-of/for_of.directive.mjs +7 -7
  86. package/esm2022/lib/directives/for-of/for_of.module.mjs +5 -5
  87. package/esm2022/lib/directives/for-of/for_of.sync.service.mjs +7 -7
  88. package/esm2022/lib/directives/for-of/horizontal.virtual.helper.component.mjs +4 -4
  89. package/esm2022/lib/directives/for-of/virtual.helper.component.mjs +4 -4
  90. package/esm2022/lib/directives/form-control/form-control.directive.mjs +4 -4
  91. package/esm2022/lib/directives/form-control/form-control.module.mjs +5 -5
  92. package/esm2022/lib/directives/hint/hint.directive.mjs +4 -4
  93. package/esm2022/lib/directives/input/input.directive.mjs +4 -4
  94. package/esm2022/lib/directives/label/label.directive.mjs +4 -4
  95. package/esm2022/lib/directives/layout/layout.directive.mjs +7 -7
  96. package/esm2022/lib/directives/layout/layout.module.mjs +5 -5
  97. package/esm2022/lib/directives/mask/mask-parsing.service.mjs +4 -4
  98. package/esm2022/lib/directives/mask/mask.directive.mjs +4 -4
  99. package/esm2022/lib/directives/mask/mask.module.mjs +5 -5
  100. package/esm2022/lib/directives/notification/notifications.directive.mjs +4 -4
  101. package/esm2022/lib/directives/prefix/prefix.directive.mjs +4 -4
  102. package/esm2022/lib/directives/radio/radio-group.directive.mjs +4 -4
  103. package/esm2022/lib/directives/radio/radio-group.module.mjs +5 -5
  104. package/esm2022/lib/directives/ripple/ripple.directive.mjs +4 -4
  105. package/esm2022/lib/directives/ripple/ripple.module.mjs +5 -5
  106. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +4 -4
  107. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.module.mjs +5 -5
  108. package/esm2022/lib/directives/suffix/suffix.directive.mjs +4 -4
  109. package/esm2022/lib/directives/template-outlet/template_outlet.directive.mjs +4 -4
  110. package/esm2022/lib/directives/text-highlight/text-highlight.directive.mjs +4 -4
  111. package/esm2022/lib/directives/text-highlight/text-highlight.module.mjs +5 -5
  112. package/esm2022/lib/directives/text-selection/text-selection.directive.mjs +4 -4
  113. package/esm2022/lib/directives/text-selection/text-selection.module.mjs +5 -5
  114. package/esm2022/lib/directives/toggle/toggle.directive.mjs +10 -10
  115. package/esm2022/lib/directives/toggle/toggle.module.mjs +5 -5
  116. package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +4 -4
  117. package/esm2022/lib/directives/tooltip/tooltip.component.mjs +4 -4
  118. package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +4 -4
  119. package/esm2022/lib/directives/tooltip/tooltip.module.mjs +5 -5
  120. package/esm2022/lib/drop-down/drop-down-group.component.mjs +4 -4
  121. package/esm2022/lib/drop-down/drop-down-item.base.mjs +4 -4
  122. package/esm2022/lib/drop-down/drop-down-item.component.mjs +4 -4
  123. package/esm2022/lib/drop-down/drop-down-navigation.directive.mjs +4 -4
  124. package/esm2022/lib/drop-down/drop-down.base.mjs +4 -4
  125. package/esm2022/lib/drop-down/drop-down.component.mjs +4 -4
  126. package/esm2022/lib/drop-down/drop-down.module.mjs +5 -5
  127. package/esm2022/lib/expansion-panel/expansion-panel-body.component.mjs +4 -4
  128. package/esm2022/lib/expansion-panel/expansion-panel-header.component.mjs +4 -4
  129. package/esm2022/lib/expansion-panel/expansion-panel.common.mjs +4 -4
  130. package/esm2022/lib/expansion-panel/expansion-panel.component.mjs +4 -4
  131. package/esm2022/lib/expansion-panel/expansion-panel.directives.mjs +10 -10
  132. package/esm2022/lib/expansion-panel/expansion-panel.module.mjs +5 -5
  133. package/esm2022/lib/expansion-panel/toggle-animation-component.mjs +4 -4
  134. package/esm2022/lib/grids/api.service.mjs +4 -4
  135. package/esm2022/lib/grids/cell.component.mjs +4 -4
  136. package/esm2022/lib/grids/column-actions/column-actions-base.directive.mjs +4 -4
  137. package/esm2022/lib/grids/column-actions/column-actions.component.mjs +13 -13
  138. package/esm2022/lib/grids/column-actions/column-hiding.directive.mjs +4 -4
  139. package/esm2022/lib/grids/column-actions/column-pinning.directive.mjs +4 -4
  140. package/esm2022/lib/grids/column-actions/public_api.mjs +13 -0
  141. package/esm2022/lib/grids/columns/column-group.component.mjs +4 -4
  142. package/esm2022/lib/grids/columns/column-layout.component.mjs +4 -4
  143. package/esm2022/lib/grids/columns/column.component.mjs +4 -4
  144. package/esm2022/lib/grids/columns/templates.directive.mjs +25 -25
  145. package/esm2022/lib/grids/columns/validators.directive.mjs +22 -22
  146. package/esm2022/lib/grids/common/crud.service.mjs +4 -4
  147. package/esm2022/lib/grids/common/pipes.mjs +55 -55
  148. package/esm2022/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +4 -4
  149. package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +4 -4
  150. package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +4 -4
  151. package/esm2022/lib/grids/filtering/excel-style/base-filtering.component.mjs +4 -4
  152. package/esm2022/lib/grids/filtering/excel-style/excel-style-clear-filters.component.mjs +4 -4
  153. package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +4 -4
  154. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +4 -4
  155. package/esm2022/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +4 -4
  156. package/esm2022/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +4 -4
  157. package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +10 -10
  158. package/esm2022/lib/grids/filtering/excel-style/excel-style-header.component.mjs +4 -4
  159. package/esm2022/lib/grids/filtering/excel-style/excel-style-hiding.component.mjs +4 -4
  160. package/esm2022/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +4 -4
  161. package/esm2022/lib/grids/filtering/excel-style/excel-style-pinning.component.mjs +4 -4
  162. package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +7 -7
  163. package/esm2022/lib/grids/filtering/excel-style/excel-style-selecting.component.mjs +4 -4
  164. package/esm2022/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +4 -4
  165. package/esm2022/lib/grids/filtering/grid-filtering.service.mjs +4 -4
  166. package/esm2022/lib/grids/grid/expandable-cell.component.mjs +4 -4
  167. package/esm2022/lib/grids/grid/grid-api.service.mjs +4 -4
  168. package/esm2022/lib/grids/grid/grid-row.component.mjs +4 -4
  169. package/esm2022/lib/grids/grid/grid-validation.service.mjs +4 -4
  170. package/esm2022/lib/grids/grid/grid.component.mjs +4 -4
  171. package/esm2022/lib/grids/grid/grid.details.pipe.mjs +4 -4
  172. package/esm2022/lib/grids/grid/grid.directives.mjs +34 -34
  173. package/esm2022/lib/grids/grid/grid.module.mjs +27 -24
  174. package/esm2022/lib/grids/grid/grid.pipes.mjs +13 -13
  175. package/esm2022/lib/grids/grid/grid.summary.pipe.mjs +4 -4
  176. package/esm2022/lib/grids/grid/groupby-row.component.mjs +4 -4
  177. package/esm2022/lib/grids/grid-base.directive.mjs +4 -4
  178. package/esm2022/lib/grids/grid-footer/grid-footer.component.mjs +4 -4
  179. package/esm2022/lib/grids/grid-mrl-navigation.service.mjs +4 -4
  180. package/esm2022/lib/grids/grid-navigation.service.mjs +4 -4
  181. package/esm2022/lib/grids/grid.common.mjs +4 -4
  182. package/esm2022/lib/grids/grid.rowEdit.directive.mjs +16 -16
  183. package/esm2022/lib/grids/grouping/grid-group-by-area.component.mjs +4 -4
  184. package/esm2022/lib/grids/grouping/group-by-area.directive.mjs +7 -7
  185. package/esm2022/lib/grids/grouping/tree-grid-group-by-area.component.mjs +4 -4
  186. package/esm2022/lib/grids/headers/grid-header-group.component.mjs +4 -4
  187. package/esm2022/lib/grids/headers/grid-header-row.component.mjs +4 -4
  188. package/esm2022/lib/grids/headers/grid-header.component.mjs +4 -4
  189. package/esm2022/lib/grids/headers/pipes.mjs +10 -10
  190. package/esm2022/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +4 -4
  191. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +4 -4
  192. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +4 -4
  193. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +4 -4
  194. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +7 -7
  195. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +27 -24
  196. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.pipes.mjs +7 -7
  197. package/esm2022/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +4 -4
  198. package/esm2022/lib/grids/hierarchical-grid/row-island-api.service.mjs +4 -4
  199. package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +4 -4
  200. package/esm2022/lib/grids/moving/moving.drag.directive.mjs +4 -4
  201. package/esm2022/lib/grids/moving/moving.drop.directive.mjs +4 -4
  202. package/esm2022/lib/grids/moving/moving.service.mjs +4 -4
  203. package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +4 -4
  204. package/esm2022/lib/grids/pivot-grid/pivot-filtering.service.mjs +4 -4
  205. package/esm2022/lib/grids/pivot-grid/pivot-grid-navigation.service.mjs +4 -4
  206. package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +4 -4
  207. package/esm2022/lib/grids/pivot-grid/pivot-grid.directives.mjs +4 -4
  208. package/esm2022/lib/grids/pivot-grid/pivot-grid.module.mjs +27 -24
  209. package/esm2022/lib/grids/pivot-grid/pivot-grid.pipes.mjs +31 -31
  210. package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +4 -4
  211. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +4 -4
  212. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +4 -4
  213. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header.component.mjs +4 -4
  214. package/esm2022/lib/grids/pivot-grid/pivot-row.component.mjs +4 -4
  215. package/esm2022/lib/grids/public_api.mjs +5 -2
  216. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +4 -4
  217. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizer.component.mjs +4 -4
  218. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizing.service.mjs +4 -4
  219. package/esm2022/lib/grids/resizing/resize-handle.directive.mjs +4 -4
  220. package/esm2022/lib/grids/resizing/resizer.component.mjs +4 -4
  221. package/esm2022/lib/grids/resizing/resizer.directive.mjs +4 -4
  222. package/esm2022/lib/grids/resizing/resizing.service.mjs +4 -4
  223. package/esm2022/lib/grids/row-drag.directive.mjs +10 -10
  224. package/esm2022/lib/grids/row.directive.mjs +4 -4
  225. package/esm2022/lib/grids/selection/drag-select.directive.mjs +4 -4
  226. package/esm2022/lib/grids/selection/row-selectors.mjs +10 -10
  227. package/esm2022/lib/grids/selection/selection.service.mjs +4 -4
  228. package/esm2022/lib/grids/state.directive.mjs +4 -4
  229. package/esm2022/lib/grids/summaries/grid-root-summary.pipe.mjs +4 -4
  230. package/esm2022/lib/grids/summaries/grid-summary.service.mjs +4 -4
  231. package/esm2022/lib/grids/summaries/summary-cell.component.mjs +4 -4
  232. package/esm2022/lib/grids/summaries/summary-row.component.mjs +4 -4
  233. package/esm2022/lib/grids/toolbar/common.mjs +16 -16
  234. package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +4 -4
  235. package/esm2022/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +4 -4
  236. package/esm2022/lib/grids/toolbar/grid-toolbar-hiding.component.mjs +4 -4
  237. package/esm2022/lib/grids/toolbar/grid-toolbar-pinning.component.mjs +4 -4
  238. package/esm2022/lib/grids/toolbar/grid-toolbar.base.mjs +7 -7
  239. package/esm2022/lib/grids/toolbar/grid-toolbar.component.mjs +4 -4
  240. package/esm2022/lib/grids/tree-grid/public_api.mjs +4 -1
  241. package/esm2022/lib/grids/tree-grid/tree-cell.component.mjs +4 -4
  242. package/esm2022/lib/grids/tree-grid/tree-grid-api.service.mjs +4 -4
  243. package/esm2022/lib/grids/tree-grid/tree-grid-row.component.mjs +4 -4
  244. package/esm2022/lib/grids/tree-grid/tree-grid-selection.service.mjs +4 -4
  245. package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +4 -4
  246. package/esm2022/lib/grids/tree-grid/tree-grid.directives.mjs +4 -4
  247. package/esm2022/lib/grids/tree-grid/tree-grid.filtering.pipe.mjs +4 -4
  248. package/esm2022/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +4 -4
  249. package/esm2022/lib/grids/tree-grid/tree-grid.module.mjs +43 -39
  250. package/esm2022/lib/grids/tree-grid/tree-grid.pipes.mjs +22 -22
  251. package/esm2022/lib/grids/tree-grid/tree-grid.summary.pipe.mjs +4 -4
  252. package/esm2022/lib/icon/icon.component.mjs +4 -4
  253. package/esm2022/lib/icon/icon.module.mjs +5 -5
  254. package/esm2022/lib/icon/icon.service.mjs +4 -4
  255. package/esm2022/lib/input-group/input-group.component.mjs +4 -4
  256. package/esm2022/lib/input-group/input-group.module.mjs +5 -5
  257. package/esm2022/lib/list/list-item.component.mjs +4 -4
  258. package/esm2022/lib/list/list.common.mjs +16 -16
  259. package/esm2022/lib/list/list.component.mjs +19 -19
  260. package/esm2022/lib/list/list.module.mjs +5 -5
  261. package/esm2022/lib/navbar/navbar.component.mjs +10 -10
  262. package/esm2022/lib/navbar/navbar.module.mjs +5 -5
  263. package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +4 -4
  264. package/esm2022/lib/navigation-drawer/navigation-drawer.directives.mjs +10 -10
  265. package/esm2022/lib/navigation-drawer/navigation-drawer.module.mjs +5 -5
  266. package/esm2022/lib/paginator/paginator-interfaces.mjs +4 -4
  267. package/esm2022/lib/paginator/paginator.component.mjs +13 -13
  268. package/esm2022/lib/paginator/paginator.module.mjs +5 -5
  269. package/esm2022/lib/progressbar/progressbar.common.mjs +7 -7
  270. package/esm2022/lib/progressbar/progressbar.component.mjs +10 -10
  271. package/esm2022/lib/progressbar/progressbar.module.mjs +5 -5
  272. package/esm2022/lib/query-builder/query-builder-header.component.mjs +4 -4
  273. package/esm2022/lib/query-builder/query-builder.component.mjs +7 -7
  274. package/esm2022/lib/query-builder/query-builder.module.mjs +5 -5
  275. package/esm2022/lib/radio/radio.component.mjs +4 -4
  276. package/esm2022/lib/select/select-group.component.mjs +4 -4
  277. package/esm2022/lib/select/select-item.component.mjs +4 -4
  278. package/esm2022/lib/select/select-navigation.directive.mjs +4 -4
  279. package/esm2022/lib/select/select.component.mjs +13 -13
  280. package/esm2022/lib/select/select.module.mjs +5 -5
  281. package/esm2022/lib/services/animation/angular-animation-service.mjs +4 -4
  282. package/esm2022/lib/services/csv/csv-exporter.mjs +4 -4
  283. package/esm2022/lib/services/direction/directionality.mjs +4 -4
  284. package/esm2022/lib/services/excel/excel-exporter.mjs +4 -4
  285. package/esm2022/lib/services/overlay/overlay.mjs +4 -4
  286. package/esm2022/lib/services/transaction/transaction-factory.service.mjs +7 -7
  287. package/esm2022/lib/simple-combo/simple-combo.component.mjs +4 -4
  288. package/esm2022/lib/simple-combo/simple-combo.module.mjs +5 -5
  289. package/esm2022/lib/slider/label/thumb-label.component.mjs +4 -4
  290. package/esm2022/lib/slider/slider.common.mjs +10 -10
  291. package/esm2022/lib/slider/slider.component.mjs +4 -4
  292. package/esm2022/lib/slider/slider.module.mjs +5 -5
  293. package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +4 -4
  294. package/esm2022/lib/slider/ticks/tick.pipe.mjs +4 -4
  295. package/esm2022/lib/slider/ticks/ticks.component.mjs +4 -4
  296. package/esm2022/lib/snackbar/snackbar.component.mjs +4 -4
  297. package/esm2022/lib/snackbar/snackbar.module.mjs +5 -5
  298. package/esm2022/lib/splitter/splitter-pane/splitter-pane.component.mjs +4 -4
  299. package/esm2022/lib/splitter/splitter.component.mjs +7 -7
  300. package/esm2022/lib/splitter/splitter.module.mjs +5 -5
  301. package/esm2022/lib/stepper/step/step.component.mjs +4 -4
  302. package/esm2022/lib/stepper/stepper.component.mjs +4 -4
  303. package/esm2022/lib/stepper/stepper.directive.mjs +22 -22
  304. package/esm2022/lib/stepper/stepper.module.mjs +5 -5
  305. package/esm2022/lib/stepper/stepper.service.mjs +4 -4
  306. package/esm2022/lib/switch/switch.component.mjs +4 -4
  307. package/esm2022/lib/switch/switch.module.mjs +5 -5
  308. package/esm2022/lib/tabs/bottom-nav/bottom-nav-content.component.mjs +4 -4
  309. package/esm2022/lib/tabs/bottom-nav/bottom-nav-header.component.mjs +4 -4
  310. package/esm2022/lib/tabs/bottom-nav/bottom-nav-item.component.mjs +4 -4
  311. package/esm2022/lib/tabs/bottom-nav/bottom-nav.component.mjs +4 -4
  312. package/esm2022/lib/tabs/bottom-nav/bottom-nav.directives.mjs +7 -7
  313. package/esm2022/lib/tabs/bottom-nav/bottom-nav.module.mjs +5 -5
  314. package/esm2022/lib/tabs/tab-content.directive.mjs +4 -4
  315. package/esm2022/lib/tabs/tab-header.directive.mjs +4 -4
  316. package/esm2022/lib/tabs/tab-item.directive.mjs +4 -4
  317. package/esm2022/lib/tabs/tabs/tab-content.component.mjs +4 -4
  318. package/esm2022/lib/tabs/tabs/tab-header.component.mjs +4 -4
  319. package/esm2022/lib/tabs/tabs/tab-item.component.mjs +4 -4
  320. package/esm2022/lib/tabs/tabs/tabs.component.mjs +4 -4
  321. package/esm2022/lib/tabs/tabs/tabs.directives.mjs +7 -7
  322. package/esm2022/lib/tabs/tabs/tabs.module.mjs +5 -5
  323. package/esm2022/lib/tabs/tabs.directive.mjs +4 -4
  324. package/esm2022/lib/time-picker/time-picker.component.mjs +4 -4
  325. package/esm2022/lib/time-picker/time-picker.directives.mjs +7 -7
  326. package/esm2022/lib/time-picker/time-picker.module.mjs +5 -5
  327. package/esm2022/lib/time-picker/time-picker.pipes.mjs +7 -7
  328. package/esm2022/lib/toast/toast.component.mjs +4 -4
  329. package/esm2022/lib/toast/toast.module.mjs +5 -5
  330. package/esm2022/lib/tree/tree-navigation.service.mjs +4 -4
  331. package/esm2022/lib/tree/tree-node/tree-node.component.mjs +7 -7
  332. package/esm2022/lib/tree/tree-selection.service.mjs +4 -4
  333. package/esm2022/lib/tree/tree.component.mjs +10 -10
  334. package/esm2022/lib/tree/tree.module.mjs +5 -5
  335. package/esm2022/lib/tree/tree.service.mjs +4 -4
  336. package/fesm2022/igniteui-angular.mjs +2330 -2321
  337. package/fesm2022/igniteui-angular.mjs.map +1 -1
  338. package/lib/grids/column-actions/public_api.d.ts +7 -0
  339. package/lib/grids/grid/grid.module.d.ts +23 -20
  340. package/lib/grids/grid/public_api.d.ts +1 -1
  341. package/lib/grids/hierarchical-grid/hierarchical-grid.module.d.ts +23 -20
  342. package/lib/grids/hierarchical-grid/public_api.d.ts +1 -1
  343. package/lib/grids/pivot-grid/pivot-grid.module.d.ts +23 -20
  344. package/lib/grids/pivot-grid/public_api.d.ts +1 -1
  345. package/lib/grids/public_api.d.ts +2 -1
  346. package/lib/grids/tree-grid/public_api.d.ts +3 -1
  347. package/lib/grids/tree-grid/tree-grid.module.d.ts +39 -35
  348. package/package.json +6 -6
@@ -460,14 +460,14 @@ export class IgxCheckboxComponent {
460
460
  this._invalid = false;
461
461
  }
462
462
  }
463
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
464
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0-rc.4", type: IgxCheckboxComponent, isStandalone: true, selector: "igx-checkbox", inputs: { id: "id", labelId: "labelId", value: "value", name: "name", tabindex: "tabindex", labelPosition: "labelPosition", disableRipple: "disableRipple", required: "required", ariaLabelledBy: ["aria-labelledby", "ariaLabelledBy"], ariaLabel: ["aria-label", "ariaLabel"], indeterminate: "indeterminate", checked: "checked", disabled: "disabled", invalid: "invalid", readonly: "readonly", disableTransitions: "disableTransitions" }, outputs: { change: "change" }, host: { listeners: { "keyup": "onKeyUp($event)", "click": "_onCheckboxClick($event)", "blur": "onBlur()" }, properties: { "attr.id": "this.id", "class.igx-checkbox": "this.cssClass", "class.igx-checkbox--focused": "this.focused", "class.igx-checkbox--indeterminate": "this.indeterminate", "class.igx-checkbox--checked": "this.checked", "class.igx-checkbox--disabled": "this.disabled", "class.igx-checkbox--invalid": "this.invalid", "class.igx-checkbox--plain": "this.disableTransitions" } }, providers: [{
463
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
464
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: IgxCheckboxComponent, isStandalone: true, selector: "igx-checkbox", inputs: { id: "id", labelId: "labelId", value: "value", name: "name", tabindex: "tabindex", labelPosition: "labelPosition", disableRipple: "disableRipple", required: "required", ariaLabelledBy: ["aria-labelledby", "ariaLabelledBy"], ariaLabel: ["aria-label", "ariaLabel"], indeterminate: "indeterminate", checked: "checked", disabled: "disabled", invalid: "invalid", readonly: "readonly", disableTransitions: "disableTransitions" }, outputs: { change: "change" }, host: { listeners: { "keyup": "onKeyUp($event)", "click": "_onCheckboxClick($event)", "blur": "onBlur()" }, properties: { "attr.id": "this.id", "class.igx-checkbox": "this.cssClass", "class.igx-checkbox--focused": "this.focused", "class.igx-checkbox--indeterminate": "this.indeterminate", "class.igx-checkbox--checked": "this.checked", "class.igx-checkbox--disabled": "this.disabled", "class.igx-checkbox--invalid": "this.invalid", "class.igx-checkbox--plain": "this.disableTransitions" } }, providers: [{
465
465
  provide: EDITOR_PROVIDER,
466
466
  useExisting: IgxCheckboxComponent,
467
467
  multi: true
468
468
  }], viewQueries: [{ propertyName: "nativeCheckbox", first: true, predicate: ["checkbox"], descendants: true, static: true }, { propertyName: "nativeLabel", first: true, predicate: ["label"], descendants: true, static: true }, { propertyName: "placeholderLabel", first: true, predicate: ["placeholderLabel"], descendants: true, static: true }], ngImport: i0, template: "<input #checkbox class=\"igx-checkbox__input\"\n type=\"checkbox\"\n [id]=\"inputId\"\n [name]=\"name\"\n [value]=\"value\"\n [tabindex]=\"tabindex\"\n [disabled]=\"disabled\"\n [indeterminate]=\"indeterminate\"\n [checked]=\"checked\"\n [required]=\"required\"\n [attr.aria-required]=\"required\"\n [attr.aria-invalid]=\"invalid\"\n [attr.aria-checked]=\"ariaChecked\"\n [attr.aria-labelledby]=\"ariaLabel ? null : ariaLabelledBy\"\n [attr.aria-label]=\"ariaLabel\"\n (change)=\"_onCheckboxChange($event)\"\n (blur)=\"onBlur()\" />\n\n<div\n igxRipple\n igxRippleTarget=\".igx-checkbox__ripple\"\n [igxRippleDisabled]=\"disableRipple\"\n [igxRippleCentered]=\"true\"\n [igxRippleDuration]=\"300\"\n class=\"igx-checkbox__composite-wrapper\"\n>\n <span #label class=\"igx-checkbox__composite\">\n <svg class=\"igx-checkbox__composite-mark\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M4.1,12.7 9,17.6 20.3,6.3\" />\n </svg>\n </span>\n\n <div class=\"igx-checkbox__ripple\"></div>\n</div>\n\n<span #placeholderLabel\n [class]=\"labelClass\"\n [id]=\"labelId\">\n <ng-content></ng-content>\n</span>\n", dependencies: [{ kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }] }); }
469
469
  }
470
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxCheckboxComponent, decorators: [{
470
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxCheckboxComponent, decorators: [{
471
471
  type: Component,
472
472
  args: [{ selector: 'igx-checkbox', providers: [{
473
473
  provide: EDITOR_PROVIDER,
@@ -557,4 +557,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ng
557
557
  type: HostListener,
558
558
  args: ['blur']
559
559
  }] } });
560
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUtULFFBQVEsRUFDUixJQUFJLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQWtCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTNDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDaEMsTUFBTSxFQUFFLFFBQVE7SUFDaEIsS0FBSyxFQUFFLE9BQU87Q0FDakIsQ0FBQyxDQUFDO0FBUUgsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQWFILE1BQU0sT0FBTyxvQkFBb0I7SUF1QzdCOzs7Ozs7O09BT0c7SUFDSCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGFB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QkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWlEMUIsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIFJlbmRlcmVyMixcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElneFJpcHBsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MsIG1rZW51bSB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRWRpdG9yUHJvdmlkZXIsIEVESVRPUl9QUk9WSURFUiB9IGZyb20gJy4uL2NvcmUvZWRpdC1wcm92aWRlcic7XG5pbXBvcnQgeyBub29wLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjb25zdCBMYWJlbFBvc2l0aW9uID0gbWtlbnVtKHtcbiAgICBCRUZPUkU6ICdiZWZvcmUnLFxuICAgIEFGVEVSOiAnYWZ0ZXInXG59KTtcbmV4cG9ydCB0eXBlIExhYmVsUG9zaXRpb24gPSB0eXBlb2YgTGFiZWxQb3NpdGlvbltrZXlvZiB0eXBlb2YgTGFiZWxQb3NpdGlvbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoYW5nZUNoZWNrYm94RXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgY2hlY2tib3g6IElneENoZWNrYm94Q29tcG9uZW50O1xufVxuXG5sZXQgbmV4dElkID0gMDtcbi8qKlxuICogQWxsb3dzIHVzZXJzIHRvIG1ha2UgYSBiaW5hcnkgY2hvaWNlIGZvciBhIGNlcnRhaW4gY29uZGl0aW9uLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4Q2hlY2tib3hNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWNoZWNrYm94LXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGNoZWNrYm94LCBsYWJlbFxuICpcbiAqIEBpZ3hHcm91cCBEYXRhIGVudHJ5IGFuZCBkaXNwbGF5XG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgQ2hlY2tib3ggaXMgYSBzZWxlY3Rpb24gY29udHJvbCB0aGF0IGFsbG93cyB1c2VycyB0byBtYWtlIGEgYmluYXJ5IGNob2ljZSBmb3IgYSBjZXJ0YWluIGNvbmRpdGlvbi5JdCBiZWhhdmVzIHNpbWlsYXJseVxuICogdG8gdGhlIG5hdGl2ZSBicm93c2VyIGNoZWNrYm94LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWNoZWNrYm94IFtjaGVja2VkXT1cInRydWVcIj5cbiAqICAgc2ltcGxlIGNoZWNrYm94XG4gKiA8L2lneC1jaGVja2JveD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jaGVja2JveCcsXG4gICAgcHJvdmlkZXJzOiBbe1xuICAgICAgICBwcm92aWRlOiBFRElUT1JfUFJPVklERVIsXG4gICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hDaGVja2JveENvbXBvbmVudCxcbiAgICAgICAgbXVsdGk6IHRydWVcbiAgICB9XSxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICB0ZW1wbGF0ZVVybDogJ2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJZ3hSaXBwbGVEaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIElneENoZWNrYm94Q29tcG9uZW50IGltcGxlbWVudHMgRWRpdG9yUHJvdmlkZXIsIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBwcml2YXRlIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZXF1aXJlZDogYm9vbGVhbiB8ICcnO1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBib29sZWFuIHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgdGhlIGNoZWNrYm94IHN0YXRlIGlzIGNoYW5nZWQuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlcyB0byB0aGUgYElneENoZWNrYm94Q29tcG9uZW50YCBhbmQgdGhlIGBjaGVja2VkYCBwcm9wZXJ0eSBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxJQ2hhbmdlQ2hlY2tib3hFdmVudEFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhbmdlQ2hlY2tib3hFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmUgY2hlY2tib3ggZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjaGVja2JveEVsZW1lbnQgPSAgdGhpcy5jaGVja2JveC5jaGVja2JveEVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnY2hlY2tib3gnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBuYXRpdmVDaGVja2JveDogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmUgbGFiZWwgZWxlbWVudC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGxldCBsYWJlbEVsZW1lbnQgPSAgdGhpcy5jaGVja2JveC5uYXRpdmVMYWJlbDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdsYWJlbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIG5hdGl2ZUxhYmVsOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyByZWZlcmVuY2UgdG8gdGhlIGBuYXRpdmVFbGVtZW50YCBvZiB0aGUgaWd4LWNoZWNrYm94LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLmNoZWNrYm94Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVDaGVja2JveC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgcmVmZXJlbmNlIHRvIHRoZSBsYWJlbCBwbGFjZWhvbGRlciBlbGVtZW50LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbGV0IGxhYmVsUGxhY2Vob2xkZXIgPSAgdGhpcy5jaGVja2JveC5wbGFjZWhvbGRlckxhYmVsO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3BsYWNlaG9sZGVyTGFiZWwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBwbGFjZWhvbGRlckxhYmVsOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBjaGVja2JveCBjb21wb25lbnQuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpZGAgb2YgdGhlIGZpcnN0IGNoZWNrYm94IGNvbXBvbmVudCB3aWxsIGJlIGBcImlneC1jaGVja2JveC0wXCJgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGVja2JveCBpZD1cIm15LWZpcnN0LWNoZWNrYm94XCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjaGVja2JveElkID0gIHRoaXMuY2hlY2tib3guaWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtY2hlY2tib3gtJHtuZXh0SWQrK31gO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBpZCBvZiB0aGUgYGxhYmVsYCBlbGVtZW50LlxuICAgICAqIElmIG5vdCBzZXQsIHRoZSBpZCBvZiB0aGUgYGxhYmVsYCBpbiB0aGUgZmlyc3QgY2hlY2tib3ggY29tcG9uZW50IHdpbGwgYmUgYFwiaWd4LWNoZWNrYm94LTAtbGFiZWxcImAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IGxhYmVsSWQgPSBcIkxhYmVsMVwiPjwvaWd4LWNoZWNrYm94PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbGFiZWxJZCA9ICB0aGlzLmNoZWNrYm94LmxhYmVsSWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsSWQgPSBgJHt0aGlzLmlkfS1sYWJlbGA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGB2YWx1ZWAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGVja2JveCBbdmFsdWVdID0gXCInQ2hlY2tib3hWYWx1ZSdcIj48L2lneC1jaGVja2JveD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHZhbHVlID0gIHRoaXMuY2hlY2tib3gudmFsdWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHZhbHVlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBuYW1lYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IG5hbWUgPSBcIkNoZWNrYm94MVwiPjwvaWd4LWNoZWNrYm94PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbmFtZSA9ICB0aGlzLmNoZWNrYm94Lm5hbWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdmFsdWUgb2YgdGhlIGB0YWJpbmRleGAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGVja2JveCBbdGFiaW5kZXhdID0gXCIxXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0YWJJbmRleCA9ICB0aGlzLmNoZWNrYm94LnRhYmluZGV4O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyB0YWJpbmRleDogbnVtYmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqICBTZXRzL2dldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBgbGFiZWxgLlxuICAgICAqICBJZiBub3Qgc2V0LCB0aGUgYGxhYmVsUG9zaXRpb25gIHdpbGwgaGF2ZSB2YWx1ZSBgXCJhZnRlclwiYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hlY2tib3ggbGFiZWxQb3NpdGlvbiA9IFwiYmVmb3JlXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBsYWJlbFBvc2l0aW9uID0gIHRoaXMuY2hlY2tib3gubGFiZWxQb3NpdGlvbjtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsYWJlbFBvc2l0aW9uOiBMYWJlbFBvc2l0aW9uIHwgc3RyaW5nID0gTGFiZWxQb3NpdGlvbi5BRlRFUjtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvRGlzYWJsZXMgdGhlIHJpcHBsZSBlZmZlY3QuXG4gICAgICogSWYgbm90IHNldCwgYGRpc2FibGVSaXBwbGVgIHdpbGwgaGF2ZSB2YWx1ZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGVja2JveCBbZGlzYWJsZVJpcHBsZV0gPSBcInRydWVcIj48L2lneC1jaGVja2JveD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzUmlwcGxlRGlzYWJsZWQgPSB0aGlzLmNoZWNrYm94LmRlc2FibGVSaXBwbGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZVJpcHBsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIGNoZWNrYm94IGlzIHJlcXVpcmVkLlxuICAgICAqIElmIG5vdCBzZXQsIGByZXF1aXJlZGAgd2lsbCBoYXZlIHZhbHVlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IHJlcXVpcmVkPjwvaWd4LWNoZWNrYm94PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNSZXF1aXJlZCA9IHRoaXMuY2hlY2tib3gucmVxdWlyZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQgfHwgdGhpcy5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgncmVxdWlyZWQnKTtcbiAgICB9XG4gICAgcHVibGljIHNldCByZXF1aXJlZCAodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWQgPSAodmFsdWUgYXMgYW55ID09PSAnJykgfHwgdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgYXJpYS1sYWJlbGxlZGJ5YCBhdHRyaWJ1dGUuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBhcmlhLWxhYmVsbGVkYnlgIHdpbGwgYmUgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIGBsYWJlbElkYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IGFyaWEtbGFiZWxsZWRieSA9IFwiQ2hlY2tib3gxXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBhcmlhTGFiZWxsZWRCeSA9IHRoaXMuY2hlY2tib3guYXJpYUxhYmVsbGVkQnk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdhcmlhLWxhYmVsbGVkYnknKVxuICAgIHB1YmxpYyBhcmlhTGFiZWxsZWRCeSA9IHRoaXMubGFiZWxJZDtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IGFyaWEtbGFiZWwgPSBcIkNoZWNrYm94MVwiPjwvaWd4LWNoZWNrYm94PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgYXJpYUxhYmVsID0gdGhpcy5jaGVja2JveC5hcmlhTGFiZWw7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdhcmlhLWxhYmVsJylcbiAgICBwdWJsaWMgYXJpYUxhYmVsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNsYXNzIG9mIHRoZSBjaGVja2JveCBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2xhc3MgPSB0aGlzLmNoZWNrYm94LmNzc0NsYXNzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNoZWNrYm94JylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWNoZWNrYm94JztcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjaGVja2JveCBjb21wb25lbnQgaXMgb24gZm9jdXMuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jaGVja2JveC5mb2N1c2VkID0gIHRydWU7XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0ZvY3VzZWQgPSB0aGlzLmNoZWNrYm94LmZvY3VzZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2hlY2tib3gtLWZvY3VzZWQnKVxuICAgIHB1YmxpYyBmb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGNoZWNrYm94IGluZGV0ZXJtaW5hdGUgdmlzdWFsIHN0YXRlLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYDtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hlY2tib3ggW2luZGV0ZXJtaW5hdGVdID0gXCJ0cnVlXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0luZGV0ZXJtaW5hdGUgPSB0aGlzLmNoZWNrYm94LmluZGV0ZXJtaW5hdGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2hlY2tib3gtLWluZGV0ZXJtaW5hdGUnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjaGVja2JveCBpcyBjaGVja2VkLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hlY2tib3ggW2NoZWNrZWRdID0gXCJ0cnVlXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0NoZWNrZWQgPSAgdGhpcy5jaGVja2JveC5jaGVja2VkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNoZWNrYm94LS1jaGVja2VkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgY2hlY2tlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgY2hlY2tlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZih0aGlzLl9jaGVja2VkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLl9jaGVja2VkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjaGVja2JveCBpcyBkaXNhYmxlZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IGRpc2FibGVkPjwvaWd4LWNoZWNrYm94PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNEaXNhYmxlZCA9IHRoaXMuY2hlY2tib3guZGlzYWJsZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2hlY2tib3gtLWRpc2FibGVkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9ICh2YWx1ZSBhcyBhbnkgPT09ICcnKSB8fCB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2hlY2tib3ggaXMgaW52YWxpZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IGludmFsaWQ+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0ludmFsaWQgPSB0aGlzLmNoZWNrYm94LmludmFsaWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2hlY2tib3gtLWludmFsaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZCB8fCBmYWxzZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBpbnZhbGlkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ludmFsaWQgPSAhIXZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjaGVja2JveCBpcyByZWFkb25seS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IFtyZWFkb25seV09XCJ0cnVlXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCByZWFkb25seSA9IHRoaXMuY2hlY2tib3gucmVhZG9ubHk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjaGVja2JveCBzaG91bGQgZGlzYWJsZSBhbGwgY3NzIHRyYW5zaXRpb25zLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hlY2tib3ggW2Rpc2FibGVUcmFuc2l0aW9uc109XCJ0cnVlXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBkaXNhYmxlVHJhbnNpdGlvbnMgPSB0aGlzLmNoZWNrYm94LmRpc2FibGVUcmFuc2l0aW9ucztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jaGVja2JveC0tcGxhaW4nKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVUcmFuc2l0aW9ucyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpbnB1dElkID0gYCR7dGhpcy5pZH0taW5wdXRgO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGVja2VkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2ludmFsaWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHRoaXMudXBkYXRlVmFsaWRpdHlTdGF0ZS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yIHx8IHRoaXMubmdDb250cm9sLmNvbnRyb2wuYXN5bmNWYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IHRoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgX29uQ2hlY2tib3hDbGljayhldmVudDogUG9pbnRlckV2ZW50IHwgTW91c2VFdmVudCkge1xuICAgICAgICAvLyBTaW5jZSB0aGUgb3JpZ2luYWwgY2hlY2tib3ggaXMgaGlkZGVuIGFuZCB0aGUgbGFiZWxcbiAgICAgICAgLy8gaXMgdXNlZCBmb3Igc3R5bGluZyBhbmQgdG8gY2hhbmdlIHRoZSBjaGVja2VkIHN0YXRlIG9mIHRoZSBjaGVja2JveCxcbiAgICAgICAgLy8gd2UgbmVlZCB0byBwcmV2ZW50IHRoZSBjaGVja2JveCBjbGljayBldmVudCBmcm9tIGJ1YmJsaW5nIHVwXG4gICAgICAgIC8vIGFzIGl0IGdldHMgdHJpZ2dlcmVkIG9uIGxhYmVsIGNsaWNrXG4gICAgICAgIC8vIE5PVEU6IFRoZSBhYm92ZSBpcyBubyBsb25nZXIgdmFsaWQsIGFzIHRoZSBuYXRpdmUgY2hlY2tib3ggaXMgbm90IGxhYmVsZWRcbiAgICAgICAgLy8gYnkgdGhlIFNWRyBhbnltb3JlLlxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICAvLyByZWFkb25seSBwcmV2ZW50cyB0aGUgY29tcG9uZW50IGZyb20gY2hhbmdpbmcgc3RhdGUgKHNlZSB0b2dnbGUoKSBtZXRob2QpLlxuICAgICAgICAgICAgLy8gSG93ZXZlciwgdGhlIG5hdGl2ZSBjaGVja2JveCBjYW4gc3RpbGwgYmUgYWN0aXZhdGVkIHRocm91Z2ggdXNlciBpbnRlcmFjdGlvbiAoZm9jdXMgKyBzcGFjZSwgbGFiZWwgY2xpY2spXG4gICAgICAgICAgICAvLyBQcmV2ZW50IHRoZSBuYXRpdmUgY2hhbmdlIHNvIHRoZSBpbnB1dCByZW1haW5zIGluIHN5bmNcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5hdGl2ZUNoZWNrYm94Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eVN0YXRlKCk7XG5cbiAgICAgICAgLy8gSy5ELiBNYXJjaCAyMywgMjAyMSBFbWl0dGluZyBvbiBjbGljayBhbmQgbm90IG9uIHRoZSBzZXR0ZXIgYmVjYXVzZSBvdGhlcndpc2UgZXZlcnkgY29tcG9uZW50XG4gICAgICAgIC8vIGJvdW5kIG9uIGNoYW5nZSB3b3VsZCBoYXZlIHRvIHBlcmZvcm0gc2VsZiBjaGVja3MgZm9yIHdlYXRoZXIgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkIGJlY2F1c2VcbiAgICAgICAgLy8gb2YgdGhlIGluaXRpYWwgc2V0IG9uIGluaXRpYWxpemF0aW9uXG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoeyBjaGVja2VkOiB0aGlzLl9jaGVja2VkLCBjaGVja2JveDogdGhpcyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBhcmlhQ2hlY2tlZCgpIHtcbiAgICAgICBpZiAodGhpcy5pbmRldGVybWluYXRlKSB7XG4gICAgICAgICAgIHJldHVybiAnbWl4ZWQnO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrZWQ7XG4gICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBfb25DaGVja2JveENoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgLy8gV2UgaGF2ZSB0byBzdG9wIHRoZSBvcmlnaW5hbCBjaGVja2JveCBjaGFuZ2UgZXZlbnRcbiAgICAgICAgLy8gZnJvbSBidWJibGluZyB1cCBzaW5jZSB3ZSBlbWl0IG91ciBvd24gY2hhbmdlIGV2ZW50XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICAgIHB1YmxpYyBvbkJsdXIoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5U3RhdGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9jaGVja2VkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBsYWJlbENsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5sYWJlbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIExhYmVsUG9zaXRpb24uQkVGT1JFOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNzc0NsYXNzfV9fbGFiZWwtLWJlZm9yZWA7XG4gICAgICAgICAgICBjYXNlIExhYmVsUG9zaXRpb24uQUZURVI6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNzc0NsYXNzfV9fbGFiZWxgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVDaGVja2JveC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlVmFsaWRpdHlTdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuaW5kZXRlcm1pbmF0ZSAmJiAhdGhpcy5yZWFkb25seSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLm5nQ29udHJvbC5jb250cm9sLnRvdWNoZWQgfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5kaXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGUgY29udHJvbCBpcyBub3QgZGlzYWJsZWQgYW5kIGlzIHRvdWNoZWQgb3IgZGlydHlcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludmFsaWQgPSB0aGlzLm5nQ29udHJvbC5pbnZhbGlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludmFsaWQgPSB0aGlzLnJlcXVpcmVkID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gIGlmIHRoZSBjb250cm9sIGlzIHVudG91Y2hlZCwgcHJpc3RpbmUsIG9yIGRpc2FibGVkLCBpdHMgc3RhdGUgaXMgaW5pdGlhbC4gVGhpcyBpcyB3aGVuIHRoZSB1c2VyIGRpZCBub3QgaW50ZXJhY3RcbiAgICAgICAgICAgICAgICAvLyAgd2l0aCB0aGUgY2hlY2tib3ggb3Igd2hlbiB0aGUgZm9ybS9jb250cm9sIGlzIHJlc2V0XG4gICAgICAgICAgICAgICAgdGhpcy5faW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja05hdGl2ZVZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGFzc2lnbiBhIG5hdGl2ZSB2YWxpZGl0eSBwcm9wZXJ0eSBvZiBhIGNoZWNrYm94LlxuICAgICAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGVyZSdzIG5vIG5nQ29udHJvbFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgY2hlY2tOYXRpdmVWYWxpZGl0eSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHRoaXMuX3JlcXVpcmVkICYmICF0aGlzLmNoZWNrZWQgJiYgIXRoaXMuaW5kZXRlcm1pbmF0ZSAmJiAhdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgdGhpcy5faW52YWxpZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pbnZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8aW5wdXQgI2NoZWNrYm94IGNsYXNzPVwiaWd4LWNoZWNrYm94X19pbnB1dFwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2luZGV0ZXJtaW5hdGVdPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaW52YWxpZFwiXG4gICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImFyaWFDaGVja2VkXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsID8gbnVsbCA6IGFyaWFMYWJlbGxlZEJ5XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgKGNoYW5nZSk9XCJfb25DaGVja2JveENoYW5nZSgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiIC8+XG5cbjxkaXZcbiAgICBpZ3hSaXBwbGVcbiAgICBpZ3hSaXBwbGVUYXJnZXQ9XCIuaWd4LWNoZWNrYm94X19yaXBwbGVcIlxuICAgIFtpZ3hSaXBwbGVEaXNhYmxlZF09XCJkaXNhYmxlUmlwcGxlXCJcbiAgICBbaWd4UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiXG4gICAgW2lneFJpcHBsZUR1cmF0aW9uXT1cIjMwMFwiXG4gICAgY2xhc3M9XCJpZ3gtY2hlY2tib3hfX2NvbXBvc2l0ZS13cmFwcGVyXCJcbj5cbiAgICA8c3BhbiAjbGFiZWwgY2xhc3M9XCJpZ3gtY2hlY2tib3hfX2NvbXBvc2l0ZVwiPlxuICAgICAgICA8c3ZnIGNsYXNzPVwiaWd4LWNoZWNrYm94X19jb21wb3NpdGUtbWFya1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTQuMSwxMi43IDksMTcuNiAyMC4zLDYuM1wiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgIDwvc3Bhbj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2hlY2tib3hfX3JpcHBsZVwiPjwvZGl2PlxuPC9kaXY+XG5cbjxzcGFuICNwbGFjZWhvbGRlckxhYmVsXG4gICAgW2NsYXNzXT1cImxhYmVsQ2xhc3NcIlxuICAgIFtpZF09XCJsYWJlbElkXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9zcGFuPlxuIl19
560
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUtULFFBQVEsRUFDUixJQUFJLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQWtCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTNDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDaEMsTUFBTSxFQUFFLFFBQVE7SUFDaEIsS0FBSyxFQUFFLE9BQU87Q0FDakIsQ0FBQyxDQUFDO0FBUUgsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQWFILE1BQU0sT0FBTyxvQkFBb0I7SUF1QzdCOzs7Ozs7O09BT0c7SUFDSCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGFB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QkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWlEMUIsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIFJlbmRlcmVyMixcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElneFJpcHBsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSUJhc2VFdmVudEFyZ3MsIG1rZW51bSB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRWRpdG9yUHJvdmlkZXIsIEVESVRPUl9QUk9WSURFUiB9IGZyb20gJy4uL2NvcmUvZWRpdC1wcm92aWRlcic7XG5pbXBvcnQgeyBub29wLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjb25zdCBMYWJlbFBvc2l0aW9uID0gbWtlbnVtKHtcbiAgICBCRUZPUkU6ICdiZWZvcmUnLFxuICAgIEFGVEVSOiAnYWZ0ZXInXG59KTtcbmV4cG9ydCB0eXBlIExhYmVsUG9zaXRpb24gPSB0eXBlb2YgTGFiZWxQb3NpdGlvbltrZXlvZiB0eXBlb2YgTGFiZWxQb3NpdGlvbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoYW5nZUNoZWNrYm94RXZlbnRBcmdzIGV4dGVuZHMgSUJhc2VFdmVudEFyZ3Mge1xuICAgIGNoZWNrZWQ6IGJvb2xlYW47XG4gICAgY2hlY2tib3g6IElneENoZWNrYm94Q29tcG9uZW50O1xufVxuXG5sZXQgbmV4dElkID0gMDtcbi8qKlxuICogQWxsb3dzIHVzZXJzIHRvIG1ha2UgYSBiaW5hcnkgY2hvaWNlIGZvciBhIGNlcnRhaW4gY29uZGl0aW9uLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4Q2hlY2tib3hNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWNoZWNrYm94LXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGNoZWNrYm94LCBsYWJlbFxuICpcbiAqIEBpZ3hHcm91cCBEYXRhIGVudHJ5IGFuZCBkaXNwbGF5XG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgQ2hlY2tib3ggaXMgYSBzZWxlY3Rpb24gY29udHJvbCB0aGF0IGFsbG93cyB1c2VycyB0byBtYWtlIGEgYmluYXJ5IGNob2ljZSBmb3IgYSBjZXJ0YWluIGNvbmRpdGlvbi5JdCBiZWhhdmVzIHNpbWlsYXJseVxuICogdG8gdGhlIG5hdGl2ZSBicm93c2VyIGNoZWNrYm94LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWNoZWNrYm94IFtjaGVja2VkXT1cInRydWVcIj5cbiAqICAgc2ltcGxlIGNoZWNrYm94XG4gKiA8L2lneC1jaGVja2JveD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1jaGVja2JveCcsXG4gICAgcHJvdmlkZXJzOiBbe1xuICAgICAgICBwcm92aWRlOiBFRElUT1JfUFJPVklERVIsXG4gICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hDaGVja2JveENvbXBvbmVudCxcbiAgICAgICAgbXVsdGk6IHRydWVcbiAgICB9XSxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICB0ZW1wbGF0ZVVybDogJ2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtJZ3hSaXBwbGVEaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIElneENoZWNrYm94Q29tcG9uZW50IGltcGxlbWVudHMgRWRpdG9yUHJvdmlkZXIsIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBwcml2YXRlIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZXF1aXJlZDogYm9vbGVhbiB8ICcnO1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBib29sZWFuIHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgdGhlIGNoZWNrYm94IHN0YXRlIGlzIGNoYW5nZWQuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlcyB0byB0aGUgYElneENoZWNrYm94Q29tcG9uZW50YCBhbmQgdGhlIGBjaGVja2VkYCBwcm9wZXJ0eSBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxJQ2hhbmdlQ2hlY2tib3hFdmVudEFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhbmdlQ2hlY2tib3hFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmUgY2hlY2tib3ggZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjaGVja2JveEVsZW1lbnQgPSAgdGhpcy5jaGVja2JveC5jaGVja2JveEVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnY2hlY2tib3gnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBuYXRpdmVDaGVja2JveDogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmUgbGFiZWwgZWxlbWVudC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGxldCBsYWJlbEVsZW1lbnQgPSAgdGhpcy5jaGVja2JveC5uYXRpdmVMYWJlbDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdsYWJlbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIG5hdGl2ZUxhYmVsOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyByZWZlcmVuY2UgdG8gdGhlIGBuYXRpdmVFbGVtZW50YCBvZiB0aGUgaWd4LWNoZWNrYm94LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLmNoZWNrYm94Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVDaGVja2JveC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgcmVmZXJlbmNlIHRvIHRoZSBsYWJlbCBwbGFjZWhvbGRlciBlbGVtZW50LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbGV0IGxhYmVsUGxhY2Vob2xkZXIgPSAgdGhpcy5jaGVja2JveC5wbGFjZWhvbGRlckxhYmVsO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3BsYWNlaG9sZGVyTGFiZWwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBwbGFjZWhvbGRlckxhYmVsOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBjaGVja2JveCBjb21wb25lbnQuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpZGAgb2YgdGhlIGZpcnN0IGNoZWNrYm94IGNvbXBvbmVudCB3aWxsIGJlIGBcImlneC1jaGVja2JveC0wXCJgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGVja2JveCBpZD1cIm15LWZpcnN0LWNoZWNrYm94XCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjaGVja2JveElkID0gIHRoaXMuY2hlY2tib3guaWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtY2hlY2tib3gtJHtuZXh0SWQrK31gO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBpZCBvZiB0aGUgYGxhYmVsYCBlbGVtZW50LlxuICAgICAqIElmIG5vdCBzZXQsIHRoZSBpZCBvZiB0aGUgYGxhYmVsYCBpbiB0aGUgZmlyc3QgY2hlY2tib3ggY29tcG9uZW50IHdpbGwgYmUgYFwiaWd4LWNoZWNrYm94LTAtbGFiZWxcImAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IGxhYmVsSWQgPSBcIkxhYmVsMVwiPjwvaWd4LWNoZWNrYm94PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbGFiZWxJZCA9ICB0aGlzLmNoZWNrYm94LmxhYmVsSWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsSWQgPSBgJHt0aGlzLmlkfS1sYWJlbGA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGB2YWx1ZWAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGVja2JveCBbdmFsdWVdID0gXCInQ2hlY2tib3hWYWx1ZSdcIj48L2lneC1jaGVja2JveD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHZhbHVlID0gIHRoaXMuY2hlY2tib3gudmFsdWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHZhbHVlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBuYW1lYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IG5hbWUgPSBcIkNoZWNrYm94MVwiPjwvaWd4LWNoZWNrYm94PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgbmFtZSA9ICB0aGlzLmNoZWNrYm94Lm5hbWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdmFsdWUgb2YgdGhlIGB0YWJpbmRleGAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGVja2JveCBbdGFiaW5kZXhdID0gXCIxXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0YWJJbmRleCA9ICB0aGlzLmNoZWNrYm94LnRhYmluZGV4O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyB0YWJpbmRleDogbnVtYmVyID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqICBTZXRzL2dldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBgbGFiZWxgLlxuICAgICAqICBJZiBub3Qgc2V0LCB0aGUgYGxhYmVsUG9zaXRpb25gIHdpbGwgaGF2ZSB2YWx1ZSBgXCJhZnRlclwiYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hlY2tib3ggbGFiZWxQb3NpdGlvbiA9IFwiYmVmb3JlXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBsYWJlbFBvc2l0aW9uID0gIHRoaXMuY2hlY2tib3gubGFiZWxQb3NpdGlvbjtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsYWJlbFBvc2l0aW9uOiBMYWJlbFBvc2l0aW9uIHwgc3RyaW5nID0gTGFiZWxQb3NpdGlvbi5BRlRFUjtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvRGlzYWJsZXMgdGhlIHJpcHBsZSBlZmZlY3QuXG4gICAgICogSWYgbm90IHNldCwgYGRpc2FibGVSaXBwbGVgIHdpbGwgaGF2ZSB2YWx1ZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGVja2JveCBbZGlzYWJsZVJpcHBsZV0gPSBcInRydWVcIj48L2lneC1jaGVja2JveD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzUmlwcGxlRGlzYWJsZWQgPSB0aGlzLmNoZWNrYm94LmRlc2FibGVSaXBwbGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZVJpcHBsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIGNoZWNrYm94IGlzIHJlcXVpcmVkLlxuICAgICAqIElmIG5vdCBzZXQsIGByZXF1aXJlZGAgd2lsbCBoYXZlIHZhbHVlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IHJlcXVpcmVkPjwvaWd4LWNoZWNrYm94PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNSZXF1aXJlZCA9IHRoaXMuY2hlY2tib3gucmVxdWlyZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQgfHwgdGhpcy5uYXRpdmVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgncmVxdWlyZWQnKTtcbiAgICB9XG4gICAgcHVibGljIHNldCByZXF1aXJlZCAodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWQgPSAodmFsdWUgYXMgYW55ID09PSAnJykgfHwgdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgYXJpYS1sYWJlbGxlZGJ5YCBhdHRyaWJ1dGUuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBhcmlhLWxhYmVsbGVkYnlgIHdpbGwgYmUgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIGBsYWJlbElkYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IGFyaWEtbGFiZWxsZWRieSA9IFwiQ2hlY2tib3gxXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBhcmlhTGFiZWxsZWRCeSA9IHRoaXMuY2hlY2tib3guYXJpYUxhYmVsbGVkQnk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdhcmlhLWxhYmVsbGVkYnknKVxuICAgIHB1YmxpYyBhcmlhTGFiZWxsZWRCeSA9IHRoaXMubGFiZWxJZDtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IGFyaWEtbGFiZWwgPSBcIkNoZWNrYm94MVwiPjwvaWd4LWNoZWNrYm94PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgYXJpYUxhYmVsID0gdGhpcy5jaGVja2JveC5hcmlhTGFiZWw7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdhcmlhLWxhYmVsJylcbiAgICBwdWJsaWMgYXJpYUxhYmVsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNsYXNzIG9mIHRoZSBjaGVja2JveCBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2xhc3MgPSB0aGlzLmNoZWNrYm94LmNzc0NsYXNzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNoZWNrYm94JylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWNoZWNrYm94JztcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjaGVja2JveCBjb21wb25lbnQgaXMgb24gZm9jdXMuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jaGVja2JveC5mb2N1c2VkID0gIHRydWU7XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0ZvY3VzZWQgPSB0aGlzLmNoZWNrYm94LmZvY3VzZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2hlY2tib3gtLWZvY3VzZWQnKVxuICAgIHB1YmxpYyBmb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGNoZWNrYm94IGluZGV0ZXJtaW5hdGUgdmlzdWFsIHN0YXRlLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYDtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hlY2tib3ggW2luZGV0ZXJtaW5hdGVdID0gXCJ0cnVlXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0luZGV0ZXJtaW5hdGUgPSB0aGlzLmNoZWNrYm94LmluZGV0ZXJtaW5hdGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2hlY2tib3gtLWluZGV0ZXJtaW5hdGUnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjaGVja2JveCBpcyBjaGVja2VkLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hlY2tib3ggW2NoZWNrZWRdID0gXCJ0cnVlXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0NoZWNrZWQgPSAgdGhpcy5jaGVja2JveC5jaGVja2VkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNoZWNrYm94LS1jaGVja2VkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgY2hlY2tlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgY2hlY2tlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZih0aGlzLl9jaGVja2VkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLl9jaGVja2VkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjaGVja2JveCBpcyBkaXNhYmxlZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IGRpc2FibGVkPjwvaWd4LWNoZWNrYm94PlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNEaXNhYmxlZCA9IHRoaXMuY2hlY2tib3guZGlzYWJsZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2hlY2tib3gtLWRpc2FibGVkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9ICh2YWx1ZSBhcyBhbnkgPT09ICcnKSB8fCB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2hlY2tib3ggaXMgaW52YWxpZC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IGludmFsaWQ+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0ludmFsaWQgPSB0aGlzLmNoZWNrYm94LmludmFsaWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtY2hlY2tib3gtLWludmFsaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZCB8fCBmYWxzZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBpbnZhbGlkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ludmFsaWQgPSAhIXZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjaGVja2JveCBpcyByZWFkb25seS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoZWNrYm94IFtyZWFkb25seV09XCJ0cnVlXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCByZWFkb25seSA9IHRoaXMuY2hlY2tib3gucmVhZG9ubHk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSBjaGVja2JveCBzaG91bGQgZGlzYWJsZSBhbGwgY3NzIHRyYW5zaXRpb25zLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hlY2tib3ggW2Rpc2FibGVUcmFuc2l0aW9uc109XCJ0cnVlXCI+PC9pZ3gtY2hlY2tib3g+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBkaXNhYmxlVHJhbnNpdGlvbnMgPSB0aGlzLmNoZWNrYm94LmRpc2FibGVUcmFuc2l0aW9ucztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jaGVja2JveC0tcGxhaW4nKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVUcmFuc2l0aW9ucyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBpbnB1dElkID0gYCR7dGhpcy5pZH0taW5wdXRgO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGVja2VkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2ludmFsaWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHRoaXMudXBkYXRlVmFsaWRpdHlTdGF0ZS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yIHx8IHRoaXMubmdDb250cm9sLmNvbnRyb2wuYXN5bmNWYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IHRoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgX29uQ2hlY2tib3hDbGljayhldmVudDogUG9pbnRlckV2ZW50IHwgTW91c2VFdmVudCkge1xuICAgICAgICAvLyBTaW5jZSB0aGUgb3JpZ2luYWwgY2hlY2tib3ggaXMgaGlkZGVuIGFuZCB0aGUgbGFiZWxcbiAgICAgICAgLy8gaXMgdXNlZCBmb3Igc3R5bGluZyBhbmQgdG8gY2hhbmdlIHRoZSBjaGVja2VkIHN0YXRlIG9mIHRoZSBjaGVja2JveCxcbiAgICAgICAgLy8gd2UgbmVlZCB0byBwcmV2ZW50IHRoZSBjaGVja2JveCBjbGljayBldmVudCBmcm9tIGJ1YmJsaW5nIHVwXG4gICAgICAgIC8vIGFzIGl0IGdldHMgdHJpZ2dlcmVkIG9uIGxhYmVsIGNsaWNrXG4gICAgICAgIC8vIE5PVEU6IFRoZSBhYm92ZSBpcyBubyBsb25nZXIgdmFsaWQsIGFzIHRoZSBuYXRpdmUgY2hlY2tib3ggaXMgbm90IGxhYmVsZWRcbiAgICAgICAgLy8gYnkgdGhlIFNWRyBhbnltb3JlLlxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICAvLyByZWFkb25seSBwcmV2ZW50cyB0aGUgY29tcG9uZW50IGZyb20gY2hhbmdpbmcgc3RhdGUgKHNlZSB0b2dnbGUoKSBtZXRob2QpLlxuICAgICAgICAgICAgLy8gSG93ZXZlciwgdGhlIG5hdGl2ZSBjaGVja2JveCBjYW4gc3RpbGwgYmUgYWN0aXZhdGVkIHRocm91Z2ggdXNlciBpbnRlcmFjdGlvbiAoZm9jdXMgKyBzcGFjZSwgbGFiZWwgY2xpY2spXG4gICAgICAgICAgICAvLyBQcmV2ZW50IHRoZSBuYXRpdmUgY2hhbmdlIHNvIHRoZSBpbnB1dCByZW1haW5zIGluIHN5bmNcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5hdGl2ZUNoZWNrYm94Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGl0eVN0YXRlKCk7XG5cbiAgICAgICAgLy8gSy5ELiBNYXJjaCAyMywgMjAyMSBFbWl0dGluZyBvbiBjbGljayBhbmQgbm90IG9uIHRoZSBzZXR0ZXIgYmVjYXVzZSBvdGhlcndpc2UgZXZlcnkgY29tcG9uZW50XG4gICAgICAgIC8vIGJvdW5kIG9uIGNoYW5nZSB3b3VsZCBoYXZlIHRvIHBlcmZvcm0gc2VsZiBjaGVja3MgZm9yIHdlYXRoZXIgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkIGJlY2F1c2VcbiAgICAgICAgLy8gb2YgdGhlIGluaXRpYWwgc2V0IG9uIGluaXRpYWxpemF0aW9uXG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoeyBjaGVja2VkOiB0aGlzLl9jaGVja2VkLCBjaGVja2JveDogdGhpcyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBhcmlhQ2hlY2tlZCgpIHtcbiAgICAgICBpZiAodGhpcy5pbmRldGVybWluYXRlKSB7XG4gICAgICAgICAgIHJldHVybiAnbWl4ZWQnO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrZWQ7XG4gICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBfb25DaGVja2JveENoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgLy8gV2UgaGF2ZSB0byBzdG9wIHRoZSBvcmlnaW5hbCBjaGVja2JveCBjaGFuZ2UgZXZlbnRcbiAgICAgICAgLy8gZnJvbSBidWJibGluZyB1cCBzaW5jZSB3ZSBlbWl0IG91ciBvd24gY2hhbmdlIGV2ZW50XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICAgIHB1YmxpYyBvbkJsdXIoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5U3RhdGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9jaGVja2VkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBsYWJlbENsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5sYWJlbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIExhYmVsUG9zaXRpb24uQkVGT1JFOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNzc0NsYXNzfV9fbGFiZWwtLWJlZm9yZWA7XG4gICAgICAgICAgICBjYXNlIExhYmVsUG9zaXRpb24uQUZURVI6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNzc0NsYXNzfV9fbGFiZWxgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVDaGVja2JveC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlVmFsaWRpdHlTdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuaW5kZXRlcm1pbmF0ZSAmJiAhdGhpcy5yZWFkb25seSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLm5nQ29udHJvbC5jb250cm9sLnRvdWNoZWQgfHwgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5kaXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGUgY29udHJvbCBpcyBub3QgZGlzYWJsZWQgYW5kIGlzIHRvdWNoZWQgb3IgZGlydHlcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludmFsaWQgPSB0aGlzLm5nQ29udHJvbC5pbnZhbGlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludmFsaWQgPSB0aGlzLnJlcXVpcmVkID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gIGlmIHRoZSBjb250cm9sIGlzIHVudG91Y2hlZCwgcHJpc3RpbmUsIG9yIGRpc2FibGVkLCBpdHMgc3RhdGUgaXMgaW5pdGlhbC4gVGhpcyBpcyB3aGVuIHRoZSB1c2VyIGRpZCBub3QgaW50ZXJhY3RcbiAgICAgICAgICAgICAgICAvLyAgd2l0aCB0aGUgY2hlY2tib3ggb3Igd2hlbiB0aGUgZm9ybS9jb250cm9sIGlzIHJlc2V0XG4gICAgICAgICAgICAgICAgdGhpcy5faW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja05hdGl2ZVZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHRvIGFzc2lnbiBhIG5hdGl2ZSB2YWxpZGl0eSBwcm9wZXJ0eSBvZiBhIGNoZWNrYm94LlxuICAgICAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGVyZSdzIG5vIG5nQ29udHJvbFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgY2hlY2tOYXRpdmVWYWxpZGl0eSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHRoaXMuX3JlcXVpcmVkICYmICF0aGlzLmNoZWNrZWQgJiYgIXRoaXMuaW5kZXRlcm1pbmF0ZSAmJiAhdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgdGhpcy5faW52YWxpZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pbnZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8aW5wdXQgI2NoZWNrYm94IGNsYXNzPVwiaWd4LWNoZWNrYm94X19pbnB1dFwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgW25hbWVdPVwibmFtZVwiXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2luZGV0ZXJtaW5hdGVdPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaW52YWxpZFwiXG4gICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImFyaWFDaGVja2VkXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsID8gbnVsbCA6IGFyaWFMYWJlbGxlZEJ5XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgKGNoYW5nZSk9XCJfb25DaGVja2JveENoYW5nZSgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiIC8+XG5cbjxkaXZcbiAgICBpZ3hSaXBwbGVcbiAgICBpZ3hSaXBwbGVUYXJnZXQ9XCIuaWd4LWNoZWNrYm94X19yaXBwbGVcIlxuICAgIFtpZ3hSaXBwbGVEaXNhYmxlZF09XCJkaXNhYmxlUmlwcGxlXCJcbiAgICBbaWd4UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiXG4gICAgW2lneFJpcHBsZUR1cmF0aW9uXT1cIjMwMFwiXG4gICAgY2xhc3M9XCJpZ3gtY2hlY2tib3hfX2NvbXBvc2l0ZS13cmFwcGVyXCJcbj5cbiAgICA8c3BhbiAjbGFiZWwgY2xhc3M9XCJpZ3gtY2hlY2tib3hfX2NvbXBvc2l0ZVwiPlxuICAgICAgICA8c3ZnIGNsYXNzPVwiaWd4LWNoZWNrYm94X19jb21wb3NpdGUtbWFya1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTQuMSwxMi43IDksMTcuNiAyMC4zLDYuM1wiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgIDwvc3Bhbj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2hlY2tib3hfX3JpcHBsZVwiPjwvZGl2PlxuPC9kaXY+XG5cbjxzcGFuICNwbGFjZWhvbGRlckxhYmVsXG4gICAgW2NsYXNzXT1cImxhYmVsQ2xhc3NcIlxuICAgIFtpZF09XCJsYWJlbElkXCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9zcGFuPlxuIl19
@@ -6,15 +6,15 @@ import * as i0 from "@angular/core";
6
6
  * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components
7
7
  */
8
8
  export class IgxCheckboxModule {
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxCheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxCheckboxModule, imports: [IgxCheckboxComponent], exports: [IgxCheckboxComponent] }); }
11
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxCheckboxModule }); }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxCheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: IgxCheckboxModule, imports: [IgxCheckboxComponent], exports: [IgxCheckboxComponent] }); }
11
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxCheckboxModule }); }
12
12
  }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxCheckboxModule, decorators: [{
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxCheckboxModule, decorators: [{
14
14
  type: NgModule,
15
15
  args: [{
16
16
  imports: [IgxCheckboxComponent],
17
17
  exports: [IgxCheckboxComponent]
18
18
  }]
19
19
  }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NoZWNrYm94L2NoZWNrYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUU1RDs7O0dBR0c7QUFLSCxNQUFNLE9BQU8saUJBQWlCO21IQUFqQixpQkFBaUI7b0hBQWpCLGlCQUFpQixZQUhoQixvQkFBb0IsYUFDcEIsb0JBQW9CO29IQUVyQixpQkFBaUI7O2dHQUFqQixpQkFBaUI7a0JBSjdCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7b0JBQy9CLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vY2hlY2tib3guY29tcG9uZW50JztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBJTVBPUlRBTlQ6IFRoZSBmb2xsb3dpbmcgaXMgTmdNb2R1bGUgZXhwb3J0ZWQgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGJlZm9yZSBzdGFuZGFsb25lIGNvbXBvbmVudHNcbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbSWd4Q2hlY2tib3hDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtJZ3hDaGVja2JveENvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2hlY2tib3hNb2R1bGUge31cbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NoZWNrYm94L2NoZWNrYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUU1RDs7O0dBR0c7QUFLSCxNQUFNLE9BQU8saUJBQWlCOzhHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixZQUhoQixvQkFBb0IsYUFDcEIsb0JBQW9COytHQUVyQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBSjdCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7b0JBQy9CLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vY2hlY2tib3guY29tcG9uZW50JztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKiBJTVBPUlRBTlQ6IFRoZSBmb2xsb3dpbmcgaXMgTmdNb2R1bGUgZXhwb3J0ZWQgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGJlZm9yZSBzdGFuZGFsb25lIGNvbXBvbmVudHNcbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbSWd4Q2hlY2tib3hDb21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtJZ3hDaGVja2JveENvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2hlY2tib3hNb2R1bGUge31cbiJdfQ==
@@ -637,10 +637,10 @@ export class IgxChipComponent extends DisplayDensityBase {
637
637
  this.destroy$.next();
638
638
  this.destroy$.complete();
639
639
  }
640
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxChipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
641
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0-rc.4", type: IgxChipComponent, isStandalone: true, selector: "igx-chip", inputs: { id: "id", tabIndex: "tabIndex", data: "data", draggable: "draggable", animateOnRelease: "animateOnRelease", hideBaseOnDrag: "hideBaseOnDrag", removable: "removable", removeIcon: "removeIcon", selectable: "selectable", selectIcon: "selectIcon", disabled: "disabled", selected: "selected", color: "color", resourceStrings: "resourceStrings" }, outputs: { selectedChange: "selectedChange", moveStart: "moveStart", moveEnd: "moveEnd", remove: "remove", chipClick: "chipClick", selectedChanging: "selectedChanging", selectedChanged: "selectedChanged", keyDown: "keyDown", dragEnter: "dragEnter", dragLeave: "dragLeave", dragOver: "dragOver", dragDrop: "dragDrop" }, host: { listeners: { "keydown": "keyEvent($event)" }, properties: { "attr.id": "this.id", "attr.role": "this.role", "attr.tabIndex": "this.tabIndex", "attr.aria-selected": "this.selected", "class": "this.hostClass" } }, viewQueries: [{ propertyName: "dragDirective", first: true, predicate: ["chipArea"], descendants: true, read: IgxDragDirective, static: true }, { propertyName: "chipArea", first: true, predicate: ["chipArea"], descendants: true, read: ElementRef, static: true }, { propertyName: "selectContainer", first: true, predicate: ["selectContainer"], descendants: true, read: ElementRef, static: true }, { propertyName: "defaultRemoveIcon", first: true, predicate: ["defaultRemoveIcon"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultSelectIcon", first: true, predicate: ["defaultSelectIcon"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<div #chipArea class=\"igx-chip__item\"\n [igxDrag]=\"{chip: this}\"\n [style.visibility]='hideBaseElement ? \"hidden\" : \"visible\"'\n [ghostClass]=\"ghostClass\"\n (dragStart)=\"onChipDragStart($event)\"\n (ghostCreate)=\"onChipGhostCreate()\"\n (ghostDestroy)=\"onChipGhostDestroy()\"\n (dragEnd)=\"onChipDragEnd()\"\n (transitioned)=\"onChipMoveEnd($event)\"\n (dragClick)=\"onChipDragClicked($event)\"\n igxDrop\n (enter)=\"onChipDragEnterHandler($event)\"\n (leave)= \"onChipDragLeaveHandler($event)\"\n (over)=\"onChipOverHandler($event)\"\n (dropped)=\"onChipDrop($event)\">\n\n <div #selectContainer [ngClass]=\"selectClass(selected)\">\n <ng-container *ngTemplateOutlet=\"selectIconTemplate\"></ng-container>\n </div>\n\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n\n <div class=\"igx-chip__content\">\n <ng-content></ng-content>\n </div>\n\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n\n <div class=\"igx-chip__remove\" *ngIf=\"removable\"\n [attr.tabIndex]=\"tabIndex\"\n (keydown)=\"onRemoveBtnKeyDown($event)\"\n (pointerdown)=\"onRemoveMouseDown($event)\"\n (mousedown)=\"onRemoveMouseDown($event)\"\n (click)=\"onRemoveClick($event)\"\n (touchmove)=\"onRemoveTouchMove()\"\n (touchend)=\"onRemoveTouchEnd($event)\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate\"></ng-container>\n </div>\n</div>\n\n<ng-template #defaultSelectIcon>\n <igx-icon [attr.aria-label]=\"resourceStrings.igx_chip_select\">done</igx-icon>\n</ng-template>\n\n<ng-template #defaultRemoveIcon>\n <igx-icon [attr.aria-label]=\"resourceStrings.igx_chip_remove\">cancel</igx-icon>\n</ng-template>\n", dependencies: [{ kind: "directive", type: IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { kind: "directive", type: IgxDragDirective, selector: "[igxDrag]", inputs: ["igxDrag", "dragTolerance", "dragDirection", "dragChannel", "ghost", "ghostClass", "ghostTemplate", "ghostHost", "scrollContainer", "ghostOffsetX", "ghostOffsetY"], outputs: ["dragStart", "dragMove", "dragEnd", "dragClick", "ghostCreate", "ghostDestroy", "transitioned"], exportAs: ["drag"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }] }); }
640
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxChipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DisplayDensityToken, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
641
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: IgxChipComponent, isStandalone: true, selector: "igx-chip", inputs: { id: "id", tabIndex: "tabIndex", data: "data", draggable: "draggable", animateOnRelease: "animateOnRelease", hideBaseOnDrag: "hideBaseOnDrag", removable: "removable", removeIcon: "removeIcon", selectable: "selectable", selectIcon: "selectIcon", disabled: "disabled", selected: "selected", color: "color", resourceStrings: "resourceStrings" }, outputs: { selectedChange: "selectedChange", moveStart: "moveStart", moveEnd: "moveEnd", remove: "remove", chipClick: "chipClick", selectedChanging: "selectedChanging", selectedChanged: "selectedChanged", keyDown: "keyDown", dragEnter: "dragEnter", dragLeave: "dragLeave", dragOver: "dragOver", dragDrop: "dragDrop" }, host: { listeners: { "keydown": "keyEvent($event)" }, properties: { "attr.id": "this.id", "attr.role": "this.role", "attr.tabIndex": "this.tabIndex", "attr.aria-selected": "this.selected", "class": "this.hostClass" } }, viewQueries: [{ propertyName: "dragDirective", first: true, predicate: ["chipArea"], descendants: true, read: IgxDragDirective, static: true }, { propertyName: "chipArea", first: true, predicate: ["chipArea"], descendants: true, read: ElementRef, static: true }, { propertyName: "selectContainer", first: true, predicate: ["selectContainer"], descendants: true, read: ElementRef, static: true }, { propertyName: "defaultRemoveIcon", first: true, predicate: ["defaultRemoveIcon"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultSelectIcon", first: true, predicate: ["defaultSelectIcon"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<div #chipArea class=\"igx-chip__item\"\n [igxDrag]=\"{chip: this}\"\n [style.visibility]='hideBaseElement ? \"hidden\" : \"visible\"'\n [ghostClass]=\"ghostClass\"\n (dragStart)=\"onChipDragStart($event)\"\n (ghostCreate)=\"onChipGhostCreate()\"\n (ghostDestroy)=\"onChipGhostDestroy()\"\n (dragEnd)=\"onChipDragEnd()\"\n (transitioned)=\"onChipMoveEnd($event)\"\n (dragClick)=\"onChipDragClicked($event)\"\n igxDrop\n (enter)=\"onChipDragEnterHandler($event)\"\n (leave)= \"onChipDragLeaveHandler($event)\"\n (over)=\"onChipOverHandler($event)\"\n (dropped)=\"onChipDrop($event)\">\n\n <div #selectContainer [ngClass]=\"selectClass(selected)\">\n <ng-container *ngTemplateOutlet=\"selectIconTemplate\"></ng-container>\n </div>\n\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n\n <div class=\"igx-chip__content\">\n <ng-content></ng-content>\n </div>\n\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n\n <div class=\"igx-chip__remove\" *ngIf=\"removable\"\n [attr.tabIndex]=\"tabIndex\"\n (keydown)=\"onRemoveBtnKeyDown($event)\"\n (pointerdown)=\"onRemoveMouseDown($event)\"\n (mousedown)=\"onRemoveMouseDown($event)\"\n (click)=\"onRemoveClick($event)\"\n (touchmove)=\"onRemoveTouchMove()\"\n (touchend)=\"onRemoveTouchEnd($event)\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate\"></ng-container>\n </div>\n</div>\n\n<ng-template #defaultSelectIcon>\n <igx-icon [attr.aria-label]=\"resourceStrings.igx_chip_select\">done</igx-icon>\n</ng-template>\n\n<ng-template #defaultRemoveIcon>\n <igx-icon [attr.aria-label]=\"resourceStrings.igx_chip_remove\">cancel</igx-icon>\n</ng-template>\n", dependencies: [{ kind: "directive", type: IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { kind: "directive", type: IgxDragDirective, selector: "[igxDrag]", inputs: ["igxDrag", "dragTolerance", "dragDirection", "dragChannel", "ghost", "ghostClass", "ghostTemplate", "ghostHost", "scrollContainer", "ghostOffsetX", "ghostOffsetY"], outputs: ["dragStart", "dragMove", "dragEnd", "dragClick", "ghostCreate", "ghostDestroy", "transitioned"], exportAs: ["drag"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }] }); }
642
642
  }
643
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxChipComponent, decorators: [{
643
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxChipComponent, decorators: [{
644
644
  type: Component,
645
645
  args: [{ selector: 'igx-chip', standalone: true, imports: [IgxDropDirective, IgxDragDirective, NgClass, NgTemplateOutlet, NgIf, IgxIconComponent], template: "<div #chipArea class=\"igx-chip__item\"\n [igxDrag]=\"{chip: this}\"\n [style.visibility]='hideBaseElement ? \"hidden\" : \"visible\"'\n [ghostClass]=\"ghostClass\"\n (dragStart)=\"onChipDragStart($event)\"\n (ghostCreate)=\"onChipGhostCreate()\"\n (ghostDestroy)=\"onChipGhostDestroy()\"\n (dragEnd)=\"onChipDragEnd()\"\n (transitioned)=\"onChipMoveEnd($event)\"\n (dragClick)=\"onChipDragClicked($event)\"\n igxDrop\n (enter)=\"onChipDragEnterHandler($event)\"\n (leave)= \"onChipDragLeaveHandler($event)\"\n (over)=\"onChipOverHandler($event)\"\n (dropped)=\"onChipDrop($event)\">\n\n <div #selectContainer [ngClass]=\"selectClass(selected)\">\n <ng-container *ngTemplateOutlet=\"selectIconTemplate\"></ng-container>\n </div>\n\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n\n <div class=\"igx-chip__content\">\n <ng-content></ng-content>\n </div>\n\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n\n <div class=\"igx-chip__remove\" *ngIf=\"removable\"\n [attr.tabIndex]=\"tabIndex\"\n (keydown)=\"onRemoveBtnKeyDown($event)\"\n (pointerdown)=\"onRemoveMouseDown($event)\"\n (mousedown)=\"onRemoveMouseDown($event)\"\n (click)=\"onRemoveClick($event)\"\n (touchmove)=\"onRemoveTouchMove()\"\n (touchend)=\"onRemoveTouchEnd($event)\">\n <ng-container *ngTemplateOutlet=\"removeButtonTemplate\"></ng-container>\n </div>\n</div>\n\n<ng-template #defaultSelectIcon>\n <igx-icon [attr.aria-label]=\"resourceStrings.igx_chip_select\">done</igx-icon>\n</ng-template>\n\n<ng-template #defaultRemoveIcon>\n <igx-icon [attr.aria-label]=\"resourceStrings.igx_chip_remove\">cancel</igx-icon>\n</ng-template>\n" }]
646
646
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
@@ -734,4 +734,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ng
734
734
  type: HostListener,
735
735
  args: ['keydown', ['$event']]
736
736
  }] } });
737
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTBCLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGdCQUFnQixFQUFzRixnQkFBZ0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBR3JMLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUF5QmxFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQU9ILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxrQkFBa0I7SUF3QnBEOzs7Ozs7O09BT0c7SUFDSCxJQUVXLFFBQVEsQ0FBQyxLQUFh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RCxpQkFBaUI7c0JBRHZCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBd0R2RCxTQUFTO3NCQURwQixXQUFXO3VCQUFDLE9BQU87Z0JBbUJiLFFBQVE7c0JBRGQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgSW5qZWN0LFxuICAgIE9wdGlvbmFsLFxuICAgIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsIERpc3BsYXlEZW5zaXR5VG9rZW4sIERpc3BsYXlEZW5zaXR5QmFzZSB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBJZ3hEcmFnRGlyZWN0aXZlLCBJRHJhZ0Jhc2VFdmVudEFyZ3MsIElEcmFnU3RhcnRFdmVudEFyZ3MsIElEcm9wQmFzZUV2ZW50QXJncywgSURyb3BEcm9wcGVkRXZlbnRBcmdzLCBJZ3hEcm9wRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kcmFnLWRyb3AvZHJhZy1kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJQmFzZUV2ZW50QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSUNoaXBSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vY2hpcC1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBJQmFzZUNoaXBFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgb3JpZ2luYWxFdmVudDogSURyYWdCYXNlRXZlbnRBcmdzIHwgSURyb3BCYXNlRXZlbnRBcmdzIHwgS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50O1xuICAgIG93bmVyOiBJZ3hDaGlwQ29tcG9uZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGlwQ2xpY2tFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUNoaXBFdmVudEFyZ3Mge1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2hpcEtleURvd25FdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUNoaXBFdmVudEFyZ3Mge1xuICAgIG9yaWdpbmFsRXZlbnQ6IEtleWJvYXJkRXZlbnQ7XG4gICAgY2FuY2VsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGlwRW50ZXJEcmFnQXJlYUV2ZW50QXJncyBleHRlbmRzIElCYXNlQ2hpcEV2ZW50QXJncyB7XG4gICAgZHJhZ0NoaXA6IElneENoaXBDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoaXBTZWxlY3RFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUNoaXBFdmVudEFyZ3Mge1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxubGV0IENISVBfSUQgPSAwO1xuXG4vKipcbiAqIENoaXAgaXMgY29tcGFjdCB2aXN1YWwgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgaW5mb3JtYXRpb24gaW4gYW4gb2Jyb3VuZC5cbiAqXG4gKiBAaWd4TW9kdWxlIElneENoaXBzTW9kdWxlXG4gKlxuICogQGlneFRoZW1lIGlneC1jaGlwLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGNoaXBcbiAqXG4gKiBAaWd4R3JvdXAgZGlzcGxheVxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIENoaXAgY2FuIGJlIHRlbXBsYXRlZCwgZGVsZXRlZCwgYW5kIHNlbGVjdGVkLlxuICogTXVsdGlwbGUgY2hpcHMgY2FuIGJlIHJlb3JkZXJlZCBhbmQgdmlzdWFsbHkgY29ubmVjdGVkIHRvIGVhY2ggb3RoZXIuXG4gKiBDaGlwcyByZXNpZGUgaW4gYSBjb250YWluZXIgY2FsbGVkIGNoaXBzIGFyZWEgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgY2hpcHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtY2hpcCBjbGFzcz1cImNoaXBTdHlsZVwiIFtpZF09XCI5MDFcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlKT1cImNoaXBSZW1vdmVkKCRldmVudClcIj5cbiAqICAgIDxpZ3gtYXZhdGFyIGNsYXNzPVwiY2hpcC1hdmF0YXItcmVzaXplZFwiIGlneFByZWZpeD48L2lneC1hdmF0YXI+XG4gKiA8L2lneC1jaGlwPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWNoaXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnY2hpcC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSWd4RHJvcERpcmVjdGl2ZSwgSWd4RHJhZ0RpcmVjdGl2ZSwgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCwgTmdJZiwgSWd4SWNvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2hpcENvbXBvbmVudCBleHRlbmRzIERpc3BsYXlEZW5zaXR5QmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgYGlkYCBhdHRyaWJ1dGUuIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWNoaXAtJHtDSElQX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGByb2xlYCBhdHRyaWJ1dGUgb2YgdGhlIGNoaXAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2hpcFJvbGUgPSB0aGlzLmNoaXAucm9sZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAnb3B0aW9uJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHZhbHVlIG9mIGB0YWJpbmRleGAgYXR0cmlidXRlLiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCB1c2UgdGhlIGVsZW1lbnQncyB0YWJpbmRleCBpZiBzZXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFt0YWJJbmRleF09XCIxXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiSW5kZXgnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJJbmRleCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYkluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFiSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICF0aGlzLmRpc2FibGVkID8gMCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc3RvcmVzIGRhdGEgcmVsYXRlZCB0byB0aGUgY2hpcC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbZGF0YV09XCJ7IHZhbHVlOiAnQ291bnRyeScgfVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGF0YTogYW55O1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZGVmaW5lcyBpZiB0aGUgYElneENoaXBDb21wb25lbnRgIGNhbiBiZSBkcmFnZ2VkIGluIG9yZGVyIHRvIGNoYW5nZSBpdCdzIHBvc2l0aW9uLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZW5hYmxlcy9kaXNhYmxlcyB0aGUgZHJhZ2dhYmxlIGVsZW1lbnQgYW5pbWF0aW9uIHdoZW4gdGhlIGVsZW1lbnQgaXMgcmVsZWFzZWQuXG4gICAgICogQnkgZGVmYXVsdCBpdCdzIHNldCB0byB0cnVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbYW5pbWF0ZU9uUmVsZWFzZV09XCJmYWxzZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYW5pbWF0ZU9uUmVsZWFzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBlbmFibGVzL2Rpc2FibGVzIHRoZSBoaWRpbmcgb2YgdGhlIGJhc2UgZWxlbWVudCB0aGF0IGhhcyBiZWVuIGRyYWdnZWQuXG4gICAgICogQnkgZGVmYXVsdCBpdCdzIHNldCB0byB0cnVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbaGlkZUJhc2VPbkRyYWddPVwiZmFsc2VcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGVCYXNlT25EcmFnID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgaWYgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBzaG91bGQgcmVuZGVyIHJlbW92ZSBidXR0b24gYW5kIHRocm93IHJlbW92ZSBldmVudHMuXG4gICAgICogQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gZmFsc2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZhYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgaWNvbiB0aGF0IHRoZSBjaGlwIGFwcGxpZXMgdG8gdGhlIHJlbW92ZSBidXR0b24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cImNoaXAuaWRcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiBbcmVtb3ZlSWNvbl09XCJpY29uVGVtcGxhdGVcIj48L2lneC1jaGlwPlxuICAgICAqIDxuZy10ZW1wbGF0ZSAjaWNvblRlbXBsYXRlPjxpZ3gtaWNvbj5kZWxldGU8L2lneC1pY29uPjwvbmctdGVtcGxhdGU+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlSWNvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgaWYgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBjYW4gYmUgc2VsZWN0ZWQgb24gY2xpY2sgb3IgdGhyb3VnaCBuYXZpZ2F0aW9uLFxuICAgICAqIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCJjaGlwLmlkXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgW3JlbW92YWJsZV09XCJ0cnVlXCIgW3NlbGVjdGFibGVdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0YWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGljb24gdGhhdCB0aGUgY2hpcCBhcHBsaWVzIHdoZW4gaXQgaXMgc2VsZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cImNoaXAuaWRcIiBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgW3NlbGVjdEljb25dPVwiaWNvblRlbXBsYXRlXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiA8bmctdGVtcGxhdGUgI2ljb25UZW1wbGF0ZT48aWd4LWljb24+ZG9uZV9vdXRsaW5lPC9pZ3gtaWNvbj48L25nLXRlbXBsYXRlPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdEljb246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBkZWZpbmVzIGlmIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgZGlzYWJsZWQuIFdoZW4gZGlzYWJsZWQgaXQgcmVzdHJpY3RzIHVzZXIgaW50ZXJhY3Rpb25zXG4gICAgICogbGlrZSBmb2N1c2luZyBvbiBjbGljayBvciB0YWIsIHNlbGVjdGlvbiBvbiBjbGljayBvciBTcGFjZSwgZHJhZ2dpbmcuXG4gICAgICogQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gZmFsc2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cImNoaXAuaWRcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBzZWxlY3RlZCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgW3NlbGVjdGVkXT1cInRydWVcIj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFR3by13YXkgZGF0YSBiaW5kaW5nOlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW3NlbGVjdGFibGVdPVwidHJ1ZVwiIFsoc2VsZWN0ZWQpXT1cIm1vZGVsLmlzU2VsZWN0ZWRcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zZWxlY3RlZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKG5ld1ZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgc2VsZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdteUNoaXAnKVxuICAgICAqIHB1YmxpYyBjaGlwOiBJZ3hDaGlwQ29tcG9uZW50O1xuICAgICAqIHNlbGVjdGVkQ2hpcCgpe1xuICAgICAqICAgICBsZXQgc2VsZWN0ZWRDaGlwID0gdGhpcy5jaGlwLnNlbGVjdGVkO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIFRoZSBgY29sb3JgIHByb3BlcnR5IHN1cHBvcnRzIHN0cmluZywgcmdiLCBoZXguXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2NvbG9yXT1cIicjZmYwMDAwJ1wiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGNvbG9yKG5ld0NvbG9yKSB7XG4gICAgICAgIHRoaXMuY2hpcEFyZWEubmF0aXZlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBuZXdDb2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdteUNoaXAnKVxuICAgICAqIHB1YmxpYyBjaGlwOiBJZ3hDaGlwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgY2hpcENvbG9yID0gdGhpcy5jaGlwLmNvbG9yO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlwQXJlYS5uYXRpdmVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJQ2hpcFJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSUNoaXBSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBtb3Zpbmcgc3RhcnRzLlxuICAgICAqIFJldHVybnMgdGhlIG1vdmluZyBgSWd4Q2hpcENvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKG1vdmVTdGFydCk9XCJtb3ZlU3RhcnRlZCgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG1vdmVTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDaGlwRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIG1vdmluZyBlbmRzLlxuICAgICAqIFJldHVybnMgdGhlIG1vdmVkIGBJZ3hDaGlwQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAobW92ZUVuZCk9XCJtb3ZlRW5kZWQoJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBtb3ZlRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNoaXBFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgcmVtb3ZlZC5cbiAgICAgKiBSZXR1cm5zIHRoZSByZW1vdmVkIGBJZ3hDaGlwQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAocmVtb3ZlKT1cInJlbW92ZSgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDaGlwRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGlzIGNsaWNrZWQuXG4gICAgICogUmV0dXJucyB0aGUgY2xpY2tlZCBgSWd4Q2hpcENvbXBvbmVudGAsIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBiZSBjYW5jZWxlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAoY2xpY2spPVwiY2hpcENsaWNrKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2hpcENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcENsaWNrRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGlzIHNlbGVjdGVkL2Rlc2VsZWN0ZWQuXG4gICAgICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgY2hpcCByZWZlcmVuY2UsIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBiZSBjYW5jZWxlZCwgd2hhdCBpcyB0aGUgbmV4dCBzZWxlY3Rpb24gc3RhdGUgYW5kXG4gICAgICogd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkIGJ5IGludGVyYWN0aW9uIGBvcmlnaW5hbEV2ZW50YCBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIGBvcmlnaW5hbEV2ZW50YCBpcyBgbnVsbGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW3NlbGVjdGFibGVdPVwidHJ1ZVwiIChzZWxlY3RlZENoYW5naW5nKT1cImNoaXBTZWxlY3QoJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5naW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcFNlbGVjdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBpcyBzZWxlY3RlZC9kZXNlbGVjdGVkIGFuZCBhbnkgcmVsYXRlZCBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucyBhbHNvIGVuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgKHNlbGVjdGVkQ2hhbmdlZCk9XCJjaGlwU2VsZWN0RW5kKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNoaXBFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAga2V5Ym9hcmQgbmF2aWdhdGlvbiBpcyBiZWluZyB1c2VkLlxuICAgICAqIFJldHVybnMgdGhlIGZvY3VzZWQvc2VsZWN0ZWQgYElneENoaXBDb21wb25lbnRgLCB3aGV0aGVyIHRoZSBldmVudCBzaG91bGQgYmUgY2FuY2VsZWQsXG4gICAgICogaWYgdGhlIGBhbHRgLCBgc2hpZnRgIG9yIGBjb250cm9sYCBrZXkgaXMgcHJlc3NlZCBhbmQgdGhlIHByZXNzZWQga2V5IG5hbWUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGtleURvd24pPVwiY2hpcEtleURvd24oJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBrZXlEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcEtleURvd25FdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaGFzIGVudGVyZWQgdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgLlxuICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBgSWd4Q2hpcENvbXBvbmVudGAsIHRoZSBkcmFnIGBJZ3hDaGlwQ29tcG9uZW50YCwgYXMgIHdlbGwgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgZHJvcCBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGRyYWdFbnRlcik9XCJjaGlwRW50ZXIoJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkcmFnRW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElDaGlwRW50ZXJEcmFnQXJlYUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBoYXMgbGVmdCB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAuXG4gICAgICogUmV0dXJucyB0aGUgdGFyZ2V0IGBJZ3hDaGlwQ29tcG9uZW50YCwgdGhlIGRyYWcgYElneENoaXBDb21wb25lbnRgLCBhcyAgd2VsbCBhc1xuICAgICAqIHRoZSBvcmlnaW5hbCBkcm9wIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAoZHJhZ0xlYXZlKT1cImNoaXBMZWF2ZSgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRyYWdMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGlzIG92ZXIgdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgLlxuICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBgSWd4Q2hpcENvbXBvbmVudGAsIHRoZSBkcmFnIGBJZ3hDaGlwQ29tcG9uZW50YCwgYXMgIHdlbGwgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgZHJvcCBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGRyYWdPdmVyKT1cImNoaXBPdmVyKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAgQE91dHB1dCgpXG4gICAgIHB1YmxpYyBkcmFnT3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGhhcyBiZWVuIGRyb3BwZWQgaW4gdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgLlxuICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBgSWd4Q2hpcENvbXBvbmVudGAsIHRoZSBkcmFnIGBJZ3hDaGlwQ29tcG9uZW50YCwgYXMgIHdlbGwgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgZHJvcCBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGRyYWdEcm9wKT1cImNoaXBMZWF2ZSgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRyYWdEcm9wID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBgSWd4RHJhZ0RpcmVjdGl2ZWAgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCB1c2VzIGZvciBkcmFnZ2luZyBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbaWRdPVwiY2hpcC5pZFwiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG9uTW92ZVN0YXJ0KGV2ZW50OiBJQmFzZUNoaXBFdmVudEFyZ3Mpe1xuICAgICAqICAgICBsZXQgZHJhZ0RpcmVjdGl2ZSA9IGV2ZW50Lm93bmVyLmRyYWdEaXJlY3RpdmU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NoaXBBcmVhJywgeyByZWFkOiBJZ3hEcmFnRGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgZHJhZ0RpcmVjdGl2ZTogSWd4RHJhZ0RpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdjaGlwQXJlYScsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGNoaXBBcmVhOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdENvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIHNlbGVjdENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0UmVtb3ZlSWNvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkZWZhdWx0UmVtb3ZlSWNvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0U2VsZWN0SWNvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkZWZhdWx0U2VsZWN0SWNvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlbW92ZUJ1dHRvblRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVJY29uIHx8IHRoaXMuZGVmYXVsdFJlbW92ZUljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0SWNvblRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RJY29uIHx8IHRoaXMuZGVmYXVsdFNlbGVjdEljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ2hvc3RDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnREZW5zaXR5Q2xhc3MoJ2lneC1jaGlwX19naG9zdCcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlQmFzZUVsZW1lbnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJvdGVjdGVkIF90YWJJbmRleCA9IG51bGw7XG4gICAgcHJvdGVjdGVkIF9zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfc2VsZWN0ZWRJdGVtQ2xhc3MgPSAnaWd4LWNoaXBfX2l0ZW0tLXNlbGVjdGVkJztcbiAgICBwcm90ZWN0ZWQgX21vdmVkV2hpbGVSZW1vdmluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuQ2hpcFJlc1N0cmluZ3M7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgcHJvdGVjdGVkIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHJpdmF0ZSBnZXQgaG9zdENsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbdGhpcy5nZXRDb21wb25lbnREZW5zaXR5Q2xhc3MoJ2lneC1jaGlwJyldO1xuXG4gICAgICAgIC8vIEFkZCB0aGUgYmFzZSBjbGFzcyBmaXJzdCBmb3IgZWFjaCBkZW5zaXR5XG4gICAgICAgIGlmICghY2xhc3Nlcy5pbmNsdWRlcygnaWd4LWNoaXAnKSkge1xuICAgICAgICAgICAgY2xhc3Nlcy51bnNoaWZ0KCdpZ3gtY2hpcCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZGlzYWJsZWQgPyAnaWd4LWNoaXAtLWRpc2FibGVkJyA6ICcnKTtcblxuICAgICAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBrZXlFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLm9uQ2hpcEtleURvd24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0Q2xhc3MoY29uZGl0aW9uOiBib29sZWFuKTogYW55IHtcbiAgICAgICAgY29uc3QgU0VMRUNUX0NMQVNTID0gJ2lneC1jaGlwX19zZWxlY3QnO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbU0VMRUNUX0NMQVNTXTogY29uZGl0aW9uLFxuICAgICAgICAgICAgW2Ake1NFTEVDVF9DTEFTU30tLWhpZGRlbmBdOiAhY29uZGl0aW9uXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VsZWN0VHJhbnNpdGlvbkRvbmUoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lKSB7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIG9uU2VsZWN0aW9uRG9uZSBvbiB3aGVuIGB3aWR0aGAgcHJvcGVydHkgaXMgY2hhbmdlZCBhbmQgdGhlIHRhcmdldCBpcyB2YWxpZCBlbGVtZW50KG5vdCBjb21tZW50KS5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXlEb3duQXJnczogSUNoaXBLZXlEb3duRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmtleURvd24uZW1pdChrZXlEb3duQXJncyk7XG4gICAgICAgIGlmIChrZXlEb3duQXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoZXZlbnQua2V5ID09PSAnRGVsZXRlJyB8fCBldmVudC5rZXkgPT09ICdEZWwnKSAmJiB0aGlzLnJlbW92YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUuZW1pdCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgb3duZXI6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChldmVudC5rZXkgPT09ICcgJyB8fCBldmVudC5rZXkgPT09ICdTcGFjZWJhcicpICYmIHRoaXMuc2VsZWN0YWJsZSAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oIXRoaXMuc2VsZWN0ZWQsIGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5rZXkgIT09ICdUYWInKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblJlbW92ZUJ0bktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJyAnIHx8IGV2ZW50LmtleSA9PT0gJ1NwYWNlYmFyJyB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlLmVtaXQoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlTW91c2VEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZW1vdmVDbGljayhldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZW1vdmVUb3VjaE1vdmUoKSB7XG4gICAgICAgIC8vIFdlIGRvbid0IHJlbW92ZSBjaGlwIGlmIHVzZXIgc3RhcnRpbmcgdG91Y2ggaW50ZXJhY3Rpbmcgb24gdGhlIHJlbW92ZSBidXR0b24gbW92ZXMgdGhlIGNoaXBcbiAgICAgICAgdGhpcy5fbW92ZWRXaGlsZVJlbW92aW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uUmVtb3ZlVG91Y2hFbmQoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3ZlZFdoaWxlUmVtb3ZpbmcpIHtcbiAgICAgICAgICAgIHRoaXMub25SZW1vdmVDbGljayhldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW92ZWRXaGlsZVJlbW92aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU3RhcnQgY2hpcCBpZ3hEcmFnIGJlaGF2aW9yXG4gICAgcHVibGljIG9uQ2hpcERyYWdTdGFydChldmVudDogSURyYWdTdGFydEV2ZW50QXJncykge1xuICAgICAgICB0aGlzLm1vdmVTdGFydC5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgb3duZXI6IHRoaXNcbiAgICAgICAgfSk7XG4gICAgICAgIGV2ZW50LmNhbmNlbCA9ICF0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwRHJhZ0VuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0ZU9uUmVsZWFzZSkge1xuICAgICAgICAgICAgdGhpcy5kcmFnRGlyZWN0aXZlLnRyYW5zaXRpb25Ub09yaWdpbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBNb3ZlRW5kKGV2ZW50OiBJRHJhZ0Jhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgLy8gbW92ZUVuZCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgcmV0dXJuIGFuaW1hdGlvbiBoYXMgZmluaXNoZWQuIFRoaXMgaGFwcGVuIHdoZW4gd2UgZHJhZyBhbmQgcmVsZWFzZSB0aGUgY2hpcC5cbiAgICAgICAgdGhpcy5tb3ZlRW5kLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpc1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGlwQXJlYS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcEdob3N0Q3JlYXRlKCkge1xuICAgICAgICB0aGlzLmhpZGVCYXNlRWxlbWVudCA9IHRoaXMuaGlkZUJhc2VPbkRyYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBHaG9zdERlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuaGlkZUJhc2VFbGVtZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBEcmFnQ2xpY2tlZChldmVudDogSURyYWdCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IGNsaWNrRXZlbnRBcmdzOiBJQ2hpcENsaWNrRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jaGlwQ2xpY2suZW1pdChjbGlja0V2ZW50QXJncyk7XG5cbiAgICAgICAgaWYgKCFjbGlja0V2ZW50QXJncy5jYW5jZWwgJiYgdGhpcy5zZWxlY3RhYmxlICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbighdGhpcy5zZWxlY3RlZCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEVuZCBjaGlwIGlneERyYWcgYmVoYXZpb3JcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFN0YXJ0IGNoaXAgaWd4RHJvcCBiZWhhdmlvclxuICAgIHB1YmxpYyBvbkNoaXBEcmFnRW50ZXJIYW5kbGVyKGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdFbnRlci5lbWl0KGV2ZW50QXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBEcmFnTGVhdmVIYW5kbGVyKGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdMZWF2ZS5lbWl0KGV2ZW50QXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBEcm9wKGV2ZW50OiBJRHJvcERyb3BwZWRFdmVudEFyZ3MpIHtcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBkZWZhdWx0IGRyb3AgbG9naWNcbiAgICAgICAgZXZlbnQuY2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdEcm9wLmVtaXQoZXZlbnRBcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcE92ZXJIYW5kbGVyKGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdPdmVyLmVtaXQoZXZlbnRBcmdzKTtcbiAgICB9XG4gICAgLy8gRW5kIGNoaXAgaWd4RHJvcCBiZWhhdmlvclxuXG4gICAgcHJvdGVjdGVkIGNoYW5nZVNlbGVjdGlvbihuZXdWYWx1ZTogYm9vbGVhbiwgc3JjRXZlbnQgPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG9uU2VsZWN0QXJnczogSUNoaXBTZWxlY3RFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBzcmNFdmVudCxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLnNlbGVjdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbmVuZCcpXG4gICAgICAgICAgICAucGlwZShmaWx0ZXI8VHJhbnNpdGlvbkV2ZW50PihldmVudCA9PiBldmVudC5wcm9wZXJ0eU5hbWUgPT09ICd3aWR0aCcpLCB0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB0aGlzLm9uU2VsZWN0VHJhbnNpdGlvbkRvbmUoZXZlbnQpKTtcblxuICAgICAgICBpZiAobmV3VmFsdWUgJiYgIXRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICBvblNlbGVjdEFyZ3Muc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5naW5nLmVtaXQob25TZWxlY3RBcmdzKTtcblxuICAgICAgICAgICAgaWYgKCFvblNlbGVjdEFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmNoaXBBcmVhLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3NlbGVjdGVkSXRlbUNsYXNzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIW5ld1ZhbHVlICYmIHRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdpbmcuZW1pdChvblNlbGVjdEFyZ3MpO1xuXG4gICAgICAgICAgICBpZiAoIW9uU2VsZWN0QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuY2hpcEFyZWEubmF0aXZlRWxlbWVudCwgdGhpcy5fc2VsZWN0ZWRJdGVtQ2xhc3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2ICNjaGlwQXJlYSBjbGFzcz1cImlneC1jaGlwX19pdGVtXCJcbiAgICBbaWd4RHJhZ109XCJ7Y2hpcDogdGhpc31cIlxuICAgIFtzdHlsZS52aXNpYmlsaXR5XT0naGlkZUJhc2VFbGVtZW50ID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiJ1xuICAgIFtnaG9zdENsYXNzXT1cImdob3N0Q2xhc3NcIlxuICAgIChkcmFnU3RhcnQpPVwib25DaGlwRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgIChnaG9zdENyZWF0ZSk9XCJvbkNoaXBHaG9zdENyZWF0ZSgpXCJcbiAgICAoZ2hvc3REZXN0cm95KT1cIm9uQ2hpcEdob3N0RGVzdHJveSgpXCJcbiAgICAoZHJhZ0VuZCk9XCJvbkNoaXBEcmFnRW5kKClcIlxuICAgICh0cmFuc2l0aW9uZWQpPVwib25DaGlwTW92ZUVuZCgkZXZlbnQpXCJcbiAgICAoZHJhZ0NsaWNrKT1cIm9uQ2hpcERyYWdDbGlja2VkKCRldmVudClcIlxuICAgIGlneERyb3BcbiAgICAoZW50ZXIpPVwib25DaGlwRHJhZ0VudGVySGFuZGxlcigkZXZlbnQpXCJcbiAgICAobGVhdmUpPSBcIm9uQ2hpcERyYWdMZWF2ZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKG92ZXIpPVwib25DaGlwT3ZlckhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGRyb3BwZWQpPVwib25DaGlwRHJvcCgkZXZlbnQpXCI+XG5cbiAgICA8ZGl2ICNzZWxlY3RDb250YWluZXIgW25nQ2xhc3NdPVwic2VsZWN0Q2xhc3Moc2VsZWN0ZWQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3RJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1wcmVmaXgsW2lneFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWNoaXBfX2NvbnRlbnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXN1ZmZpeCxbaWd4U3VmZml4XVwiPjwvbmctY29udGVudD5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2hpcF9fcmVtb3ZlXCIgKm5nSWY9XCJyZW1vdmFibGVcIlxuICAgICAgICBbYXR0ci50YWJJbmRleF09XCJ0YWJJbmRleFwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uUmVtb3ZlQnRuS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uUmVtb3ZlTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uUmVtb3ZlTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwib25SZW1vdmVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgKHRvdWNobW92ZSk9XCJvblJlbW92ZVRvdWNoTW92ZSgpXCJcbiAgICAgICAgKHRvdWNoZW5kKT1cIm9uUmVtb3ZlVG91Y2hFbmQoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVtb3ZlQnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRTZWxlY3RJY29uPlxuICAgIDxpZ3gtaWNvbiBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY2hpcF9zZWxlY3RcIj5kb25lPC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJlbW92ZUljb24+XG4gICAgPGlneC1pY29uIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jaGlwX3JlbW92ZVwiPmNhbmNlbDwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuIl19
737
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvY2hpcHMvY2hpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTBCLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGdCQUFnQixFQUFzRixnQkFBZ0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBR3JMLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUF5QmxFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQU9ILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxrQkFBa0I7SUF3QnBEOzs7Ozs7O09BT0c7SUFDSCxJQUVXLFFBQVEsQ0FBQyxLQUFh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RCxpQkFBaUI7c0JBRHZCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBd0R2RCxTQUFTO3NCQURwQixXQUFXO3VCQUFDLE9BQU87Z0JBbUJiLFFBQVE7c0JBRGQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgSW5qZWN0LFxuICAgIE9wdGlvbmFsLFxuICAgIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsIERpc3BsYXlEZW5zaXR5VG9rZW4sIERpc3BsYXlEZW5zaXR5QmFzZSB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBJZ3hEcmFnRGlyZWN0aXZlLCBJRHJhZ0Jhc2VFdmVudEFyZ3MsIElEcmFnU3RhcnRFdmVudEFyZ3MsIElEcm9wQmFzZUV2ZW50QXJncywgSURyb3BEcm9wcGVkRXZlbnRBcmdzLCBJZ3hEcm9wRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kcmFnLWRyb3AvZHJhZy1kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJQmFzZUV2ZW50QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSUNoaXBSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vY2hpcC1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBJQmFzZUNoaXBFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUV2ZW50QXJncyB7XG4gICAgb3JpZ2luYWxFdmVudDogSURyYWdCYXNlRXZlbnRBcmdzIHwgSURyb3BCYXNlRXZlbnRBcmdzIHwgS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50O1xuICAgIG93bmVyOiBJZ3hDaGlwQ29tcG9uZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGlwQ2xpY2tFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUNoaXBFdmVudEFyZ3Mge1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2hpcEtleURvd25FdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUNoaXBFdmVudEFyZ3Mge1xuICAgIG9yaWdpbmFsRXZlbnQ6IEtleWJvYXJkRXZlbnQ7XG4gICAgY2FuY2VsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDaGlwRW50ZXJEcmFnQXJlYUV2ZW50QXJncyBleHRlbmRzIElCYXNlQ2hpcEV2ZW50QXJncyB7XG4gICAgZHJhZ0NoaXA6IElneENoaXBDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNoaXBTZWxlY3RFdmVudEFyZ3MgZXh0ZW5kcyBJQmFzZUNoaXBFdmVudEFyZ3Mge1xuICAgIGNhbmNlbDogYm9vbGVhbjtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxubGV0IENISVBfSUQgPSAwO1xuXG4vKipcbiAqIENoaXAgaXMgY29tcGFjdCB2aXN1YWwgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgaW5mb3JtYXRpb24gaW4gYW4gb2Jyb3VuZC5cbiAqXG4gKiBAaWd4TW9kdWxlIElneENoaXBzTW9kdWxlXG4gKlxuICogQGlneFRoZW1lIGlneC1jaGlwLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGNoaXBcbiAqXG4gKiBAaWd4R3JvdXAgZGlzcGxheVxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIENoaXAgY2FuIGJlIHRlbXBsYXRlZCwgZGVsZXRlZCwgYW5kIHNlbGVjdGVkLlxuICogTXVsdGlwbGUgY2hpcHMgY2FuIGJlIHJlb3JkZXJlZCBhbmQgdmlzdWFsbHkgY29ubmVjdGVkIHRvIGVhY2ggb3RoZXIuXG4gKiBDaGlwcyByZXNpZGUgaW4gYSBjb250YWluZXIgY2FsbGVkIGNoaXBzIGFyZWEgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgY2hpcHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtY2hpcCBjbGFzcz1cImNoaXBTdHlsZVwiIFtpZF09XCI5MDFcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlKT1cImNoaXBSZW1vdmVkKCRldmVudClcIj5cbiAqICAgIDxpZ3gtYXZhdGFyIGNsYXNzPVwiY2hpcC1hdmF0YXItcmVzaXplZFwiIGlneFByZWZpeD48L2lneC1hdmF0YXI+XG4gKiA8L2lneC1jaGlwPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWNoaXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnY2hpcC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSWd4RHJvcERpcmVjdGl2ZSwgSWd4RHJhZ0RpcmVjdGl2ZSwgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCwgTmdJZiwgSWd4SWNvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4Q2hpcENvbXBvbmVudCBleHRlbmRzIERpc3BsYXlEZW5zaXR5QmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgYGlkYCBhdHRyaWJ1dGUuIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWNoaXAtJHtDSElQX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGByb2xlYCBhdHRyaWJ1dGUgb2YgdGhlIGNoaXAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY2hpcFJvbGUgPSB0aGlzLmNoaXAucm9sZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAnb3B0aW9uJztcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIHZhbHVlIG9mIGB0YWJpbmRleGAgYXR0cmlidXRlLiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCB1c2UgdGhlIGVsZW1lbnQncyB0YWJpbmRleCBpZiBzZXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFt0YWJJbmRleF09XCIxXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiSW5kZXgnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJJbmRleCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYkluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFiSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICF0aGlzLmRpc2FibGVkID8gMCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc3RvcmVzIGRhdGEgcmVsYXRlZCB0byB0aGUgY2hpcC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbZGF0YV09XCJ7IHZhbHVlOiAnQ291bnRyeScgfVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGF0YTogYW55O1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZGVmaW5lcyBpZiB0aGUgYElneENoaXBDb21wb25lbnRgIGNhbiBiZSBkcmFnZ2VkIGluIG9yZGVyIHRvIGNoYW5nZSBpdCdzIHBvc2l0aW9uLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZW5hYmxlcy9kaXNhYmxlcyB0aGUgZHJhZ2dhYmxlIGVsZW1lbnQgYW5pbWF0aW9uIHdoZW4gdGhlIGVsZW1lbnQgaXMgcmVsZWFzZWQuXG4gICAgICogQnkgZGVmYXVsdCBpdCdzIHNldCB0byB0cnVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbYW5pbWF0ZU9uUmVsZWFzZV09XCJmYWxzZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYW5pbWF0ZU9uUmVsZWFzZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBlbmFibGVzL2Rpc2FibGVzIHRoZSBoaWRpbmcgb2YgdGhlIGJhc2UgZWxlbWVudCB0aGF0IGhhcyBiZWVuIGRyYWdnZWQuXG4gICAgICogQnkgZGVmYXVsdCBpdCdzIHNldCB0byB0cnVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiBbaGlkZUJhc2VPbkRyYWddPVwiZmFsc2VcIj48L2lneC1jaGlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGVCYXNlT25EcmFnID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgaWYgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBzaG91bGQgcmVuZGVyIHJlbW92ZSBidXR0b24gYW5kIHRocm93IHJlbW92ZSBldmVudHMuXG4gICAgICogQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gZmFsc2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cIidpZ3gtY2hpcC0xJ1wiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZhYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgaWNvbiB0aGF0IHRoZSBjaGlwIGFwcGxpZXMgdG8gdGhlIHJlbW92ZSBidXR0b24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cImNoaXAuaWRcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiBbcmVtb3ZlSWNvbl09XCJpY29uVGVtcGxhdGVcIj48L2lneC1jaGlwPlxuICAgICAqIDxuZy10ZW1wbGF0ZSAjaWNvblRlbXBsYXRlPjxpZ3gtaWNvbj5kZWxldGU8L2lneC1pY29uPjwvbmctdGVtcGxhdGU+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlSWNvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGRlZmluZXMgaWYgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBjYW4gYmUgc2VsZWN0ZWQgb24gY2xpY2sgb3IgdGhyb3VnaCBuYXZpZ2F0aW9uLFxuICAgICAqIEJ5IGRlZmF1bHQgaXQgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jaGlwIFtpZF09XCJjaGlwLmlkXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgW3JlbW92YWJsZV09XCJ0cnVlXCIgW3NlbGVjdGFibGVdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0YWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGljb24gdGhhdCB0aGUgY2hpcCBhcHBsaWVzIHdoZW4gaXQgaXMgc2VsZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cImNoaXAuaWRcIiBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgW3NlbGVjdEljb25dPVwiaWNvblRlbXBsYXRlXCI+PC9pZ3gtY2hpcD5cbiAgICAgKiA8bmctdGVtcGxhdGUgI2ljb25UZW1wbGF0ZT48aWd4LWljb24+ZG9uZV9vdXRsaW5lPC9pZ3gtaWNvbj48L25nLXRlbXBsYXRlPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdEljb246IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBkZWZpbmVzIGlmIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgZGlzYWJsZWQuIFdoZW4gZGlzYWJsZWQgaXQgcmVzdHJpY3RzIHVzZXIgaW50ZXJhY3Rpb25zXG4gICAgICogbGlrZSBmb2N1c2luZyBvbiBjbGljayBvciB0YWIsIHNlbGVjdGlvbiBvbiBjbGljayBvciBTcGFjZSwgZHJhZ2dpbmcuXG4gICAgICogQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gZmFsc2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgW2lkXT1cImNoaXAuaWRcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBzZWxlY3RlZCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgW3NlbGVjdGVkXT1cInRydWVcIj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFR3by13YXkgZGF0YSBiaW5kaW5nOlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW3NlbGVjdGFibGVdPVwidHJ1ZVwiIFsoc2VsZWN0ZWQpXT1cIm1vZGVsLmlzU2VsZWN0ZWRcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zZWxlY3RlZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKG5ld1ZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgc2VsZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdteUNoaXAnKVxuICAgICAqIHB1YmxpYyBjaGlwOiBJZ3hDaGlwQ29tcG9uZW50O1xuICAgICAqIHNlbGVjdGVkQ2hpcCgpe1xuICAgICAqICAgICBsZXQgc2VsZWN0ZWRDaGlwID0gdGhpcy5jaGlwLnNlbGVjdGVkO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHNldHMgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIFRoZSBgY29sb3JgIHByb3BlcnR5IHN1cHBvcnRzIHN0cmluZywgcmdiLCBoZXguXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2NvbG9yXT1cIicjZmYwMDAwJ1wiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGNvbG9yKG5ld0NvbG9yKSB7XG4gICAgICAgIHRoaXMuY2hpcEFyZWEubmF0aXZlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBuZXdDb2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCdteUNoaXAnKVxuICAgICAqIHB1YmxpYyBjaGlwOiBJZ3hDaGlwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgY2hpcENvbG9yID0gdGhpcy5jaGlwLmNvbG9yO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlwQXJlYS5uYXRpdmVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJQ2hpcFJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSUNoaXBSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBtb3Zpbmcgc3RhcnRzLlxuICAgICAqIFJldHVybnMgdGhlIG1vdmluZyBgSWd4Q2hpcENvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKG1vdmVTdGFydCk9XCJtb3ZlU3RhcnRlZCgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG1vdmVTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDaGlwRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIG1vdmluZyBlbmRzLlxuICAgICAqIFJldHVybnMgdGhlIG1vdmVkIGBJZ3hDaGlwQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAobW92ZUVuZCk9XCJtb3ZlRW5kZWQoJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBtb3ZlRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNoaXBFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaXMgcmVtb3ZlZC5cbiAgICAgKiBSZXR1cm5zIHRoZSByZW1vdmVkIGBJZ3hDaGlwQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAocmVtb3ZlKT1cInJlbW92ZSgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDaGlwRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGlzIGNsaWNrZWQuXG4gICAgICogUmV0dXJucyB0aGUgY2xpY2tlZCBgSWd4Q2hpcENvbXBvbmVudGAsIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBiZSBjYW5jZWxlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAoY2xpY2spPVwiY2hpcENsaWNrKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2hpcENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcENsaWNrRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGlzIHNlbGVjdGVkL2Rlc2VsZWN0ZWQuXG4gICAgICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgY2hpcCByZWZlcmVuY2UsIHdoZXRoZXIgdGhlIGV2ZW50IHNob3VsZCBiZSBjYW5jZWxlZCwgd2hhdCBpcyB0aGUgbmV4dCBzZWxlY3Rpb24gc3RhdGUgYW5kXG4gICAgICogd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkIGJ5IGludGVyYWN0aW9uIGBvcmlnaW5hbEV2ZW50YCBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIGBvcmlnaW5hbEV2ZW50YCBpcyBgbnVsbGAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW3NlbGVjdGFibGVdPVwidHJ1ZVwiIChzZWxlY3RlZENoYW5naW5nKT1cImNoaXBTZWxlY3QoJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5naW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcFNlbGVjdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBpcyBzZWxlY3RlZC9kZXNlbGVjdGVkIGFuZCBhbnkgcmVsYXRlZCBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucyBhbHNvIGVuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbc2VsZWN0YWJsZV09XCJ0cnVlXCIgKHNlbGVjdGVkQ2hhbmdlZCk9XCJjaGlwU2VsZWN0RW5kKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJQmFzZUNoaXBFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAga2V5Ym9hcmQgbmF2aWdhdGlvbiBpcyBiZWluZyB1c2VkLlxuICAgICAqIFJldHVybnMgdGhlIGZvY3VzZWQvc2VsZWN0ZWQgYElneENoaXBDb21wb25lbnRgLCB3aGV0aGVyIHRoZSBldmVudCBzaG91bGQgYmUgY2FuY2VsZWQsXG4gICAgICogaWYgdGhlIGBhbHRgLCBgc2hpZnRgIG9yIGBjb250cm9sYCBrZXkgaXMgcHJlc3NlZCBhbmQgdGhlIHByZXNzZWQga2V5IG5hbWUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGtleURvd24pPVwiY2hpcEtleURvd24oJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBrZXlEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcEtleURvd25FdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBgSWd4Q2hpcENvbXBvbmVudGAgaGFzIGVudGVyZWQgdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgLlxuICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBgSWd4Q2hpcENvbXBvbmVudGAsIHRoZSBkcmFnIGBJZ3hDaGlwQ29tcG9uZW50YCwgYXMgIHdlbGwgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgZHJvcCBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGRyYWdFbnRlcik9XCJjaGlwRW50ZXIoJGV2ZW50KVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkcmFnRW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElDaGlwRW50ZXJEcmFnQXJlYUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCBoYXMgbGVmdCB0aGUgYElneENoaXBzQXJlYUNvbXBvbmVudGAuXG4gICAgICogUmV0dXJucyB0aGUgdGFyZ2V0IGBJZ3hDaGlwQ29tcG9uZW50YCwgdGhlIGRyYWcgYElneENoaXBDb21wb25lbnRgLCBhcyAgd2VsbCBhc1xuICAgICAqIHRoZSBvcmlnaW5hbCBkcm9wIGV2ZW50IGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCAjbXlDaGlwIFtpZF09XCInaWd4LWNoaXAtMSdcIiBbZHJhZ2dhYmxlXT1cInRydWVcIiAoZHJhZ0xlYXZlKT1cImNoaXBMZWF2ZSgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRyYWdMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGlzIG92ZXIgdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgLlxuICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBgSWd4Q2hpcENvbXBvbmVudGAsIHRoZSBkcmFnIGBJZ3hDaGlwQ29tcG9uZW50YCwgYXMgIHdlbGwgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgZHJvcCBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGRyYWdPdmVyKT1cImNoaXBPdmVyKCRldmVudClcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAgQE91dHB1dCgpXG4gICAgIHB1YmxpYyBkcmFnT3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoaXBFbnRlckRyYWdBcmVhRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgYElneENoaXBDb21wb25lbnRgIGhhcyBiZWVuIGRyb3BwZWQgaW4gdGhlIGBJZ3hDaGlwc0FyZWFDb21wb25lbnRgLlxuICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBgSWd4Q2hpcENvbXBvbmVudGAsIHRoZSBkcmFnIGBJZ3hDaGlwQ29tcG9uZW50YCwgYXMgIHdlbGwgYXNcbiAgICAgKiB0aGUgb3JpZ2luYWwgZHJvcCBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNoaXAgI215Q2hpcCBbaWRdPVwiJ2lneC1jaGlwLTEnXCIgW2RyYWdnYWJsZV09XCJ0cnVlXCIgKGRyYWdEcm9wKT1cImNoaXBMZWF2ZSgkZXZlbnQpXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRyYWdEcm9wID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBgSWd4RHJhZ0RpcmVjdGl2ZWAgdGhlIGBJZ3hDaGlwQ29tcG9uZW50YCB1c2VzIGZvciBkcmFnZ2luZyBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2hpcCBbaWRdPVwiY2hpcC5pZFwiIFtkcmFnZ2FibGVdPVwidHJ1ZVwiPjwvaWd4LWNoaXA+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIG9uTW92ZVN0YXJ0KGV2ZW50OiBJQmFzZUNoaXBFdmVudEFyZ3Mpe1xuICAgICAqICAgICBsZXQgZHJhZ0RpcmVjdGl2ZSA9IGV2ZW50Lm93bmVyLmRyYWdEaXJlY3RpdmU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NoaXBBcmVhJywgeyByZWFkOiBJZ3hEcmFnRGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgZHJhZ0RpcmVjdGl2ZTogSWd4RHJhZ0RpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdjaGlwQXJlYScsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGNoaXBBcmVhOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdENvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIHNlbGVjdENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0UmVtb3ZlSWNvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkZWZhdWx0UmVtb3ZlSWNvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0U2VsZWN0SWNvbicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkZWZhdWx0U2VsZWN0SWNvbjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlbW92ZUJ1dHRvblRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVJY29uIHx8IHRoaXMuZGVmYXVsdFJlbW92ZUljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0SWNvblRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RJY29uIHx8IHRoaXMuZGVmYXVsdFNlbGVjdEljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ2hvc3RDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnREZW5zaXR5Q2xhc3MoJ2lneC1jaGlwX19naG9zdCcpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlQmFzZUVsZW1lbnQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJvdGVjdGVkIF90YWJJbmRleCA9IG51bGw7XG4gICAgcHJvdGVjdGVkIF9zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfc2VsZWN0ZWRJdGVtQ2xhc3MgPSAnaWd4LWNoaXBfX2l0ZW0tLXNlbGVjdGVkJztcbiAgICBwcm90ZWN0ZWQgX21vdmVkV2hpbGVSZW1vdmluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuQ2hpcFJlc1N0cmluZ3M7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgcHJvdGVjdGVkIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHJpdmF0ZSBnZXQgaG9zdENsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbdGhpcy5nZXRDb21wb25lbnREZW5zaXR5Q2xhc3MoJ2lneC1jaGlwJyldO1xuXG4gICAgICAgIC8vIEFkZCB0aGUgYmFzZSBjbGFzcyBmaXJzdCBmb3IgZWFjaCBkZW5zaXR5XG4gICAgICAgIGlmICghY2xhc3Nlcy5pbmNsdWRlcygnaWd4LWNoaXAnKSkge1xuICAgICAgICAgICAgY2xhc3Nlcy51bnNoaWZ0KCdpZ3gtY2hpcCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZGlzYWJsZWQgPyAnaWd4LWNoaXAtLWRpc2FibGVkJyA6ICcnKTtcblxuICAgICAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBrZXlFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLm9uQ2hpcEtleURvd24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0Q2xhc3MoY29uZGl0aW9uOiBib29sZWFuKTogYW55IHtcbiAgICAgICAgY29uc3QgU0VMRUNUX0NMQVNTID0gJ2lneC1jaGlwX19zZWxlY3QnO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbU0VMRUNUX0NMQVNTXTogY29uZGl0aW9uLFxuICAgICAgICAgICAgW2Ake1NFTEVDVF9DTEFTU30tLWhpZGRlbmBdOiAhY29uZGl0aW9uXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VsZWN0VHJhbnNpdGlvbkRvbmUoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lKSB7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIG9uU2VsZWN0aW9uRG9uZSBvbiB3aGVuIGB3aWR0aGAgcHJvcGVydHkgaXMgY2hhbmdlZCBhbmQgdGhlIHRhcmdldCBpcyB2YWxpZCBlbGVtZW50KG5vdCBjb21tZW50KS5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXlEb3duQXJnczogSUNoaXBLZXlEb3duRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmtleURvd24uZW1pdChrZXlEb3duQXJncyk7XG4gICAgICAgIGlmIChrZXlEb3duQXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoZXZlbnQua2V5ID09PSAnRGVsZXRlJyB8fCBldmVudC5rZXkgPT09ICdEZWwnKSAmJiB0aGlzLnJlbW92YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUuZW1pdCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgb3duZXI6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChldmVudC5rZXkgPT09ICcgJyB8fCBldmVudC5rZXkgPT09ICdTcGFjZWJhcicpICYmIHRoaXMuc2VsZWN0YWJsZSAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oIXRoaXMuc2VsZWN0ZWQsIGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5rZXkgIT09ICdUYWInKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblJlbW92ZUJ0bktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJyAnIHx8IGV2ZW50LmtleSA9PT0gJ1NwYWNlYmFyJyB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlLmVtaXQoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIG93bmVyOiB0aGlzXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlTW91c2VEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZW1vdmVDbGljayhldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZW1vdmVUb3VjaE1vdmUoKSB7XG4gICAgICAgIC8vIFdlIGRvbid0IHJlbW92ZSBjaGlwIGlmIHVzZXIgc3RhcnRpbmcgdG91Y2ggaW50ZXJhY3Rpbmcgb24gdGhlIHJlbW92ZSBidXR0b24gbW92ZXMgdGhlIGNoaXBcbiAgICAgICAgdGhpcy5fbW92ZWRXaGlsZVJlbW92aW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uUmVtb3ZlVG91Y2hFbmQoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tb3ZlZFdoaWxlUmVtb3ZpbmcpIHtcbiAgICAgICAgICAgIHRoaXMub25SZW1vdmVDbGljayhldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW92ZWRXaGlsZVJlbW92aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gU3RhcnQgY2hpcCBpZ3hEcmFnIGJlaGF2aW9yXG4gICAgcHVibGljIG9uQ2hpcERyYWdTdGFydChldmVudDogSURyYWdTdGFydEV2ZW50QXJncykge1xuICAgICAgICB0aGlzLm1vdmVTdGFydC5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgb3duZXI6IHRoaXNcbiAgICAgICAgfSk7XG4gICAgICAgIGV2ZW50LmNhbmNlbCA9ICF0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25DaGlwRHJhZ0VuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0ZU9uUmVsZWFzZSkge1xuICAgICAgICAgICAgdGhpcy5kcmFnRGlyZWN0aXZlLnRyYW5zaXRpb25Ub09yaWdpbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBNb3ZlRW5kKGV2ZW50OiBJRHJhZ0Jhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgLy8gbW92ZUVuZCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgcmV0dXJuIGFuaW1hdGlvbiBoYXMgZmluaXNoZWQuIFRoaXMgaGFwcGVuIHdoZW4gd2UgZHJhZyBhbmQgcmVsZWFzZSB0aGUgY2hpcC5cbiAgICAgICAgdGhpcy5tb3ZlRW5kLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpc1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGlwQXJlYS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcEdob3N0Q3JlYXRlKCkge1xuICAgICAgICB0aGlzLmhpZGVCYXNlRWxlbWVudCA9IHRoaXMuaGlkZUJhc2VPbkRyYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBHaG9zdERlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuaGlkZUJhc2VFbGVtZW50ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBEcmFnQ2xpY2tlZChldmVudDogSURyYWdCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIGNvbnN0IGNsaWNrRXZlbnRBcmdzOiBJQ2hpcENsaWNrRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jaGlwQ2xpY2suZW1pdChjbGlja0V2ZW50QXJncyk7XG5cbiAgICAgICAgaWYgKCFjbGlja0V2ZW50QXJncy5jYW5jZWwgJiYgdGhpcy5zZWxlY3RhYmxlICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbighdGhpcy5zZWxlY3RlZCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEVuZCBjaGlwIGlneERyYWcgYmVoYXZpb3JcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFN0YXJ0IGNoaXAgaWd4RHJvcCBiZWhhdmlvclxuICAgIHB1YmxpYyBvbkNoaXBEcmFnRW50ZXJIYW5kbGVyKGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdFbnRlci5lbWl0KGV2ZW50QXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBEcmFnTGVhdmVIYW5kbGVyKGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdMZWF2ZS5lbWl0KGV2ZW50QXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoaXBEcm9wKGV2ZW50OiBJRHJvcERyb3BwZWRFdmVudEFyZ3MpIHtcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBkZWZhdWx0IGRyb3AgbG9naWNcbiAgICAgICAgZXZlbnQuY2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdEcm9wLmVtaXQoZXZlbnRBcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hpcE92ZXJIYW5kbGVyKGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGl2ZSA9PT0gZXZlbnQuZHJhZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzOiBJQ2hpcEVudGVyRHJhZ0FyZWFFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGRyYWdDaGlwOiBldmVudC5kcmFnLmRhdGE/LmNoaXAsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRyYWdPdmVyLmVtaXQoZXZlbnRBcmdzKTtcbiAgICB9XG4gICAgLy8gRW5kIGNoaXAgaWd4RHJvcCBiZWhhdmlvclxuXG4gICAgcHJvdGVjdGVkIGNoYW5nZVNlbGVjdGlvbihuZXdWYWx1ZTogYm9vbGVhbiwgc3JjRXZlbnQgPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG9uU2VsZWN0QXJnczogSUNoaXBTZWxlY3RFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBzcmNFdmVudCxcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLnNlbGVjdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbmVuZCcpXG4gICAgICAgICAgICAucGlwZShmaWx0ZXI8VHJhbnNpdGlvbkV2ZW50PihldmVudCA9PiBldmVudC5wcm9wZXJ0eU5hbWUgPT09ICd3aWR0aCcpLCB0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB0aGlzLm9uU2VsZWN0VHJhbnNpdGlvbkRvbmUoZXZlbnQpKTtcblxuICAgICAgICBpZiAobmV3VmFsdWUgJiYgIXRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICBvblNlbGVjdEFyZ3Muc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5naW5nLmVtaXQob25TZWxlY3RBcmdzKTtcblxuICAgICAgICAgICAgaWYgKCFvblNlbGVjdEFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmNoaXBBcmVhLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3NlbGVjdGVkSXRlbUNsYXNzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIW5ld1ZhbHVlICYmIHRoaXMuX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdpbmcuZW1pdChvblNlbGVjdEFyZ3MpO1xuXG4gICAgICAgICAgICBpZiAoIW9uU2VsZWN0QXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuY2hpcEFyZWEubmF0aXZlRWxlbWVudCwgdGhpcy5fc2VsZWN0ZWRJdGVtQ2xhc3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2ICNjaGlwQXJlYSBjbGFzcz1cImlneC1jaGlwX19pdGVtXCJcbiAgICBbaWd4RHJhZ109XCJ7Y2hpcDogdGhpc31cIlxuICAgIFtzdHlsZS52aXNpYmlsaXR5XT0naGlkZUJhc2VFbGVtZW50ID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiJ1xuICAgIFtnaG9zdENsYXNzXT1cImdob3N0Q2xhc3NcIlxuICAgIChkcmFnU3RhcnQpPVwib25DaGlwRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgIChnaG9zdENyZWF0ZSk9XCJvbkNoaXBHaG9zdENyZWF0ZSgpXCJcbiAgICAoZ2hvc3REZXN0cm95KT1cIm9uQ2hpcEdob3N0RGVzdHJveSgpXCJcbiAgICAoZHJhZ0VuZCk9XCJvbkNoaXBEcmFnRW5kKClcIlxuICAgICh0cmFuc2l0aW9uZWQpPVwib25DaGlwTW92ZUVuZCgkZXZlbnQpXCJcbiAgICAoZHJhZ0NsaWNrKT1cIm9uQ2hpcERyYWdDbGlja2VkKCRldmVudClcIlxuICAgIGlneERyb3BcbiAgICAoZW50ZXIpPVwib25DaGlwRHJhZ0VudGVySGFuZGxlcigkZXZlbnQpXCJcbiAgICAobGVhdmUpPSBcIm9uQ2hpcERyYWdMZWF2ZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKG92ZXIpPVwib25DaGlwT3ZlckhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGRyb3BwZWQpPVwib25DaGlwRHJvcCgkZXZlbnQpXCI+XG5cbiAgICA8ZGl2ICNzZWxlY3RDb250YWluZXIgW25nQ2xhc3NdPVwic2VsZWN0Q2xhc3Moc2VsZWN0ZWQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3RJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1wcmVmaXgsW2lneFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWNoaXBfX2NvbnRlbnRcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXN1ZmZpeCxbaWd4U3VmZml4XVwiPjwvbmctY29udGVudD5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2hpcF9fcmVtb3ZlXCIgKm5nSWY9XCJyZW1vdmFibGVcIlxuICAgICAgICBbYXR0ci50YWJJbmRleF09XCJ0YWJJbmRleFwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uUmVtb3ZlQnRuS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uUmVtb3ZlTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uUmVtb3ZlTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwib25SZW1vdmVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgKHRvdWNobW92ZSk9XCJvblJlbW92ZVRvdWNoTW92ZSgpXCJcbiAgICAgICAgKHRvdWNoZW5kKT1cIm9uUmVtb3ZlVG91Y2hFbmQoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVtb3ZlQnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRTZWxlY3RJY29uPlxuICAgIDxpZ3gtaWNvbiBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfY2hpcF9zZWxlY3RcIj5kb25lPC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJlbW92ZUljb24+XG4gICAgPGlneC1pY29uIFthdHRyLmFyaWEtbGFiZWxdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9jaGlwX3JlbW92ZVwiPmNhbmNlbDwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuIl19