@bizdoc/core 3.0.6 → 3.0.7

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/assets/system/Workday.svg +37 -37
  2. package/assets/themes/brown.min.css +1 -1
  3. package/assets/themes/dark.min.css +1 -1
  4. package/assets/themes/deep-purple-light-blue.min.css +1 -1
  5. package/assets/themes/deep-purple-teal.min.css +1 -1
  6. package/assets/themes/default.min.css +13 -13
  7. package/assets/themes/green.min.css +1 -1
  8. package/assets/themes/indigo-amber.min.css +1 -1
  9. package/assets/themes/indigo.min.css +1 -1
  10. package/esm2022/lib/admin/admin-dismiss.service.mjs +3 -3
  11. package/esm2022/lib/admin/admin-menu.component.mjs +5 -5
  12. package/esm2022/lib/admin/architecture/cube-axes-filter.component.mjs +5 -5
  13. package/esm2022/lib/admin/architecture/designer-element.component.mjs +17 -17
  14. package/esm2022/lib/admin/architecture/designer-privileges.component.mjs +5 -5
  15. package/esm2022/lib/admin/architecture/designer.base.mjs +9 -9
  16. package/esm2022/lib/admin/architecture/designer.component.mjs +5 -5
  17. package/esm2022/lib/admin/architecture/elements/action.component.mjs +3 -3
  18. package/esm2022/lib/admin/architecture/elements/analysis-view.component.mjs +5 -5
  19. package/esm2022/lib/admin/architecture/elements/analysis-widget.component.mjs +5 -5
  20. package/esm2022/lib/admin/architecture/elements/anomaly-rule.component.mjs +5 -5
  21. package/esm2022/lib/admin/architecture/elements/attribute.component.mjs +5 -5
  22. package/esm2022/lib/admin/architecture/elements/box-form.component.mjs +5 -5
  23. package/esm2022/lib/admin/architecture/elements/configuration-datasource.component.mjs +5 -5
  24. package/esm2022/lib/admin/architecture/elements/control.component.mjs +3 -3
  25. package/esm2022/lib/admin/architecture/elements/cube-index-utility.component.mjs +5 -5
  26. package/esm2022/lib/admin/architecture/elements/cube-view.component.mjs +5 -5
  27. package/esm2022/lib/admin/architecture/elements/cube.component.mjs +5 -5
  28. package/esm2022/lib/admin/architecture/elements/document-state-widget.component.mjs +5 -5
  29. package/esm2022/lib/admin/architecture/elements/documents-report.component.mjs +5 -5
  30. package/esm2022/lib/admin/architecture/elements/documents-widget.component.mjs +5 -5
  31. package/esm2022/lib/admin/architecture/elements/explore-view.component.mjs +5 -5
  32. package/esm2022/lib/admin/architecture/elements/folder.component.mjs +5 -5
  33. package/esm2022/lib/admin/architecture/elements/form-invite.dialog.mjs +5 -5
  34. package/esm2022/lib/admin/architecture/elements/form.component.mjs +5 -5
  35. package/esm2022/lib/admin/architecture/elements/guide.component.mjs +5 -5
  36. package/esm2022/lib/admin/architecture/elements/job.component.mjs +5 -5
  37. package/esm2022/lib/admin/architecture/elements/matrix-view.component.mjs +5 -5
  38. package/esm2022/lib/admin/architecture/elements/node.component.mjs +3 -3
  39. package/esm2022/lib/admin/architecture/elements/parallel-view.component.mjs +5 -5
  40. package/esm2022/lib/admin/architecture/elements/performance-report.component.mjs +5 -5
  41. package/esm2022/lib/admin/architecture/elements/performance-widget.component.mjs +5 -5
  42. package/esm2022/lib/admin/architecture/elements/pivot-view.component.mjs +5 -5
  43. package/esm2022/lib/admin/architecture/elements/policy.component.mjs +3 -3
  44. package/esm2022/lib/admin/architecture/elements/report.component.mjs +5 -5
  45. package/esm2022/lib/admin/architecture/elements/return-to-role-action.component.mjs +5 -5
  46. package/esm2022/lib/admin/architecture/elements/role.component.mjs +5 -5
  47. package/esm2022/lib/admin/architecture/elements/rule.component.mjs +3 -3
  48. package/esm2022/lib/admin/architecture/elements/source.component.mjs +3 -3
  49. package/esm2022/lib/admin/architecture/elements/state.component.mjs +3 -3
  50. package/esm2022/lib/admin/architecture/elements/sum-view.component.mjs +5 -5
  51. package/esm2022/lib/admin/architecture/elements/tasks-report.component.mjs +5 -5
  52. package/esm2022/lib/admin/architecture/elements/type.component.mjs +5 -5
  53. package/esm2022/lib/admin/architecture/elements/usage-report.component.mjs +5 -5
  54. package/esm2022/lib/admin/architecture/elements/utility.component.mjs +3 -3
  55. package/esm2022/lib/admin/architecture/elements/view.component.mjs +3 -3
  56. package/esm2022/lib/admin/architecture/elements/widget.component.mjs +5 -5
  57. package/esm2022/lib/admin/architecture/icon-picker.component.mjs +5 -5
  58. package/esm2022/lib/admin/core/ace.input.mjs +3 -3
  59. package/esm2022/lib/admin/core/color-picker.input.mjs +5 -5
  60. package/esm2022/lib/admin/core/localized-string.component.mjs +5 -5
  61. package/esm2022/lib/admin/core/search.input.mjs +3 -3
  62. package/esm2022/lib/admin/diff/configuration-diff.component.mjs +5 -5
  63. package/esm2022/lib/admin/document-trace/document-trace.component.mjs +5 -5
  64. package/esm2022/lib/admin/document-trace/reassign.dialog.mjs +5 -5
  65. package/esm2022/lib/admin/document-trace/trace-element.component.mjs +5 -5
  66. package/esm2022/lib/admin/form/designer/box-designer.component.mjs +5 -5
  67. package/esm2022/lib/admin/form/designer/design-control.component.mjs +3 -3
  68. package/esm2022/lib/admin/form/designer/properties.component.mjs +5 -5
  69. package/esm2022/lib/admin/form/designer/section.component.mjs +5 -5
  70. package/esm2022/lib/admin/form/designer/settings.component.mjs +3 -3
  71. package/esm2022/lib/admin/form/form.resolve.service.mjs +3 -3
  72. package/esm2022/lib/admin/form/workflow/node.component.mjs +5 -5
  73. package/esm2022/lib/admin/form/workflow/role-node.component.mjs +5 -5
  74. package/esm2022/lib/admin/form/workflow/workflow.component.mjs +5 -5
  75. package/esm2022/lib/admin/indices/manage-cube-index.component.mjs +5 -5
  76. package/esm2022/lib/admin/patterns/patterns.component.mjs +5 -5
  77. package/esm2022/lib/admin/permissions/permissions.component.mjs +5 -5
  78. package/esm2022/lib/admin/positions/positions-popup.component.mjs +5 -5
  79. package/esm2022/lib/admin/positions/positions.component.mjs +5 -5
  80. package/esm2022/lib/admin/profiler/outofoffice.component.mjs +5 -5
  81. package/esm2022/lib/admin/profiler/profiler.component.mjs +5 -5
  82. package/esm2022/lib/admin/system.service.mjs +3 -3
  83. package/esm2022/lib/admin/utility-wrapper.component.mjs +3 -3
  84. package/esm2022/lib/admin/utility.pane.component.mjs +3 -3
  85. package/esm2022/lib/app.component.mjs +6 -6
  86. package/esm2022/lib/bizdoc.module.mjs +4 -4
  87. package/esm2022/lib/browse/browse-items.component.mjs +5 -5
  88. package/esm2022/lib/browse/browse.mobile.component.mjs +5 -5
  89. package/esm2022/lib/browse/browse.pane.component.mjs +5 -5
  90. package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +5 -5
  91. package/esm2022/lib/browse/filter/filter.component.mjs +5 -5
  92. package/esm2022/lib/browse/folders-menu.component.mjs +5 -5
  93. package/esm2022/lib/chat/chat-info.mjs +3 -3
  94. package/esm2022/lib/chat/chat.mobile.component.mjs +5 -5
  95. package/esm2022/lib/chat/chat.service.mjs +3 -3
  96. package/esm2022/lib/chat/contacts.component.mjs +8 -8
  97. package/esm2022/lib/chat/contacts.pane.component.mjs +3 -3
  98. package/esm2022/lib/chat/conversation.component.mjs +5 -5
  99. package/esm2022/lib/chat/conversation.pane.component.mjs +3 -3
  100. package/esm2022/lib/compose/action/action-picker.component.mjs +5 -5
  101. package/esm2022/lib/compose/action/action.dialog.mjs +5 -5
  102. package/esm2022/lib/compose/action/action.pane.dialog.exp.mjs +5 -5
  103. package/esm2022/lib/compose/action/assign-action.component.mjs +5 -5
  104. package/esm2022/lib/compose/action/moveto-action.component.mjs +5 -5
  105. package/esm2022/lib/compose/action/return-action.component.mjs +5 -5
  106. package/esm2022/lib/compose/attachments/attachments.component.mjs +5 -5
  107. package/esm2022/lib/compose/attachments/preview/attachment-preview.component.mjs +5 -5
  108. package/esm2022/lib/compose/attachments/progress-button.directive.mjs +3 -3
  109. package/esm2022/lib/compose/box/box.component.mjs +5 -5
  110. package/esm2022/lib/compose/box/control.component.mjs +3 -3
  111. package/esm2022/lib/compose/box/row.component.mjs +3 -3
  112. package/esm2022/lib/compose/can-deactivate-changes.service.mjs +3 -3
  113. package/esm2022/lib/compose/comments/comment.component.mjs +5 -5
  114. package/esm2022/lib/compose/comments/comments.component.mjs +5 -5
  115. package/esm2022/lib/compose/comments/comments.pane.component.mjs +3 -3
  116. package/esm2022/lib/compose/comments/edit-comment.component.mjs +3 -3
  117. package/esm2022/lib/compose/comments/edits.component.mjs +5 -5
  118. package/esm2022/lib/compose/comments/quick-comment.component.exp.mjs +5 -5
  119. package/esm2022/lib/compose/comments/votes.component.mjs +5 -5
  120. package/esm2022/lib/compose/compose-resolve.service.mjs +3 -3
  121. package/esm2022/lib/compose/compose.mobile.component.mjs +5 -5
  122. package/esm2022/lib/compose/compose.pane.component.mjs +5 -5
  123. package/esm2022/lib/compose/copy/copy.dialog.mjs +5 -5
  124. package/esm2022/lib/compose/dismiss.service.mjs +3 -3
  125. package/esm2022/lib/compose/document-resolve.service.mjs +3 -3
  126. package/esm2022/lib/compose/document-resolver.service.mjs +3 -3
  127. package/esm2022/lib/compose/document.component.mjs +3 -3
  128. package/esm2022/lib/compose/document.mobile.component.mjs +3 -3
  129. package/esm2022/lib/compose/document.pane.component.mjs +3 -3
  130. package/esm2022/lib/compose/events/events.component.mjs +5 -5
  131. package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +5 -5
  132. package/esm2022/lib/compose/form.component.mjs +5 -5
  133. package/esm2022/lib/compose/new-menu.component.mjs +5 -5
  134. package/esm2022/lib/compose/overlay.component.exp.mjs +3 -3
  135. package/esm2022/lib/compose/privilage.directive.mjs +6 -6
  136. package/esm2022/lib/compose/recipient-resolver.service.mjs +3 -3
  137. package/esm2022/lib/compose/state.component.mjs +3 -3
  138. package/esm2022/lib/compose/tag/tags.component.mjs +5 -5
  139. package/esm2022/lib/compose/trace/flow.component.mjs +3 -3
  140. package/esm2022/lib/compose/trace/people.component.mjs +3 -3
  141. package/esm2022/lib/compose/trace/trace.base.mjs +3 -3
  142. package/esm2022/lib/compose/trace/trace.component.mjs +3 -3
  143. package/esm2022/lib/compose/trace/trace.pane.component.mjs +3 -3
  144. package/esm2022/lib/compose/version-compare/version-compare.component.mjs +3 -3
  145. package/esm2022/lib/compose/version-compare/version-compare.directive.mjs +9 -9
  146. package/esm2022/lib/compose/version-compare/version.pane.component.mjs +5 -5
  147. package/esm2022/lib/core/account.service.mjs +3 -3
  148. package/esm2022/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
  149. package/esm2022/lib/core/avatar/avatar.component.mjs +3 -3
  150. package/esm2022/lib/core/checkbox.mjs +19 -19
  151. package/esm2022/lib/core/component-factory-resolver.mjs +3 -3
  152. package/esm2022/lib/core/datasource.service.mjs +3 -3
  153. package/esm2022/lib/core/document-factory.service.mjs +3 -3
  154. package/esm2022/lib/core/fields/address.designer.mjs +3 -3
  155. package/esm2022/lib/core/fields/address.field.mjs +31 -31
  156. package/esm2022/lib/core/fields/autocomplete.field.mjs +65 -65
  157. package/esm2022/lib/core/fields/axes-picker.designer.mjs +25 -25
  158. package/esm2022/lib/core/fields/axes-picker.field.mjs +5 -5
  159. package/esm2022/lib/core/fields/checkbox.designer.mjs +3 -3
  160. package/esm2022/lib/core/fields/checkbox.field.mjs +5 -5
  161. package/esm2022/lib/core/fields/checklist.designer.mjs +59 -59
  162. package/esm2022/lib/core/fields/checklist.field.mjs +5 -5
  163. package/esm2022/lib/core/fields/date-range.designer.mjs +3 -3
  164. package/esm2022/lib/core/fields/date-range.field.mjs +5 -5
  165. package/esm2022/lib/core/fields/date.designer.mjs +3 -3
  166. package/esm2022/lib/core/fields/date.field.mjs +5 -5
  167. package/esm2022/lib/core/fields/expression.field.mjs +30 -30
  168. package/esm2022/lib/core/fields/file.designer.mjs +3 -3
  169. package/esm2022/lib/core/fields/file.field.mjs +5 -5
  170. package/esm2022/lib/core/fields/html.designer.mjs +3 -3
  171. package/esm2022/lib/core/fields/html.field.mjs +5 -5
  172. package/esm2022/lib/core/fields/input.designer.mjs +3 -3
  173. package/esm2022/lib/core/fields/input.field.mjs +5 -5
  174. package/esm2022/lib/core/fields/localized-string.field.mjs +6 -6
  175. package/esm2022/lib/core/fields/numeric.designer.mjs +3 -3
  176. package/esm2022/lib/core/fields/numeric.field.mjs +5 -5
  177. package/esm2022/lib/core/fields/options.base.mjs +6 -6
  178. package/esm2022/lib/core/fields/options.component.mjs +5 -5
  179. package/esm2022/lib/core/fields/radio-button.designer.mjs +5 -5
  180. package/esm2022/lib/core/fields/radio-button.field.mjs +5 -5
  181. package/esm2022/lib/core/fields/select.designer.mjs +63 -63
  182. package/esm2022/lib/core/fields/select.field.mjs +5 -5
  183. package/esm2022/lib/core/fields/signature.designer.mjs +3 -3
  184. package/esm2022/lib/core/fields/signature.field.mjs +5 -5
  185. package/esm2022/lib/core/fields/switch.field.mjs +5 -5
  186. package/esm2022/lib/core/fields/tags.designer.mjs +3 -3
  187. package/esm2022/lib/core/fields/tags.field.mjs +5 -5
  188. package/esm2022/lib/core/fields/textarea.designer.mjs +3 -3
  189. package/esm2022/lib/core/fields/textarea.field.mjs +5 -5
  190. package/esm2022/lib/core/fields/time.designer.mjs +3 -3
  191. package/esm2022/lib/core/fields/time.field.mjs +5 -5
  192. package/esm2022/lib/core/fields/timespan.field.mjs +30 -30
  193. package/esm2022/lib/core/fields/yesno.designer.mjs +23 -23
  194. package/esm2022/lib/core/fields/yesno.field.mjs +5 -5
  195. package/esm2022/lib/core/guide/guide.component.mjs +5 -5
  196. package/esm2022/lib/core/guide/guide.service.mjs +3 -3
  197. package/esm2022/lib/core/guide/help-tip.component.mjs +21 -21
  198. package/esm2022/lib/core/http.interceptor.mjs +3 -3
  199. package/esm2022/lib/core/hub.service.mjs +3 -3
  200. package/esm2022/lib/core/identity/identity.component.mjs +5 -5
  201. package/esm2022/lib/core/info/attachment-info.service.mjs +3 -3
  202. package/esm2022/lib/core/info/document-info.service.mjs +3 -3
  203. package/esm2022/lib/core/info/location-info.component.mjs +3 -3
  204. package/esm2022/lib/core/info/map-info.mjs +3 -3
  205. package/esm2022/lib/core/inputs/address.input.mjs +21 -21
  206. package/esm2022/lib/core/inputs/auto-complete.input.mjs +35 -35
  207. package/esm2022/lib/core/inputs/combination-picker-body.mjs +5 -5
  208. package/esm2022/lib/core/inputs/combination-picker.mjs +3 -3
  209. package/esm2022/lib/core/inputs/combination-pool.mjs +5 -5
  210. package/esm2022/lib/core/inputs/file.input.mjs +5 -5
  211. package/esm2022/lib/core/inputs/select.input.mjs +37 -37
  212. package/esm2022/lib/core/inputs/signature.input.mjs +3 -3
  213. package/esm2022/lib/core/inputs/time-picker.mjs +5 -5
  214. package/esm2022/lib/core/inputs/timespan.input.mjs +3 -3
  215. package/esm2022/lib/core/layout.component.mjs +3 -3
  216. package/esm2022/lib/core/lottie-animation.mjs +3 -3
  217. package/esm2022/lib/core/mailbox.service.mjs +3 -3
  218. package/esm2022/lib/core/none.component.mjs +15 -15
  219. package/esm2022/lib/core/pipes/action.pipe.mjs +3 -3
  220. package/esm2022/lib/core/pipes/calendar.pipe.mjs +3 -3
  221. package/esm2022/lib/core/pipes/date-format.pipe.mjs +3 -3
  222. package/esm2022/lib/core/pipes/daterange.pipe.mjs +6 -6
  223. package/esm2022/lib/core/pipes/difference.pipe.mjs +3 -3
  224. package/esm2022/lib/core/pipes/duration-format.pipe.mjs +3 -3
  225. package/esm2022/lib/core/pipes/duration.pipe.mjs +3 -3
  226. package/esm2022/lib/core/pipes/form.pipe.mjs +3 -3
  227. package/esm2022/lib/core/pipes/join.pipe.mjs +3 -3
  228. package/esm2022/lib/core/pipes/localized-string.pipe.mjs +3 -3
  229. package/esm2022/lib/core/pipes/role.pipe.mjs +3 -3
  230. package/esm2022/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
  231. package/esm2022/lib/core/pipes/sort.pipe.mjs +9 -9
  232. package/esm2022/lib/core/pipes/state.pipe.mjs +3 -3
  233. package/esm2022/lib/core/pipes/time-ago.pipe.mjs +3 -3
  234. package/esm2022/lib/core/pipes/to-now.pipe.mjs +3 -3
  235. package/esm2022/lib/core/pipes/translate.pipe.mjs +9 -9
  236. package/esm2022/lib/core/pipes/type-value.pipe.mjs +3 -3
  237. package/esm2022/lib/core/pipes/user-name.pipe.mjs +3 -3
  238. package/esm2022/lib/core/popup/popup.component.mjs +3 -3
  239. package/esm2022/lib/core/popup/popup.service.mjs +3 -3
  240. package/esm2022/lib/core/popup/tooltip.directive.mjs +6 -6
  241. package/esm2022/lib/core/prompt/ask/ask.dialog.mjs +3 -3
  242. package/esm2022/lib/core/prompt/mask/mask.component.mjs +3 -3
  243. package/esm2022/lib/core/prompt.service.mjs +3 -3
  244. package/esm2022/lib/core/router.mjs +6 -6
  245. package/esm2022/lib/core/save-changes.dialog.mjs +3 -3
  246. package/esm2022/lib/core/session.service.mjs +3 -3
  247. package/esm2022/lib/core/slots/router.directive.mjs +3 -3
  248. package/esm2022/lib/core/slots/router.service.mjs +3 -3
  249. package/esm2022/lib/core/slots/slots.component.mjs +5 -5
  250. package/esm2022/lib/core/sticky-toolbar.exp.mjs +3 -3
  251. package/esm2022/lib/core/tagging/documents.component.mjs +5 -5
  252. package/esm2022/lib/core/tagging/edit-input.component.mjs +5 -5
  253. package/esm2022/lib/core/tagging/emoji.component.mjs +3 -3
  254. package/esm2022/lib/core/tagging/tagging-item.directive.mjs +3 -3
  255. package/esm2022/lib/core/tagging/tagging.component-base.mjs +3 -3
  256. package/esm2022/lib/core/tagging/tagging.directive.mjs +3 -3
  257. package/esm2022/lib/core/tagging/tagging.pipe.mjs +3 -3
  258. package/esm2022/lib/core/tagging/users.component.mjs +5 -5
  259. package/esm2022/lib/core/translate.service.mjs +3 -3
  260. package/esm2022/lib/core/virtual-tabs.component.exp.mjs +6 -6
  261. package/esm2022/lib/core/window-title.service.mjs +3 -3
  262. package/esm2022/lib/cube/accum/accum.component.mjs +3 -3
  263. package/esm2022/lib/cube/chart/chart.component.mjs +3 -3
  264. package/esm2022/lib/cube/cube-info.service.mjs +3 -3
  265. package/esm2022/lib/cube/cube-menu.component.mjs +5 -5
  266. package/esm2022/lib/cube/cube-view.component.mjs +3 -3
  267. package/esm2022/lib/cube/cube.service.mjs +3 -3
  268. package/esm2022/lib/cube/explore/document-item.component.mjs +3 -3
  269. package/esm2022/lib/cube/explore/explore-item.component.mjs +3 -3
  270. package/esm2022/lib/cube/explore/explore-items.component.mjs +3 -3
  271. package/esm2022/lib/cube/explore/explore.pane.component.mjs +3 -3
  272. package/esm2022/lib/cube/explore/item-resolver.service.mjs +6 -6
  273. package/esm2022/lib/cube/explore/item.pane.component.mjs +3 -3
  274. package/esm2022/lib/cube/filter/filter-tags.component.exp.mjs +5 -5
  275. package/esm2022/lib/cube/filter/filter.component.mjs +5 -5
  276. package/esm2022/lib/cube/grid/grid.component.mjs +3 -3
  277. package/esm2022/lib/cube/matrix/matrix.base.mjs +3 -3
  278. package/esm2022/lib/cube/matrix/matrix.mobile.component.mjs +5 -5
  279. package/esm2022/lib/cube/matrix/matrix.pane.component.mjs +5 -5
  280. package/esm2022/lib/cube/matrix/popup.component.mjs +5 -5
  281. package/esm2022/lib/cube/matrix/table.component.mjs +5 -5
  282. package/esm2022/lib/cube/parallel/parallel.component.mjs +5 -5
  283. package/esm2022/lib/cube/pivot/pivot.component.mjs +3 -3
  284. package/esm2022/lib/cube/spreadsheet/spreadsheet.component.mjs +3 -3
  285. package/esm2022/lib/cube/spreadsheet/spreadsheet.container.exp.mjs +3 -3
  286. package/esm2022/lib/cube/sum/sum.component.mjs +5 -5
  287. package/esm2022/lib/cube/view-base.mjs +3 -3
  288. package/esm2022/lib/cube/view.mobile.component.mjs +5 -5
  289. package/esm2022/lib/cube/view.pane.component.mjs +5 -5
  290. package/esm2022/lib/dashboard/actions/actions.widget.mjs +3 -3
  291. package/esm2022/lib/dashboard/cube/accum-cube.widget.mjs +3 -3
  292. package/esm2022/lib/dashboard/cube/compare.widget.mjs +3 -3
  293. package/esm2022/lib/dashboard/cube/cube-analysis.base.mjs +3 -3
  294. package/esm2022/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
  295. package/esm2022/lib/dashboard/cube/cube-chart.widget.mjs +3 -3
  296. package/esm2022/lib/dashboard/cube/document-state.widget.mjs +3 -3
  297. package/esm2022/lib/dashboard/cube/documents.widget.mjs +3 -3
  298. package/esm2022/lib/dashboard/cube/filter/filter.component.mjs +3 -3
  299. package/esm2022/lib/dashboard/dashboard.component.mjs +5 -5
  300. package/esm2022/lib/dashboard/dashboard.pane.component.mjs +3 -3
  301. package/esm2022/lib/dashboard/recents/recents.widget.mjs +5 -5
  302. package/esm2022/lib/dashboard/score/activity.widget.mjs +5 -5
  303. package/esm2022/lib/dashboard/score/compare-groups.widget.mjs +3 -3
  304. package/esm2022/lib/dashboard/score/peers-performance.widget.mjs +3 -3
  305. package/esm2022/lib/dashboard/score/pending-results.widget.mjs +5 -5
  306. package/esm2022/lib/dashboard/score/personal-score.widget.mjs +3 -3
  307. package/esm2022/lib/dashboard/widget-item.component.mjs +3 -3
  308. package/esm2022/lib/designer.module.mjs +4 -4
  309. package/esm2022/lib/desktop.module.mjs +4 -4
  310. package/esm2022/lib/home/about/about.dialog.mjs +5 -5
  311. package/esm2022/lib/home/home-base.component.mjs +3 -3
  312. package/esm2022/lib/home/home.desktop.component.mjs +5 -5
  313. package/esm2022/lib/home/home.mobile.component.mjs +5 -5
  314. package/esm2022/lib/home/notifications/notifications.component.mjs +5 -5
  315. package/esm2022/lib/home/options/options.component.mjs +5 -5
  316. package/esm2022/lib/home/outofoffice/outofoffice.component.mjs +5 -5
  317. package/esm2022/lib/home/sign/sign.component.mjs +3 -3
  318. package/esm2022/lib/impersonate/impersonate.component.mjs +5 -5
  319. package/esm2022/lib/mobile.module.mjs +4 -4
  320. package/esm2022/lib/modules/chart.module.mjs +4 -4
  321. package/esm2022/lib/modules/circular-gauge.module.mjs +4 -4
  322. package/esm2022/lib/modules/datepicker.intl.mjs +3 -3
  323. package/esm2022/lib/modules/dayjs.module.mjs +4 -4
  324. package/esm2022/lib/modules/diagram.module.mjs +4 -4
  325. package/esm2022/lib/modules/gantt.module.mjs +4 -4
  326. package/esm2022/lib/modules/grid.module.mjs +4 -4
  327. package/esm2022/lib/modules/linear-gauge.module.mjs +4 -4
  328. package/esm2022/lib/modules/material.module.mjs +4 -4
  329. package/esm2022/lib/modules/paginator.intl.mjs +3 -3
  330. package/esm2022/lib/modules/pivot.module.mjs +4 -4
  331. package/esm2022/lib/modules/schedule.module.mjs +4 -4
  332. package/esm2022/lib/modules/spreadsheet.module.mjs +4 -4
  333. package/esm2022/lib/modules/stepper.intl.mjs +3 -3
  334. package/esm2022/lib/modules/texteditor.module.mjs +4 -4
  335. package/esm2022/lib/notifications/filter.component.mjs +3 -3
  336. package/esm2022/lib/notifications/notifications-table.component.mjs +5 -5
  337. package/esm2022/lib/notifications/notifications.mobile.component.mjs +3 -3
  338. package/esm2022/lib/notifications/notifications.pane.component.mjs +3 -3
  339. package/esm2022/lib/notifications/notifications.service.mjs +3 -3
  340. package/esm2022/lib/notifications/types/commented.notification.mjs +17 -17
  341. package/esm2022/lib/notifications/types/cube-anomaly.notification.mjs +3 -3
  342. package/esm2022/lib/notifications/types/escalated.notification.mjs +3 -3
  343. package/esm2022/lib/notifications/types/invite.notification.mjs +3 -3
  344. package/esm2022/lib/notifications/types/liked.notification.mjs +17 -17
  345. package/esm2022/lib/notifications/types/long-running-task.notification.mjs +3 -3
  346. package/esm2022/lib/notifications/types/notification-base.mjs +3 -3
  347. package/esm2022/lib/notifications/types/nudge.notification.mjs +3 -3
  348. package/esm2022/lib/notifications/types/state-changed.notification.mjs +3 -3
  349. package/esm2022/lib/notifications/types/tagged.notification.mjs +7 -7
  350. package/esm2022/lib/notifications/types/text.notification.mjs +3 -3
  351. package/esm2022/lib/notifications/types/upcoming-event.notification.mjs +3 -3
  352. package/esm2022/lib/options/options.component.mjs +5 -5
  353. package/esm2022/lib/options/options.service.mjs +3 -3
  354. package/esm2022/lib/reports/arguments-component.mjs +3 -3
  355. package/esm2022/lib/reports/cube/documents.component.mjs +3 -3
  356. package/esm2022/lib/reports/cube/grid-documents.component.mjs +3 -3
  357. package/esm2022/lib/reports/cube/performance-hilo.component.mjs +3 -3
  358. package/esm2022/lib/reports/cube/performance-wind.component.mjs +3 -3
  359. package/esm2022/lib/reports/cube/table-documents.component.mjs +5 -5
  360. package/esm2022/lib/reports/cube/usage-args.component.mjs +3 -3
  361. package/esm2022/lib/reports/cube/usage-base.mjs +3 -3
  362. package/esm2022/lib/reports/cube/usage-chart.component.mjs +3 -3
  363. package/esm2022/lib/reports/cube/usage-pivot.component.mjs +3 -3
  364. package/esm2022/lib/reports/cube/usage.component.mjs +3 -3
  365. package/esm2022/lib/reports/report-viewer.component.mjs +3 -3
  366. package/esm2022/lib/reports/report.mobile.component.mjs +5 -5
  367. package/esm2022/lib/reports/report.pane.component.mjs +5 -5
  368. package/esm2022/lib/reports/reports-menu.component.mjs +5 -5
  369. package/esm2022/lib/reports/substitution/substitution.component.mjs +5 -5
  370. package/esm2022/lib/reports/table/table-view.component.mjs +5 -5
  371. package/esm2022/lib/reports/tasks/tasks.component.mjs +3 -3
  372. package/esm2022/lib/scheduler/schedule.component.mjs +3 -3
  373. package/esm2022/lib/scheduler/scheduler.mobile.component.mjs +3 -3
  374. package/esm2022/lib/scheduler/scheduler.pane.component.mjs +3 -3
  375. package/esm2022/lib/search/cube.component.mjs +3 -3
  376. package/esm2022/lib/search/document.component.mjs +3 -3
  377. package/esm2022/lib/search/guide.component.mjs +3 -3
  378. package/esm2022/lib/search/path.component.mjs +15 -15
  379. package/esm2022/lib/search/search.service.mjs +3 -3
  380. package/esm2022/lib/shared.module.mjs +9 -9
  381. package/esm2022/lib/system.module.mjs +4 -4
  382. package/esm2022/lib/views/cube/chart.component.mjs +5 -5
  383. package/esm2022/lib/views/cube/cube-base.mjs +3 -3
  384. package/esm2022/lib/views/cube/explore.component.mjs +5 -5
  385. package/esm2022/lib/views/cube/matrix.component.mjs +5 -5
  386. package/esm2022/lib/views/cube/parallel.component.mjs +5 -5
  387. package/esm2022/lib/views/cube/pivot.component.mjs +5 -5
  388. package/esm2022/lib/views/cube/sum.component.mjs +5 -5
  389. package/esm2022/lib/views/cube/view.component.mjs +5 -5
  390. package/esm2022/lib/views/timeline/timeline.component.mjs +3 -3
  391. package/esm2022/lib/views/view-item.component.mjs +3 -3
  392. package/esm2022/lib/views/views.component.mjs +5 -5
  393. package/esm2022/lib/views/views.mobile.component.mjs +3 -3
  394. package/esm2022/lib/views/views.pane.component.mjs +3 -3
  395. package/fesm2022/bizdoc-core.mjs +1858 -1858
  396. package/fesm2022/bizdoc-core.mjs.map +1 -1
  397. package/package.json +15 -16
@@ -11,10 +11,10 @@ import * as i1 from "./core/session.service";
11
11
  import * as i2 from "./core/hub.service";
12
12
  const REVISIT_TAB_REFRESH = 10000;
13
13
  export class BrokenPage {
14
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BrokenPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.3", type: BrokenPage, selector: "ng-component", host: { classAttribute: "mat-app-background" }, ngImport: i0, template: '', isInline: true }); }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: BrokenPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.4", type: BrokenPage, selector: "ng-component", host: { classAttribute: "mat-app-background" }, ngImport: i0, template: '', isInline: true }); }
16
16
  }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BrokenPage, decorators: [{
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: BrokenPage, decorators: [{
18
18
  type: Component,
19
19
  args: [{
20
20
  template: '',
@@ -62,10 +62,10 @@ export class BizDocApp {
62
62
  document.body.classList.remove('e-dark-mode');
63
63
  });
64
64
  }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BizDocApp, deps: [{ token: i0.ViewContainerRef }, { token: i1.SessionService }, { token: i2.HubService }], target: i0.ɵɵFactoryTarget.Component }); }
66
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.3", type: BizDocApp, selector: "bizdoc", ngImport: i0, template: '', isInline: true }); }
65
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: BizDocApp, deps: [{ token: i0.ViewContainerRef }, { token: i1.SessionService }, { token: i2.HubService }], target: i0.ɵɵFactoryTarget.Component }); }
66
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.4", type: BizDocApp, selector: "bizdoc", ngImport: i0, template: '', isInline: true }); }
67
67
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BizDocApp, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: BizDocApp, decorators: [{
69
69
  type: Component,
70
70
  args: [{
71
71
  selector: 'bizdoc',
@@ -60,13 +60,13 @@ export class BizDocModule {
60
60
  providers
61
61
  };
62
62
  }
63
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BizDocModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
64
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.3", ngImport: i0, type: BizDocModule, declarations: [BizDocApp], imports: [BrowserModule,
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: BizDocModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
64
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.4", ngImport: i0, type: BizDocModule, declarations: [BizDocApp], imports: [BrowserModule,
65
65
  BrowserAnimationsModule, i1.RouterModule, MobileModule,
66
66
  DesktopModule, i2.SystemModule, i3.SharedModule], exports: [BizDocApp,
67
67
  SharedModule,
68
68
  MaterialModule] }); }
69
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BizDocModule, imports: [BrowserModule,
69
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: BizDocModule, imports: [BrowserModule,
70
70
  BrowserAnimationsModule,
71
71
  RouterModule.forRoot(ROUTES, { initialNavigation: 'disabled' }),
72
72
  MobileModule,
@@ -75,7 +75,7 @@ export class BizDocModule {
75
75
  SharedModule.forChild({ routingEngine: isMobile() ? 'ng' : 'pane' }), SharedModule,
76
76
  MaterialModule] }); }
77
77
  }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BizDocModule, decorators: [{
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: BizDocModule, decorators: [{
79
79
  type: NgModule,
80
80
  args: [{
81
81
  declarations: [
@@ -451,22 +451,22 @@ export class BrowseItemsComponent {
451
451
  this._destroy.next();
452
452
  this._destroy.complete();
453
453
  }
454
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BrowseItemsComponent, deps: [{ token: i1.MailboxService }, { token: i2.AccountService }, { token: i3.CubeService }, { token: i4.SessionService }, { token: i5.PromptService }, { token: i6.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i7.RouterImpl }, { token: i8.HubService }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
455
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: BrowseItemsComponent, selector: "bizdoc-browse-items", inputs: { folderId: "folderId", filterType: "filterType", filters: "filters" }, outputs: { onopen: "open", onview: "view" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\n@if (dataSource?.data.length === 0) {\n <bizdoc-none title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\n}\n<mat-table cdkDropList class=\"data-table\"\n [cdkDropListDisabled]=\"isMobile\"\n [cdkDropListData]=\"dataSource?.data\"\n cdkDropListConnectedTo=\"folders\"\n cdkDropListSortingDisabled\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <div class=\"\"></div>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let item\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\n (change)=\"$event ? selection.toggle(item) : null\"\n [checked]=\"selection.isSelected(item)\">\n </mat-checkbox>\n <!-- drag -->\n <!--<button mat-icon-button cdkDragHandle\n (mousedown)=\"dragDisabled = false\"\n (mouseup)=\"dragDisabled = true\"\n (touchstart)=\"dragDisabled = false\"\n (touchend)=\"dragDisabled = true\"\n class=\"drag hide-xs\" aria-disabled=\"true\">\n <mat-icon>drag_indicator</mat-icon>\n </button>-->\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\n </mat-cell>\n</ng-container>\n<!-- Number column -->\n<ng-container matColumnDef=\"number\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\n</ng-container>\n\n<!-- Subject column -->\n<ng-container matColumnDef=\"subject\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"owner\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\n @if (item.ownerId) {\n <bizdoc-identity-name [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\n }\n </mat-cell>\n</ng-container>\n<ng-container matColumnDef=\"sender\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\n @if (item.senderId) {\n <bizdoc-identity-name [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\n }\n </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"received\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.received | amCalendar}} </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"receivedAgo\">\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.received | amCalendar\">{{item.received | amTimeAgo}}</mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"replied\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.replied | amCalendar}} </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"issued\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.issued | amCalendar}} </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"issuedAgo\">\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.issued | amCalendar\"> {{item.issued | amTimeAgo}} </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"state\">\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\n </mat-cell>\n</ng-container>\n\n@if (customColumns) {\n @for (c of customColumns; track c) {\n <ng-container [matColumnDef]=\"c.name\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\n @switch (c.type) {\n @case ('Date') {\n <span>\n {{item.model[c.name] | amCalendar }}\n </span>\n }\n @case ('Decimal') {\n <span>\n {{item.model[c.name] | number }}\n </span>\n }\n @case ('Boolean') {\n <span>\n <bizdoc-checkbox [checked]=\"item.model[c.name]\"></bizdoc-checkbox>\n </span>\n }\n @default {\n <span>\n {{item.model[c.name]}}z\n </span>\n }\n }\n </mat-cell>\n </ng-container>\n }\n}\n\n<!-- Value column -->\n<ng-container matColumnDef=\"value\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\n</ng-container>\n\n<!-- options column -->\n<ng-container matColumnDef=\"options\">\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\n <mat-cell *matCellDef=\"let item\">\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.document-flag]=\"item.flag\">{{item.flag ? 'star' : 'star_border'}}</mat-icon></button>\n @if (enableViews) {\n <button mat-icon-button (click)=\"view(item, $event)\" [bizdocTooltip]=\"'Insight' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\n }\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool hide-xs\"><mat-icon>more_vert</mat-icon></button>\n </mat-cell>\n</ng-container>\n<!-- Expanded Content Column -->\n<ng-container matColumnDef=\"expandedDetail\">\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\n [class.read-row]=\"item.read\">\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\n @if (item == expandedElement) {\n <bizdoc-expanded-item [model]=\"item\"></bizdoc-expanded-item>\n }\n </div>\n </mat-cell>\n</ng-container>\n<mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\n<mat-row @item [@updated]=\"item == updatedElement\"\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\n cdkDrag [cdkDragData]=\"item\"\n [cdkDragDisabled]=\"dragDisabled\"\n (cdkDragReleased)=\"dragDisabled = true\"\n [ngClass]=\"{'selecteded-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\n <div *cdkDragPreview>\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\n </div>\n <div *cdkDragPlaceholder>\n <!-- none -->\n </div>\n</mat-row>\n<mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\n class=\"detail-row\" matRipple\n [ngClass]=\"{ 'selecteded-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\n<mat-menu #menu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\n </ng-template>\n</mat-menu>\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-mdc-row .tool{opacity:.05}.mat-mdc-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i10.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: i10.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "directive", type: i11.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i12.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i13.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i13.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i14.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i15.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i16.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i17.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i18.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i19.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i20.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i20.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i20.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i20.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i21.CheckboxComponent, selector: "bizdoc-checkbox", inputs: ["checked", "color", "icon"] }, { kind: "directive", type: i22.StateDirective, selector: "bizdoc-status", inputs: ["stateId"] }, { kind: "component", type: i23.IdentityName, selector: "bizdoc-identity-name", inputs: ["identity", "by", "chating"] }, { kind: "component", type: i24.NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { kind: "component", type: i25.ExpandedItemComponent, selector: "bizdoc-expanded-item", inputs: ["model"], outputs: ["sent"] }, { kind: "directive", type: i26.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i9.DecimalPipe, name: "number" }, { kind: "pipe", type: i9.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i27.CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: i28.TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: i29.TranslatePipe, name: "translate" }], animations: [
454
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: BrowseItemsComponent, deps: [{ token: i1.MailboxService }, { token: i2.AccountService }, { token: i3.CubeService }, { token: i4.SessionService }, { token: i5.PromptService }, { token: i6.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i7.RouterImpl }, { token: i8.HubService }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
455
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: BrowseItemsComponent, selector: "bizdoc-browse-items", inputs: { folderId: "folderId", filterType: "filterType", filters: "filters" }, outputs: { onopen: "open", onview: "view" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n@if (dataSource?.data.length === 0) {\r\n <bizdoc-none title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n}\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag hide-xs\" aria-disabled=\"true\">\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Number column -->\r\n<ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- Subject column -->\r\n<ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n @if (item.ownerId) {\r\n <bizdoc-identity-name [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n<ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n @if (item.senderId) {\r\n <bizdoc-identity-name [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.received | amCalendar}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.received | amCalendar\">{{item.received | amTimeAgo}}</mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.replied | amCalendar}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.issued | amCalendar}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.issued | amCalendar\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n</ng-container>\r\n\r\n@if (customColumns) {\r\n @for (c of customColumns; track c) {\r\n <ng-container [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n @switch (c.type) {\r\n @case ('Date') {\r\n <span>\r\n {{item.model[c.name] | amCalendar }}\r\n </span>\r\n }\r\n @case ('Decimal') {\r\n <span>\r\n {{item.model[c.name] | number }}\r\n </span>\r\n }\r\n @case ('Boolean') {\r\n <span>\r\n <bizdoc-checkbox [checked]=\"item.model[c.name]\"></bizdoc-checkbox>\r\n </span>\r\n }\r\n @default {\r\n <span>\r\n {{item.model[c.name]}}z\r\n </span>\r\n }\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n}\r\n\r\n<!-- Value column -->\r\n<ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- options column -->\r\n<ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.document-flag]=\"item.flag\">{{item.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n @if (enableViews) {\r\n <button mat-icon-button (click)=\"view(item, $event)\" [bizdocTooltip]=\"'Insight' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool hide-xs\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Expanded Content Column -->\r\n<ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n @if (item == expandedElement) {\r\n <bizdoc-expanded-item [model]=\"item\"></bizdoc-expanded-item>\r\n }\r\n </div>\r\n </mat-cell>\r\n</ng-container>\r\n<mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n<mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selecteded-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n</mat-row>\r\n<mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selecteded-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-mdc-row .tool{opacity:.05}.mat-mdc-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i10.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: i10.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "directive", type: i11.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i12.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i13.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i13.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i14.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i15.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i16.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i17.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i18.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i19.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i20.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i20.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i20.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i20.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i21.CheckboxComponent, selector: "bizdoc-checkbox", inputs: ["checked", "color", "icon"] }, { kind: "directive", type: i22.StateDirective, selector: "bizdoc-status", inputs: ["stateId"] }, { kind: "component", type: i23.IdentityName, selector: "bizdoc-identity-name", inputs: ["identity", "by", "chating"] }, { kind: "component", type: i24.NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { kind: "component", type: i25.ExpandedItemComponent, selector: "bizdoc-expanded-item", inputs: ["model"], outputs: ["sent"] }, { kind: "directive", type: i26.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i9.DecimalPipe, name: "number" }, { kind: "pipe", type: i9.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i27.CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: i28.TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: i29.TranslatePipe, name: "translate" }], animations: [
456
456
  listAnimation,
457
457
  itemAnimation,
458
458
  expandListItemAnimation,
459
459
  listItemUpdatedAnimation
460
460
  ] }); }
461
461
  }
462
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: BrowseItemsComponent, decorators: [{
462
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: BrowseItemsComponent, decorators: [{
463
463
  type: Component,
464
464
  args: [{ selector: 'bizdoc-browse-items', animations: [
465
465
  listAnimation,
466
466
  itemAnimation,
467
467
  expandListItemAnimation,
468
468
  listItemUpdatedAnimation
469
- ], template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\n@if (dataSource?.data.length === 0) {\n <bizdoc-none title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\n}\n<mat-table cdkDropList class=\"data-table\"\n [cdkDropListDisabled]=\"isMobile\"\n [cdkDropListData]=\"dataSource?.data\"\n cdkDropListConnectedTo=\"folders\"\n cdkDropListSortingDisabled\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <div class=\"\"></div>\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let item\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\n (change)=\"$event ? selection.toggle(item) : null\"\n [checked]=\"selection.isSelected(item)\">\n </mat-checkbox>\n <!-- drag -->\n <!--<button mat-icon-button cdkDragHandle\n (mousedown)=\"dragDisabled = false\"\n (mouseup)=\"dragDisabled = true\"\n (touchstart)=\"dragDisabled = false\"\n (touchend)=\"dragDisabled = true\"\n class=\"drag hide-xs\" aria-disabled=\"true\">\n <mat-icon>drag_indicator</mat-icon>\n </button>-->\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\n </mat-cell>\n</ng-container>\n<!-- Number column -->\n<ng-container matColumnDef=\"number\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\n</ng-container>\n\n<!-- Subject column -->\n<ng-container matColumnDef=\"subject\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"owner\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\n @if (item.ownerId) {\n <bizdoc-identity-name [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\n }\n </mat-cell>\n</ng-container>\n<ng-container matColumnDef=\"sender\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\n @if (item.senderId) {\n <bizdoc-identity-name [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\n }\n </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"received\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.received | amCalendar}} </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"receivedAgo\">\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.received | amCalendar\">{{item.received | amTimeAgo}}</mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"replied\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.replied | amCalendar}} </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"issued\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.issued | amCalendar}} </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"issuedAgo\">\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.issued | amCalendar\"> {{item.issued | amTimeAgo}} </mat-cell>\n</ng-container>\n\n<ng-container matColumnDef=\"state\">\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\n </mat-cell>\n</ng-container>\n\n@if (customColumns) {\n @for (c of customColumns; track c) {\n <ng-container [matColumnDef]=\"c.name\">\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\n @switch (c.type) {\n @case ('Date') {\n <span>\n {{item.model[c.name] | amCalendar }}\n </span>\n }\n @case ('Decimal') {\n <span>\n {{item.model[c.name] | number }}\n </span>\n }\n @case ('Boolean') {\n <span>\n <bizdoc-checkbox [checked]=\"item.model[c.name]\"></bizdoc-checkbox>\n </span>\n }\n @default {\n <span>\n {{item.model[c.name]}}z\n </span>\n }\n }\n </mat-cell>\n </ng-container>\n }\n}\n\n<!-- Value column -->\n<ng-container matColumnDef=\"value\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\n</ng-container>\n\n<!-- options column -->\n<ng-container matColumnDef=\"options\">\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\n <mat-cell *matCellDef=\"let item\">\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.document-flag]=\"item.flag\">{{item.flag ? 'star' : 'star_border'}}</mat-icon></button>\n @if (enableViews) {\n <button mat-icon-button (click)=\"view(item, $event)\" [bizdocTooltip]=\"'Insight' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\n }\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool hide-xs\"><mat-icon>more_vert</mat-icon></button>\n </mat-cell>\n</ng-container>\n<!-- Expanded Content Column -->\n<ng-container matColumnDef=\"expandedDetail\">\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\n [class.read-row]=\"item.read\">\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\n @if (item == expandedElement) {\n <bizdoc-expanded-item [model]=\"item\"></bizdoc-expanded-item>\n }\n </div>\n </mat-cell>\n</ng-container>\n<mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\n<mat-row @item [@updated]=\"item == updatedElement\"\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\n cdkDrag [cdkDragData]=\"item\"\n [cdkDragDisabled]=\"dragDisabled\"\n (cdkDragReleased)=\"dragDisabled = true\"\n [ngClass]=\"{'selecteded-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\n <div *cdkDragPreview>\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\n </div>\n <div *cdkDragPlaceholder>\n <!-- none -->\n </div>\n</mat-row>\n<mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\n class=\"detail-row\" matRipple\n [ngClass]=\"{ 'selecteded-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\n<mat-menu #menu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\n <mat-divider></mat-divider>\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\n </ng-template>\n</mat-menu>\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-mdc-row .tool{opacity:.05}.mat-mdc-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"] }]
469
+ ], template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n@if (dataSource?.data.length === 0) {\r\n <bizdoc-none title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n}\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag hide-xs\" aria-disabled=\"true\">\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Number column -->\r\n<ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- Subject column -->\r\n<ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n @if (item.ownerId) {\r\n <bizdoc-identity-name [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n<ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n @if (item.senderId) {\r\n <bizdoc-identity-name [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.received | amCalendar}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.received | amCalendar\">{{item.received | amTimeAgo}}</mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.replied | amCalendar}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.issued | amCalendar}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.issued | amCalendar\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n</ng-container>\r\n\r\n@if (customColumns) {\r\n @for (c of customColumns; track c) {\r\n <ng-container [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n @switch (c.type) {\r\n @case ('Date') {\r\n <span>\r\n {{item.model[c.name] | amCalendar }}\r\n </span>\r\n }\r\n @case ('Decimal') {\r\n <span>\r\n {{item.model[c.name] | number }}\r\n </span>\r\n }\r\n @case ('Boolean') {\r\n <span>\r\n <bizdoc-checkbox [checked]=\"item.model[c.name]\"></bizdoc-checkbox>\r\n </span>\r\n }\r\n @default {\r\n <span>\r\n {{item.model[c.name]}}z\r\n </span>\r\n }\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n}\r\n\r\n<!-- Value column -->\r\n<ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- options column -->\r\n<ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.document-flag]=\"item.flag\">{{item.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n @if (enableViews) {\r\n <button mat-icon-button (click)=\"view(item, $event)\" [bizdocTooltip]=\"'Insight' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool hide-xs\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Expanded Content Column -->\r\n<ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n @if (item == expandedElement) {\r\n <bizdoc-expanded-item [model]=\"item\"></bizdoc-expanded-item>\r\n }\r\n </div>\r\n </mat-cell>\r\n</ng-container>\r\n<mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n<mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selecteded-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n</mat-row>\r\n<mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selecteded-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-mdc-row .tool{opacity:.05}.mat-mdc-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"] }]
470
470
  }], ctorParameters: () => [{ type: i1.MailboxService }, { type: i2.AccountService }, { type: i3.CubeService }, { type: i4.SessionService }, { type: i5.PromptService }, { type: i6.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i7.RouterImpl }, { type: i8.HubService }, { type: undefined, decorators: [{
471
471
  type: Inject,
472
472
  args: [BIZDOC_CONFIG]
@@ -492,4 +492,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
492
492
  function assign(model1, model2) {
493
493
  Object.assign(model1, model2);
494
494
  }
495
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3NlLWl0ZW1zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYnJvd3NlL2Jyb3dzZS1pdGVtcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2Jyb3dzZS9icm93c2UtaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBK0MsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBYyxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdHLE9BQU8sRUFBNkQsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBU3JILE9BQU8sRUFBZ0IsYUFBYSxFQUFFLFVBQVUsRUFBRSxN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TTtzQkFBOUIsTUFBTTt1QkFBQyxNQUFNO2dCQUNMLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRWdDLElBQUk7c0JBQXpDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDTyxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O0FBMGEzQyxTQUFTLE1BQU0sQ0FBQyxNQUFtQixFQUFFLE1BQW1CO0lBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBJbnB1dCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmb3JrSm9pbiwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAsIHNoYXJlUmVwbGF5LCBkZWJvdW5jZVRpbWUsIGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBGb2xkZXIsIEhlYWRlck1vZGVsLCBSZWNpcGllbnRNb2RlbCwgQWN0aW9uLCBGb2xkZXJDb2x1bW4sIERSQUZUIH0gZnJvbSAnLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBpc01vYmlsZSwgcXVlcnlQYXJhbXMgfSBmcm9tICcuLi9jb3JlL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IGV4cGFuZExpc3RJdGVtQW5pbWF0aW9uLCBpdGVtQW5pbWF0aW9uLCBsaXN0QW5pbWF0aW9uLCBsaXN0SXRlbVVwZGF0ZWRBbmltYXRpb24gfSBmcm9tICcuLi9jb3JlL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJUeXBlLCBJdGVtRXh0cmEsIE1haWxib3hTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9tYWlsYm94LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdWJTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9odWIuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1YmVTZXJ2aWNlIH0gZnJvbSAnLi4vY3ViZS9jdWJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJyb3dzZUZpbHRlckFyZ3MgfSBmcm9tICcuL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUm91dGVySW1wbCB9IGZyb20gJy4uL2NvcmUvcm91dGVyJztcclxuaW1wb3J0IHsgQml6RG9jQ29uZmlnLCBCSVpET0NfQ09ORklHLCBPcGVuUG9saWN5IH0gZnJvbSAnLi4vY29yZS9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2FjY291bnQuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgVEFLRSA9IDIwMCwgU0laRSA9IDIwLCBIRUFERVJfQ09MVU1OX05BTUVTID0gWydudW1iZXInLCAnc3ViamVjdCcsICd2YWx1ZScsICdvd25lcicsICdzZW5kZXInLCAncmVjZWl2ZWQnLCAncmVjZWl2ZWRBZ28nLCAncmVwbGllZCcsICdzdGF0ZScsICdpc3N1ZWQnLCAnaXNzdWVkQWdvJ107XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWJyb3dzZS1pdGVtcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jyb3dzZS1pdGVtcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYnJvd3NlLWl0ZW1zLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgbGlzdEFuaW1hdGlvbixcclxuICAgIGl0ZW1BbmltYXRpb24sXHJcbiAgICBleHBhbmRMaXN0SXRlbUFuaW1hdGlvbixcclxuICAgIGxpc3RJdGVtVXBkYXRlZEFuaW1hdGlvblxyXG4gIF1cclxufSlcclxuLyoqIGJyb3dzZSBpdGVtcyBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgQnJvd3NlSXRlbXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBAT3V0cHV0KCdvcGVuJykgcmVhZG9ubHkgb25vcGVuID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNpcGllbnRNb2RlbD4oKTtcclxuICBAT3V0cHV0KCd2aWV3JykgcmVhZG9ubHkgb252aWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNpcGllbnRNb2RlbD4oKTtcclxuICBASW5wdXQoKSBmb2xkZXJJZDogc3RyaW5nID0gbnVsbDtcclxuICBASW5wdXQoKSBmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlID0gbnVsbDtcclxuICBASW5wdXQoKSBmaWx0ZXJzOiBCcm93c2VGaWx0ZXJBcmdzO1xyXG5cclxuICBAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiB0cnVlIH0pIHNvcnQ6IE1hdFNvcnQ7XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxIZWFkZXJNb2RlbD47XHJcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW107XHJcbiAgY3VzdG9tQ29sdW1ucz86IEZvbGRlckNvbHVtbltdO1xyXG4gIGV4cGFuZGVkRWxlbWVudD86IEhlYWRlck1vZGVsO1xyXG4gIHVwZGF0ZWRFbGVtZW50PzogSGVhZGVyTW9kZWw7XHJcbiAgc2VsZWN0ZWRFbGVtZW50PzogSGVhZGVyTW9kZWw7XHJcbiAgc2hhcmVkQWN0aW9uczogQWN0aW9uW10gPSBbXTtcclxuICBkcmFnRGlzYWJsZWQgPSB0cnVlO1xyXG4gIHJlYWRvbmx5IFBBR0VfU0laRSA9IFNJWkU7XHJcbiAgcmVhZG9ubHkgRFJBRlQgPSBEUkFGVDtcclxuICByZWFkb25seSBjdXJyZW5jeUZvcm1hdCA9IHRoaXMuX2N1YmUuZGlnaXRzSW5mbztcclxuICByZWFkb25seSBpc01vYmlsZSA9IGlzTW9iaWxlKCk7XHJcbiAgcmVhZG9ubHkgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPEhlYWRlck1vZGVsPih0cnVlLCBbXSk7XHJcbiAgbG9hZGluZzogYm9vbGVhbjtcclxuICBwcml2YXRlIF9wZW5kaW5nSXRlbXM6IHsgW2lkOiBzdHJpbmddOiBPYnNlcnZhYmxlPFJlY2lwaWVudE1vZGVsPGFueT4+OyB9ID0ge307XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9hZGluZyQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIGVuYWJsZVZpZXdzOiBib29sZWFuO1xyXG4gIC8qKiBicm93c2UgY3RvciAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfbWFpbGJveDogTWFpbGJveFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hY2NvdW50czogQWNjb3VudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jdWJlOiBDdWJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2I6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlckltcGwsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdpbmc6IEh1YlNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEJJWkRPQ19DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogQml6RG9jQ29uZmlnKSB7XHJcbiAgICB0aGlzLmVuYWJsZVZpZXdzID0gX3Nlc3Npb24ucHJvZmlsZS52aWV3cy5sZW5ndGggPiAwO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uLmNoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9zaGFyZWRBY3Rpb25zKCkpO1xyXG4gICAgdGhpcy5fbWFpbGJveC5jaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUobSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhU291cmNlKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoYyA9PiBjLmlkID09PSBtLmlkKTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBjb25zdCBleHRyYSA9IGl0ZW0gYXMgSXRlbUV4dHJhO1xyXG4gICAgICAgIGlmICghZXh0cmEud29ya2luZykge1xyXG4gICAgICAgICAgaWYgKG0uZm9sZGVySWQgJiYgbS5mb2xkZXJJZCAhPT0gdGhpcy5mb2xkZXJJZClcclxuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFzc2lnbihpdGVtLCBtKTtcclxuICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgbS5tb2RlbCAmJlxyXG4gICAgICAgIHRoaXMuX2FkZChtKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWFpbGJveC5kZWxldGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoaWQgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGMgPT4gYy5pZCA9PT0gaWQpO1xyXG4gICAgICBpdGVtICYmXHJcbiAgICAgICAgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdpbmcubmV3JC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKG0gPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSB8fCBtLnVzZXJJZCAhPT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGMgPT4gYy5pZCA9PT0gbS5tb2RlbC5pZCk7XHJcbiAgICAgIGlmICghaXRlbSAmJiB0aGlzLmZvbGRlcklkID09PSBtLm1vZGVsLmZvbGRlcklkKSB7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ0l0ZW1zW20ubW9kZWwuaWRdID0gb2YobS5tb2RlbCBhcyBSZWNpcGllbnRNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5fYWRkKG0ubW9kZWwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2luZy51cGRhdGUkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUobSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhU291cmNlKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoYyA9PiBjLmlkID09PSBtLm1vZGVsLmlkKTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbS5mb2xkZXJJZCA9PT0gbS5tb2RlbC5mb2xkZXJJZCkge1xyXG4gICAgICAgICAgYXNzaWduKGl0ZW0sIG0ubW9kZWwpO1xyXG4gICAgICAgICAgdGhpcy5fcGVuZGluZ0l0ZW1zW20ubW9kZWwuaWRdID0gb2YoaXRlbSBhcyBSZWNpcGllbnRNb2RlbCk7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZWRFbGVtZW50ID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2luZy5kZWxldGUkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUobSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGMgPT4gYy5pZCA9PT0gbS5pZCk7XHJcbiAgICAgIGl0ZW0gJiYgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdpbmcuY29tbWVudCQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShjID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoaSA9PiBpLmlkID09PSBjLmlkKTtcclxuICAgICAgaWYgKGl0ZW0gJiYgKGl0ZW0gYXMgUmVjaXBpZW50TW9kZWwpLmNvbW1lbnRzKVxyXG4gICAgICAgIChpdGVtIGFzIFJlY2lwaWVudE1vZGVsPGFueT4pLmNvbW1lbnRzLnB1c2goYy5tb2RlbCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2luZy52b3RlJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZChjID0+IGMuaWQgPT09IHYuaWQpO1xyXG4gICAgICBpZiAoaXRlbSAmJiAoaXRlbSBhcyBSZWNpcGllbnRNb2RlbCkuY29tbWVudHMpIHtcclxuICAgICAgICBjb25zdCBjb21tZW50ID0gKGl0ZW0gYXMgUmVjaXBpZW50TW9kZWw8YW55PikuY29tbWVudHMuZmluZChjID0+IGMuaWQgPT09IHYuY29tbWVudElkKTtcclxuICAgICAgICBjb21tZW50LnZvdGVzID0gdi52b3RlcztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zZXNzaW9uLmxvYWRlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2goKSk7XHJcbiAgICB0aGlzLl9sb2FkaW5nJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCkpLlxyXG4gICAgICBzdWJzY3JpYmUoZSA9PiB0aGlzLmxvYWRpbmcgPSBlKTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoXzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5fY29sdW1ucygpO1xyXG4gICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG4gIGdldCBmb2xkZXIoKTogRm9sZGVyIHtcclxuICAgIHJldHVybiB0aGlzLmZvbGRlcklkID9cclxuICAgICAgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmZvbGRlcnMuXHJcbiAgICAgICAgZmluZChmID0+IGYubmFtZSA9PT0gdGhpcy5mb2xkZXJJZCkgOiBudWxsO1xyXG4gIH1cclxuICAvL2Ryb3AoZXZ0OiBDZGtEcmFnRHJvcDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICAvLyAgKGV2dC5wcmV2aW91c0NvbnRhaW5lci5pZCA9PT0gJ3RhZ3MnKSAmJlxyXG4gIC8vICAgIHRoaXMudGFnKGV2dC5jdXJyZW50SW5kZXgsIGV2dC5pdGVtLmRhdGEpO1xyXG4gIC8vfVxyXG4gIGRyYWdTdGFydGVkKGV2ZW50OiBhbnkpIHtcclxuICB9XHJcbiAgdG9nZ2xlUmVhZChpdGVtOiBSZWNpcGllbnRNb2RlbCkge1xyXG4gICAgdGhpcy5fbWFpbGJveC5yZWFkKGl0ZW0uaWQsICFpdGVtLnJlYWQsIGl0ZW0uZm9sZGVySWQsIGl0ZW0ucmVjZWl2ZWQpLlxyXG4gICAgICBzdWJzY3JpYmUoKCkgPT4gaXRlbS5yZWFkID0gIWl0ZW0ucmVhZClcclxuICB9XHJcbiAgc2VsZWN0KGlkOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50ICYmIHRoaXMuc2VsZWN0ZWRFbGVtZW50LmlkID09PSBpZCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoaSA9PiBpLmlkID09PSBpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRhZyhjdXJyZW50SW5kZXg6IG51bWJlciwgdGFnOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFTb3VyY2Uuc29ydERhdGEodGhpcy5kYXRhU291cmNlLmRhdGEsIHRoaXMuc29ydCksXHJcbiAgICAgIG1haWwgPSBkYXRhW3RoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IucGFnZUluZGV4ICogdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5wYWdlU2l6ZSArIGN1cnJlbnRJbmRleF07XHJcbiAgICB0aGlzLl9yZXRyaWV2ZShtYWlsKS5zdWJzY3JpYmUoaXRlbSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLnRhZ3MgJiYgaXRlbS50YWdzLmluZGV4T2YodGFnKSA+IC0xKSByZXR1cm47XHJcbiAgICAgIHRoaXMuX21haWxib3gudGFncyhtYWlsLmlkLCBpdGVtLnRhZ3MpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFpdGVtLnRhZ3MpIGl0ZW0udGFncyA9IFt0YWddO1xyXG4gICAgICAgIGVsc2UgaXRlbS50YWdzLnB1c2godGFnKVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBvcGVuKGl0ZW06IFJlY2lwaWVudE1vZGVsPGFueT4sIF86IEV2ZW50KSB7XHJcbiAgICB0aGlzLl9yZXRyaWV2ZShpdGVtKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PlxyXG4gICAgICAgIHRoaXMub25vcGVuLm5leHQoaXRlbSksXHJcbiAgICAgIGVycm9yOiAoKSA9PiB0aGlzLl9zYi5lcnJvcigpXHJcbiAgICB9KTtcclxuICB9XHJcbiAgdmlldyhpdGVtOiBSZWNpcGllbnRNb2RlbDxhbnk+LCBldnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLl9yZXRyaWV2ZShpdGVtKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PlxyXG4gICAgICAgIHRoaXMub252aWV3Lm5leHQoaXRlbSksXHJcbiAgICAgIGVycm9yOiAoKSA9PiB0aGlzLl9zYi5lcnJvcigpXHJcbiAgICB9KTtcclxuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMuX3BlbmRpbmdJdGVtcyA9IHt9O1xyXG4gICAgdGhpcy5fbG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHJldHVybiB0aGlzLl9tYWlsYm94LmZpbmRBbGwoeyAuLi50aGlzLmZpbHRlcnMsIGZvbGRlcklkOiB0aGlzLmZvbGRlcklkLCB0eXBlOiB0aGlzLmZpbHRlclR5cGUgfSwgeyB0YWtlOiBUQUtFIH0pLlxyXG4gICAgICBwaXBlKGZpbmFsaXplKCgpID0+XHJcbiAgICAgICAgdGhpcy5fbG9hZGluZyQubmV4dChmYWxzZSlcclxuICAgICAgKSkuXHJcbiAgICAgIHN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShyKTtcclxuICAgICAgICAgIHRoaXMuc29ydC5hY3RpdmUgPSB0aGlzLnNvcnRpbmc7XHJcbiAgICAgICAgICB0aGlzLnNvcnQuc3RhcnQgPSB0aGlzLmRpcmVjdGlvbiBhcyBhbnk7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA+IDAgJiYgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XHJcbiAgICAgICAgfSwgZXJyb3I6ICgpID0+XHJcbiAgICAgICAgICB0aGlzLl9zYi5lcnJvcigpXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9ncm91cChkYXRhOiBIZWFkZXJNb2RlbFtdKSB7XHJcbiAgICBjb25zdCBncm91cHMgPSB7fTtcclxuICAgIGRhdGEuZm9yRWFjaChpID0+IHtcclxuICAgICAgaWYgKCFncm91cHNbaS5kb2N1bWVudElkXSlcclxuICAgICAgICBncm91cHNbaS5kb2N1bWVudElkXSA9IFtpXTtcclxuICAgICAgZWxzZSAoZ3JvdXBzW2kuZG9jdW1lbnRJZF0gYXMgSGVhZGVyTW9kZWxbXSkucHVzaChpKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgaXNHcm91cChfLCBpdGVtKSB7XHJcbiAgfVxyXG4gIHNvcnREYXRhKCkge1xyXG4gICAgdGhpcy5zb3J0aW5nID0gdGhpcy5zb3J0LmFjdGl2ZTtcclxuICAgIHRoaXMuZGlyZWN0aW9uID0gdGhpcy5zb3J0LmRpcmVjdGlvbjtcclxuICB9XHJcbiAgaXNBbGxEcmFmdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggJiYgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQuZXZlcnkobSA9PiBtLmRyYWZ0KTtcclxuICB9XHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICB9XHJcbiAgbWFzdGVyVG9nZ2xlKCkge1xyXG4gICAgdGhpcy5pc0FsbFNlbGVjdGVkKCkgP1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpIDpcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcclxuICB9XHJcbiAgZmxhZyhpdGVtOiBIZWFkZXJNb2RlbCwgZXZ0OiBFdmVudCkge1xyXG4gICAgY29uc3QgZXh0cmEgPSBpdGVtIGFzIEl0ZW1FeHRyYTtcclxuICAgIGV4dHJhLndvcmtpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fbWFpbGJveC5mbGFnKGl0ZW0uaWQsICFpdGVtLmZsYWcpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICBpdGVtLmZsYWcgPSAhaXRlbS5mbGFnO1xyXG4gICAgICAgIGV4dHJhLndvcmtpbmcgPSBmYWxzZTtcclxuICAgICAgfSwgZXJyb3I6ICgpID0+IGV4dHJhLndvcmtpbmcgPSBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIGdldCBzb3J0aW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NvcnRpbmcnKTtcclxuICB9XHJcbiAgc2V0IHNvcnRpbmcodmFsdWU6IHN0cmluZykge1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NvcnRpbmcnLCB2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBkaXJlY3Rpb24oKTogU29ydERpcmVjdGlvbiB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RpcmVjdGlvbicpIGFzIFNvcnREaXJlY3Rpb24gfHwgJ2Rlc2MnO1xyXG4gIH1cclxuICBzZXQgZGlyZWN0aW9uKHZhbHVlOiBTb3J0RGlyZWN0aW9uKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGlyZWN0aW9uJywgdmFsdWUpO1xyXG4gIH1cclxuICBzdWJtaXRBbGwoKSB7XHJcbiAgICB0aGlzLl9mb3JFYWNoKGkgPT4gdGhpcy5fbWFpbGJveC5zdWJtaXQoaS5pZCwgaS52ZXJzaW9uLCBpLmZvcm1JZCkucGlwZSh0YXAoKCkgPT4gdGhpcy5kYXRhU291cmNlLmRhdGEucmVtb3ZlKGkpKSksICdTdWJtaXRFcnInKS5cclxuICAgICAgc3Vic2NyaWJlKGlzID0+IGlzLmxlbmd0aCA+IDEgPyB0aGlzLl9zYi50b2FzdChcclxuICAgICAgICAnU3VibWl0dGVkTWFueScsIGlzLmxlbmd0aCkgOlxyXG4gICAgICAgIHRoaXMuX3NiLnRvYXN0KCdTdWJtaXR0ZWQnLCBpc1swXS5udW1iZXIpKTtcclxuICB9XHJcbiAgZGlzY2FyZEFsbCgpIHtcclxuICAgIHRoaXMuX3NiLmFzaygnRGlzY2FyZEFzaycsICdEaXNjYXJkJywge1xyXG4gICAgICBjb2xvcjogJ3dhcm4nLFxyXG4gICAgICBvazogJ0Rpc2NhcmQnXHJcbiAgICB9KS5zdWJzY3JpYmUob2sgPT4gb2sgJiZcclxuICAgICAgdGhpcy5fZm9yRWFjaChpID0+IHRoaXMuX21haWxib3guZGVsZXRlKGkuaWQpLnBpcGUodGFwKCgpID0+IHRoaXMuZGF0YVNvdXJjZS5kYXRhLnJlbW92ZShpKSkpLCAnRXJyJykuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuICB0b2dnbGVFeHBhbmRlZChpdGVtOiBIZWFkZXJNb2RlbCwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRlZEVsZW1lbnQgIT0gaXRlbSkge1xyXG4gICAgICB0aGlzLl9yZXRyaWV2ZShpdGVtKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIC8vcGxheUF1ZGlvKCduYXZpZ2F0aW9uX2hvdmVyLXRhcCcpO1xyXG4gICAgICAgICAgdGhpcy5leHBhbmRlZEVsZW1lbnQgPSBpdGVtO1xyXG4gICAgICAgIH0sIGVycm9yOiAoKSA9PiB0aGlzLl9zYi5lcnJvcigpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmV4cGFuZGVkRWxlbWVudCA9IG51bGw7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogZ2V0IGZ1bGwgbWVzYWdlIGJvZHkgZWl0aGVyIGZyb20gY2FjaGUgb3IgbmV0d29ya1xyXG4gICAqIEBwYXJhbSBpdGVtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmV0cmlldmUoaXRlbTogSGVhZGVyTW9kZWwpOiBPYnNlcnZhYmxlPFJlY2lwaWVudE1vZGVsPGFueT4+IHtcclxuICAgIGlmICh0aGlzLl9wZW5kaW5nSXRlbXNbaXRlbS5pZF0pXHJcbiAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nSXRlbXNbaXRlbS5pZF07XHJcbiAgICBlbHNlIHtcclxuICAgICAgKGl0ZW0gYXMgSXRlbUV4dHJhKS5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fbG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdJdGVtc1tpdGVtLmlkXSA9XHJcbiAgICAgICAgdGhpcy5fbWFpbGJveC5nZXQoaXRlbS5pZCwgaXRlbS5yZWFkKS5waXBlKGZpcnN0KCksIG1hcChtID0+IE9iamVjdC5hc3NpZ24oaXRlbSwgbSkpLFxyXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAoaXRlbSBhcyBJdGVtRXh0cmEpLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9KSwgc2hhcmVSZXBsYXkoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NoYXJlZEFjdGlvbnMoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhdGhpcy5pc0FsbERyYWZ0KCkpIHtcclxuICAgICAgdGhpcy5zaGFyZWRBY3Rpb25zID0gW107XHJcbiAgICAgIGZvcmtKb2luKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLm1hcChpID0+IHRoaXMuX3JldHJpZXZlKGkpKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAobTogUmVjaXBpZW50TW9kZWw8YW55PltdKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIW1bMF0uYWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG1bMF0uYWN0aW9ucy5zbGljZSgpO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtID0gbVtpXTtcclxuICAgICAgICAgICAgaWYgKCFpdGVtLmFjdGlvbnMpXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFjdGlvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAoaXRlbS5hY3Rpb25zLmluZGV4T2YoYWN0aW9uc1tqXSkgPCAwKVxyXG4gICAgICAgICAgICAgICAgYWN0aW9ucy5zcGxpY2UoaiwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2hhcmVkQWN0aW9ucyA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5hY3Rpb25zLmZpbHRlcihhID0+IGFjdGlvbnMuaW5kZXhPZihhLm5hbWUpID4gLTEgJiYgKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gMSB8fCBhLm11bHRpcGxlICE9PSBmYWxzZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuc2hhcmVkQWN0aW9ucyA9IFtdO1xyXG4gIH1cclxuICBjb3B5KGl0ZW06IFJlY2lwaWVudE1vZGVsKSB7XHJcbiAgICB0aGlzLl9tYWlsYm94LmNvcHkoaXRlbS5kb2N1bWVudElkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiBpID0+IHtcclxuICAgICAgICB0aGlzLl9zYi50b2FzdCgnQ29waWVkJywgaS5udW1iZXIgfHwgZm9ybVRpdGxlKGl0ZW0uZm9ybUlkKSk7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnbWFpbGJveC9pJywgaS5pZC5lbmNvZGVJZCgpXSwge1xyXG4gICAgICAgICAgc3RhdGU6IHsgaXRlbTogaSB9LFxyXG4gICAgICAgICAgcG9saWN5OiBPcGVuUG9saWN5LkNsZWFyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sIGVycm9yOiAoKSA9PiB0aGlzLl9zYi5lcnJvcigpXHJcbiAgICB9KTtcclxuICAgIGZ1bmN0aW9uIGZvcm1UaXRsZShuYW1lKSB7XHJcbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZm9ybXMuZmluZChmID0+IGYubmFtZSA9PT0gbmFtZSk7XHJcbiAgICAgIHJldHVybiBmb3JtLnRpdGxlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICogZXhlY3V0ZSBmdW5jdGlvbiBwZXIgc2VsZWN0ZWQgaXRlbVxyXG4gKiBAcGFyYW0gZm5cclxuICogQHBhcmFtIGVycm9yXHJcbiAqL1xyXG4gIHByaXZhdGUgX2ZvckVhY2goZm46IChpdGVtOiBIZWFkZXJNb2RlbCkgPT4gT2JzZXJ2YWJsZTxhbnk+LCBlcnJvcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZWNpcGllbnRNb2RlbFtdPiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLnNsaWNlKCk7XHJcbiAgICBjb25zdCBlcnJvcnMgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICBlcnJvcnMucGlwZSgpLnN1YnNjcmliZShtID0+IHRoaXMuX3NiLmVycm9yU3RyaW5nKG0pKTtcclxuICAgIGNvbnN0IHByb21pc2VzID0gaXRlbXMubWFwKG0gPT4gZm4obSkucGlwZShjYXRjaEVycm9yKChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgICBzd2l0Y2ggKGUuc3RhdHVzKSB7XHJcbiAgICAgICAgY2FzZSA0MDQ6XHJcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRXJyJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQwNjpcclxuICAgICAgICAgIG1lc3NhZ2UgPSBlLmVycm9yO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0MDk6XHJcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnVmVyc2lvbkVycicsIG0ubnVtYmVyKTtcclxuICAgICAgICAgIGFzc2lnbihtLCBlLmVycm9yKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5fdHJhbnNsYXRlLmdldChlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgZXJyb3JzLm5leHQobWVzc2FnZSk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgfSksIGZpbmFsaXplKCgpID0+IChtIGFzIEl0ZW1FeHRyYSkud29ya2luZyA9IGZhbHNlKSkpO1xyXG4gICAgcmV0dXJuIGZvcmtKb2luKHByb21pc2VzKS5waXBlKHRhcCgoKSA9PiB7XHJcbiAgICAgIGVycm9ycy51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gJyc7XHJcbiAgICB9KSwgbWFwKCgpID0+IGl0ZW1zIGFzIGFueSkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9hZGQobTogUmVjaXBpZW50TW9kZWw8YW55Pikge1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEuc3BsaWNlKDAsIDAsIG0pO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlKGl0ZW06IEhlYWRlck1vZGVsKSB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChpdGVtKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLnJlbW92ZShpdGVtKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAnJztcclxuICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29sdW1ucygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBjb2x1bW5zID0gWydzZWxlY3QnXTtcclxuICAgIGlmICh0aGlzLmZvbGRlciAmJiB0aGlzLmZvbGRlci5jb2x1bW5zKVxyXG4gICAgICB0aGlzLl9hcHBlbmRjb2x1bW5zKHRoaXMuZm9sZGVyLmNvbHVtbnMsIGNvbHVtbnMpO1xyXG4gICAgZWxzZSBpZiAoIXRoaXMuZm9sZGVyKSB7XHJcbiAgICAgIGNvbnN0IGZvbGRlciA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5mb2xkZXJzLmZpbmQoZiA9PiBmLm5hbWUgPT09ICdmYXYnKTtcclxuICAgICAgaWYgKGZvbGRlciAmJiBmb2xkZXIuY29sdW1ucylcclxuICAgICAgICB0aGlzLl9hcHBlbmRjb2x1bW5zKGZvbGRlci5jb2x1bW5zLCBjb2x1bW5zKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29sdW1ucy5wdXNoKCdudW1iZXInKTtcclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGUpIHtcclxuICAgICAgICAgIGNvbHVtbnMucHVzaCgnc3ViamVjdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb2x1bW5zLnB1c2goJ3ZhbHVlJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbmZpZy5mb2xkZXJzICYmIHRoaXMuX2NvbmZpZy5mb2xkZXJzLmNvbHVtbnMpXHJcbiAgICAgIHRoaXMuX2FwcGVuZGNvbHVtbnModGhpcy5fY29uZmlnLmZvbGRlcnMuY29sdW1ucywgY29sdW1ucyk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29sdW1ucy5wdXNoKCdudW1iZXInKTtcclxuICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlKSB7XHJcbiAgICAgICAgY29sdW1ucy5wdXNoKCdzdWJqZWN0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgY29sdW1ucy5wdXNoKCd2YWx1ZScpO1xyXG4gICAgfVxyXG4gICAgY29sdW1ucy5wdXNoKCdvcHRpb25zJyk7XHJcbiAgICByZXR1cm4gY29sdW1ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FwcGVuZGNvbHVtbnMoc291cmNlOiBGb2xkZXJDb2x1bW5bXSwgY29sdW1uczogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuY3VzdG9tQ29sdW1ucyA9IFtdO1xyXG4gICAgc291cmNlLmZvckVhY2goYyA9PiB7XHJcbiAgICAgIGlmIChIRUFERVJfQ09MVU1OX05BTUVTLmluZGV4T2YoYy5uYW1lKSA+IC0xKVxyXG4gICAgICAgIGNvbHVtbnMucHVzaChjLm5hbWUpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXN0b21Db2x1bW5zLnB1c2goYyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbmRBbGwoYWN0aW9uOiBzdHJpbmcsIGFyZ3M6IGFueSkge1xyXG4gICAgY29uc3QgcGFyYW1zID0gcXVlcnlQYXJhbXMoYXJncyk7XHJcbiAgICB0aGlzLl9mb3JFYWNoKGkgPT5cclxuICAgICAgdGhpcy5fbWFpbGJveC5zZW5kKGkuaWQsIGkudmVyc2lvbiwgaS5mb3JtSWQsIG51bGwsIGFjdGlvbiwgcGFyYW1zLCBpLnJlYWQsIGkuZm9sZGVySWQsIGkucmVjZWl2ZWQpLlxyXG4gICAgICAgIHBpcGUodGFwKCgpID0+IHtcclxuICAgICAgICAgIGlmIChpLmZvbGRlcklkICE9PSB0aGlzLmZvbGRlcklkKSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5yZW1vdmUoaSlcclxuICAgICAgICB9KSksICdTZW5kRXJyJykuXHJcbiAgICAgIHN1YnNjcmliZShlID0+IHtcclxuICAgICAgICBpZiAoZS5sZW5ndGggPiAxKSB0aGlzLl9zYi50b2FzdCgnU2VudE1hbnknLCBlLmxlbmd0aC50b1N0cmluZygpLFxyXG4gICAgICAgICAgdGhpcy5fYWN0aW9uQWRqZWN0aXZlKGFjdGlvbiwgdHJ1ZSkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgb3JpZ2luID0gZVswXS5yZWNpcGllbnRzLmZpbHRlcihyID0+IHIub3JpZ2luSWQgPT09IGVbMF0uaWQpO1xyXG4gICAgICAgICAgaWYgKG9yaWdpbi5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuX2FjY291bnRzLmdldEFsbChvcmlnaW4ubWFwKHIgPT4gci51c2VySWQpKS5zdWJzY3JpYmUodSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuX3NiLnRvYXN0KCdTZW50VG8nLCBlWzBdLm51bWJlcixcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FjdGlvbkFkamVjdGl2ZShhY3Rpb24pLCB0aGlzLl90cmFuc2xhdGUuam9pbih1Lm1hcCh1ID0+IHUubmFtZSkpKSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuX3NiLnRvYXN0KCdTZW50JywgZVswXS5udW1iZXIsXHJcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aW9uQWRqZWN0aXZlKGFjdGlvbikpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWN0aW9uQWRqZWN0aXZlKG5hbWU6IHN0cmluZywgcGx1cmFsPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSBuYW1lKTtcclxuICAgIHJldHVybiAoKHBsdXJhbCA/IChhY3Rpb24uYWRqZWN0aXZlUGx1cmFsIHx8IGFjdGlvbi5hZGplY3RpdmUpIDogYWN0aW9uLmFkamVjdGl2ZSkgfHwgYWN0aW9uLnRpdGxlKS50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG5mdW5jdGlvbiBhc3NpZ24obW9kZWwxOiBIZWFkZXJNb2RlbCwgbW9kZWwyOiBIZWFkZXJNb2RlbCkge1xyXG4gIE9iamVjdC5hc3NpZ24obW9kZWwxLCBtb2RlbDIpO1xyXG59XHJcbiIsIjxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJxdWVyeVwiIFtzdHlsZS52aXNpYmlsaXR5XT1cImxvYWRpbmcgPyAndmlzaWJsZSc6J2hpZGRlbidcIj48L21hdC1wcm9ncmVzcy1iYXI+XG5AaWYgKGRhdGFTb3VyY2U/LmRhdGEubGVuZ3RoID09PSAwKSB7XG4gIDxiaXpkb2Mtbm9uZSB0aXRsZT1cIk5vTWVzc2FnZXNcIiBbc3VidGl0bGVdPVwiIWlzTW9iaWxlICYmIGZvbGRlcklkID09PSBEUkFGVCA/ICdBbHROJyA6IG51bGxcIiBpY29uPVwibWFpbF9vdXRsaW5lXCI+PC9iaXpkb2Mtbm9uZT5cbn1cbjxtYXQtdGFibGUgY2RrRHJvcExpc3QgY2xhc3M9XCJkYXRhLXRhYmxlXCJcbiAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiaXNNb2JpbGVcIlxuICBbY2RrRHJvcExpc3REYXRhXT1cImRhdGFTb3VyY2U/LmRhdGFcIlxuICBjZGtEcm9wTGlzdENvbm5lY3RlZFRvPVwiZm9sZGVyc1wiXG4gIGNka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXG4gIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBtYXRTb3J0IG11bHRpVGVtcGxhdGVEYXRhUm93cyAobWF0U29ydENoYW5nZSk9XCJzb3J0RGF0YSgpXCJcbiAgaWQ9XCJicm93c2UtdGFibGVcIiBbQGxpc3RdPVwiZGF0YVNvdXJjZVwiIFtzdHlsZS5kaXNwbGF5XT1cImRhdGFTb3VyY2U/LmRhdGEubGVuZ3RoID8nJzonbm9uZSdcIj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3RcIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgPGRpdiBjbGFzcz1cIlwiPjwvZGl2PlxuICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cIiRldmVudCA/IG1hc3RlclRvZ2dsZSgpIDogbnVsbFwiIFthcmlhLWxhYmVsXT1cIidDaGVjayd8dHJhbnNsYXRlXCJcbiAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiPlxuICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIj5cbiAgICAgIDxtYXQtY2hlY2tib3ggKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIFthcmlhLWxhYmVsXT1cIidDaGVjayd8dHJhbnNsYXRlXCJcbiAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKGl0ZW0pIDogbnVsbFwiXG4gICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbi5pc1NlbGVjdGVkKGl0ZW0pXCI+XG4gICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgIDwhLS0gZHJhZyAtLT5cbiAgICAgIDwhLS08YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjZGtEcmFnSGFuZGxlXG4gICAgICAobW91c2Vkb3duKT1cImRyYWdEaXNhYmxlZCA9IGZhbHNlXCJcbiAgICAgIChtb3VzZXVwKT1cImRyYWdEaXNhYmxlZCA9IHRydWVcIlxuICAgICAgKHRvdWNoc3RhcnQpPVwiZHJhZ0Rpc2FibGVkID0gZmFsc2VcIlxuICAgICAgKHRvdWNoZW5kKT1cImRyYWdEaXNhYmxlZCA9IHRydWVcIlxuICAgICAgY2xhc3M9XCJkcmFnIGhpZGUteHNcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPlxuICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj4tLT5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQoaXRlbSwgJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidEZXRhaWxzJyB8IHRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0RldGFpbHMnIHwgdHJhbnNsYXRlXCIgY2xhc3M9XCJ0b29sXCI+PG1hdC1pY29uPnt7aXRlbSA9PSBleHBhbmRlZEVsZW1lbnQgPyAndW5mb2xkX2xlc3MnIDogJ3VuZm9sZF9tb3JlJ319PC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgPC9tYXQtY2VsbD5cbjwvbmctY29udGFpbmVyPlxuPCEtLSBOdW1iZXIgY29sdW1uIC0tPlxuPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJudW1iZXJcIj5cbiAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snTnVtYmVyJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XG4gIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPiB7e2l0ZW0ubnVtYmVyfX0gPC9tYXQtY2VsbD5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIFN1YmplY3QgY29sdW1uIC0tPlxuPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdWJqZWN0XCI+XG4gIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J1N1YmplY3QnIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS5zdWJqZWN0fX0gPC9tYXQtY2VsbD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm93bmVyXCI+XG4gIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J093bmVyJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XG4gIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPlxuICAgIEBpZiAoaXRlbS5vd25lcklkKSB7XG4gICAgICA8Yml6ZG9jLWlkZW50aXR5LW5hbWUgW2lkZW50aXR5XT1cIml0ZW0ub3duZXJJZFwiIFtieV09XCJpdGVtLm93bmVyQnlJZFwiPjwvYml6ZG9jLWlkZW50aXR5LW5hbWU+XG4gICAgfVxuICA8L21hdC1jZWxsPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbmRlclwiPlxuICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj57eydTZW5kZXInIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+XG4gICAgQGlmIChpdGVtLnNlbmRlcklkKSB7XG4gICAgICA8Yml6ZG9jLWlkZW50aXR5LW5hbWUgW2lkZW50aXR5XT1cIml0ZW0uc2VuZGVySWRcIiBbYnldPVwiaXRlbS5ieUlkXCI+PC9iaXpkb2MtaWRlbnRpdHktbmFtZT5cbiAgICB9XG4gIDwvbWF0LWNlbGw+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyZWNlaXZlZFwiPlxuICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj57eydSZWNlaXZlZCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhlYWRlci1jZWxsPlxuICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj4ge3tpdGVtLnJlY2VpdmVkIHwgYW1DYWxlbmRhcn19IDwvbWF0LWNlbGw+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyZWNlaXZlZEFnb1wiPlxuICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cInJlY2VpdmVkXCI+e3snUmVjZWl2ZWQnIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCIgW2JpemRvY1Rvb2x0aXBdPVwiaXRlbS5yZWNlaXZlZCB8IGFtQ2FsZW5kYXJcIj57e2l0ZW0ucmVjZWl2ZWQgfCBhbVRpbWVBZ299fTwvbWF0LWNlbGw+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyZXBsaWVkXCI+XG4gIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J1JlcGxpZWQnIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS5yZXBsaWVkIHwgYW1DYWxlbmRhcn19IDwvbWF0LWNlbGw+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJpc3N1ZWRcIj5cbiAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snSXNzdWVkJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XG4gIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPiB7e2l0ZW0uaXNzdWVkIHwgYW1DYWxlbmRhcn19IDwvbWF0LWNlbGw+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJpc3N1ZWRBZ29cIj5cbiAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI9XCJpc3N1ZWRcIj57eydJc3N1ZWQnIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCIgW2JpemRvY1Rvb2x0aXBdPVwiaXRlbS5pc3N1ZWQgfCBhbUNhbGVuZGFyXCI+IHt7aXRlbS5pc3N1ZWQgfCBhbVRpbWVBZ299fSA8L21hdC1jZWxsPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhdGVcIj5cbiAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI9XCJzdGF0ZUlkXCI+e3snU3RhdHVzJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj5cbiAgICA8Yml6ZG9jLXN0YXR1cyBbc3RhdGVJZF09XCJpdGVtLnN0YXRlSWRcIj48L2JpemRvYy1zdGF0dXM+XG4gIDwvbWF0LWNlbGw+XG48L25nLWNvbnRhaW5lcj5cblxuQGlmIChjdXN0b21Db2x1bW5zKSB7XG4gIEBmb3IgKGMgb2YgY3VzdG9tQ29sdW1uczsgdHJhY2sgYykge1xuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjLm5hbWVcIj5cbiAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPiB7e2MudGl0bGV9fSA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPlxuICAgICAgICBAc3dpdGNoIChjLnR5cGUpIHtcbiAgICAgICAgICBAY2FzZSAoJ0RhdGUnKSB7XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAge3tpdGVtLm1vZGVsW2MubmFtZV0gfCBhbUNhbGVuZGFyIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBjYXNlICgnRGVjaW1hbCcpIHtcbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7e2l0ZW0ubW9kZWxbYy5uYW1lXSB8IG51bWJlciB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ0Jvb2xlYW4nKSB7XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPGJpemRvYy1jaGVja2JveCBbY2hlY2tlZF09XCJpdGVtLm1vZGVsW2MubmFtZV1cIj48L2JpemRvYy1jaGVja2JveD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIHt7aXRlbS5tb2RlbFtjLm5hbWVdfX16XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L21hdC1jZWxsPlxuICAgIDwvbmctY29udGFpbmVyPlxuICB9XG59XG5cbjwhLS0gVmFsdWUgY29sdW1uIC0tPlxuPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ2YWx1ZVwiPlxuICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj57eydBbW91bnQnIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS52YWx1ZSB8IGN1cnJlbmN5IDogaXRlbS5jdXJyZW5jeUNvZGUgOiAnc3ltYm9sJyA6IGN1cnJlbmN5Rm9ybWF0fX0gPC9tYXQtY2VsbD5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIG9wdGlvbnMgY29sdW1uIC0tPlxuPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJvcHRpb25zXCI+XG4gIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+PC9tYXQtaGVhZGVyLWNlbGw+XG4gIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImZsYWcoaXRlbSwgJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidGbGFnZ2VkJ3wgdHJhbnNsYXRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlRmxhZ2dlZCcgfCB0cmFuc2xhdGVcIiBjbGFzcz1cInRvb2xcIj48bWF0LWljb24gW2NsYXNzLmRvY3VtZW50LWZsYWddPVwiaXRlbS5mbGFnXCI+e3tpdGVtLmZsYWcgPyAnc3RhcicgOiAnc3Rhcl9ib3JkZXInfX08L21hdC1pY29uPjwvYnV0dG9uPlxuICAgIEBpZiAoZW5hYmxlVmlld3MpIHtcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ2aWV3KGl0ZW0sICRldmVudClcIiBbYml6ZG9jVG9vbHRpcF09XCInSW5zaWdodCcgfCB0cmFuc2xhdGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidJbnNpZ2h0JyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwidG9vbFwiPjxtYXQtaWNvbj5kYXRhX3VzYWdlPC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICB9XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7aXRlbTogaXRlbX1cIiBbYml6ZG9jVG9vbHRpcF09XCInT3B0aW9ucycgfCB0cmFuc2xhdGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcHRpb25zJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwidG9vbCBoaWRlLXhzXCI+PG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+PC9idXR0b24+XG4gIDwvbWF0LWNlbGw+XG48L25nLWNvbnRhaW5lcj5cbjwhLS0gRXhwYW5kZWQgQ29udGVudCBDb2x1bW4gLS0+XG48bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XG4gIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgW2F0dHIuY29sc3Bhbl09XCJkaXNwbGF5ZWRDb2x1bW5zLmxlbmd0aFwiIFtAdXBkYXRlZF09XCJpdGVtID09IHVwZGF0ZWRFbGVtZW50XCJcbiAgICBbY2xhc3MucmVhZC1yb3ddPVwiaXRlbS5yZWFkXCI+XG4gICAgPGRpdiBbQGRldGFpbEV4cGFuZF09XCJpdGVtID09IGV4cGFuZGVkRWxlbWVudCA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJ1wiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cbiAgICAgIEBpZiAoaXRlbSA9PSBleHBhbmRlZEVsZW1lbnQpIHtcbiAgICAgICAgPGJpemRvYy1leHBhbmRlZC1pdGVtIFttb2RlbF09XCJpdGVtXCI+PC9iaXpkb2MtZXhwYW5kZWQtaXRlbT5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9tYXQtY2VsbD5cbjwvbmctY29udGFpbmVyPlxuPG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIj48L21hdC1oZWFkZXItcm93PlxuPG1hdC1yb3cgQGl0ZW0gW0B1cGRhdGVkXT1cIml0ZW0gPT0gdXBkYXRlZEVsZW1lbnRcIlxuICAqbWF0Um93RGVmPVwibGV0IGl0ZW07IGxldCBkYXRhSW5kZXggPSBkYXRhSW5kZXg7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgY2xhc3M9XCJlbGVtZW50LXJvd1wiXG4gIGNka0RyYWcgW2Nka0RyYWdEYXRhXT1cIml0ZW1cIlxuICBbY2RrRHJhZ0Rpc2FibGVkXT1cImRyYWdEaXNhYmxlZFwiXG4gIChjZGtEcmFnUmVsZWFzZWQpPVwiZHJhZ0Rpc2FibGVkID0gdHJ1ZVwiXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRlZC1yb3cnOiBzZWxlY3RlZEVsZW1lbnQgPT09IGl0ZW0sXHJcbiAgICAgICdleHBhbmRlZC1yb3cnOiBleHBhbmRlZEVsZW1lbnQgPT09IGl0ZW0sXHJcbiAgICAgICAgICAgJ29kZC1yb3cnOiBkYXRhSW5kZXggJSAyLFxyXG4gICAgICAncmVhZC1yb3cnOiBpdGVtLnJlYWR9XCIgbWF0UmlwcGxlXHJcbiAgKGNsaWNrKT1cIm9wZW4oaXRlbSwgJGV2ZW50KVwiPlxuICA8ZGl2ICpjZGtEcmFnUHJldmlldz5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPjxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+PC9idXR0b24+IDxzcGFuPiN7e2l0ZW0ubnVtYmVyfX08L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2ICpjZGtEcmFnUGxhY2Vob2xkZXI+XG4gICAgPCEtLSBub25lIC0tPlxuICA8L2Rpdj5cbjwvbWF0LXJvdz5cbjxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgaXRlbTsgOyBsZXQgZGF0YUluZGV4ID0gZGF0YUluZGV4OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIlxuICBjbGFzcz1cImRldGFpbC1yb3dcIiBtYXRSaXBwbGVcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VsZWN0ZWRlZC1yb3cnOiBzZWxlY3RlZEVsZW1lbnQgPT09IGl0ZW0sXHJcbiAgICAgICAgICAgJ29kZC1yb3cnOiBkYXRhSW5kZXggJSAyXHJcbiAgICAgICAgICAgfVwiPjwvbWF0LXJvdz5cclxuPC9tYXQtdGFibGU+XG48bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yIFtoaWRlUGFnZVNpemVdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCJQQUdFX1NJWkVcIiBbc3R5bGUuZGlzcGxheV09XCIhaXNNb2JpbGUgJiYgZGF0YVNvdXJjZT8uZGF0YS5sZW5ndGg+UEFHRV9TSVpFID8gJyc6J25vbmUnXCI+PC9tYXQtcGFnaW5hdG9yPlxuPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuKGl0ZW0sICRldmVudClcIj57eydPcGVuJ3x0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwidG9nZ2xlUmVhZChpdGVtKVwiPnt7KGl0ZW0ucmVhZCA/J01hcmtBc1VucmVhZCc6J01hcmtBc1JlYWQnKXx0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY29weShpdGVtKVwiPnt7J0NvcHknfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cbiJdfQ==
495
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3NlLWl0ZW1zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYnJvd3NlL2Jyb3dzZS1pdGVtcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2Jyb3dzZS9icm93c2UtaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBK0MsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBYyxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdHLE9BQU8sRUFBNkQsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBU3JILE9BQU8sRUFBZ0IsYUFBYSxFQUFFLFVBQVUsRUFBRSxN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TTtzQkFBOUIsTUFBTTt1QkFBQyxNQUFNO2dCQUNMLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRWdDLElBQUk7c0JBQXpDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDTyxTQUFTO3NCQUFuRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O0FBMGEzQyxTQUFTLE1BQU0sQ0FBQyxNQUFtQixFQUFFLE1BQW1CO0lBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBJbnB1dCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmb3JrSm9pbiwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAsIHNoYXJlUmVwbGF5LCBkZWJvdW5jZVRpbWUsIGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBGb2xkZXIsIEhlYWRlck1vZGVsLCBSZWNpcGllbnRNb2RlbCwgQWN0aW9uLCBGb2xkZXJDb2x1bW4sIERSQUZUIH0gZnJvbSAnLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBpc01vYmlsZSwgcXVlcnlQYXJhbXMgfSBmcm9tICcuLi9jb3JlL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IGV4cGFuZExpc3RJdGVtQW5pbWF0aW9uLCBpdGVtQW5pbWF0aW9uLCBsaXN0QW5pbWF0aW9uLCBsaXN0SXRlbVVwZGF0ZWRBbmltYXRpb24gfSBmcm9tICcuLi9jb3JlL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJUeXBlLCBJdGVtRXh0cmEsIE1haWxib3hTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9tYWlsYm94LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdWJTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9odWIuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1YmVTZXJ2aWNlIH0gZnJvbSAnLi4vY3ViZS9jdWJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJyb3dzZUZpbHRlckFyZ3MgfSBmcm9tICcuL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUm91dGVySW1wbCB9IGZyb20gJy4uL2NvcmUvcm91dGVyJztcclxuaW1wb3J0IHsgQml6RG9jQ29uZmlnLCBCSVpET0NfQ09ORklHLCBPcGVuUG9saWN5IH0gZnJvbSAnLi4vY29yZS9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2FjY291bnQuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgVEFLRSA9IDIwMCwgU0laRSA9IDIwLCBIRUFERVJfQ09MVU1OX05BTUVTID0gWydudW1iZXInLCAnc3ViamVjdCcsICd2YWx1ZScsICdvd25lcicsICdzZW5kZXInLCAncmVjZWl2ZWQnLCAncmVjZWl2ZWRBZ28nLCAncmVwbGllZCcsICdzdGF0ZScsICdpc3N1ZWQnLCAnaXNzdWVkQWdvJ107XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWJyb3dzZS1pdGVtcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jyb3dzZS1pdGVtcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYnJvd3NlLWl0ZW1zLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgbGlzdEFuaW1hdGlvbixcclxuICAgIGl0ZW1BbmltYXRpb24sXHJcbiAgICBleHBhbmRMaXN0SXRlbUFuaW1hdGlvbixcclxuICAgIGxpc3RJdGVtVXBkYXRlZEFuaW1hdGlvblxyXG4gIF1cclxufSlcclxuLyoqIGJyb3dzZSBpdGVtcyBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgQnJvd3NlSXRlbXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBAT3V0cHV0KCdvcGVuJykgcmVhZG9ubHkgb25vcGVuID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNpcGllbnRNb2RlbD4oKTtcclxuICBAT3V0cHV0KCd2aWV3JykgcmVhZG9ubHkgb252aWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNpcGllbnRNb2RlbD4oKTtcclxuICBASW5wdXQoKSBmb2xkZXJJZDogc3RyaW5nID0gbnVsbDtcclxuICBASW5wdXQoKSBmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlID0gbnVsbDtcclxuICBASW5wdXQoKSBmaWx0ZXJzOiBCcm93c2VGaWx0ZXJBcmdzO1xyXG5cclxuICBAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiB0cnVlIH0pIHNvcnQ6IE1hdFNvcnQ7XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxIZWFkZXJNb2RlbD47XHJcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW107XHJcbiAgY3VzdG9tQ29sdW1ucz86IEZvbGRlckNvbHVtbltdO1xyXG4gIGV4cGFuZGVkRWxlbWVudD86IEhlYWRlck1vZGVsO1xyXG4gIHVwZGF0ZWRFbGVtZW50PzogSGVhZGVyTW9kZWw7XHJcbiAgc2VsZWN0ZWRFbGVtZW50PzogSGVhZGVyTW9kZWw7XHJcbiAgc2hhcmVkQWN0aW9uczogQWN0aW9uW10gPSBbXTtcclxuICBkcmFnRGlzYWJsZWQgPSB0cnVlO1xyXG4gIHJlYWRvbmx5IFBBR0VfU0laRSA9IFNJWkU7XHJcbiAgcmVhZG9ubHkgRFJBRlQgPSBEUkFGVDtcclxuICByZWFkb25seSBjdXJyZW5jeUZvcm1hdCA9IHRoaXMuX2N1YmUuZGlnaXRzSW5mbztcclxuICByZWFkb25seSBpc01vYmlsZSA9IGlzTW9iaWxlKCk7XHJcbiAgcmVhZG9ubHkgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPEhlYWRlck1vZGVsPih0cnVlLCBbXSk7XHJcbiAgbG9hZGluZzogYm9vbGVhbjtcclxuICBwcml2YXRlIF9wZW5kaW5nSXRlbXM6IHsgW2lkOiBzdHJpbmddOiBPYnNlcnZhYmxlPFJlY2lwaWVudE1vZGVsPGFueT4+OyB9ID0ge307XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9hZGluZyQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIGVuYWJsZVZpZXdzOiBib29sZWFuO1xyXG4gIC8qKiBicm93c2UgY3RvciAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfbWFpbGJveDogTWFpbGJveFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hY2NvdW50czogQWNjb3VudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jdWJlOiBDdWJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2I6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlckltcGwsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdpbmc6IEh1YlNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEJJWkRPQ19DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogQml6RG9jQ29uZmlnKSB7XHJcbiAgICB0aGlzLmVuYWJsZVZpZXdzID0gX3Nlc3Npb24ucHJvZmlsZS52aWV3cy5sZW5ndGggPiAwO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uLmNoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9zaGFyZWRBY3Rpb25zKCkpO1xyXG4gICAgdGhpcy5fbWFpbGJveC5jaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUobSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhU291cmNlKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoYyA9PiBjLmlkID09PSBtLmlkKTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBjb25zdCBleHRyYSA9IGl0ZW0gYXMgSXRlbUV4dHJhO1xyXG4gICAgICAgIGlmICghZXh0cmEud29ya2luZykge1xyXG4gICAgICAgICAgaWYgKG0uZm9sZGVySWQgJiYgbS5mb2xkZXJJZCAhPT0gdGhpcy5mb2xkZXJJZClcclxuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFzc2lnbihpdGVtLCBtKTtcclxuICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgbS5tb2RlbCAmJlxyXG4gICAgICAgIHRoaXMuX2FkZChtKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWFpbGJveC5kZWxldGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoaWQgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGMgPT4gYy5pZCA9PT0gaWQpO1xyXG4gICAgICBpdGVtICYmXHJcbiAgICAgICAgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdpbmcubmV3JC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKG0gPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSB8fCBtLnVzZXJJZCAhPT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGMgPT4gYy5pZCA9PT0gbS5tb2RlbC5pZCk7XHJcbiAgICAgIGlmICghaXRlbSAmJiB0aGlzLmZvbGRlcklkID09PSBtLm1vZGVsLmZvbGRlcklkKSB7XHJcbiAgICAgICAgdGhpcy5fcGVuZGluZ0l0ZW1zW20ubW9kZWwuaWRdID0gb2YobS5tb2RlbCBhcyBSZWNpcGllbnRNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5fYWRkKG0ubW9kZWwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2luZy51cGRhdGUkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUobSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhU291cmNlKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoYyA9PiBjLmlkID09PSBtLm1vZGVsLmlkKTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbS5mb2xkZXJJZCA9PT0gbS5tb2RlbC5mb2xkZXJJZCkge1xyXG4gICAgICAgICAgYXNzaWduKGl0ZW0sIG0ubW9kZWwpO1xyXG4gICAgICAgICAgdGhpcy5fcGVuZGluZ0l0ZW1zW20ubW9kZWwuaWRdID0gb2YoaXRlbSBhcyBSZWNpcGllbnRNb2RlbCk7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZWRFbGVtZW50ID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2luZy5kZWxldGUkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUobSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kKGMgPT4gYy5pZCA9PT0gbS5pZCk7XHJcbiAgICAgIGl0ZW0gJiYgdGhpcy5fcmVtb3ZlKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdpbmcuY29tbWVudCQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShjID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoaSA9PiBpLmlkID09PSBjLmlkKTtcclxuICAgICAgaWYgKGl0ZW0gJiYgKGl0ZW0gYXMgUmVjaXBpZW50TW9kZWwpLmNvbW1lbnRzKVxyXG4gICAgICAgIChpdGVtIGFzIFJlY2lwaWVudE1vZGVsPGFueT4pLmNvbW1lbnRzLnB1c2goYy5tb2RlbCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2luZy52b3RlJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhU291cmNlLmRhdGEuZmluZChjID0+IGMuaWQgPT09IHYuaWQpO1xyXG4gICAgICBpZiAoaXRlbSAmJiAoaXRlbSBhcyBSZWNpcGllbnRNb2RlbCkuY29tbWVudHMpIHtcclxuICAgICAgICBjb25zdCBjb21tZW50ID0gKGl0ZW0gYXMgUmVjaXBpZW50TW9kZWw8YW55PikuY29tbWVudHMuZmluZChjID0+IGMuaWQgPT09IHYuY29tbWVudElkKTtcclxuICAgICAgICBjb21tZW50LnZvdGVzID0gdi52b3RlcztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zZXNzaW9uLmxvYWRlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2goKSk7XHJcbiAgICB0aGlzLl9sb2FkaW5nJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCkpLlxyXG4gICAgICBzdWJzY3JpYmUoZSA9PiB0aGlzLmxvYWRpbmcgPSBlKTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoXzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5fY29sdW1ucygpO1xyXG4gICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG4gIGdldCBmb2xkZXIoKTogRm9sZGVyIHtcclxuICAgIHJldHVybiB0aGlzLmZvbGRlcklkID9cclxuICAgICAgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmZvbGRlcnMuXHJcbiAgICAgICAgZmluZChmID0+IGYubmFtZSA9PT0gdGhpcy5mb2xkZXJJZCkgOiBudWxsO1xyXG4gIH1cclxuICAvL2Ryb3AoZXZ0OiBDZGtEcmFnRHJvcDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICAvLyAgKGV2dC5wcmV2aW91c0NvbnRhaW5lci5pZCA9PT0gJ3RhZ3MnKSAmJlxyXG4gIC8vICAgIHRoaXMudGFnKGV2dC5jdXJyZW50SW5kZXgsIGV2dC5pdGVtLmRhdGEpO1xyXG4gIC8vfVxyXG4gIGRyYWdTdGFydGVkKGV2ZW50OiBhbnkpIHtcclxuICB9XHJcbiAgdG9nZ2xlUmVhZChpdGVtOiBSZWNpcGllbnRNb2RlbCkge1xyXG4gICAgdGhpcy5fbWFpbGJveC5yZWFkKGl0ZW0uaWQsICFpdGVtLnJlYWQsIGl0ZW0uZm9sZGVySWQsIGl0ZW0ucmVjZWl2ZWQpLlxyXG4gICAgICBzdWJzY3JpYmUoKCkgPT4gaXRlbS5yZWFkID0gIWl0ZW0ucmVhZClcclxuICB9XHJcbiAgc2VsZWN0KGlkOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50ICYmIHRoaXMuc2VsZWN0ZWRFbGVtZW50LmlkID09PSBpZCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmQoaSA9PiBpLmlkID09PSBpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRhZyhjdXJyZW50SW5kZXg6IG51bWJlciwgdGFnOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFTb3VyY2Uuc29ydERhdGEodGhpcy5kYXRhU291cmNlLmRhdGEsIHRoaXMuc29ydCksXHJcbiAgICAgIG1haWwgPSBkYXRhW3RoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IucGFnZUluZGV4ICogdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5wYWdlU2l6ZSArIGN1cnJlbnRJbmRleF07XHJcbiAgICB0aGlzLl9yZXRyaWV2ZShtYWlsKS5zdWJzY3JpYmUoaXRlbSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLnRhZ3MgJiYgaXRlbS50YWdzLmluZGV4T2YodGFnKSA+IC0xKSByZXR1cm47XHJcbiAgICAgIHRoaXMuX21haWxib3gudGFncyhtYWlsLmlkLCBpdGVtLnRhZ3MpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFpdGVtLnRhZ3MpIGl0ZW0udGFncyA9IFt0YWddO1xyXG4gICAgICAgIGVsc2UgaXRlbS50YWdzLnB1c2godGFnKVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBvcGVuKGl0ZW06IFJlY2lwaWVudE1vZGVsPGFueT4sIF86IEV2ZW50KSB7XHJcbiAgICB0aGlzLl9yZXRyaWV2ZShpdGVtKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PlxyXG4gICAgICAgIHRoaXMub25vcGVuLm5leHQoaXRlbSksXHJcbiAgICAgIGVycm9yOiAoKSA9PiB0aGlzLl9zYi5lcnJvcigpXHJcbiAgICB9KTtcclxuICB9XHJcbiAgdmlldyhpdGVtOiBSZWNpcGllbnRNb2RlbDxhbnk+LCBldnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLl9yZXRyaWV2ZShpdGVtKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PlxyXG4gICAgICAgIHRoaXMub252aWV3Lm5leHQoaXRlbSksXHJcbiAgICAgIGVycm9yOiAoKSA9PiB0aGlzLl9zYi5lcnJvcigpXHJcbiAgICB9KTtcclxuICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMuX3BlbmRpbmdJdGVtcyA9IHt9O1xyXG4gICAgdGhpcy5fbG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHJldHVybiB0aGlzLl9tYWlsYm94LmZpbmRBbGwoeyAuLi50aGlzLmZpbHRlcnMsIGZvbGRlcklkOiB0aGlzLmZvbGRlcklkLCB0eXBlOiB0aGlzLmZpbHRlclR5cGUgfSwgeyB0YWtlOiBUQUtFIH0pLlxyXG4gICAgICBwaXBlKGZpbmFsaXplKCgpID0+XHJcbiAgICAgICAgdGhpcy5fbG9hZGluZyQubmV4dChmYWxzZSlcclxuICAgICAgKSkuXHJcbiAgICAgIHN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShyKTtcclxuICAgICAgICAgIHRoaXMuc29ydC5hY3RpdmUgPSB0aGlzLnNvcnRpbmc7XHJcbiAgICAgICAgICB0aGlzLnNvcnQuc3RhcnQgPSB0aGlzLmRpcmVjdGlvbiBhcyBhbnk7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA+IDAgJiYgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XHJcbiAgICAgICAgfSwgZXJyb3I6ICgpID0+XHJcbiAgICAgICAgICB0aGlzLl9zYi5lcnJvcigpXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9ncm91cChkYXRhOiBIZWFkZXJNb2RlbFtdKSB7XHJcbiAgICBjb25zdCBncm91cHMgPSB7fTtcclxuICAgIGRhdGEuZm9yRWFjaChpID0+IHtcclxuICAgICAgaWYgKCFncm91cHNbaS5kb2N1bWVudElkXSlcclxuICAgICAgICBncm91cHNbaS5kb2N1bWVudElkXSA9IFtpXTtcclxuICAgICAgZWxzZSAoZ3JvdXBzW2kuZG9jdW1lbnRJZF0gYXMgSGVhZGVyTW9kZWxbXSkucHVzaChpKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgaXNHcm91cChfLCBpdGVtKSB7XHJcbiAgfVxyXG4gIHNvcnREYXRhKCkge1xyXG4gICAgdGhpcy5zb3J0aW5nID0gdGhpcy5zb3J0LmFjdGl2ZTtcclxuICAgIHRoaXMuZGlyZWN0aW9uID0gdGhpcy5zb3J0LmRpcmVjdGlvbjtcclxuICB9XHJcbiAgaXNBbGxEcmFmdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggJiYgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQuZXZlcnkobSA9PiBtLmRyYWZ0KTtcclxuICB9XHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICB9XHJcbiAgbWFzdGVyVG9nZ2xlKCkge1xyXG4gICAgdGhpcy5pc0FsbFNlbGVjdGVkKCkgP1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpIDpcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcclxuICB9XHJcbiAgZmxhZyhpdGVtOiBIZWFkZXJNb2RlbCwgZXZ0OiBFdmVudCkge1xyXG4gICAgY29uc3QgZXh0cmEgPSBpdGVtIGFzIEl0ZW1FeHRyYTtcclxuICAgIGV4dHJhLndvcmtpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fbWFpbGJveC5mbGFnKGl0ZW0uaWQsICFpdGVtLmZsYWcpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICBpdGVtLmZsYWcgPSAhaXRlbS5mbGFnO1xyXG4gICAgICAgIGV4dHJhLndvcmtpbmcgPSBmYWxzZTtcclxuICAgICAgfSwgZXJyb3I6ICgpID0+IGV4dHJhLndvcmtpbmcgPSBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIGdldCBzb3J0aW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NvcnRpbmcnKTtcclxuICB9XHJcbiAgc2V0IHNvcnRpbmcodmFsdWU6IHN0cmluZykge1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NvcnRpbmcnLCB2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBkaXJlY3Rpb24oKTogU29ydERpcmVjdGlvbiB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RpcmVjdGlvbicpIGFzIFNvcnREaXJlY3Rpb24gfHwgJ2Rlc2MnO1xyXG4gIH1cclxuICBzZXQgZGlyZWN0aW9uKHZhbHVlOiBTb3J0RGlyZWN0aW9uKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGlyZWN0aW9uJywgdmFsdWUpO1xyXG4gIH1cclxuICBzdWJtaXRBbGwoKSB7XHJcbiAgICB0aGlzLl9mb3JFYWNoKGkgPT4gdGhpcy5fbWFpbGJveC5zdWJtaXQoaS5pZCwgaS52ZXJzaW9uLCBpLmZvcm1JZCkucGlwZSh0YXAoKCkgPT4gdGhpcy5kYXRhU291cmNlLmRhdGEucmVtb3ZlKGkpKSksICdTdWJtaXRFcnInKS5cclxuICAgICAgc3Vic2NyaWJlKGlzID0+IGlzLmxlbmd0aCA+IDEgPyB0aGlzLl9zYi50b2FzdChcclxuICAgICAgICAnU3VibWl0dGVkTWFueScsIGlzLmxlbmd0aCkgOlxyXG4gICAgICAgIHRoaXMuX3NiLnRvYXN0KCdTdWJtaXR0ZWQnLCBpc1swXS5udW1iZXIpKTtcclxuICB9XHJcbiAgZGlzY2FyZEFsbCgpIHtcclxuICAgIHRoaXMuX3NiLmFzaygnRGlzY2FyZEFzaycsICdEaXNjYXJkJywge1xyXG4gICAgICBjb2xvcjogJ3dhcm4nLFxyXG4gICAgICBvazogJ0Rpc2NhcmQnXHJcbiAgICB9KS5zdWJzY3JpYmUob2sgPT4gb2sgJiZcclxuICAgICAgdGhpcy5fZm9yRWFjaChpID0+IHRoaXMuX21haWxib3guZGVsZXRlKGkuaWQpLnBpcGUodGFwKCgpID0+IHRoaXMuZGF0YVNvdXJjZS5kYXRhLnJlbW92ZShpKSkpLCAnRXJyJykuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuICB0b2dnbGVFeHBhbmRlZChpdGVtOiBIZWFkZXJNb2RlbCwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRlZEVsZW1lbnQgIT0gaXRlbSkge1xyXG4gICAgICB0aGlzLl9yZXRyaWV2ZShpdGVtKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIC8vcGxheUF1ZGlvKCduYXZpZ2F0aW9uX2hvdmVyLXRhcCcpO1xyXG4gICAgICAgICAgdGhpcy5leHBhbmRlZEVsZW1lbnQgPSBpdGVtO1xyXG4gICAgICAgIH0sIGVycm9yOiAoKSA9PiB0aGlzLl9zYi5lcnJvcigpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmV4cGFuZGVkRWxlbWVudCA9IG51bGw7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogZ2V0IGZ1bGwgbWVzYWdlIGJvZHkgZWl0aGVyIGZyb20gY2FjaGUgb3IgbmV0d29ya1xyXG4gICAqIEBwYXJhbSBpdGVtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmV0cmlldmUoaXRlbTogSGVhZGVyTW9kZWwpOiBPYnNlcnZhYmxlPFJlY2lwaWVudE1vZGVsPGFueT4+IHtcclxuICAgIGlmICh0aGlzLl9wZW5kaW5nSXRlbXNbaXRlbS5pZF0pXHJcbiAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nSXRlbXNbaXRlbS5pZF07XHJcbiAgICBlbHNlIHtcclxuICAgICAgKGl0ZW0gYXMgSXRlbUV4dHJhKS5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fbG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdJdGVtc1tpdGVtLmlkXSA9XHJcbiAgICAgICAgdGhpcy5fbWFpbGJveC5nZXQoaXRlbS5pZCwgaXRlbS5yZWFkKS5waXBlKGZpcnN0KCksIG1hcChtID0+IE9iamVjdC5hc3NpZ24oaXRlbSwgbSkpLFxyXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAoaXRlbSBhcyBJdGVtRXh0cmEpLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB9KSwgc2hhcmVSZXBsYXkoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NoYXJlZEFjdGlvbnMoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhdGhpcy5pc0FsbERyYWZ0KCkpIHtcclxuICAgICAgdGhpcy5zaGFyZWRBY3Rpb25zID0gW107XHJcbiAgICAgIGZvcmtKb2luKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLm1hcChpID0+IHRoaXMuX3JldHJpZXZlKGkpKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAobTogUmVjaXBpZW50TW9kZWw8YW55PltdKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIW1bMF0uYWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG1bMF0uYWN0aW9ucy5zbGljZSgpO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtID0gbVtpXTtcclxuICAgICAgICAgICAgaWYgKCFpdGVtLmFjdGlvbnMpXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFjdGlvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAoaXRlbS5hY3Rpb25zLmluZGV4T2YoYWN0aW9uc1tqXSkgPCAwKVxyXG4gICAgICAgICAgICAgICAgYWN0aW9ucy5zcGxpY2UoaiwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2hhcmVkQWN0aW9ucyA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5hY3Rpb25zLmZpbHRlcihhID0+IGFjdGlvbnMuaW5kZXhPZihhLm5hbWUpID4gLTEgJiYgKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gMSB8fCBhLm11bHRpcGxlICE9PSBmYWxzZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuc2hhcmVkQWN0aW9ucyA9IFtdO1xyXG4gIH1cclxuICBjb3B5KGl0ZW06IFJlY2lwaWVudE1vZGVsKSB7XHJcbiAgICB0aGlzLl9tYWlsYm94LmNvcHkoaXRlbS5kb2N1bWVudElkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiBpID0+IHtcclxuICAgICAgICB0aGlzLl9zYi50b2FzdCgnQ29waWVkJywgaS5udW1iZXIgfHwgZm9ybVRpdGxlKGl0ZW0uZm9ybUlkKSk7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnbWFpbGJveC9pJywgaS5pZC5lbmNvZGVJZCgpXSwge1xyXG4gICAgICAgICAgc3RhdGU6IHsgaXRlbTogaSB9LFxyXG4gICAgICAgICAgcG9saWN5OiBPcGVuUG9saWN5LkNsZWFyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sIGVycm9yOiAoKSA9PiB0aGlzLl9zYi5lcnJvcigpXHJcbiAgICB9KTtcclxuICAgIGZ1bmN0aW9uIGZvcm1UaXRsZShuYW1lKSB7XHJcbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZm9ybXMuZmluZChmID0+IGYubmFtZSA9PT0gbmFtZSk7XHJcbiAgICAgIHJldHVybiBmb3JtLnRpdGxlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICogZXhlY3V0ZSBmdW5jdGlvbiBwZXIgc2VsZWN0ZWQgaXRlbVxyXG4gKiBAcGFyYW0gZm5cclxuICogQHBhcmFtIGVycm9yXHJcbiAqL1xyXG4gIHByaXZhdGUgX2ZvckVhY2goZm46IChpdGVtOiBIZWFkZXJNb2RlbCkgPT4gT2JzZXJ2YWJsZTxhbnk+LCBlcnJvcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZWNpcGllbnRNb2RlbFtdPiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLnNsaWNlKCk7XHJcbiAgICBjb25zdCBlcnJvcnMgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICBlcnJvcnMucGlwZSgpLnN1YnNjcmliZShtID0+IHRoaXMuX3NiLmVycm9yU3RyaW5nKG0pKTtcclxuICAgIGNvbnN0IHByb21pc2VzID0gaXRlbXMubWFwKG0gPT4gZm4obSkucGlwZShjYXRjaEVycm9yKChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICBsZXQgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgICBzd2l0Y2ggKGUuc3RhdHVzKSB7XHJcbiAgICAgICAgY2FzZSA0MDQ6XHJcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRXJyJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQwNjpcclxuICAgICAgICAgIG1lc3NhZ2UgPSBlLmVycm9yO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0MDk6XHJcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnVmVyc2lvbkVycicsIG0ubnVtYmVyKTtcclxuICAgICAgICAgIGFzc2lnbihtLCBlLmVycm9yKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBtZXNzYWdlID0gdGhpcy5fdHJhbnNsYXRlLmdldChlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgZXJyb3JzLm5leHQobWVzc2FnZSk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgfSksIGZpbmFsaXplKCgpID0+IChtIGFzIEl0ZW1FeHRyYSkud29ya2luZyA9IGZhbHNlKSkpO1xyXG4gICAgcmV0dXJuIGZvcmtKb2luKHByb21pc2VzKS5waXBlKHRhcCgoKSA9PiB7XHJcbiAgICAgIGVycm9ycy51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gJyc7XHJcbiAgICB9KSwgbWFwKCgpID0+IGl0ZW1zIGFzIGFueSkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9hZGQobTogUmVjaXBpZW50TW9kZWw8YW55Pikge1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEuc3BsaWNlKDAsIDAsIG0pO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlKGl0ZW06IEhlYWRlck1vZGVsKSB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChpdGVtKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhLnJlbW92ZShpdGVtKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAnJztcclxuICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29sdW1ucygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBjb2x1bW5zID0gWydzZWxlY3QnXTtcclxuICAgIGlmICh0aGlzLmZvbGRlciAmJiB0aGlzLmZvbGRlci5jb2x1bW5zKVxyXG4gICAgICB0aGlzLl9hcHBlbmRjb2x1bW5zKHRoaXMuZm9sZGVyLmNvbHVtbnMsIGNvbHVtbnMpO1xyXG4gICAgZWxzZSBpZiAoIXRoaXMuZm9sZGVyKSB7XHJcbiAgICAgIGNvbnN0IGZvbGRlciA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5mb2xkZXJzLmZpbmQoZiA9PiBmLm5hbWUgPT09ICdmYXYnKTtcclxuICAgICAgaWYgKGZvbGRlciAmJiBmb2xkZXIuY29sdW1ucylcclxuICAgICAgICB0aGlzLl9hcHBlbmRjb2x1bW5zKGZvbGRlci5jb2x1bW5zLCBjb2x1bW5zKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29sdW1ucy5wdXNoKCdudW1iZXInKTtcclxuICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGUpIHtcclxuICAgICAgICAgIGNvbHVtbnMucHVzaCgnc3ViamVjdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb2x1bW5zLnB1c2goJ3ZhbHVlJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuX2NvbmZpZy5mb2xkZXJzICYmIHRoaXMuX2NvbmZpZy5mb2xkZXJzLmNvbHVtbnMpXHJcbiAgICAgIHRoaXMuX2FwcGVuZGNvbHVtbnModGhpcy5fY29uZmlnLmZvbGRlcnMuY29sdW1ucywgY29sdW1ucyk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29sdW1ucy5wdXNoKCdudW1iZXInKTtcclxuICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlKSB7XHJcbiAgICAgICAgY29sdW1ucy5wdXNoKCdzdWJqZWN0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgY29sdW1ucy5wdXNoKCd2YWx1ZScpO1xyXG4gICAgfVxyXG4gICAgY29sdW1ucy5wdXNoKCdvcHRpb25zJyk7XHJcbiAgICByZXR1cm4gY29sdW1ucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FwcGVuZGNvbHVtbnMoc291cmNlOiBGb2xkZXJDb2x1bW5bXSwgY29sdW1uczogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuY3VzdG9tQ29sdW1ucyA9IFtdO1xyXG4gICAgc291cmNlLmZvckVhY2goYyA9PiB7XHJcbiAgICAgIGlmIChIRUFERVJfQ09MVU1OX05BTUVTLmluZGV4T2YoYy5uYW1lKSA+IC0xKVxyXG4gICAgICAgIGNvbHVtbnMucHVzaChjLm5hbWUpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXN0b21Db2x1bW5zLnB1c2goYyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbmRBbGwoYWN0aW9uOiBzdHJpbmcsIGFyZ3M6IGFueSkge1xyXG4gICAgY29uc3QgcGFyYW1zID0gcXVlcnlQYXJhbXMoYXJncyk7XHJcbiAgICB0aGlzLl9mb3JFYWNoKGkgPT5cclxuICAgICAgdGhpcy5fbWFpbGJveC5zZW5kKGkuaWQsIGkudmVyc2lvbiwgaS5mb3JtSWQsIG51bGwsIGFjdGlvbiwgcGFyYW1zLCBpLnJlYWQsIGkuZm9sZGVySWQsIGkucmVjZWl2ZWQpLlxyXG4gICAgICAgIHBpcGUodGFwKCgpID0+IHtcclxuICAgICAgICAgIGlmIChpLmZvbGRlcklkICE9PSB0aGlzLmZvbGRlcklkKSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5yZW1vdmUoaSlcclxuICAgICAgICB9KSksICdTZW5kRXJyJykuXHJcbiAgICAgIHN1YnNjcmliZShlID0+IHtcclxuICAgICAgICBpZiAoZS5sZW5ndGggPiAxKSB0aGlzLl9zYi50b2FzdCgnU2VudE1hbnknLCBlLmxlbmd0aC50b1N0cmluZygpLFxyXG4gICAgICAgICAgdGhpcy5fYWN0aW9uQWRqZWN0aXZlKGFjdGlvbiwgdHJ1ZSkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgb3JpZ2luID0gZVswXS5yZWNpcGllbnRzLmZpbHRlcihyID0+IHIub3JpZ2luSWQgPT09IGVbMF0uaWQpO1xyXG4gICAgICAgICAgaWYgKG9yaWdpbi5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuX2FjY291bnRzLmdldEFsbChvcmlnaW4ubWFwKHIgPT4gci51c2VySWQpKS5zdWJzY3JpYmUodSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuX3NiLnRvYXN0KCdTZW50VG8nLCBlWzBdLm51bWJlcixcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FjdGlvbkFkamVjdGl2ZShhY3Rpb24pLCB0aGlzLl90cmFuc2xhdGUuam9pbih1Lm1hcCh1ID0+IHUubmFtZSkpKSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuX3NiLnRvYXN0KCdTZW50JywgZVswXS5udW1iZXIsXHJcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aW9uQWRqZWN0aXZlKGFjdGlvbikpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWN0aW9uQWRqZWN0aXZlKG5hbWU6IHN0cmluZywgcGx1cmFsPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSBuYW1lKTtcclxuICAgIHJldHVybiAoKHBsdXJhbCA/IChhY3Rpb24uYWRqZWN0aXZlUGx1cmFsIHx8IGFjdGlvbi5hZGplY3RpdmUpIDogYWN0aW9uLmFkamVjdGl2ZSkgfHwgYWN0aW9uLnRpdGxlKS50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG5mdW5jdGlvbiBhc3NpZ24obW9kZWwxOiBIZWFkZXJNb2RlbCwgbW9kZWwyOiBIZWFkZXJNb2RlbCkge1xyXG4gIE9iamVjdC5hc3NpZ24obW9kZWwxLCBtb2RlbDIpO1xyXG59XHJcbiIsIjxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJxdWVyeVwiIFtzdHlsZS52aXNpYmlsaXR5XT1cImxvYWRpbmcgPyAndmlzaWJsZSc6J2hpZGRlbidcIj48L21hdC1wcm9ncmVzcy1iYXI+XHJcbkBpZiAoZGF0YVNvdXJjZT8uZGF0YS5sZW5ndGggPT09IDApIHtcclxuICA8Yml6ZG9jLW5vbmUgdGl0bGU9XCJOb01lc3NhZ2VzXCIgW3N1YnRpdGxlXT1cIiFpc01vYmlsZSAmJiBmb2xkZXJJZCA9PT0gRFJBRlQgPyAnQWx0TicgOiBudWxsXCIgaWNvbj1cIm1haWxfb3V0bGluZVwiPjwvYml6ZG9jLW5vbmU+XHJcbn1cclxuPG1hdC10YWJsZSBjZGtEcm9wTGlzdCBjbGFzcz1cImRhdGEtdGFibGVcIlxyXG4gIFtjZGtEcm9wTGlzdERpc2FibGVkXT1cImlzTW9iaWxlXCJcclxuICBbY2RrRHJvcExpc3REYXRhXT1cImRhdGFTb3VyY2U/LmRhdGFcIlxyXG4gIGNka0Ryb3BMaXN0Q29ubmVjdGVkVG89XCJmb2xkZXJzXCJcclxuICBjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZFxyXG4gIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBtYXRTb3J0IG11bHRpVGVtcGxhdGVEYXRhUm93cyAobWF0U29ydENoYW5nZSk9XCJzb3J0RGF0YSgpXCJcclxuICBpZD1cImJyb3dzZS10YWJsZVwiIFtAbGlzdF09XCJkYXRhU291cmNlXCIgW3N0eWxlLmRpc3BsYXldPVwiZGF0YVNvdXJjZT8uZGF0YS5sZW5ndGggPycnOidub25lJ1wiPlxyXG4gIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XHJcbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+PC9kaXY+XHJcbiAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIiBbYXJpYS1sYWJlbF09XCInQ2hlY2snfHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+XHJcbiAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgPC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiPlxyXG4gICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbYXJpYS1sYWJlbF09XCInQ2hlY2snfHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKGl0ZW0pIDogbnVsbFwiXHJcbiAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbSlcIj5cclxuICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgIDwhLS0gZHJhZyAtLT5cclxuICAgICAgPCEtLTxidXR0b24gbWF0LWljb24tYnV0dG9uIGNka0RyYWdIYW5kbGVcclxuICAgICAgKG1vdXNlZG93bik9XCJkcmFnRGlzYWJsZWQgPSBmYWxzZVwiXHJcbiAgICAgIChtb3VzZXVwKT1cImRyYWdEaXNhYmxlZCA9IHRydWVcIlxyXG4gICAgICAodG91Y2hzdGFydCk9XCJkcmFnRGlzYWJsZWQgPSBmYWxzZVwiXHJcbiAgICAgICh0b3VjaGVuZCk9XCJkcmFnRGlzYWJsZWQgPSB0cnVlXCJcclxuICAgICAgY2xhc3M9XCJkcmFnIGhpZGUteHNcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPlxyXG4gICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+LS0+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQoaXRlbSwgJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidEZXRhaWxzJyB8IHRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0RldGFpbHMnIHwgdHJhbnNsYXRlXCIgY2xhc3M9XCJ0b29sXCI+PG1hdC1pY29uPnt7aXRlbSA9PSBleHBhbmRlZEVsZW1lbnQgPyAndW5mb2xkX2xlc3MnIDogJ3VuZm9sZF9tb3JlJ319PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8L21hdC1jZWxsPlxyXG48L25nLWNvbnRhaW5lcj5cclxuPCEtLSBOdW1iZXIgY29sdW1uIC0tPlxyXG48bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm51bWJlclwiPlxyXG4gIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7J051bWJlcicgfCB0cmFuc2xhdGV9fTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPiB7e2l0ZW0ubnVtYmVyfX0gPC9tYXQtY2VsbD5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48IS0tIFN1YmplY3QgY29sdW1uIC0tPlxyXG48bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInN1YmplY3RcIj5cclxuICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj57eydTdWJqZWN0JyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS5zdWJqZWN0fX0gPC9tYXQtY2VsbD5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm93bmVyXCI+XHJcbiAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snT3duZXInIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cclxuICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj5cclxuICAgIEBpZiAoaXRlbS5vd25lcklkKSB7XHJcbiAgICAgIDxiaXpkb2MtaWRlbnRpdHktbmFtZSBbaWRlbnRpdHldPVwiaXRlbS5vd25lcklkXCIgW2J5XT1cIml0ZW0ub3duZXJCeUlkXCI+PC9iaXpkb2MtaWRlbnRpdHktbmFtZT5cclxuICAgIH1cclxuICA8L21hdC1jZWxsPlxyXG48L25nLWNvbnRhaW5lcj5cclxuPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZW5kZXJcIj5cclxuICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj57eydTZW5kZXInIHwgdHJhbnNsYXRlfX08L21hdC1oZWFkZXItY2VsbD5cclxuICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj5cclxuICAgIEBpZiAoaXRlbS5zZW5kZXJJZCkge1xyXG4gICAgICA8Yml6ZG9jLWlkZW50aXR5LW5hbWUgW2lkZW50aXR5XT1cIml0ZW0uc2VuZGVySWRcIiBbYnldPVwiaXRlbS5ieUlkXCI+PC9iaXpkb2MtaWRlbnRpdHktbmFtZT5cclxuICAgIH1cclxuICA8L21hdC1jZWxsPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicmVjZWl2ZWRcIj5cclxuICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj57eydSZWNlaXZlZCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPiB7e2l0ZW0ucmVjZWl2ZWQgfCBhbUNhbGVuZGFyfX0gPC9tYXQtY2VsbD5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInJlY2VpdmVkQWdvXCI+XHJcbiAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI9XCJyZWNlaXZlZFwiPnt7J1JlY2VpdmVkJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCIgW2JpemRvY1Rvb2x0aXBdPVwiaXRlbS5yZWNlaXZlZCB8IGFtQ2FsZW5kYXJcIj57e2l0ZW0ucmVjZWl2ZWQgfCBhbVRpbWVBZ299fTwvbWF0LWNlbGw+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyZXBsaWVkXCI+XHJcbiAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snUmVwbGllZCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhlYWRlci1jZWxsPlxyXG4gIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgY2xhc3M9XCJkYXRhLWNvbHVtblwiPiB7e2l0ZW0ucmVwbGllZCB8IGFtQ2FsZW5kYXJ9fSA8L21hdC1jZWxsPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiaXNzdWVkXCI+XHJcbiAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snSXNzdWVkJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS5pc3N1ZWQgfCBhbUNhbGVuZGFyfX0gPC9tYXQtY2VsbD5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImlzc3VlZEFnb1wiPlxyXG4gIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPVwiaXNzdWVkXCI+e3snSXNzdWVkJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCIgW2JpemRvY1Rvb2x0aXBdPVwiaXRlbS5pc3N1ZWQgfCBhbUNhbGVuZGFyXCI+IHt7aXRlbS5pc3N1ZWQgfCBhbVRpbWVBZ299fSA8L21hdC1jZWxsPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhdGVcIj5cclxuICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cInN0YXRlSWRcIj57eydTdGF0dXMnIHwgdHJhbnNsYXRlIH19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+XHJcbiAgICA8Yml6ZG9jLXN0YXR1cyBbc3RhdGVJZF09XCJpdGVtLnN0YXRlSWRcIj48L2JpemRvYy1zdGF0dXM+XHJcbiAgPC9tYXQtY2VsbD5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG5AaWYgKGN1c3RvbUNvbHVtbnMpIHtcclxuICBAZm9yIChjIG9mIGN1c3RvbUNvbHVtbnM7IHRyYWNrIGMpIHtcclxuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjLm5hbWVcIj5cclxuICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+IHt7Yy50aXRsZX19IDwvbWF0LWhlYWRlci1jZWxsPlxyXG4gICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIGNsYXNzPVwiZGF0YS1jb2x1bW5cIj5cclxuICAgICAgICBAc3dpdGNoIChjLnR5cGUpIHtcclxuICAgICAgICAgIEBjYXNlICgnRGF0ZScpIHtcclxuICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAge3tpdGVtLm1vZGVsW2MubmFtZV0gfCBhbUNhbGVuZGFyIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEBjYXNlICgnRGVjaW1hbCcpIHtcclxuICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAge3tpdGVtLm1vZGVsW2MubmFtZV0gfCBudW1iZXIgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgQGNhc2UgKCdCb29sZWFuJykge1xyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICA8Yml6ZG9jLWNoZWNrYm94IFtjaGVja2VkXT1cIml0ZW0ubW9kZWxbYy5uYW1lXVwiPjwvYml6ZG9jLWNoZWNrYm94PlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBAZGVmYXVsdCB7XHJcbiAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgIHt7aXRlbS5tb2RlbFtjLm5hbWVdfX16XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LWNlbGw+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICB9XHJcbn1cclxuXHJcbjwhLS0gVmFsdWUgY29sdW1uIC0tPlxyXG48bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInZhbHVlXCI+XHJcbiAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3snQW1vdW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtaGVhZGVyLWNlbGw+XHJcbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBjbGFzcz1cImRhdGEtY29sdW1uXCI+IHt7aXRlbS52YWx1ZSB8IGN1cnJlbmN5IDogaXRlbS5jdXJyZW5jeUNvZGUgOiAnc3ltYm9sJyA6IGN1cnJlbmN5Rm9ybWF0fX0gPC9tYXQtY2VsbD5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48IS0tIG9wdGlvbnMgY29sdW1uIC0tPlxyXG48bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm9wdGlvbnNcIj5cclxuICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPjwvbWF0LWhlYWRlci1jZWxsPlxyXG4gIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCI+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmxhZyhpdGVtLCAkZXZlbnQpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0ZsYWdnZWQnfCB0cmFuc2xhdGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidUb2dnbGVGbGFnZ2VkJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwidG9vbFwiPjxtYXQtaWNvbiBbY2xhc3MuZG9jdW1lbnQtZmxhZ109XCJpdGVtLmZsYWdcIj57e2l0ZW0uZmxhZyA/ICdzdGFyJyA6ICdzdGFyX2JvcmRlcid9fTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICBAaWYgKGVuYWJsZVZpZXdzKSB7XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ2aWV3KGl0ZW0sICRldmVudClcIiBbYml6ZG9jVG9vbHRpcF09XCInSW5zaWdodCcgfCB0cmFuc2xhdGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidJbnNpZ2h0JyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwidG9vbFwiPjxtYXQtaWNvbj5kYXRhX3VzYWdlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIH1cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCIgW2JpemRvY1Rvb2x0aXBdPVwiJ09wdGlvbnMnIHwgdHJhbnNsYXRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3B0aW9ucycgfCB0cmFuc2xhdGVcIiBjbGFzcz1cInRvb2wgaGlkZS14c1wiPjxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDwvbWF0LWNlbGw+XHJcbjwvbmctY29udGFpbmVyPlxyXG48IS0tIEV4cGFuZGVkIENvbnRlbnQgQ29sdW1uIC0tPlxyXG48bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XHJcbiAgPG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBbYXR0ci5jb2xzcGFuXT1cImRpc3BsYXllZENvbHVtbnMubGVuZ3RoXCIgW0B1cGRhdGVkXT1cIml0ZW0gPT0gdXBkYXRlZEVsZW1lbnRcIlxyXG4gICAgW2NsYXNzLnJlYWQtcm93XT1cIml0ZW0ucmVhZFwiPlxyXG4gICAgPGRpdiBbQGRldGFpbEV4cGFuZF09XCJpdGVtID09IGV4cGFuZGVkRWxlbWVudCA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJ1wiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cclxuICAgICAgQGlmIChpdGVtID09IGV4cGFuZGVkRWxlbWVudCkge1xyXG4gICAgICAgIDxiaXpkb2MtZXhwYW5kZWQtaXRlbSBbbW9kZWxdPVwiaXRlbVwiPjwvYml6ZG9jLWV4cGFuZGVkLWl0ZW0+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LWNlbGw+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZVwiPjwvbWF0LWhlYWRlci1yb3c+XHJcbjxtYXQtcm93IEBpdGVtIFtAdXBkYXRlZF09XCJpdGVtID09IHVwZGF0ZWRFbGVtZW50XCJcclxuICAqbWF0Um93RGVmPVwibGV0IGl0ZW07IGxldCBkYXRhSW5kZXggPSBkYXRhSW5kZXg7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgY2xhc3M9XCJlbGVtZW50LXJvd1wiXHJcbiAgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwiaXRlbVwiXHJcbiAgW2Nka0RyYWdEaXNhYmxlZF09XCJkcmFnRGlzYWJsZWRcIlxyXG4gIChjZGtEcmFnUmVsZWFzZWQpPVwiZHJhZ0Rpc2FibGVkID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZGVkLXJvdyc6IHNlbGVjdGVkRWxlbWVudCA9PT0gaXRlbSxcclxuICAgICAgJ2V4cGFuZGVkLXJvdyc6IGV4cGFuZGVkRWxlbWVudCA9PT0gaXRlbSxcclxuICAgICAgICAgICAnb2RkLXJvdyc6IGRhdGFJbmRleCAlIDIsXHJcbiAgICAgICdyZWFkLXJvdyc6IGl0ZW0ucmVhZH1cIiBtYXRSaXBwbGVcclxuICAoY2xpY2spPVwib3BlbihpdGVtLCAkZXZlbnQpXCI+XHJcbiAgPGRpdiAqY2RrRHJhZ1ByZXZpZXc+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPjxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+PC9idXR0b24+IDxzcGFuPiN7e2l0ZW0ubnVtYmVyfX08L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqY2RrRHJhZ1BsYWNlaG9sZGVyPlxyXG4gICAgPCEtLSBub25lIC0tPlxyXG4gIDwvZGl2PlxyXG48L21hdC1yb3c+XHJcbjxtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgaXRlbTsgOyBsZXQgZGF0YUluZGV4ID0gZGF0YUluZGV4OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIlxyXG4gIGNsYXNzPVwiZGV0YWlsLXJvd1wiIG1hdFJpcHBsZVxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NlbGVjdGVkZWQtcm93Jzogc2VsZWN0ZWRFbGVtZW50ID09PSBpdGVtLFxyXG4gICAgICAgICAgICdvZGQtcm93JzogZGF0YUluZGV4ICUgMlxyXG4gICAgICAgICAgIH1cIj48L21hdC1yb3c+XHJcbjwvbWF0LXRhYmxlPlxyXG48bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yIFtoaWRlUGFnZVNpemVdPVwidHJ1ZVwiIFtwYWdlU2l6ZV09XCJQQUdFX1NJWkVcIiBbc3R5bGUuZGlzcGxheV09XCIhaXNNb2JpbGUgJiYgZGF0YVNvdXJjZT8uZGF0YS5sZW5ndGg+UEFHRV9TSVpFID8gJyc6J25vbmUnXCI+PC9tYXQtcGFnaW5hdG9yPlxyXG48bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvcGVuKGl0ZW0sICRldmVudClcIj57eydPcGVuJ3x0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInRvZ2dsZVJlYWQoaXRlbSlcIj57eyhpdGVtLnJlYWQgPydNYXJrQXNVbnJlYWQnOidNYXJrQXNSZWFkJyl8dHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjb3B5KGl0ZW0pXCI+e3snQ29weSd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9tYXQtbWVudT5cclxuIl19