@fundamental-ngx/core 0.42.0-rc.2 → 0.42.0-rc.21

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 (397) hide show
  1. package/alert/alert.component.d.ts +5 -4
  2. package/alert/alert.module.d.ts +2 -1
  3. package/avatar/avatar.component.d.ts +2 -4
  4. package/avatar-group/directives/avatar-group-focusable-avatar.directive.d.ts +2 -6
  5. package/avatar-group/directives/avatar-group-overflow-button.directive.d.ts +2 -4
  6. package/bar/bar.component.d.ts +2 -4
  7. package/busy-indicator/busy-indicator-extended/busy-indicator-extended.directive.d.ts +2 -4
  8. package/button/button.component.d.ts +2 -6
  9. package/card/card-content.component.d.ts +2 -4
  10. package/card/card-counter.directive.d.ts +2 -4
  11. package/card/card-header.component.d.ts +2 -4
  12. package/card/card-loader.component.d.ts +2 -4
  13. package/card/card-second-subtitle.directive.d.ts +2 -4
  14. package/card/card-subtitle.directive.d.ts +2 -4
  15. package/card/card-title.directive.d.ts +2 -4
  16. package/card/card.component.d.ts +3 -5
  17. package/card/kpi/card-kpi-analytics-content.directive.d.ts +2 -4
  18. package/card/kpi/card-kpi-analytics-label.directive.d.ts +2 -4
  19. package/card/kpi/card-kpi-analytics.directive.d.ts +2 -4
  20. package/card/kpi/card-kpi-header.component.d.ts +2 -4
  21. package/card/kpi/card-kpi-scale-icon.directive.d.ts +2 -4
  22. package/card/kpi/card-kpi-scale-text.directive.d.ts +2 -4
  23. package/card/kpi/card-kpi-value.directive.d.ts +2 -4
  24. package/dialog/base/dialog-base.class.d.ts +2 -2
  25. package/dialog/dialog-body/dialog-body.component.d.ts +2 -4
  26. package/dialog/dialog-container/dialog-container.component.d.ts +0 -2
  27. package/dialog/dialog-service/dialog.service.d.ts +4 -0
  28. package/dialog/dialog.component.d.ts +0 -2
  29. package/dynamic-page/dynamic-page-content/dynamic-page-content.component.d.ts +4 -6
  30. package/dynamic-page/dynamic-page-header/actions/dynamic-page-layout-actions.component.d.ts +2 -4
  31. package/dynamic-side-content/dynamic-side-content.component.d.ts +3 -5
  32. package/esm2020/alert/alert.component.mjs +7 -19
  33. package/esm2020/alert/alert.module.mjs +5 -4
  34. package/esm2020/avatar/avatar.component.mjs +6 -10
  35. package/esm2020/avatar-group/directives/avatar-group-focusable-avatar.directive.mjs +4 -12
  36. package/esm2020/avatar-group/directives/avatar-group-overflow-body.directive.mjs +2 -2
  37. package/esm2020/avatar-group/directives/avatar-group-overflow-button.directive.mjs +3 -7
  38. package/esm2020/bar/bar.component.mjs +3 -7
  39. package/esm2020/breadcrumb/breadcrumb-item.component.mjs +2 -2
  40. package/esm2020/breadcrumb/breadcrumb.component.mjs +2 -2
  41. package/esm2020/busy-indicator/busy-indicator-extended/busy-indicator-extended.directive.mjs +4 -8
  42. package/esm2020/button/button.component.mjs +3 -9
  43. package/esm2020/card/card-content.component.mjs +3 -7
  44. package/esm2020/card/card-counter.directive.mjs +3 -7
  45. package/esm2020/card/card-header.component.mjs +4 -8
  46. package/esm2020/card/card-loader.component.mjs +3 -7
  47. package/esm2020/card/card-second-subtitle.directive.mjs +3 -7
  48. package/esm2020/card/card-subtitle.directive.mjs +3 -7
  49. package/esm2020/card/card-title.directive.mjs +3 -7
  50. package/esm2020/card/card.component.mjs +3 -7
  51. package/esm2020/card/kpi/card-kpi-analytics-content.directive.mjs +3 -7
  52. package/esm2020/card/kpi/card-kpi-analytics-label.directive.mjs +3 -7
  53. package/esm2020/card/kpi/card-kpi-analytics.directive.mjs +3 -7
  54. package/esm2020/card/kpi/card-kpi-header.component.mjs +3 -7
  55. package/esm2020/card/kpi/card-kpi-scale-icon.directive.mjs +3 -7
  56. package/esm2020/card/kpi/card-kpi-scale-text.directive.mjs +3 -7
  57. package/esm2020/card/kpi/card-kpi-value.directive.mjs +3 -7
  58. package/esm2020/checkbox/checkbox/checkbox.component.mjs +3 -3
  59. package/esm2020/content-density/services/content-density-observer.service.mjs +3 -3
  60. package/esm2020/dialog/base/dialog-base.class.mjs +6 -6
  61. package/esm2020/dialog/dialog-body/dialog-body.component.mjs +3 -7
  62. package/esm2020/dialog/dialog-container/dialog-container.component.mjs +1 -5
  63. package/esm2020/dialog/dialog-service/dialog.service.mjs +10 -2
  64. package/esm2020/dialog/dialog.component.mjs +3 -7
  65. package/esm2020/dynamic-page/dynamic-page-content/dynamic-page-content.component.mjs +4 -8
  66. package/esm2020/dynamic-page/dynamic-page-header/actions/dynamic-page-layout-actions.component.mjs +5 -9
  67. package/esm2020/dynamic-side-content/dynamic-side-content.component.mjs +3 -7
  68. package/esm2020/facets/content/facet-content.component.mjs +4 -8
  69. package/esm2020/facets/facet/facet.component.mjs +13 -19
  70. package/esm2020/feed-input/directives/feed-input-avatar.directive.mjs +3 -7
  71. package/esm2020/feed-list-item/components/item/feed-list-item.component.mjs +3 -7
  72. package/esm2020/feed-list-item/components/list/feed-list.component.mjs +3 -7
  73. package/esm2020/form/form-control/form-control.component.mjs +3 -7
  74. package/esm2020/form/form-group/form-group.component.mjs +3 -7
  75. package/esm2020/form/form-message/form-message.component.mjs +3 -7
  76. package/esm2020/icon/icon.component.mjs +3 -7
  77. package/esm2020/illustrated-message/illustrated-message.component.mjs +3 -7
  78. package/esm2020/info-label/info-label.component.mjs +3 -7
  79. package/esm2020/inline-help/inline-help.directive.mjs +26 -15
  80. package/esm2020/input-group/input-group-directives.mjs +6 -14
  81. package/esm2020/input-group/input-group.component.mjs +2 -2
  82. package/esm2020/layout-grid/directives/layout-grid-col.directive.mjs +3 -7
  83. package/esm2020/layout-grid/layout-grid.component.mjs +3 -7
  84. package/esm2020/layout-panel/layout-panel-footer/layout-panel-footer.component.mjs +3 -7
  85. package/esm2020/link/link.component.mjs +9 -13
  86. package/esm2020/list/directives/list-icon.directive.mjs +3 -7
  87. package/esm2020/list/directives/list-navigation-item-text.directive.mjs +3 -7
  88. package/esm2020/list/list-message.directive.mjs +3 -7
  89. package/esm2020/menu/menu-mobile/menu-mobile.component.mjs +2 -2
  90. package/esm2020/message-box/message-box-container/message-box-container.component.mjs +1 -5
  91. package/esm2020/message-box/message-box.component.mjs +1 -5
  92. package/esm2020/message-page/message-page.component.mjs +3 -7
  93. package/esm2020/message-strip/message-strip.component.mjs +5 -9
  94. package/esm2020/multi-input/multi-input.component.mjs +31 -17
  95. package/esm2020/notification/directives/notification-indicator.directive.mjs +3 -7
  96. package/esm2020/notification/notification-group/notification-group.component.mjs +3 -7
  97. package/esm2020/notification/notification-utils/notification-group-base.mjs +2 -2
  98. package/esm2020/object-marker/object-marker.component.mjs +3 -7
  99. package/esm2020/object-number/object-number.component.mjs +3 -7
  100. package/esm2020/object-status/object-status.component.mjs +3 -7
  101. package/esm2020/panel/panel.component.mjs +3 -7
  102. package/esm2020/popover/popover-body/popover-body.component.mjs +5 -2
  103. package/esm2020/product-switch/product-switch-body/product-switch-body.component.mjs +1 -1
  104. package/esm2020/radio/radio-button/radio-button.component.mjs +2 -2
  105. package/esm2020/rating-indicator/components/rating-indicator.component.mjs +3 -7
  106. package/esm2020/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.mjs +4 -8
  107. package/esm2020/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.mjs +3 -7
  108. package/esm2020/segmented-button/segmented-button.component.mjs +4 -4
  109. package/esm2020/select/select.component.mjs +4 -4
  110. package/esm2020/slider/slider.component.mjs +3 -7
  111. package/esm2020/status-indicator/status-indicator.component.mjs +4 -8
  112. package/esm2020/table/directives/table-cell.directive.mjs +31 -26
  113. package/esm2020/table/directives/table-icon.directive.mjs +3 -9
  114. package/esm2020/table/directives/table-row.directive.mjs +34 -19
  115. package/esm2020/table/table-wrapper.component.mjs +2 -2
  116. package/esm2020/table/table.component.mjs +1 -1
  117. package/esm2020/tabs/tab-item/tab-item.directive.mjs +3 -7
  118. package/esm2020/tabs/tab-nav/tab-nav.component.mjs +3 -9
  119. package/esm2020/tabs/tab-utils/tab-directives.mjs +3 -9
  120. package/esm2020/tile/directives/numeric-content.directives.mjs +14 -34
  121. package/esm2020/tile/directives/tile.directives.mjs +9 -21
  122. package/esm2020/tile/tile.component.mjs +2 -2
  123. package/esm2020/token/token-input.directive.mjs +3 -7
  124. package/esm2020/token/tokenizer.component.mjs +12 -16
  125. package/esm2020/toolbar/toolbar.component.mjs +2 -2
  126. package/esm2020/tree/components/tree-item/tree-item.component.mjs +1 -1
  127. package/esm2020/tree/models/base-tree-item.class.mjs +2 -6
  128. package/esm2020/tree/tree.component.mjs +3 -7
  129. package/esm2020/upload-collection/upload-collection-item.directive.mjs +2 -2
  130. package/esm2020/wizard/wizard.component.mjs +2 -2
  131. package/facets/content/facet-content.component.d.ts +2 -4
  132. package/facets/facet/facet.component.d.ts +2 -6
  133. package/feed-input/directives/feed-input-avatar.directive.d.ts +2 -4
  134. package/feed-list-item/components/item/feed-list-item.component.d.ts +2 -4
  135. package/feed-list-item/components/list/feed-list.component.d.ts +2 -4
  136. package/fesm2015/fundamental-ngx-core-alert.mjs +48 -58
  137. package/fesm2015/fundamental-ngx-core-alert.mjs.map +1 -1
  138. package/fesm2015/fundamental-ngx-core-avatar-group.mjs +6 -18
  139. package/fesm2015/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  140. package/fesm2015/fundamental-ngx-core-avatar.mjs +5 -9
  141. package/fesm2015/fundamental-ngx-core-avatar.mjs.map +1 -1
  142. package/fesm2015/fundamental-ngx-core-bar.mjs +2 -6
  143. package/fesm2015/fundamental-ngx-core-bar.mjs.map +1 -1
  144. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +2 -2
  145. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  146. package/fesm2015/fundamental-ngx-core-busy-indicator.mjs +3 -7
  147. package/fesm2015/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  148. package/fesm2015/fundamental-ngx-core-button.mjs +2 -8
  149. package/fesm2015/fundamental-ngx-core-button.mjs.map +1 -1
  150. package/fesm2015/fundamental-ngx-core-card.mjs +31 -91
  151. package/fesm2015/fundamental-ngx-core-card.mjs.map +1 -1
  152. package/fesm2015/fundamental-ngx-core-checkbox.mjs +2 -2
  153. package/fesm2015/fundamental-ngx-core-checkbox.mjs.map +1 -1
  154. package/fesm2015/fundamental-ngx-core-content-density.mjs +2 -2
  155. package/fesm2015/fundamental-ngx-core-content-density.mjs.map +1 -1
  156. package/fesm2015/fundamental-ngx-core-dialog.mjs +18 -23
  157. package/fesm2015/fundamental-ngx-core-dialog.mjs.map +1 -1
  158. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs +7 -15
  159. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  160. package/fesm2015/fundamental-ngx-core-dynamic-side-content.mjs +2 -6
  161. package/fesm2015/fundamental-ngx-core-dynamic-side-content.mjs.map +1 -1
  162. package/fesm2015/fundamental-ngx-core-facets.mjs +15 -25
  163. package/fesm2015/fundamental-ngx-core-facets.mjs.map +1 -1
  164. package/fesm2015/fundamental-ngx-core-feed-input.mjs +2 -6
  165. package/fesm2015/fundamental-ngx-core-feed-input.mjs.map +1 -1
  166. package/fesm2015/fundamental-ngx-core-feed-list-item.mjs +4 -12
  167. package/fesm2015/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  168. package/fesm2015/fundamental-ngx-core-form.mjs +6 -18
  169. package/fesm2015/fundamental-ngx-core-form.mjs.map +1 -1
  170. package/fesm2015/fundamental-ngx-core-icon.mjs +2 -6
  171. package/fesm2015/fundamental-ngx-core-icon.mjs.map +1 -1
  172. package/fesm2015/fundamental-ngx-core-illustrated-message.mjs +2 -6
  173. package/fesm2015/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
  174. package/fesm2015/fundamental-ngx-core-info-label.mjs +2 -6
  175. package/fesm2015/fundamental-ngx-core-info-label.mjs.map +1 -1
  176. package/fesm2015/fundamental-ngx-core-inline-help.mjs +24 -13
  177. package/fesm2015/fundamental-ngx-core-inline-help.mjs.map +1 -1
  178. package/fesm2015/fundamental-ngx-core-input-group.mjs +6 -14
  179. package/fesm2015/fundamental-ngx-core-input-group.mjs.map +1 -1
  180. package/fesm2015/fundamental-ngx-core-layout-grid.mjs +4 -12
  181. package/fesm2015/fundamental-ngx-core-layout-grid.mjs.map +1 -1
  182. package/fesm2015/fundamental-ngx-core-layout-panel.mjs +2 -6
  183. package/fesm2015/fundamental-ngx-core-layout-panel.mjs.map +1 -1
  184. package/fesm2015/fundamental-ngx-core-link.mjs +8 -12
  185. package/fesm2015/fundamental-ngx-core-link.mjs.map +1 -1
  186. package/fesm2015/fundamental-ngx-core-list.mjs +6 -18
  187. package/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
  188. package/fesm2015/fundamental-ngx-core-menu.mjs +1 -1
  189. package/fesm2015/fundamental-ngx-core-menu.mjs.map +1 -1
  190. package/fesm2015/fundamental-ngx-core-message-box.mjs +0 -8
  191. package/fesm2015/fundamental-ngx-core-message-box.mjs.map +1 -1
  192. package/fesm2015/fundamental-ngx-core-message-page.mjs +2 -6
  193. package/fesm2015/fundamental-ngx-core-message-page.mjs.map +1 -1
  194. package/fesm2015/fundamental-ngx-core-message-strip.mjs +4 -8
  195. package/fesm2015/fundamental-ngx-core-message-strip.mjs.map +1 -1
  196. package/fesm2015/fundamental-ngx-core-multi-input.mjs +31 -15
  197. package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  198. package/fesm2015/fundamental-ngx-core-notification.mjs +5 -13
  199. package/fesm2015/fundamental-ngx-core-notification.mjs.map +1 -1
  200. package/fesm2015/fundamental-ngx-core-object-marker.mjs +2 -6
  201. package/fesm2015/fundamental-ngx-core-object-marker.mjs.map +1 -1
  202. package/fesm2015/fundamental-ngx-core-object-number.mjs +2 -6
  203. package/fesm2015/fundamental-ngx-core-object-number.mjs.map +1 -1
  204. package/fesm2015/fundamental-ngx-core-object-status.mjs +2 -6
  205. package/fesm2015/fundamental-ngx-core-object-status.mjs.map +1 -1
  206. package/fesm2015/fundamental-ngx-core-panel.mjs +2 -6
  207. package/fesm2015/fundamental-ngx-core-panel.mjs.map +1 -1
  208. package/fesm2015/fundamental-ngx-core-popover.mjs +4 -1
  209. package/fesm2015/fundamental-ngx-core-popover.mjs.map +1 -1
  210. package/fesm2015/fundamental-ngx-core-product-switch.mjs +1 -1
  211. package/fesm2015/fundamental-ngx-core-product-switch.mjs.map +1 -1
  212. package/fesm2015/fundamental-ngx-core-radio.mjs +1 -1
  213. package/fesm2015/fundamental-ngx-core-radio.mjs.map +1 -1
  214. package/fesm2015/fundamental-ngx-core-rating-indicator.mjs +2 -6
  215. package/fesm2015/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  216. package/fesm2015/fundamental-ngx-core-resizable-card-layout.mjs +5 -13
  217. package/fesm2015/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
  218. package/fesm2015/fundamental-ngx-core-segmented-button.mjs +3 -3
  219. package/fesm2015/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  220. package/fesm2015/fundamental-ngx-core-select.mjs +3 -3
  221. package/fesm2015/fundamental-ngx-core-select.mjs.map +1 -1
  222. package/fesm2015/fundamental-ngx-core-slider.mjs +2 -6
  223. package/fesm2015/fundamental-ngx-core-slider.mjs.map +1 -1
  224. package/fesm2015/fundamental-ngx-core-status-indicator.mjs +3 -7
  225. package/fesm2015/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  226. package/fesm2015/fundamental-ngx-core-table.mjs +64 -48
  227. package/fesm2015/fundamental-ngx-core-table.mjs.map +1 -1
  228. package/fesm2015/fundamental-ngx-core-tabs.mjs +6 -22
  229. package/fesm2015/fundamental-ngx-core-tabs.mjs.map +1 -1
  230. package/fesm2015/fundamental-ngx-core-tile.mjs +22 -54
  231. package/fesm2015/fundamental-ngx-core-tile.mjs.map +1 -1
  232. package/fesm2015/fundamental-ngx-core-token.mjs +13 -21
  233. package/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  234. package/fesm2015/fundamental-ngx-core-toolbar.mjs +1 -1
  235. package/fesm2015/fundamental-ngx-core-toolbar.mjs.map +1 -1
  236. package/fesm2015/fundamental-ngx-core-tree.mjs +3 -11
  237. package/fesm2015/fundamental-ngx-core-tree.mjs.map +1 -1
  238. package/fesm2015/fundamental-ngx-core-upload-collection.mjs +1 -1
  239. package/fesm2015/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  240. package/fesm2015/fundamental-ngx-core-wizard.mjs +1 -1
  241. package/fesm2015/fundamental-ngx-core-wizard.mjs.map +1 -1
  242. package/fesm2020/fundamental-ngx-core-alert.mjs +48 -58
  243. package/fesm2020/fundamental-ngx-core-alert.mjs.map +1 -1
  244. package/fesm2020/fundamental-ngx-core-avatar-group.mjs +6 -18
  245. package/fesm2020/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  246. package/fesm2020/fundamental-ngx-core-avatar.mjs +5 -9
  247. package/fesm2020/fundamental-ngx-core-avatar.mjs.map +1 -1
  248. package/fesm2020/fundamental-ngx-core-bar.mjs +2 -6
  249. package/fesm2020/fundamental-ngx-core-bar.mjs.map +1 -1
  250. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +2 -2
  251. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  252. package/fesm2020/fundamental-ngx-core-busy-indicator.mjs +3 -7
  253. package/fesm2020/fundamental-ngx-core-busy-indicator.mjs.map +1 -1
  254. package/fesm2020/fundamental-ngx-core-button.mjs +2 -8
  255. package/fesm2020/fundamental-ngx-core-button.mjs.map +1 -1
  256. package/fesm2020/fundamental-ngx-core-card.mjs +31 -91
  257. package/fesm2020/fundamental-ngx-core-card.mjs.map +1 -1
  258. package/fesm2020/fundamental-ngx-core-checkbox.mjs +2 -2
  259. package/fesm2020/fundamental-ngx-core-checkbox.mjs.map +1 -1
  260. package/fesm2020/fundamental-ngx-core-content-density.mjs +2 -2
  261. package/fesm2020/fundamental-ngx-core-content-density.mjs.map +1 -1
  262. package/fesm2020/fundamental-ngx-core-dialog.mjs +18 -23
  263. package/fesm2020/fundamental-ngx-core-dialog.mjs.map +1 -1
  264. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs +7 -15
  265. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  266. package/fesm2020/fundamental-ngx-core-dynamic-side-content.mjs +2 -6
  267. package/fesm2020/fundamental-ngx-core-dynamic-side-content.mjs.map +1 -1
  268. package/fesm2020/fundamental-ngx-core-facets.mjs +15 -25
  269. package/fesm2020/fundamental-ngx-core-facets.mjs.map +1 -1
  270. package/fesm2020/fundamental-ngx-core-feed-input.mjs +2 -6
  271. package/fesm2020/fundamental-ngx-core-feed-input.mjs.map +1 -1
  272. package/fesm2020/fundamental-ngx-core-feed-list-item.mjs +4 -12
  273. package/fesm2020/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  274. package/fesm2020/fundamental-ngx-core-form.mjs +6 -18
  275. package/fesm2020/fundamental-ngx-core-form.mjs.map +1 -1
  276. package/fesm2020/fundamental-ngx-core-icon.mjs +2 -6
  277. package/fesm2020/fundamental-ngx-core-icon.mjs.map +1 -1
  278. package/fesm2020/fundamental-ngx-core-illustrated-message.mjs +2 -6
  279. package/fesm2020/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
  280. package/fesm2020/fundamental-ngx-core-info-label.mjs +2 -6
  281. package/fesm2020/fundamental-ngx-core-info-label.mjs.map +1 -1
  282. package/fesm2020/fundamental-ngx-core-inline-help.mjs +24 -13
  283. package/fesm2020/fundamental-ngx-core-inline-help.mjs.map +1 -1
  284. package/fesm2020/fundamental-ngx-core-input-group.mjs +6 -14
  285. package/fesm2020/fundamental-ngx-core-input-group.mjs.map +1 -1
  286. package/fesm2020/fundamental-ngx-core-layout-grid.mjs +4 -12
  287. package/fesm2020/fundamental-ngx-core-layout-grid.mjs.map +1 -1
  288. package/fesm2020/fundamental-ngx-core-layout-panel.mjs +2 -6
  289. package/fesm2020/fundamental-ngx-core-layout-panel.mjs.map +1 -1
  290. package/fesm2020/fundamental-ngx-core-link.mjs +8 -12
  291. package/fesm2020/fundamental-ngx-core-link.mjs.map +1 -1
  292. package/fesm2020/fundamental-ngx-core-list.mjs +6 -18
  293. package/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
  294. package/fesm2020/fundamental-ngx-core-menu.mjs +1 -1
  295. package/fesm2020/fundamental-ngx-core-menu.mjs.map +1 -1
  296. package/fesm2020/fundamental-ngx-core-message-box.mjs +0 -8
  297. package/fesm2020/fundamental-ngx-core-message-box.mjs.map +1 -1
  298. package/fesm2020/fundamental-ngx-core-message-page.mjs +2 -6
  299. package/fesm2020/fundamental-ngx-core-message-page.mjs.map +1 -1
  300. package/fesm2020/fundamental-ngx-core-message-strip.mjs +4 -8
  301. package/fesm2020/fundamental-ngx-core-message-strip.mjs.map +1 -1
  302. package/fesm2020/fundamental-ngx-core-multi-input.mjs +29 -15
  303. package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  304. package/fesm2020/fundamental-ngx-core-notification.mjs +5 -13
  305. package/fesm2020/fundamental-ngx-core-notification.mjs.map +1 -1
  306. package/fesm2020/fundamental-ngx-core-object-marker.mjs +2 -6
  307. package/fesm2020/fundamental-ngx-core-object-marker.mjs.map +1 -1
  308. package/fesm2020/fundamental-ngx-core-object-number.mjs +2 -6
  309. package/fesm2020/fundamental-ngx-core-object-number.mjs.map +1 -1
  310. package/fesm2020/fundamental-ngx-core-object-status.mjs +2 -6
  311. package/fesm2020/fundamental-ngx-core-object-status.mjs.map +1 -1
  312. package/fesm2020/fundamental-ngx-core-panel.mjs +2 -6
  313. package/fesm2020/fundamental-ngx-core-panel.mjs.map +1 -1
  314. package/fesm2020/fundamental-ngx-core-popover.mjs +4 -1
  315. package/fesm2020/fundamental-ngx-core-popover.mjs.map +1 -1
  316. package/fesm2020/fundamental-ngx-core-product-switch.mjs +1 -1
  317. package/fesm2020/fundamental-ngx-core-product-switch.mjs.map +1 -1
  318. package/fesm2020/fundamental-ngx-core-radio.mjs +1 -1
  319. package/fesm2020/fundamental-ngx-core-radio.mjs.map +1 -1
  320. package/fesm2020/fundamental-ngx-core-rating-indicator.mjs +2 -6
  321. package/fesm2020/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  322. package/fesm2020/fundamental-ngx-core-resizable-card-layout.mjs +5 -13
  323. package/fesm2020/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
  324. package/fesm2020/fundamental-ngx-core-segmented-button.mjs +3 -3
  325. package/fesm2020/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  326. package/fesm2020/fundamental-ngx-core-select.mjs +3 -3
  327. package/fesm2020/fundamental-ngx-core-select.mjs.map +1 -1
  328. package/fesm2020/fundamental-ngx-core-slider.mjs +2 -6
  329. package/fesm2020/fundamental-ngx-core-slider.mjs.map +1 -1
  330. package/fesm2020/fundamental-ngx-core-status-indicator.mjs +3 -7
  331. package/fesm2020/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  332. package/fesm2020/fundamental-ngx-core-table.mjs +64 -48
  333. package/fesm2020/fundamental-ngx-core-table.mjs.map +1 -1
  334. package/fesm2020/fundamental-ngx-core-tabs.mjs +6 -22
  335. package/fesm2020/fundamental-ngx-core-tabs.mjs.map +1 -1
  336. package/fesm2020/fundamental-ngx-core-tile.mjs +22 -54
  337. package/fesm2020/fundamental-ngx-core-tile.mjs.map +1 -1
  338. package/fesm2020/fundamental-ngx-core-token.mjs +13 -21
  339. package/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  340. package/fesm2020/fundamental-ngx-core-toolbar.mjs +1 -1
  341. package/fesm2020/fundamental-ngx-core-toolbar.mjs.map +1 -1
  342. package/fesm2020/fundamental-ngx-core-tree.mjs +3 -11
  343. package/fesm2020/fundamental-ngx-core-tree.mjs.map +1 -1
  344. package/fesm2020/fundamental-ngx-core-upload-collection.mjs +1 -1
  345. package/fesm2020/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  346. package/fesm2020/fundamental-ngx-core-wizard.mjs +1 -1
  347. package/fesm2020/fundamental-ngx-core-wizard.mjs.map +1 -1
  348. package/form/form-control/form-control.component.d.ts +2 -4
  349. package/form/form-group/form-group.component.d.ts +2 -4
  350. package/form/form-message/form-message.component.d.ts +2 -4
  351. package/fundamental-ngx-core-v0.42.0-rc.21.tgz +0 -0
  352. package/icon/icon.component.d.ts +2 -4
  353. package/illustrated-message/illustrated-message.component.d.ts +2 -4
  354. package/info-label/info-label.component.d.ts +2 -4
  355. package/inline-help/inline-help.directive.d.ts +9 -3
  356. package/input-group/input-group-directives.d.ts +5 -9
  357. package/layout-grid/directives/layout-grid-col.directive.d.ts +2 -4
  358. package/layout-grid/layout-grid.component.d.ts +2 -4
  359. package/layout-panel/layout-panel-footer/layout-panel-footer.component.d.ts +4 -6
  360. package/link/link.component.d.ts +2 -4
  361. package/list/directives/list-icon.directive.d.ts +4 -5
  362. package/list/directives/list-navigation-item-text.directive.d.ts +2 -4
  363. package/list/list-message.directive.d.ts +2 -4
  364. package/message-box/message-box-container/message-box-container.component.d.ts +0 -2
  365. package/message-box/message-box.component.d.ts +0 -2
  366. package/message-page/message-page.component.d.ts +2 -4
  367. package/message-strip/message-strip.component.d.ts +4 -5
  368. package/multi-input/multi-input.component.d.ts +9 -5
  369. package/notification/directives/notification-indicator.directive.d.ts +2 -4
  370. package/notification/notification-group/notification-group.component.d.ts +2 -4
  371. package/object-marker/object-marker.component.d.ts +2 -4
  372. package/object-number/object-number.component.d.ts +2 -4
  373. package/object-status/object-status.component.d.ts +2 -4
  374. package/package.json +4 -4
  375. package/panel/panel.component.d.ts +2 -4
  376. package/radio/radio-button/radio-button.component.d.ts +1 -1
  377. package/rating-indicator/components/rating-indicator.component.d.ts +2 -4
  378. package/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.d.ts +2 -4
  379. package/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.d.ts +2 -4
  380. package/schematics/add-dependencies/index.js +6 -6
  381. package/slider/slider.component.d.ts +2 -4
  382. package/status-indicator/status-indicator.component.d.ts +2 -4
  383. package/table/directives/table-cell.directive.d.ts +6 -12
  384. package/table/directives/table-icon.directive.d.ts +2 -6
  385. package/table/directives/table-row.directive.d.ts +10 -10
  386. package/tabs/tab-item/tab-item.directive.d.ts +2 -4
  387. package/tabs/tab-nav/tab-nav.component.d.ts +4 -8
  388. package/tabs/tab-utils/tab-directives.d.ts +2 -6
  389. package/tile/directives/numeric-content.directives.d.ts +10 -20
  390. package/tile/directives/tile.directives.d.ts +6 -12
  391. package/tile/tile.component.d.ts +1 -1
  392. package/token/token-input.directive.d.ts +2 -4
  393. package/token/tokenizer.component.d.ts +2 -4
  394. package/toolbar/toolbar.component.d.ts +1 -1
  395. package/tree/models/base-tree-item.class.d.ts +1 -3
  396. package/tree/tree.component.d.ts +1 -3
  397. package/fundamental-ngx-core-v0.42.0-rc.2.tgz +0 -0
@@ -12,8 +12,8 @@ export class TokenizerInputDirective {
12
12
  return ['fd-tokenizer__input', this.class];
13
13
  }
14
14
  /** @hidden */
15
- constructor(_elementRef) {
16
- this._elementRef = _elementRef;
15
+ constructor(elementRef) {
16
+ this.elementRef = elementRef;
17
17
  }
18
18
  /** @hidden */
19
19
  ngOnInit() {
@@ -23,10 +23,6 @@ export class TokenizerInputDirective {
23
23
  ngOnChanges() {
24
24
  this.buildComponentCssClass();
25
25
  }
26
- /** @hidden */
27
- elementRef() {
28
- return this._elementRef;
29
- }
30
26
  }
31
27
  TokenizerInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: TokenizerInputDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
32
28
  TokenizerInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.8", type: TokenizerInputDirective, selector: "[fd-tokenizer-input]", inputs: { class: "class" }, usesOnChanges: true, ngImport: i0 });
@@ -46,4 +42,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
46
42
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { class: [{
47
43
  type: Input
48
44
  }], buildComponentCssClass: [] } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4taW5wdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdG9rZW4vdG9rZW4taW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFRM0QsTUFBTSxPQUFPLHVCQUF1QjtJQUtoQzs7OztPQUlHO0lBRUgsc0JBQXNCO1FBQ2xCLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGNBQWM7SUFDZCxZQUFvQixXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtJQUFHLENBQUM7SUFFL0MsY0FBYztJQUNkLFFBQVE7UUFDSixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYztJQUNkLFVBQVU7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQzs7b0hBL0JRLHVCQUF1Qjt3R0FBdkIsdUJBQXVCO0FBVWhDO0lBQUMsYUFBYTs7OztxRUFHYjsyRkFiUSx1QkFBdUI7a0JBTG5DLFNBQVM7bUJBQUM7b0JBQ1AsdUJBQXVCO29CQUN2Qiw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxzQkFBc0I7aUJBQ25DO2lHQUlHLEtBQUs7c0JBREosS0FBSztnQkFTTixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXBwbHlDc3NDbGFzcyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgLy8gVE9ETyB0byBiZSBkaXNjdXNzZWRcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW2ZkLXRva2VuaXplci1pbnB1dF0nXG59KVxuZXhwb3J0IGNsYXNzIFRva2VuaXplcklucHV0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIENzc0NsYXNzQnVpbGRlciB7XG4gICAgLyoqIHVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogQ3NzQ2xhc3NCdWlsZGVyIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICAgICAqIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHNpbmdsZSBzdHJpbmdcbiAgICAgKiBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3Igb3JkZXIgd2hpY2ggY3NzIGNsYXNzZXMgYXJlIGFwcGxpZWRcbiAgICAgKi9cbiAgICBAYXBwbHlDc3NDbGFzc1xuICAgIGJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gWydmZC10b2tlbml6ZXJfX2lucHV0JywgdGhpcy5jbGFzc107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBlbGVtZW50UmVmKCk6IEVsZW1lbnRSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmO1xuICAgIH1cbn1cbiJdfQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4taW5wdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdG9rZW4vdG9rZW4taW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFRM0QsTUFBTSxPQUFPLHVCQUF1QjtJQUtoQzs7OztPQUlHO0lBRUgsc0JBQXNCO1FBQ2xCLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGNBQWM7SUFDZCxZQUE0QixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQztJQUV0RCxjQUFjO0lBQ2QsUUFBUTtRQUNKLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjO0lBQ2QsV0FBVztRQUNQLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7O29IQTFCUSx1QkFBdUI7d0dBQXZCLHVCQUF1QjtBQVVoQztJQUFDLGFBQWE7Ozs7cUVBR2I7MkZBYlEsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNQLHVCQUF1QjtvQkFDdkIsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsc0JBQXNCO2lCQUNuQztpR0FJRyxLQUFLO3NCQURKLEtBQUs7Z0JBU04sc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFwcGx5Q3NzQ2xhc3MgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBDc3NDbGFzc0J1aWxkZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIC8vIFRPRE8gdG8gYmUgZGlzY3Vzc2VkXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tmZC10b2tlbml6ZXItaW5wdXRdJ1xufSlcbmV4cG9ydCBjbGFzcyBUb2tlbml6ZXJJbnB1dERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDc3NDbGFzc0J1aWxkZXIge1xuICAgIC8qKiB1c2VyJ3MgY3VzdG9tIGNsYXNzZXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsYXNzOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFsnZmQtdG9rZW5pemVyX19pbnB1dCcsIHRoaXMuY2xhc3NdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG59XG4iXX0=
@@ -41,9 +41,9 @@ export class TokenizerComponent {
41
41
  return this._contentDensityObserver.isCompact;
42
42
  }
43
43
  /** @hidden */
44
- constructor(_contentDensityObserver, _elementRef, _cdRef, _rtlService, _renderer, _document) {
44
+ constructor(_contentDensityObserver, elementRef, _cdRef, _rtlService, _renderer, _document) {
45
45
  this._contentDensityObserver = _contentDensityObserver;
46
- this._elementRef = _elementRef;
46
+ this.elementRef = elementRef;
47
47
  this._cdRef = _cdRef;
48
48
  this._rtlService = _rtlService;
49
49
  this._renderer = _renderer;
@@ -97,7 +97,7 @@ export class TokenizerComponent {
97
97
  /** @hidden */
98
98
  this._inputElementFocused = false;
99
99
  this._eventListeners.push(this._renderer.listen('window', 'click', (e) => {
100
- if (this._elementRef.nativeElement.contains(e.target) === false) {
100
+ if (this.elementRef.nativeElement.contains(e.target) === false) {
101
101
  this.tokenList.forEach((token) => {
102
102
  token.selected = false;
103
103
  });
@@ -127,7 +127,7 @@ export class TokenizerComponent {
127
127
  this._handleCozyTokenCount();
128
128
  }
129
129
  this._listenElementEvents();
130
- this.previousElementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;
130
+ this.previousElementWidth = this.elementRef.nativeElement.getBoundingClientRect().width;
131
131
  this._listenOnResize();
132
132
  }
133
133
  /** @hidden */
@@ -156,10 +156,6 @@ export class TokenizerComponent {
156
156
  return [this.class];
157
157
  }
158
158
  /** @hidden */
159
- elementRef() {
160
- return this._elementRef;
161
- }
162
- /** @hidden */
163
159
  handleTokenClickSubscriptions() {
164
160
  this._unsubscribeClicks();
165
161
  this.tokenList.forEach((token, index) => {
@@ -222,8 +218,8 @@ export class TokenizerComponent {
222
218
  }
223
219
  /** @hidden */
224
220
  onResize() {
225
- if (this._elementRef) {
226
- const elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;
221
+ if (this.elementRef) {
222
+ const elementWidth = this.elementRef.nativeElement.getBoundingClientRect().width;
227
223
  this._resetTokens();
228
224
  this.previousElementWidth = elementWidth;
229
225
  if (!this._compact && !this.compactCollapse) {
@@ -391,7 +387,7 @@ export class TokenizerComponent {
391
387
  }
392
388
  this._checkMoreElementVisibility();
393
389
  this.tokenList.forEach((token) => token._viewContainer.createEmbeddedView(token._content));
394
- let elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;
390
+ let elementWidth = this.elementRef.nativeElement.getBoundingClientRect().width;
395
391
  let combinedTokenWidth = this.getCombinedTokenWidth(); // the combined width of all tokens, the "____ more" text, and the input
396
392
  let i = 0;
397
393
  /*
@@ -414,7 +410,7 @@ export class TokenizerComponent {
414
410
  token.elementRef.nativeElement.style.display = 'none';
415
411
  }
416
412
  // get the new elementWidth and combinedTokenWidth as these will have changed after setting a token display to 'none'
417
- elementWidth = this._elementRef.nativeElement.getBoundingClientRect().width;
413
+ elementWidth = this.elementRef.nativeElement.getBoundingClientRect().width;
418
414
  this._checkMoreElementVisibility();
419
415
  combinedTokenWidth = this.getCombinedTokenWidth();
420
416
  side === 'right' ? i-- : i++;
@@ -446,7 +442,7 @@ export class TokenizerComponent {
446
442
  }
447
443
  /** @hidden */
448
444
  _getHiddenCozyTokenCount() {
449
- const elementLeft = this._elementRef.nativeElement.getBoundingClientRect().left;
445
+ const elementLeft = this.elementRef.nativeElement.getBoundingClientRect().left;
450
446
  this.hiddenCozyTokenCount = 0;
451
447
  this.tokenList.forEach((token) => {
452
448
  if (token.tokenWrapperElement &&
@@ -605,7 +601,7 @@ export class TokenizerComponent {
605
601
  }
606
602
  /** @hidden */
607
603
  _listenElementEvents() {
608
- merge(fromEvent(this._elementRef.nativeElement, 'focus', { capture: true }).pipe(filter((event) => event['target']?.tagName === 'INPUT' && this.tokenizerFocusable), map(() => true)), fromEvent(this._elementRef.nativeElement, 'blur', { capture: true }).pipe(map(() => false)))
604
+ merge(fromEvent(this.elementRef.nativeElement, 'focus', { capture: true }).pipe(filter((event) => event['target']?.tagName === 'INPUT' && this.tokenizerFocusable), map(() => true)), fromEvent(this.elementRef.nativeElement, 'blur', { capture: true }).pipe(map(() => false)))
609
605
  .pipe(
610
606
  // debounceTime is needed in order to filter subsequent focus-blur events, that happen simultaneously
611
607
  debounceTime(10), takeUntil(this._onDestroy$))
@@ -617,7 +613,7 @@ export class TokenizerComponent {
617
613
  /** @hidden Listen window resize and distribute cards on column change */
618
614
  _listenOnResize() {
619
615
  this.onResize();
620
- resizeObservable(this._elementRef.nativeElement)
616
+ resizeObservable(this.elementRef.nativeElement)
621
617
  .pipe(debounceTime(30), takeUntil(this._onDestroy$))
622
618
  .subscribe(() => this.onResize());
623
619
  }
@@ -689,4 +685,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
689
685
  type: HostListener,
690
686
  args: ['keydown', ['$event']]
691
687
  }] } });
692
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3Rva2VuL3Rva2VuaXplci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b2tlbi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkcsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFDSCxhQUFhLEVBRWIsT0FBTyxFQUVQLGdCQUFnQixFQUNoQixVQUFVLEVBQ2IsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFP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QUR0QixZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkE2QnpELGVBQWU7c0JBRGQsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtHLGdCQUFnQjtzQkFEeEIsTUFBTTtnQkF5SlAsc0JBQXNCLE1BcUR0QixPQUFPO3NCQUROLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBLCBCQUNLU1BBQ0UsIERFTEVURSwgRU5URVIsIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBTUEFDRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIHN0YXJ0V2l0aCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCwgZGVib3VuY2VUaW1lLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7XG4gICAgYXBwbHlDc3NDbGFzcyxcbiAgICBDc3NDbGFzc0J1aWxkZXIsXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICByZXNpemVPYnNlcnZhYmxlLFxuICAgIFJ0bFNlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgVG9rZW5Db21wb25lbnQgfSBmcm9tICcuL3Rva2VuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyLCBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtdG9rZW5pemVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdG9rZW5pemVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90b2tlbml6ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKV1cbn0pXG5leHBvcnQgY2xhc3MgVG9rZW5pemVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDc3NDbGFzc0J1aWxkZXIsIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICAvKiogdXNlcidzIGN1c3RvbSBjbGFzc2VzICovXG4gICAgQElucHV0KClcbiAgICBjbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIERpc2FibGVzIHBvc3NpYmlsaXR5IHRvIHJlbW92ZSB0b2tlbnMgYnkga2V5Ym9hcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVLZXlib2FyZERlbGV0aW9uID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBUb2tlbkNvbXBvbmVudCkpXG4gICAgdG9rZW5MaXN0OiBRdWVyeUxpc3Q8VG9rZW5Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gRm9ybUNvbnRyb2xDb21wb25lbnQpLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBpbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndG9rZW5pemVySW5uZXInKVxuICAgIHRva2VuaXplcklubmVyRWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdtb3JlRWxlbWVudFNwYW4nKVxuICAgIG1vcmVFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRHcm91cEFkZE9uJykgc2V0IGNvbnRlbnQoY29udGVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICAgICAgdGhpcy5pbnB1dEdyb3VwQWRkb25FbCA9IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKCd2aWV3Q29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gICAgcmVhZG9ubHkgX3ZpZXdDb250YWluZXI6IFF1ZXJ5TGlzdDxWaWV3Q29udGFpbmVyUmVmPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9oaWRkZW5Ub2tlbnMoKTogVG9rZW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogT2JzZXJ2YWJsZSBzdGF0ZSBvZiB0aGUgY29tcGFjdCBtb2RlLlxuICAgICAqL1xuICAgIGdldCBfY29tcGFjdCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50RGVuc2l0eU9ic2VydmVyLmlzQ29tcGFjdCQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENvbXBvbmVudCBpcyBpbiBjb21wYWN0IG1vZGUsIGRldGVybWluZWQgYnkgdGhlIGNvbnN1bWVyXG4gICAgICovXG4gICAgZ2V0IF9jb21wYWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3Q7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpbnB1dEdyb3VwQWRkb25FbDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIHVzZSBjb3p5IHZpc3VhbHMgYnV0IGNvbXBhY3QgY29sbGFwc2luZyBiZWhhdmlvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbXBhY3RDb2xsYXBzZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG9rZW5pemVyIHNob3VsZCBoYXZlIGZha2UgZm9jdXMgaW5kaWNhdG9yLCB3aGVuIGlucHV0IGlzIGZvY3VzZWQgaW5zaWRlKi9cbiAgICBASW5wdXQoKVxuICAgIHRva2VuaXplckZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKiogVGhlIHZhbHVlIGZvciB0aGUgdG9rZW5pemVyIGlucHV0ICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dFZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKiogSWNvbiBvZiB0aGUgYnV0dG9uIG9uIHRoZSByaWdodCBvZiB0aGUgaW5wdXQgZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBnbHlwaDogc3RyaW5nO1xuXG4gICAgLyoqIFdvcmQgdG8gdXNlIGZvciB3aGVuIHRoZXJlIGFyZSBleHRyYSB0b2tlbnMuICovXG4gICAgQElucHV0KClcbiAgICBtb3JlVGVybSA9ICdtb3JlJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBvcGVuOiBib29sZWFuO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VhcmNoIHRlcm0gY2hhbmdlcy4gVXNlICokZXZlbnQqIHRvIGFjY2VzcyB0aGUgbmV3IHRlcm0uICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgbW9yZUNsaWNrZWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJldmlvdXNFbGVtZW50V2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZVRva2Vuc0xlZnQ6IEFycmF5PFRva2VuQ29tcG9uZW50PiA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBtb3JlVG9rZW5zUmlnaHQ6IEFycmF5PFRva2VuQ29tcG9uZW50PiA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcmV2aW91c1Rva2VuQ291bnQ6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhpZGRlbkNvenlUb2tlbkNvdW50ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuIFVzZWQgdG8gYWRkIGZvY3VzIHRvIHRva2VuaXplciBlbGVtZW50ICovXG4gICAgX3Rva2VuaXplckhhc0ZvY3VzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93T3ZlcmZsb3dQb3BvdmVyID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Nob3dNb3JlRWxlbWVudCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG9rZW5zQ29udGFpbmVyV2lkdGggPSAnYXV0byc7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFZhcmlhYmxlIHdoaWNoIHdpbGwga2VlcCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHRva2VuIHByZXNzZWQgaW4gdGhlIHRva2VuaXplclxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogVmFyaWFibGUgd2hpY2ggd2lsbCBrZWVwIHRoZSBpbmRleCBvZiB0aGUgbGFzdCB0b2tlbiBwcmVzc2VkIGluIHRoZSB0b2tlbml6ZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIF9sYXN0RWxlbWVudEluU2VsZWN0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogRmxhZyB3aGljaCB3aWxsIHNheSBpZiB0aGUgbGFzdCBrZXlib2FyZCBhbmQgY2xpY2sgb3BlcmF0aW9uIHRoZXkgdXNlZCB3YXMgdXNpbmcgY29udHJvbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2N0cmxQcmV2aW91czogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogRmxhZyB3aGljaCB3aWxsIHNheSBpZiB0aGV5IGhlbGQgc2hpZnQgYW5kIGNsaWNrZWQgaGlnaGxpZ2h0aW5nIGVsZW1lbnRzIGJlZm9yZSBvclxuICAgICAqL1xuICAgIHByaXZhdGUgX2RpcmVjdGlvblNoaWZ0SXNSaWdodDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudExpc3RlbmVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9yY2VBbGxUb2tlbnNUb0Rpc3BsYXkgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9rZW5FbGVtZW50Rm9jdXNlZCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnB1dEVsZW1lbnRGb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Rva2VuRWxlbWVudEZvY3VzZWRTdWI6IE51bGxhYmxlPFN1YnNjcmlwdGlvbj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IF9kb2N1bWVudDogRG9jdW1lbnRcbiAgICApIHtcbiAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2NsaWNrJywgKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbnB1dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRLZXlkb3duRXZlbnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdhdGNoIGZvciBjaGFuZ2VzIHRvIHRoZSB0b2tlbkxpc3QgYW5kIGF0dGVtcHQgdG8gZXhwYW5kL2NvbGxhcHNlIHRva2VucyBhcyBuZWVkZWRcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0VG9rZW5zKCk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLm9uQ2xvc2VDbGljay5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRUb2tlbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLmVsZW1lbnRGb2N1c2VkLnN1YnNjcmliZSgoaXNGb2N1c2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkLm5leHQoaXNGb2N1c2VkKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5fY29tcGFjdCAmJiAhdGhpcy5jb21wYWN0Q29sbGFwc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGlzdGVuRWxlbWVudEV2ZW50cygpO1xuICAgICAgICB0aGlzLnByZXZpb3VzRWxlbWVudFdpZHRoID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB0aGlzLl9saXN0ZW5PblJlc2l6ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZSkgPT4gZSgpKTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVDbGlja3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLmNsYXNzXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGVsZW1lbnRSZWYoKTogRWxlbWVudFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlVG9rZW5DbGlja1N1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQ2xpY2tzKCk7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdG9rZW4ub25Ub2tlbkNsaWNrLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNDb250cm9sS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3RybFNlbGVjdGVkKHRva2VuLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV2ZW50LnNoaWZ0S2V5IHx8IHRoaXMuX2N0cmxQcmV2aW91cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFzaWNTZWxlY3RlZCh0b2tlbiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rmlyc3RBbmRMYXN0RWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hpZnRTZWxlY3RlZChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdG9rZW4ub25Ub2tlbktleWRvd24uc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmb2N1c1Rva2VuRWxlbWVudChuZXdJbmRleDogbnVtYmVyKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgZWxlbWVudFRvRm9jdXM6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB0b2tlbkxpc3RBcnJheTogVG9rZW5Db21wb25lbnRbXSA9IHRoaXMudG9rZW5MaXN0LnRvQXJyYXkoKTtcbiAgICAgICAgaWYgKHRva2VuTGlzdEFycmF5W25ld0luZGV4XSkge1xuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMgPSB0b2tlbkxpc3RBcnJheVtuZXdJbmRleF0udG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgLy8gZWxlbWVudCBuZWVkcyB0YWJpbmRleCBpbiBvcmRlciB0byBiZSBmb2N1c2VkXG4gICAgICAgICAgICBlbGVtZW50VG9Gb2N1cyEuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbGVtZW50VG9Gb2N1cztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGtleURvd24oa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShrZXlib2FyZEV2ZW50LCBbREVMRVRFLCBCQUNLU1BBQ0VdKSAmJlxuICAgICAgICAgICAgKCF0aGlzLl9pc0lucHV0Rm9jdXNlZCgpIHx8IHRoaXMuX3Rva2Vuc1NlbGVjdGVkKCkpICYmXG4gICAgICAgICAgICAhdGhpcy5kaXNhYmxlS2V5Ym9hcmREZWxldGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLl9nZXRBY3RpdmVUb2tlbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRUb2tlbkluZGV4ID0gdGhpcy5fZ2V0Rm9jdXNlZFRva2VuSW5kZXgoKTtcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gZWxlbWVudC5vbkNsb3NlQ2xpY2suZW1pdCgpKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoa2V5Ym9hcmRFdmVudCwgREVMRVRFKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c0lucHV0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudChmb2N1c2VkVG9rZW5JbmRleCAtIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIEtleVV0aWwuaXNLZXlDb2RlKGtleWJvYXJkRXZlbnQsIEJBQ0tTUEFDRSkgJiZcbiAgICAgICAgICAgIHRoaXMuX2lzSW5wdXRGb2N1c2VkKCkgJiZcbiAgICAgICAgICAgICF0aGlzLl9nZXRJbnB1dFZhbHVlKCkgJiZcbiAgICAgICAgICAgICF0aGlzLmRpc2FibGVLZXlib2FyZERlbGV0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudCh0aGlzLnRva2VuTGlzdC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50UmVmKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50V2lkdGggPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9yZXNldFRva2VucygpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0VsZW1lbnRXaWR0aCA9IGVsZW1lbnRXaWR0aDtcbiAgICAgICAgICAgIGlmICghdGhpcy5fY29tcGFjdCAmJiAhdGhpcy5jb21wYWN0Q29sbGFwc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDb3p5VG9rZW5Db3VudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBmcm9tSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgbmV3SW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcnRsID0gdGhpcy5fcnRsU2VydmljZSAmJiB0aGlzLl9ydGxTZXJ2aWNlLnJ0bCA/IHRoaXMuX3J0bFNlcnZpY2UucnRsLmdldFZhbHVlKCkgOiBmYWxzZTtcbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBTUEFDRSkgJiYgIXRoaXMuX2lzSW5wdXRGb2N1c2VkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbkxpc3QuZmluZCgoXywgaW5kZXgpID0+IGluZGV4ID09PSBmcm9tSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgoc2hhZG93ZWRUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dlZFRva2VuICE9PSB0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICBzaGFkb3dlZFRva2VuLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0b2tlbiAmJiAodG9rZW4uc2VsZWN0ZWQgPSAhdG9rZW4uc2VsZWN0ZWQpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRU5URVIpKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0lucHV0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBMRUZUX0FSUk9XKSAmJiAhcnRsKSB8fCAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSAmJiBydGwpKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVBcnJvd0xlZnQoZnJvbUluZGV4KTtcbiAgICAgICAgICAgIG5ld0luZGV4ID0gZnJvbUluZGV4IC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSAmJiAhcnRsKSB8fCAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpICYmIHJ0bCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycm93UmlnaHQoZnJvbUluZGV4KTtcbiAgICAgICAgICAgIG5ld0luZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgQSkgJiYgIXRoaXMuX2dldElucHV0VmFsdWUoKSAmJiB0aGlzLl9pc0NvbnRyb2xLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+ICh0b2tlbi5zZWxlY3RlZCA9IHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBuZXdJbmRleCA9PT0gdGhpcy50b2tlbkxpc3QubGVuZ3RoICYmXG4gICAgICAgICAgICAoKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykgJiYgIXJ0bCkgfHwgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBMRUZUX0FSUk9XKSAmJiBydGwpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5wdXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXdJbmRleCEgPiB0aGlzLnRva2VuTGlzdC5sZW5ndGggLSB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGggJiYgdGhpcy5faXNJbnB1dEZvY3VzZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1Rva2VuRWxlbWVudChuZXdJbmRleCEgLSB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKG5ld0luZGV4IHx8IG5ld0luZGV4ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVG9rZW5FbGVtZW50KG5ld0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0Q29tYmluZWRUb2tlbldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGxldCB0b3RhbFRva2VuV2lkdGggPSB0aGlzLl9nZXRUb2tlbnNBcmVhV2lkdGhXaXRob3V0VG9rZW5zKCk7XG4gICAgICAgIC8vIGdldCB0aGUgd2lkdGggb2YgZWFjaCB0b2tlblxuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdG9rZW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdG90YWxUb2tlbldpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VG9rZW5zQXJlYVdpZHRoV2l0aG91dFRva2VucygpOiBudW1iZXIge1xuICAgICAgICBsZXQgdG90YWxUb2tlbldpZHRoID0gMDtcbiAgICAgICAgLy8gYWRkIGlucHV0IHdpZHRoXG4gICAgICAgIGlmICh0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0b3RhbFRva2VuV2lkdGggPSB0b3RhbFRva2VuV2lkdGggKyB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkIHRoZSB3aWR0aCBvZiB0aGUgXCJfX19fIG1vcmVcIiBlbGVtZW50XG4gICAgICAgIGlmICh0aGlzLm1vcmVUb2tlbnNMZWZ0Lmxlbmd0aCA+IDAgJiYgdGhpcy5tb3JlRWxlbWVudCAmJiB0aGlzLm1vcmVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRvdGFsVG9rZW5XaWR0aCA9IHRvdGFsVG9rZW5XaWR0aCArIHRoaXMubW9yZUVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgdGhlIGlucHV0IGdyb3VwIGFkZG9uXG4gICAgICAgIGlmICh0aGlzLmlucHV0R3JvdXBBZGRvbkVsICYmIHRoaXMuaW5wdXRHcm91cEFkZG9uRWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdGhpcy5pbnB1dEdyb3VwQWRkb25FbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvdGFsVG9rZW5XaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG1vcmVDbGlja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vcmVDbGlja2VkRXZlbnQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBSZW1vdmVzIGFsbCBzZWxlY3RlZCB0b2tlbnMgKi9cbiAgICByZW1vdmVTZWxlY3RlZFRva2VucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuX2dldEFjdGl2ZVRva2VucygpO1xuICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQub25SZW1vdmUuZW1pdCgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUFycm93TGVmdChmcm9tSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBpZiB0aGUgbGVmdG1vc3QgdmlzaWJsZSB0b2tlbiBpcyBzZWxlY3RlZCwgYW5kIHRoZXJlIGFyZSBtb3JlVG9rZW5zTGVmdCwgbmVlZCB0byBkaXNwbGF5IGEgbW9yZVRva2VuTGVmdFxuICAgICAgICBpZiAoZnJvbUluZGV4ID09PSB0aGlzLm1vcmVUb2tlbnNMZWZ0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcG9wcGVkVG9rZW4gPSB0aGlzLm1vcmVUb2tlbnNMZWZ0LnBvcCgpO1xuICAgICAgICAgICAgaWYgKHBvcHBlZFRva2VuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFrZUVsZW1lbnRWaXNpYmxlKHBvcHBlZFRva2VuLmVsZW1lbnRSZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYW5kIHRoZW4gaGlkZSBhbnkgdG9rZW5zIGZyb20gdGhlIHJpZ2h0IHRoYXQgbm8gbG9uZ2VyIGZpdFxuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VUb2tlbnMoJ3JpZ2h0Jyk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Nob3dBbGxUb2tlbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvcmNlQWxsVG9rZW5zVG9EaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Rm9jdXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUodG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB0b2tlbi5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodG9rZW4uX2NvbnRlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdG9rZW5zQ29udGFpbmVyV2lkdGggPSAnYXV0byc7XG4gICAgICAgIHRoaXMuX3Nob3dNb3JlRWxlbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oaWRlVG9rZW5zKCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0RWxlbWVudEZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuRm9jdXNlZCA9IHRoaXMuX2dldEZvY3VzZWRUb2tlbkluZGV4KCkgPiAtMTtcblxuICAgICAgICAgICAgaWYgKHRva2VuRm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dhaXRGb3JGb2N1c1RvRGlzYXBwZWFyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZm9yY2VBbGxUb2tlbnNUb0Rpc3BsYXkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0VG9rZW5zKCk7XG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfd2FpdEZvckZvY3VzVG9EaXNhcHBlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Rva2VuRWxlbWVudEZvY3VzZWRTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIC8vIDUgbXMgZGVsYXkgZm9yIG90aGVyIHRva2VuIHRvIHJlY2VpdmUgZm9jdXMsIGNoZWNrIGlmIF9zaG93QWxsVG9rZW5zIHdhcyBjYWxsZWQgYWdhaW5cbiAgICAgICAgdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZFN1YiA9IHRoaXMuX3Rva2VuRWxlbWVudEZvY3VzZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1KSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGlzRm9jdXNlZCkgPT4gaXNGb2N1c2VkICYmICF0aGlzLl9pbnB1dEVsZW1lbnRGb2N1c2VkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGlkZVRva2VucygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVBcnJvd1JpZ2h0KGZyb21JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmIChmcm9tSW5kZXggPT09IHRoaXMudG9rZW5MaXN0Lmxlbmd0aCAtIHRoaXMubW9yZVRva2Vuc1JpZ2h0Lmxlbmd0aCAtIDEgJiYgdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBwb3BwZWRUb2tlbiA9IHRoaXMubW9yZVRva2Vuc1JpZ2h0LnBvcCgpO1xuICAgICAgICAgICAgaWYgKHBvcHBlZFRva2VuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFrZUVsZW1lbnRWaXNpYmxlKHBvcHBlZFRva2VuLmVsZW1lbnRSZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYW5kIHRoZW4gaGlkZSBhbnkgdG9rZW5zIGZyb20gdGhlIGxlZnQgdGhhdCBubyBsb25nZXIgZml0XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZVRva2VucygnbGVmdCcpO1xuXG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbGxhcHNlVG9rZW5zKHNpZGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZvcmNlQWxsVG9rZW5zVG9EaXNwbGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9jb21wYWN0ICYmICF0aGlzLmNvbXBhY3RDb2xsYXBzZSkge1xuICAgICAgICAgICAgdGhpcy5fZ2V0SGlkZGVuQ296eVRva2VuQ291bnQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuZm9yRWFjaCgodmlld0NvbnRhaW5lcikgPT4gdmlld0NvbnRhaW5lci5jbGVhcigpKTtcblxuICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IHRoaXMuX2dldFRva2Vuc0FyZWFXaWR0aFdpdGhvdXRUb2tlbnMoKTtcblxuICAgICAgICBpZiAodGhpcy50b2tlbkxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbldpZHRoID0gdGhpcy50b2tlbkxpc3QuZ2V0KDApPy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICB0aGlzLl90b2tlbnNDb250YWluZXJXaWR0aCA9IGF2YWlsYWJsZVdpZHRoIDwgdG9rZW5XaWR0aCA/IGBjYWxjKDEwMCUgLSAke2F2YWlsYWJsZVdpZHRofXB4KWAgOiAnYXV0byc7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90b2tlbnNDb250YWluZXJXaWR0aCA9ICdhdXRvJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoZWNrTW9yZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG5cbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0b2tlbi5fY29udGVudCkpO1xuXG4gICAgICAgIGxldCBlbGVtZW50V2lkdGggPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGxldCBjb21iaW5lZFRva2VuV2lkdGggPSB0aGlzLmdldENvbWJpbmVkVG9rZW5XaWR0aCgpOyAvLyB0aGUgY29tYmluZWQgd2lkdGggb2YgYWxsIHRva2VucywgdGhlIFwiX19fXyBtb3JlXCIgdGV4dCwgYW5kIHRoZSBpbnB1dFxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIC8qXG4gICAgICAgICBXaGVuIHJlc2l6aW5nLCB3ZSB3YW50IHRvIGNvbGxhcHNlIHRoZSB0b2tlbnMgb24gdGhlIGxlZnQgZmlyc3QuIEhvd2V2ZXIsIHdoZW4gdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB0aHJvdWdoXG4gICAgICAgICBhIGdyb3VwIG9mIG92ZXJmbG93aW5nIHRva2VucyB1c2luZyB0aGUgYXJyb3cgbGVmdCBrZXksIHdlIG1heSBuZWVkIHRvIGhpZGUgdG9rZW5zIG9uIHRoZSByaWdodC4gU28gaWYgdGhpc1xuICAgICAgICAgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkIHdpdGggdGhlIHBhcmFtICdyaWdodCcgaXQgd2lsbCBjb2xsYXBzZSB0b2tlbnMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgbGlzdCByYXRoZXJcbiAgICAgICAgIHRoYW4gdGhlIChkZWZhdWx0KSBsZWZ0IHNpZGUuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoc2lkZSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgaSA9IHRoaXMudG9rZW5MaXN0Lmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNvbWJpbmVkVG9rZW5XaWR0aCA+IGVsZW1lbnRXaWR0aCAmJiAoc2lkZSA9PT0gJ3JpZ2h0JyA/IGkgPj0gMCA6IGkgPCB0aGlzLnRva2VuTGlzdC5sZW5ndGgpKSB7XG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIHRva2VucyBhbmQgaGlkZSB0aGVtIHVudGlsIHRoZSBjb21iaW5lZFRva2VuV2lkdGggZml0cyBpbiB0aGUgZWxlbWVudFdpZHRoXG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5MaXN0LmdldChpKTtcbiAgICAgICAgICAgIGNvbnN0IG1vcmVUb2tlbnMgPSBzaWRlID09PSAncmlnaHQnID8gdGhpcy5tb3JlVG9rZW5zUmlnaHQgOiB0aGlzLm1vcmVUb2tlbnNMZWZ0O1xuXG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAobW9yZVRva2Vucy5pbmRleE9mKHRva2VuKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9yZVRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG9rZW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBnZXQgdGhlIG5ldyBlbGVtZW50V2lkdGggYW5kIGNvbWJpbmVkVG9rZW5XaWR0aCBhcyB0aGVzZSB3aWxsIGhhdmUgY2hhbmdlZCBhZnRlciBzZXR0aW5nIGEgdG9rZW4gZGlzcGxheSB0byAnbm9uZSdcbiAgICAgICAgICAgIGVsZW1lbnRXaWR0aCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrTW9yZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICBjb21iaW5lZFRva2VuV2lkdGggPSB0aGlzLmdldENvbWJpbmVkVG9rZW5XaWR0aCgpO1xuICAgICAgICAgICAgc2lkZSA9PT0gJ3JpZ2h0JyA/IGktLSA6IGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5faGlkZGVuVG9rZW5zLmZvckVhY2goKGhpZGRlblRva2VuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaGlkZGVuVG9rZW4uX3ZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KGluZGV4KT8uY3JlYXRlRW1iZWRkZWRWaWV3KGhpZGRlblRva2VuLl9jb250ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNldFRva2VucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3JlVG9rZW5zTGVmdCA9IFtdO1xuICAgICAgICB0aGlzLm1vcmVUb2tlbnNSaWdodCA9IFtdO1xuICAgICAgICBpZiAodGhpcy5fY29tcGFjdCB8fCB0aGlzLmNvbXBhY3RDb2xsYXBzZSB8fCB0aGlzLl9mb3JjZUFsbFRva2Vuc1RvRGlzcGxheSkge1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUodG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VUb2tlbnMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVUb2tlbkNsaWNrU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW5Db3VudCA9IHRoaXMudG9rZW5MaXN0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLl9zZXRUb3RhbENvdW50KHRoaXMudG9rZW5MaXN0Lmxlbmd0aCkpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50TGVmdCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICB0aGlzLmhpZGRlbkNvenlUb2tlbkNvdW50ID0gMDtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgdG9rZW4udG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0IDwgZWxlbWVudExlZnRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZGVuQ296eVRva2VuQ291bnQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2hlY2tNb3JlRWxlbWVudFZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUNvenlUb2tlbkNvdW50KCk6IHZvaWQge1xuICAgICAgICAvLyBiZWNhdXNlIGp1c3RpZnktY29udGVudCBicmVha3Mgc2Nyb2xsYmFyLCBpdCBjYW5ub3QgYmUgdXNlZCBvbiBjb3p5IHNjcmVlbnMsIHNvIHVzZSBKUyB0byBzY3JvbGwgdG8gdGhlIGVuZFxuICAgICAgICB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIGlmICh0aGlzLmhpZGRlbkNvenlUb2tlbkNvdW50ID4gMCkge1xuICAgICAgICAgICAgLy8gbmVlZCB0byBkbyB0aGlzIGFnYWluIGluIGNhc2UgXCJfX19fIG1vcmVcIiB0ZXh0IHdhcyBhZGRlZFxuICAgICAgICAgICAgdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5fZ2V0SGlkZGVuQ296eVRva2VuQ291bnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWFrZUVsZW1lbnRWaXNpYmxlKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICAgICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICAgICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUNsaWNrcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zICYmIHRoaXMudG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5wdXRLZXlkb3duRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlS2V5RG93bihldmVudCwgdGhpcy50b2tlbkxpc3QubGVuZ3RoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTWV0aG9kIHdoaWNoIGhhbmRsZXMgd2hhdCBoYXBwZW5zIHRvIHRva2VuIHdoZW4gaXQgaXMgY2xpY2tlZCBhbmQgbm8ga2V5IGlzIGJlaW5nIGhlbGQgZG93bi4qL1xuICAgIHByaXZhdGUgX2Jhc2ljU2VsZWN0ZWQodG9rZW4sIGluZGV4KTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHNoYWRvd2VkVG9rZW4pID0+IHtcbiAgICAgICAgICAgIGlmIChzaGFkb3dlZFRva2VuICE9PSB0b2tlbikge1xuICAgICAgICAgICAgICAgIHNoYWRvd2VkVG9rZW4uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jdHJsUHJldmlvdXMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXN0YXJ0IGZpcnN0IGFuZCBsYXN0IGVsZW1lbnRzIGZvciBzaGlmdCBzZWxlY3Rpb24uKi9cbiAgICBwcml2YXRlIHJlc2V0Rmlyc3RBbmRMYXN0RWxlbWVudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzZXQgPSAhdGhpcy50b2tlbkxpc3Quc29tZSgodG9rZW4pID0+IHRva2VuLnNlbGVjdGVkKTtcbiAgICAgICAgaWYgKHJlc2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE1ldGhvZCB3aGljaCBoYW5kbGVzIHdoYXQgaGFwcGVucyB0byB0b2tlbiB3aGVuIGl0IGlzIGNsaWNrZWQgYW5kIHRoZSBzaGlmdCBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLiovXG4gICAgcHJpdmF0ZSBfc2hpZnRTZWxlY3RlZChpbmRleCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uICYmICF0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0ID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiAmJiBpbmRleCA8IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gJiYgaW5kZXggPiB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4sIGluZGV4T2ZUb2tlbikgPT4ge1xuICAgICAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBpbmRleE9mVG9rZW4gPj0gdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICBpbmRleE9mVG9rZW4gPD0gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2N0cmxQcmV2aW91cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE1ldGhvZCB3aGljaCBoYW5kbGVzIHdoYXQgaGFwcGVucyB0byB0b2tlbiB3aGVuIGl0IGlzIGNsaWNrZWQgYW5kIHRoZSBjb250cm9sIG9yIG1ldGEga2V5IGlzIGJlaW5nIGhlbGQgZG93bi4qL1xuICAgIHByaXZhdGUgX2N0cmxTZWxlY3RlZCh0b2tlbiwgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0b2tlbi5zZWxlY3RlZDtcbiAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRva2VuLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKChlbGVtZW50LCBpbmRleE9mVG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4T2ZUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleE9mVG9rZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiEgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24hIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdHJsUHJldmlvdXMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBHZXQgc2VsZWN0ZWQgYW5kIGZvY3VzZWQgdG9rZW5zICovXG4gICAgcHJpdmF0ZSBfZ2V0QWN0aXZlVG9rZW5zKCk6IFRva2VuQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbkxpc3QuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnNlbGVjdGVkIHx8IHRoaXMuX2lzVG9rZW5Gb2N1c2VkKGl0ZW0pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEZvY3VzZWRUb2tlbkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC50b0FycmF5KCkuZmluZEluZGV4KCh0b2tlbikgPT4gdGhpcy5faXNUb2tlbkZvY3VzZWQodG9rZW4pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzVG9rZW5Gb2N1c2VkKHRva2VuOiBUb2tlbkNvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdG9rZW4udG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50ID09PSB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNJbnB1dEZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b2tlbnNTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5MaXN0LnNvbWUoKHQpID0+IHQuc2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0SW5wdXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0NvbnRyb2xLZXkoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGtleWJvYXJkRXZlbnQuY3RybEtleSB8fCBrZXlib2FyZEV2ZW50Lm1ldGFLZXk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5FbGVtZW50RXZlbnRzKCk6IHZvaWQge1xuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIGZyb21FdmVudDxFdmVudD4odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZm9jdXMnLCB7IGNhcHR1cmU6IHRydWUgfSkucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiAoZXZlbnRbJ3RhcmdldCddIGFzIGFueSk/LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgdGhpcy50b2tlbml6ZXJGb2N1c2FibGUpLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZyb21FdmVudDxFdmVudD4odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYmx1cicsIHsgY2FwdHVyZTogdHJ1ZSB9KS5waXBlKG1hcCgoKSA9PiBmYWxzZSkpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIGRlYm91bmNlVGltZSBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gZmlsdGVyIHN1YnNlcXVlbnQgZm9jdXMtYmx1ciBldmVudHMsIHRoYXQgaGFwcGVuIHNpbXVsdGFuZW91c2x5XG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZvY3VzZWQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl90b2tlbml6ZXJIYXNGb2N1cyA9IGZvY3VzZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0ZW4gd2luZG93IHJlc2l6ZSBhbmQgZGlzdHJpYnV0ZSBjYXJkcyBvbiBjb2x1bW4gY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25SZXNpemUoKTtcbiAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzApLCB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMub25SZXNpemUoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGVja01vcmVFbGVtZW50VmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2hvd01vcmVFbGVtZW50ID1cbiAgICAgICAgICAgICh0aGlzLm1vcmVUb2tlbnNMZWZ0Lmxlbmd0aCA+IDAgfHwgdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoID4gMCB8fCB0aGlzLmhpZGRlbkNvenlUb2tlbkNvdW50ID4gMCkgJiZcbiAgICAgICAgICAgICF0aGlzLm9wZW4gJiZcbiAgICAgICAgICAgICF0aGlzLl90b2tlbml6ZXJIYXNGb2N1cztcblxuICAgICAgICBpZiAoc2hvd01vcmVFbGVtZW50ID09PSB0aGlzLl9zaG93TW9yZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Nob3dNb3JlRWxlbWVudCA9IHNob3dNb3JlRWxlbWVudDtcblxuICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZkLXRva2VuaXplciBmZC10b2tlbml6ZXItLXNjcm9sbGFibGVcIiBbY2xhc3MuaXMtZm9jdXNdPVwiX3Rva2VuaXplckhhc0ZvY3VzXCI+XG4gICAgPGRpdiBjbGFzcz1cImZkLXRva2VuaXplcl9faW5uZXJcIiAjdG9rZW5pemVySW5uZXI+XG4gICAgICAgIDxkaXYgcm9sZT1cImxpc3Rib3hcIiBbc3R5bGUud2lkdGhdPVwiX3Rva2Vuc0NvbnRhaW5lcldpZHRoXCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJmZC10b2tlblwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93T3ZlcmZsb3dQb3BvdmVyICYmICgoX2NvbXBhY3QkIHwgYXN5bmMpIHx8IGNvbXBhY3RDb2xsYXBzZSk7IGVsc2UgbW9yZUVsZW1lbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b2tlbnNPdmVyZmxvd1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmQtZm9ybS1jb250cm9sXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBmZC1pbnB1dC1ncm91cC1hZGRvbiAqbmdJZj1cImdseXBoXCIgI2lucHV0R3JvdXBBZGRPbiBbYnV0dG9uXT1cInRydWVcIiBwbGFjZW1lbnQ9XCJhZnRlclwiPlxuICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBjbGFzcz1cImZkLXRva2VuaXplci1hZGRvblwiIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgW2dseXBoXT1cImdseXBoXCIgdHlwZT1cImJ1dHRvblwiPjwvYnV0dG9uPlxuICAgIDwvc3Bhbj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3Rva2Vuc092ZXJmbG93PlxuICAgIDxmZC1wb3BvdmVyIHBsYWNlbWVudD1cImJvdHRvbS1zdGFydFwiIHRpdGxlPVwiXCIgW25vQXJyb3ddPVwiZmFsc2VcIiBbZm9jdXNUcmFwcGVkXT1cInRydWVcIiBbZm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCI+XG4gICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9yZUVsZW1lbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG5cbiAgICAgICAgPGZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgICAgIDx1bCBmZC1saXN0IGNsYXNzPVwiZmQtdG9rZW5pemVyX19vdmVyZmxvdy1saXN0XCI+XG4gICAgICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSBjbGFzcz1cImZkLXRva2VuaXplcl9fb3ZlcmZsb3ctbGlzdC1pdGVtXCIgKm5nRm9yPVwibGV0IHRva2VuIG9mIF9oaWRkZW5Ub2tlbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAjdmlld0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhdG9rZW4ucmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10b2tlbl9fY2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRva2VuLmRlbGV0ZUJ1dHRvbkxhYmVsIHx8ICgnY29yZVRva2VuLmRlbGV0ZUJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9rZW4uY2xvc2VDbGlja0hhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9yZUVsZW1lbnQ+XG4gICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cIm1vcmVDbGlja2VkKClcIlxuICAgICAgICAqbmdJZj1cIl9zaG93TW9yZUVsZW1lbnRcIlxuICAgICAgICAjbW9yZUVsZW1lbnRTcGFuXG4gICAgICAgIGNsYXNzPVwiZmQtdG9rZW5pemVyLW1vcmVcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoX2NvbXBhY3QkIHwgYXN5bmMpIHx8IGNvbXBhY3RDb2xsYXBzZVwiPlxuICAgICAgICAgICAge3sgJ2NvcmVUb2tlbml6ZXIubW9yZUxhYmVsJyB8IGZkVHJhbnNsYXRlIDogeyBjb3VudDogbW9yZVRva2Vuc0xlZnQubGVuZ3RoICsgbW9yZVRva2Vuc1JpZ2h0Lmxlbmd0aCB9IH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKF9jb21wYWN0JCB8IGFzeW5jKSA9PT0gZmFsc2UgJiYgIWNvbXBhY3RDb2xsYXBzZVwiPlxuICAgICAgICAgICAge3sgJ2NvcmVUb2tlbml6ZXIubW9yZUxhYmVsJyB8IGZkVHJhbnNsYXRlIDogeyBjb3VudDogaGlkZGVuQ296eVRva2VuQ291bnQgfSB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
688
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3Rva2VuL3Rva2VuaXplci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b2tlbi90b2tlbml6ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkcsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFDSCxhQUFhLEVBRWIsT0FBTyxFQUVQLGdCQUFnQixFQUNoQixVQUFVLEVBQ2IsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFP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QUFlO3NCQURkLEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLRyxnQkFBZ0I7c0JBRHhCLE1BQU07Z0JBeUpQLHNCQUFzQixNQWdEdEIsT0FBTztzQkFETixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQSwgQkFDS1NQQUNFLCBERUxFVEUsIEVOVEVSLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIG1lcmdlLCBPYnNlcnZhYmxlLCBzdGFydFdpdGgsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwsIGRlYm91bmNlVGltZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQge1xuICAgIGFwcGx5Q3NzQ2xhc3MsXG4gICAgQ3NzQ2xhc3NCdWlsZGVyLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgcmVzaXplT2JzZXJ2YWJsZSxcbiAgICBSdGxTZXJ2aWNlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFRva2VuQ29tcG9uZW50IH0gZnJvbSAnLi90b2tlbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlPYnNlcnZlciwgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRva2VuaXplcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Rva2VuaXplci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdG9rZW5pemVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCldXG59KVxuZXhwb3J0IGNsYXNzIFRva2VuaXplckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ3NzQ2xhc3NCdWlsZGVyLCBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqIHVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBEaXNhYmxlcyBwb3NzaWJpbGl0eSB0byByZW1vdmUgdG9rZW5zIGJ5IGtleWJvYXJkICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlS2V5Ym9hcmREZWxldGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gVG9rZW5Db21wb25lbnQpKVxuICAgIHRva2VuTGlzdDogUXVlcnlMaXN0PFRva2VuQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IEZvcm1Db250cm9sQ29tcG9uZW50KSwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3Rva2VuaXplcklubmVyJylcbiAgICB0b2tlbml6ZXJJbm5lckVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbW9yZUVsZW1lbnRTcGFuJylcbiAgICBtb3JlRWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0R3JvdXBBZGRPbicpIHNldCBjb250ZW50KGNvbnRlbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgICAgIHRoaXMuaW5wdXRHcm91cEFkZG9uRWwgPSBjb250ZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbigndmlld0NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICAgIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfaGlkZGVuVG9rZW5zKCk6IFRva2VuQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbkxpc3QuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9ic2VydmFibGUgc3RhdGUgb2YgdGhlIGNvbXBhY3QgbW9kZS5cbiAgICAgKi9cbiAgICBnZXQgX2NvbXBhY3QkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3QkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDb21wb25lbnQgaXMgaW4gY29tcGFjdCBtb2RlLCBkZXRlcm1pbmVkIGJ5IHRoZSBjb25zdW1lclxuICAgICAqL1xuICAgIGdldCBfY29tcGFjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb21wYWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaW5wdXRHcm91cEFkZG9uRWw6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciB0byB1c2UgY296eSB2aXN1YWxzIGJ1dCBjb21wYWN0IGNvbGxhcHNpbmcgYmVoYXZpb3IuICovXG4gICAgQElucHV0KClcbiAgICBjb21wYWN0Q29sbGFwc2UgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRva2VuaXplciBzaG91bGQgaGF2ZSBmYWtlIGZvY3VzIGluZGljYXRvciwgd2hlbiBpbnB1dCBpcyBmb2N1c2VkIGluc2lkZSovXG4gICAgQElucHV0KClcbiAgICB0b2tlbml6ZXJGb2N1c2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIFRoZSB2YWx1ZSBmb3IgdGhlIHRva2VuaXplciBpbnB1dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRWYWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqIEljb24gb2YgdGhlIGJ1dHRvbiBvbiB0aGUgcmlnaHQgb2YgdGhlIGlucHV0IGZpZWxkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2x5cGg6IHN0cmluZztcblxuICAgIC8qKiBXb3JkIHRvIHVzZSBmb3Igd2hlbiB0aGVyZSBhcmUgZXh0cmEgdG9rZW5zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9yZVRlcm0gPSAnbW9yZSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3BlbjogYm9vbGVhbjtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlYXJjaCB0ZXJtIGNoYW5nZXMuIFVzZSAqJGV2ZW50KiB0byBhY2Nlc3MgdGhlIG5ldyB0ZXJtLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG1vcmVDbGlja2VkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByZXZpb3VzRWxlbWVudFdpZHRoOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG1vcmVUb2tlbnNMZWZ0OiBBcnJheTxUb2tlbkNvbXBvbmVudD4gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZVRva2Vuc1JpZ2h0OiBBcnJheTxUb2tlbkNvbXBvbmVudD4gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJldmlvdXNUb2tlbkNvdW50OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9rZW5MaXN0Q2xpY2tTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoaWRkZW5Db3p5VG9rZW5Db3VudCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiBVc2VkIHRvIGFkZCBmb2N1cyB0byB0b2tlbml6ZXIgZWxlbWVudCAqL1xuICAgIF90b2tlbml6ZXJIYXNGb2N1cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd092ZXJmbG93UG9wb3ZlciA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93TW9yZUVsZW1lbnQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Rva2Vuc0NvbnRhaW5lcldpZHRoID0gJ2F1dG8nO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBWYXJpYWJsZSB3aGljaCB3aWxsIGtlZXAgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB0b2tlbiBwcmVzc2VkIGluIHRoZSB0b2tlbml6ZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIF9maXJzdEVsZW1lbnRJblNlbGVjdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFZhcmlhYmxlIHdoaWNoIHdpbGwga2VlcCB0aGUgaW5kZXggb2YgdGhlIGxhc3QgdG9rZW4gcHJlc3NlZCBpbiB0aGUgdG9rZW5pemVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbGFzdEVsZW1lbnRJblNlbGVjdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEZsYWcgd2hpY2ggd2lsbCBzYXkgaWYgdGhlIGxhc3Qga2V5Ym9hcmQgYW5kIGNsaWNrIG9wZXJhdGlvbiB0aGV5IHVzZWQgd2FzIHVzaW5nIGNvbnRyb2xcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jdHJsUHJldmlvdXM6IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEZsYWcgd2hpY2ggd2lsbCBzYXkgaWYgdGhleSBoZWxkIHNoaWZ0IGFuZCBjbGlja2VkIGhpZ2hsaWdodGluZyBlbGVtZW50cyBiZWZvcmUgb3JcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kaXJlY3Rpb25TaGlmdElzUmlnaHQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRMaXN0ZW5lcnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvcmNlQWxsVG9rZW5zVG9EaXNwbGF5ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Rva2VuRWxlbWVudEZvY3VzZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50Rm9jdXNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b2tlbkVsZW1lbnRGb2N1c2VkU3ViOiBOdWxsYWJsZTxTdWJzY3JpcHRpb24+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50OiBEb2N1bWVudFxuICAgICkge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZS50YXJnZXQpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0S2V5ZG93bkV2ZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3YXRjaCBmb3IgY2hhbmdlcyB0byB0aGUgdG9rZW5MaXN0IGFuZCBhdHRlbXB0IHRvIGV4cGFuZC9jb2xsYXBzZSB0b2tlbnMgYXMgbmVlZGVkXG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLl9yZXNldFRva2VucygpO1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgICAgICB0b2tlbi5vbkNsb3NlQ2xpY2suc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0VG9rZW5zKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuTGlzdENoYW5nZXNTdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgICAgICB0b2tlbi5lbGVtZW50Rm9jdXNlZC5zdWJzY3JpYmUoKGlzRm9jdXNlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZC5uZXh0KGlzRm9jdXNlZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuX2NvbXBhY3QgJiYgIXRoaXMuY29tcGFjdENvbGxhcHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVDb3p5VG9rZW5Db3VudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xpc3RlbkVsZW1lbnRFdmVudHMoKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c0VsZW1lbnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB0aGlzLl9saXN0ZW5PblJlc2l6ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0Q2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZSkgPT4gZSgpKTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVDbGlja3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLmNsYXNzXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVRva2VuQ2xpY2tTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUNsaWNrcygpO1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICh0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdG9rZW4udG9rZW5XcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRva2VuLm9uVG9rZW5DbGljay5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9rZW5FbGVtZW50KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzQ29udHJvbEtleShldmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N0cmxTZWxlY3RlZCh0b2tlbiwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFldmVudC5zaGlmdEtleSB8fCB0aGlzLl9jdHJsUHJldmlvdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Jhc2ljU2VsZWN0ZWQodG9rZW4sIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEZpcnN0QW5kTGFzdEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoaWZ0U2VsZWN0ZWQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRva2VuLm9uVG9rZW5LZXlkb3duLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duKGV2ZW50LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZm9jdXNUb2tlbkVsZW1lbnQobmV3SW5kZXg6IG51bWJlcik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGVsZW1lbnRUb0ZvY3VzOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdG9rZW5MaXN0QXJyYXk6IFRva2VuQ29tcG9uZW50W10gPSB0aGlzLnRva2VuTGlzdC50b0FycmF5KCk7XG4gICAgICAgIGlmICh0b2tlbkxpc3RBcnJheVtuZXdJbmRleF0pIHtcbiAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzID0gdG9rZW5MaXN0QXJyYXlbbmV3SW5kZXhdLnRva2VuV3JhcHBlckVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIC8vIGVsZW1lbnQgbmVlZHMgdGFiaW5kZXggaW4gb3JkZXIgdG8gYmUgZm9jdXNlZFxuICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMhLmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWxlbWVudFRvRm9jdXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBrZXlEb3duKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgS2V5VXRpbC5pc0tleUNvZGUoa2V5Ym9hcmRFdmVudCwgW0RFTEVURSwgQkFDS1NQQUNFXSkgJiZcbiAgICAgICAgICAgICghdGhpcy5faXNJbnB1dEZvY3VzZWQoKSB8fCB0aGlzLl90b2tlbnNTZWxlY3RlZCgpKSAmJlxuICAgICAgICAgICAgIXRoaXMuZGlzYWJsZUtleWJvYXJkRGVsZXRpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5fZ2V0QWN0aXZlVG9rZW5zKCk7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkVG9rZW5JbmRleCA9IHRoaXMuX2dldEZvY3VzZWRUb2tlbkluZGV4KCk7XG4gICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IGVsZW1lbnQub25DbG9zZUNsaWNrLmVtaXQoKSk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGtleWJvYXJkRXZlbnQsIERFTEVURSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNJbnB1dCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQoZm9jdXNlZFRva2VuSW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShrZXlib2FyZEV2ZW50LCBCQUNLU1BBQ0UpICYmXG4gICAgICAgICAgICB0aGlzLl9pc0lucHV0Rm9jdXNlZCgpICYmXG4gICAgICAgICAgICAhdGhpcy5fZ2V0SW5wdXRWYWx1ZSgpICYmXG4gICAgICAgICAgICAhdGhpcy5kaXNhYmxlS2V5Ym9hcmREZWxldGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQodGhpcy50b2tlbkxpc3QubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50UmVmKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50V2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0VG9rZW5zKCk7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzRWxlbWVudFdpZHRoID0gZWxlbWVudFdpZHRoO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb21wYWN0ICYmICF0aGlzLmNvbXBhY3RDb2xsYXBzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGZyb21JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBuZXdJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBydGwgPSB0aGlzLl9ydGxTZXJ2aWNlICYmIHRoaXMuX3J0bFNlcnZpY2UucnRsID8gdGhpcy5fcnRsU2VydmljZS5ydGwuZ2V0VmFsdWUoKSA6IGZhbHNlO1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSAmJiAhdGhpcy5faXNJbnB1dEZvY3VzZWQoKSkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuTGlzdC5maW5kKChfLCBpbmRleCkgPT4gaW5kZXggPT09IGZyb21JbmRleCk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKChzaGFkb3dlZFRva2VuKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNoYWRvd2VkVG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd2VkVG9rZW4uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRva2VuICYmICh0b2tlbi5zZWxlY3RlZCA9ICF0b2tlbi5zZWxlY3RlZCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzSW5wdXQoKTtcbiAgICAgICAgfSBlbHNlIGlmICgoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpICYmICFydGwpIHx8IChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpICYmIHJ0bCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycm93TGVmdChmcm9tSW5kZXgpO1xuICAgICAgICAgICAgbmV3SW5kZXggPSBmcm9tSW5kZXggLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpICYmICFydGwpIHx8IChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgTEVGVF9BUlJPVykgJiYgcnRsKSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlQXJyb3dSaWdodChmcm9tSW5kZXgpO1xuICAgICAgICAgICAgbmV3SW5kZXggPSBmcm9tSW5kZXggKyAxO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBBKSAmJiAhdGhpcy5fZ2V0SW5wdXRWYWx1ZSgpICYmIHRoaXMuX2lzQ29udHJvbEtleShldmVudCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4gKHRva2VuLnNlbGVjdGVkID0gdHJ1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG5ld0luZGV4ID09PSB0aGlzLnRva2VuTGlzdC5sZW5ndGggJiZcbiAgICAgICAgICAgICgoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSAmJiAhcnRsKSB8fCAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpICYmIHJ0bCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNJbnB1dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKG5ld0luZGV4ISA+IHRoaXMudG9rZW5MaXN0Lmxlbmd0aCAtIHRoaXMubW9yZVRva2Vuc1JpZ2h0Lmxlbmd0aCAmJiB0aGlzLl9pc0lucHV0Rm9jdXNlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVG9rZW5FbGVtZW50KG5ld0luZGV4ISAtIHRoaXMubW9yZVRva2Vuc1JpZ2h0Lmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV3SW5kZXggfHwgbmV3SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUb2tlbkVsZW1lbnQobmV3SW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXRDb21iaW5lZFRva2VuV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHRvdGFsVG9rZW5XaWR0aCA9IHRoaXMuX2dldFRva2Vuc0FyZWFXaWR0aFdpdGhvdXRUb2tlbnMoKTtcbiAgICAgICAgLy8gZ2V0IHRoZSB3aWR0aCBvZiBlYWNoIHRva2VuXG4gICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgICB0b3RhbFRva2VuV2lkdGggPSB0b3RhbFRva2VuV2lkdGggKyB0b2tlbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0b3RhbFRva2VuV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRUb2tlbnNBcmVhV2lkdGhXaXRob3V0VG9rZW5zKCk6IG51bWJlciB7XG4gICAgICAgIGxldCB0b3RhbFRva2VuV2lkdGggPSAwO1xuICAgICAgICAvLyBhZGQgaW5wdXQgd2lkdGhcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRvdGFsVG9rZW5XaWR0aCA9IHRvdGFsVG9rZW5XaWR0aCArIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgdGhlIHdpZHRoIG9mIHRoZSBcIl9fX18gbW9yZVwiIGVsZW1lbnRcbiAgICAgICAgaWYgKHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoID4gMCAmJiB0aGlzLm1vcmVFbGVtZW50ICYmIHRoaXMubW9yZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdG90YWxUb2tlbldpZHRoID0gdG90YWxUb2tlbldpZHRoICsgdGhpcy5tb3JlRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCB0aGUgaW5wdXQgZ3JvdXAgYWRkb25cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cEFkZG9uRWwgJiYgdGhpcy5pbnB1dEdyb3VwQWRkb25FbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0b3RhbFRva2VuV2lkdGggPSB0b3RhbFRva2VuV2lkdGggKyB0aGlzLmlucHV0R3JvdXBBZGRvbkVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG90YWxUb2tlbldpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW9yZUNsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9yZUNsaWNrZWRFdmVudC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZXMgYWxsIHNlbGVjdGVkIHRva2VucyAqL1xuICAgIHJlbW92ZVNlbGVjdGVkVG9rZW5zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5fZ2V0QWN0aXZlVG9rZW5zKCk7XG4gICAgICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gZWxlbWVudC5vblJlbW92ZS5lbWl0KCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQXJyb3dMZWZ0KGZyb21JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIHRoZSBsZWZ0bW9zdCB2aXNpYmxlIHRva2VuIGlzIHNlbGVjdGVkLCBhbmQgdGhlcmUgYXJlIG1vcmVUb2tlbnNMZWZ0LCBuZWVkIHRvIGRpc3BsYXkgYSBtb3JlVG9rZW5MZWZ0XG4gICAgICAgIGlmIChmcm9tSW5kZXggPT09IHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBwb3BwZWRUb2tlbiA9IHRoaXMubW9yZVRva2Vuc0xlZnQucG9wKCk7XG4gICAgICAgICAgICBpZiAocG9wcGVkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUocG9wcGVkVG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbmQgdGhlbiBoaWRlIGFueSB0b2tlbnMgZnJvbSB0aGUgcmlnaHQgdGhhdCBubyBsb25nZXIgZml0XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZVRva2VucygncmlnaHQnKTtcblxuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2hvd0FsbFRva2VucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9yY2VBbGxUb2tlbnNUb0Rpc3BsYXkgPSB0cnVlO1xuICAgICAgICB0aGlzLl9pbnB1dEVsZW1lbnRGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VFbGVtZW50VmlzaWJsZSh0b2tlbi5lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIHRva2VuLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0b2tlbi5fY29udGVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl90b2tlbnNDb250YWluZXJXaWR0aCA9ICdhdXRvJztcbiAgICAgICAgdGhpcy5fc2hvd01vcmVFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hpZGVUb2tlbnMoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50Rm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgdG9rZW5Gb2N1c2VkID0gdGhpcy5fZ2V0Rm9jdXNlZFRva2VuSW5kZXgoKSA+IC0xO1xuXG4gICAgICAgICAgICBpZiAodG9rZW5Gb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2FpdEZvckZvY3VzVG9EaXNhcHBlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9mb3JjZUFsbFRva2Vuc1RvRGlzcGxheSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRUb2tlbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF93YWl0Rm9yRm9jdXNUb0Rpc2FwcGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgLy8gNSBtcyBkZWxheSBmb3Igb3RoZXIgdG9rZW4gdG8gcmVjZWl2ZSBmb2N1cywgY2hlY2sgaWYgX3Nob3dBbGxUb2tlbnMgd2FzIGNhbGxlZCBhZ2FpblxuICAgICAgICB0aGlzLl90b2tlbkVsZW1lbnRGb2N1c2VkU3ViID0gdGhpcy5fdG9rZW5FbGVtZW50Rm9jdXNlZFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoaXNGb2N1c2VkKSA9PiBpc0ZvY3VzZWQgJiYgIXRoaXMuX2lucHV0RWxlbWVudEZvY3VzZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlVG9rZW5zKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUFycm93UmlnaHQoZnJvbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZyb21JbmRleCA9PT0gdGhpcy50b2tlbkxpc3QubGVuZ3RoIC0gdGhpcy5tb3JlVG9rZW5zUmlnaHQubGVuZ3RoIC0gMSAmJiB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcHBlZFRva2VuID0gdGhpcy5tb3JlVG9rZW5zUmlnaHQucG9wKCk7XG4gICAgICAgICAgICBpZiAocG9wcGVkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUocG9wcGVkVG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhbmQgdGhlbiBoaWRlIGFueSB0b2tlbnMgZnJvbSB0aGUgbGVmdCB0aGF0IG5vIGxvbmdlciBmaXRcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlVG9rZW5zKCdsZWZ0Jyk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29sbGFwc2VUb2tlbnMoc2lkZT86IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZm9yY2VBbGxUb2tlbnNUb0Rpc3BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2NvbXBhY3QgJiYgIXRoaXMuY29tcGFjdENvbGxhcHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5mb3JFYWNoKCh2aWV3Q29udGFpbmVyKSA9PiB2aWV3Q29udGFpbmVyLmNsZWFyKCkpO1xuXG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gdGhpcy5fZ2V0VG9rZW5zQXJlYVdpZHRoV2l0aG91dFRva2VucygpO1xuXG4gICAgICAgIGlmICh0aGlzLnRva2VuTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuV2lkdGggPSB0aGlzLnRva2VuTGlzdC5nZXQoMCk/LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3Rva2Vuc0NvbnRhaW5lcldpZHRoID0gYXZhaWxhYmxlV2lkdGggPCB0b2tlbldpZHRoID8gYGNhbGMoMTAwJSAtICR7YXZhaWxhYmxlV2lkdGh9cHgpYCA6ICdhdXRvJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3Rva2Vuc0NvbnRhaW5lcldpZHRoID0gJ2F1dG8nO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hlY2tNb3JlRWxlbWVudFZpc2liaWxpdHkoKTtcblxuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRva2VuLl9jb250ZW50KSk7XG5cbiAgICAgICAgbGV0IGVsZW1lbnRXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBsZXQgY29tYmluZWRUb2tlbldpZHRoID0gdGhpcy5nZXRDb21iaW5lZFRva2VuV2lkdGgoKTsgLy8gdGhlIGNvbWJpbmVkIHdpZHRoIG9mIGFsbCB0b2tlbnMsIHRoZSBcIl9fX18gbW9yZVwiIHRleHQsIGFuZCB0aGUgaW5wdXRcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAvKlxuICAgICAgICAgV2hlbiByZXNpemluZywgd2Ugd2FudCB0byBjb2xsYXBzZSB0aGUgdG9rZW5zIG9uIHRoZSBsZWZ0IGZpcnN0LiBIb3dldmVyLCB3aGVuIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhyb3VnaFxuICAgICAgICAgYSBncm91cCBvZiBvdmVyZmxvd2luZyB0b2tlbnMgdXNpbmcgdGhlIGFycm93IGxlZnQga2V5LCB3ZSBtYXkgbmVlZCB0byBoaWRlIHRva2VucyBvbiB0aGUgcmlnaHQuIFNvIGlmIHRoaXNcbiAgICAgICAgIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCB3aXRoIHRoZSBwYXJhbSAncmlnaHQnIGl0IHdpbGwgY29sbGFwc2UgdG9rZW5zIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGxpc3QgcmF0aGVyXG4gICAgICAgICB0aGFuIHRoZSAoZGVmYXVsdCkgbGVmdCBzaWRlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHNpZGUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIGkgPSB0aGlzLnRva2VuTGlzdC5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjb21iaW5lZFRva2VuV2lkdGggPiBlbGVtZW50V2lkdGggJiYgKHNpZGUgPT09ICdyaWdodCcgPyBpID49IDAgOiBpIDwgdGhpcy50b2tlbkxpc3QubGVuZ3RoKSkge1xuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSB0b2tlbnMgYW5kIGhpZGUgdGhlbSB1bnRpbCB0aGUgY29tYmluZWRUb2tlbldpZHRoIGZpdHMgaW4gdGhlIGVsZW1lbnRXaWR0aFxuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuTGlzdC5nZXQoaSk7XG4gICAgICAgICAgICBjb25zdCBtb3JlVG9rZW5zID0gc2lkZSA9PT0gJ3JpZ2h0JyA/IHRoaXMubW9yZVRva2Vuc1JpZ2h0IDogdGhpcy5tb3JlVG9rZW5zTGVmdDtcblxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vcmVUb2tlbnMuaW5kZXhPZih0b2tlbikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vcmVUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2VuLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZ2V0IHRoZSBuZXcgZWxlbWVudFdpZHRoIGFuZCBjb21iaW5lZFRva2VuV2lkdGggYXMgdGhlc2Ugd2lsbCBoYXZlIGNoYW5nZWQgYWZ0ZXIgc2V0dGluZyBhIHRva2VuIGRpc3BsYXkgdG8gJ25vbmUnXG4gICAgICAgICAgICBlbGVtZW50V2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrTW9yZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICBjb21iaW5lZFRva2VuV2lkdGggPSB0aGlzLmdldENvbWJpbmVkVG9rZW5XaWR0aCgpO1xuICAgICAgICAgICAgc2lkZSA9PT0gJ3JpZ2h0JyA/IGktLSA6IGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5faGlkZGVuVG9rZW5zLmZvckVhY2goKGhpZGRlblRva2VuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaGlkZGVuVG9rZW4uX3ZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KGluZGV4KT8uY3JlYXRlRW1iZWRkZWRWaWV3KGhpZGRlblRva2VuLl9jb250ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNldFRva2VucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3JlVG9rZW5zTGVmdCA9IFtdO1xuICAgICAgICB0aGlzLm1vcmVUb2tlbnNSaWdodCA9IFtdO1xuICAgICAgICBpZiAodGhpcy5fY29tcGFjdCB8fCB0aGlzLmNvbXBhY3RDb2xsYXBzZSB8fCB0aGlzLl9mb3JjZUFsbFRva2Vuc1RvRGlzcGxheSkge1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlRWxlbWVudFZpc2libGUodG9rZW4uZWxlbWVudFJlZik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VUb2tlbnMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVUb2tlbkNsaWNrU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB0aGlzLnByZXZpb3VzVG9rZW5Db3VudCA9IHRoaXMudG9rZW5MaXN0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLl9zZXRUb3RhbENvdW50KHRoaXMudG9rZW5MaXN0Lmxlbmd0aCkpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEhpZGRlbkNvenlUb2tlbkNvdW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50TGVmdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIHRoaXMuaGlkZGVuQ296eVRva2VuQ291bnQgPSAwO1xuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRva2VuLnRva2VuV3JhcHBlckVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICB0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgPCBlbGVtZW50TGVmdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRkZW5Db3p5VG9rZW5Db3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jaGVja01vcmVFbGVtZW50VmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ296eVRva2VuQ291bnQoKTogdm9pZCB7XG4gICAgICAgIC8vIGJlY2F1c2UganVzdGlmeS1jb250ZW50IGJyZWFrcyBzY3JvbGxiYXIsIGl0IGNhbm5vdCBiZSB1c2VkIG9uIGNvenkgc2NyZWVucywgc28gdXNlIEpTIHRvIHNjcm9sbCB0byB0aGUgZW5kXG4gICAgICAgIHRoaXMudG9rZW5pemVySW5uZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgdGhpcy5fZ2V0SGlkZGVuQ296eVRva2VuQ291bnQoKTtcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuQ296eVRva2VuQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAvLyBuZWVkIHRvIGRvIHRoaXMgYWdhaW4gaW4gY2FzZSBcIl9fX18gbW9yZVwiIHRleHQgd2FzIGFkZGVkXG4gICAgICAgICAgICB0aGlzLnRva2VuaXplcklubmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy50b2tlbml6ZXJJbm5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9nZXRIaWRkZW5Db3p5VG9rZW5Db3VudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYWtlRWxlbWVudFZpc2libGUoZWxlbWVudFJlZjogRWxlbWVudFJlZik6IHZvaWQge1xuICAgICAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuICAgICAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlQ2xpY2tzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMgJiYgdGhpcy50b2tlbkxpc3RDbGlja1N1YnNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdENsaWNrU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnB1dEtleWRvd25FdmVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duKGV2ZW50LCB0aGlzLnRva2VuTGlzdC5sZW5ndGgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBNZXRob2Qgd2hpY2ggaGFuZGxlcyB3aGF0IGhhcHBlbnMgdG8gdG9rZW4gd2hlbiBpdCBpcyBjbGlja2VkIGFuZCBubyBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLiovXG4gICAgcHJpdmF0ZSBfYmFzaWNTZWxlY3RlZCh0b2tlbiwgaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2tlbkxpc3QuZm9yRWFjaCgoc2hhZG93ZWRUb2tlbikgPT4ge1xuICAgICAgICAgICAgaWYgKHNoYWRvd2VkVG9rZW4gIT09IHRva2VuKSB7XG4gICAgICAgICAgICAgICAgc2hhZG93ZWRUb2tlbi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2N0cmxQcmV2aW91cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlc3RhcnQgZmlyc3QgYW5kIGxhc3QgZWxlbWVudHMgZm9yIHNoaWZ0IHNlbGVjdGlvbi4qL1xuICAgIHByaXZhdGUgcmVzZXRGaXJzdEFuZExhc3RFbGVtZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNldCA9ICF0aGlzLnRva2VuTGlzdC5zb21lKCh0b2tlbikgPT4gdG9rZW4uc2VsZWN0ZWQpO1xuICAgICAgICBpZiAocmVzZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTWV0aG9kIHdoaWNoIGhhbmRsZXMgd2hhdCBoYXBwZW5zIHRvIHRva2VuIHdoZW4gaXQgaXMgY2xpY2tlZCBhbmQgdGhlIHNoaWZ0IGtleSBpcyBiZWluZyBoZWxkIGRvd24uKi9cbiAgICBwcml2YXRlIF9zaGlmdFNlbGVjdGVkKGluZGV4KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gJiYgIXRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uICYmIGluZGV4IDwgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlyZWN0aW9uU2hpZnRJc1JpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBpbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiAmJiBpbmRleCA+IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RpcmVjdGlvblNoaWZ0SXNSaWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kaXJlY3Rpb25TaGlmdElzUmlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRva2VuTGlzdC5mb3JFYWNoKCh0b2tlbiwgaW5kZXhPZlRva2VuKSA9PiB7XG4gICAgICAgICAgICB0b2tlbi5zZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGluZGV4T2ZUb2tlbiA+PSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgIGluZGV4T2ZUb2tlbiA8PSB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY3RybFByZXZpb3VzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTWV0aG9kIHdoaWNoIGhhbmRsZXMgd2hhdCBoYXBwZW5zIHRvIHRva2VuIHdoZW4gaXQgaXMgY2xpY2tlZCBhbmQgdGhlIGNvbnRyb2wgb3IgbWV0YSBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLiovXG4gICAgcHJpdmF0ZSBfY3RybFNlbGVjdGVkKHRva2VuLCBpbmRleCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRva2VuLnNlbGVjdGVkO1xuICAgICAgICB0b2tlbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgdG9rZW4uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0LmZvckVhY2goKGVsZW1lbnQsIGluZGV4T2ZUb2tlbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uID0gaW5kZXhPZlRva2VuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbiA9IGluZGV4T2ZUb2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5fbGFzdEVsZW1lbnRJblNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9sYXN0RWxlbWVudEluU2VsZWN0aW9uISAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuX2ZpcnN0RWxlbWVudEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3RFbGVtZW50SW5TZWxlY3Rpb24gPSB0aGlzLl9maXJzdEVsZW1lbnRJblNlbGVjdGlvbiEgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N0cmxQcmV2aW91cyA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEdldCBzZWxlY3RlZCBhbmQgZm9jdXNlZCB0b2tlbnMgKi9cbiAgICBwcml2YXRlIF9nZXRBY3RpdmVUb2tlbnMoKTogVG9rZW5Db21wb25lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc2VsZWN0ZWQgfHwgdGhpcy5faXNUb2tlbkZvY3VzZWQoaXRlbSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0Rm9jdXNlZFRva2VuSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5MaXN0LnRvQXJyYXkoKS5maW5kSW5kZXgoKHRva2VuKSA9PiB0aGlzLl9pc1Rva2VuRm9jdXNlZCh0b2tlbikpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNUb2tlbkZvY3VzZWQodG9rZW46IFRva2VuQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0b2tlbi50b2tlbldyYXBwZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQgPT09IHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc0lucHV0Rm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Rva2Vuc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbkxpc3Quc29tZSgodCkgPT4gdC5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c0lucHV0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzQ29udHJvbEtleShrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4ga2V5Ym9hcmRFdmVudC5jdHJsS2V5IHx8IGtleWJvYXJkRXZlbnQubWV0YUtleTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlbkVsZW1lbnRFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgZnJvbUV2ZW50PEV2ZW50Pih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2ZvY3VzJywgeyBjYXB0dXJlOiB0cnVlIH0pLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gKGV2ZW50Wyd0YXJnZXQnXSBhcyBhbnkpPy50YWdOYW1lID09PSAnSU5QVVQnICYmIHRoaXMudG9rZW5pemVyRm9jdXNhYmxlKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdHJ1ZSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYmx1cicsIHsgY2FwdHVyZTogdHJ1ZSB9KS5waXBlKG1hcCgoKSA9PiBmYWxzZSkpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIGRlYm91bmNlVGltZSBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gZmlsdGVyIHN1YnNlcXVlbnQgZm9jdXMtYmx1ciBldmVudHMsIHRoYXQgaGFwcGVuIHNpbXVsdGFuZW91c2x5XG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZvY3VzZWQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl90b2tlbml6ZXJIYXNGb2N1cyA9IGZvY3VzZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0ZW4gd2luZG93IHJlc2l6ZSBhbmQgZGlzdHJpYnV0ZSBjYXJkcyBvbiBjb2x1bW4gY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25SZXNpemUoKTtcbiAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblJlc2l6ZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrTW9yZUVsZW1lbnRWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzaG93TW9yZUVsZW1lbnQgPVxuICAgICAgICAgICAgKHRoaXMubW9yZVRva2Vuc0xlZnQubGVuZ3RoID4gMCB8fCB0aGlzLm1vcmVUb2tlbnNSaWdodC5sZW5ndGggPiAwIHx8IHRoaXMuaGlkZGVuQ296eVRva2VuQ291bnQgPiAwKSAmJlxuICAgICAgICAgICAgIXRoaXMub3BlbiAmJlxuICAgICAgICAgICAgIXRoaXMuX3Rva2VuaXplckhhc0ZvY3VzO1xuXG4gICAgICAgIGlmIChzaG93TW9yZUVsZW1lbnQgPT09IHRoaXMuX3Nob3dNb3JlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2hvd01vcmVFbGVtZW50ID0gc2hvd01vcmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmQtdG9rZW5pemVyIGZkLXRva2VuaXplci0tc2Nyb2xsYWJsZVwiIFtjbGFzcy5pcy1mb2N1c109XCJfdG9rZW5pemVySGFzRm9jdXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtdG9rZW5pemVyX19pbm5lclwiICN0b2tlbml6ZXJJbm5lcj5cbiAgICAgICAgPGRpdiByb2xlPVwibGlzdGJveFwiIFtzdHlsZS53aWR0aF09XCJfdG9rZW5zQ29udGFpbmVyV2lkdGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkLXRva2VuXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dPdmVyZmxvd1BvcG92ZXIgJiYgKChfY29tcGFjdCQgfCBhc3luYykgfHwgY29tcGFjdENvbGxhcHNlKTsgZWxzZSBtb3JlRWxlbWVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRva2Vuc092ZXJmbG93XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZC1mb3JtLWNvbnRyb2xdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIGZkLWlucHV0LWdyb3VwLWFkZG9uICpuZ0lmPVwiZ2x5cGhcIiAjaW5wdXRHcm91cEFkZE9uIFtidXR0b25dPVwidHJ1ZVwiIHBsYWNlbWVudD1cImFmdGVyXCI+XG4gICAgICAgIDxidXR0b24gZmQtYnV0dG9uIGNsYXNzPVwiZmQtdG9rZW5pemVyLWFkZG9uXCIgZmRUeXBlPVwidHJhbnNwYXJlbnRcIiBbZ2x5cGhdPVwiZ2x5cGhcIiB0eXBlPVwiYnV0dG9uXCI+PC9idXR0b24+XG4gICAgPC9zcGFuPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdG9rZW5zT3ZlcmZsb3c+XG4gICAgPGZkLXBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tLXN0YXJ0XCIgdGl0bGU9XCJcIiBbbm9BcnJvd109XCJmYWxzZVwiIFtmb2N1c1RyYXBwZWRdPVwidHJ1ZVwiIFtmb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIj5cbiAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb3JlRWxlbWVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2ZkLXBvcG92ZXItY29udHJvbD5cblxuICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICAgICAgPHVsIGZkLWxpc3QgY2xhc3M9XCJmZC10b2tlbml6ZXJfX292ZXJmbG93LWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtIGNsYXNzPVwiZmQtdG9rZW5pemVyX19vdmVyZmxvdy1saXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgdG9rZW4gb2YgX2hpZGRlblRva2Vuc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICN2aWV3Q29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiF0b2tlbi5yZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLXRva2VuX19jbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidG9rZW4uZGVsZXRlQnV0dG9uTGFiZWwgfHwgKCdjb3JlVG9rZW4uZGVsZXRlQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2tlbi5jbG9zZUNsaWNrSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWJvZHk+XG4gICAgPC9mZC1wb3BvdmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb3JlRWxlbWVudD5cbiAgICA8c3BhblxuICAgICAgICAoY2xpY2spPVwibW9yZUNsaWNrZWQoKVwiXG4gICAgICAgICpuZ0lmPVwiX3Nob3dNb3JlRWxlbWVudFwiXG4gICAgICAgICNtb3JlRWxlbWVudFNwYW5cbiAgICAgICAgY2xhc3M9XCJmZC10b2tlbml6ZXItbW9yZVwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihfY29tcGFjdCQgfCBhc3luYykgfHwgY29tcGFjdENvbGxhcHNlXCI+XG4gICAgICAgICAgICB7eyAnY29yZVRva2VuaXplci5tb3JlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IGNvdW50OiBtb3JlVG9rZW5zTGVmdC5sZW5ndGggKyBtb3JlVG9rZW5zUmlnaHQubGVuZ3RoIH0gfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoX2NvbXBhY3QkIHwgYXN5bmMpID09PSBmYWxzZSAmJiAhY29tcGFjdENvbGxhcHNlXCI+XG4gICAgICAgICAgICB7eyAnY29yZVRva2VuaXplci5tb3JlTGFiZWwnIHwgZmRUcmFuc2xhdGUgOiB7IGNvdW50OiBoaWRkZW5Db3p5VG9rZW5Db3VudCB9IH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=