@bizdoc/core 1.13.5 → 1.13.9

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 (304) hide show
  1. package/esm2020/lib/admin/admin-dismiss.service.mjs +3 -3
  2. package/esm2020/lib/admin/admin-menu.component.mjs +3 -3
  3. package/esm2020/lib/admin/core/ace.input.mjs +3 -3
  4. package/esm2020/lib/admin/core/color-picker.input.mjs +3 -3
  5. package/esm2020/lib/admin/core/search.input.mjs +4 -4
  6. package/esm2020/lib/admin/diff/configuration-diff.component.mjs +3 -3
  7. package/esm2020/lib/admin/document-trace/document-trace.component.mjs +28 -18
  8. package/esm2020/lib/admin/document-trace/reassign.dialog.mjs +3 -3
  9. package/esm2020/lib/admin/document-trace/timeline.mjs +2 -0
  10. package/esm2020/lib/admin/document-trace/trace-element.component.mjs +9 -9
  11. package/esm2020/lib/admin/form/form.resolve.service.mjs +3 -3
  12. package/esm2020/lib/admin/form/form.service.mjs +3 -3
  13. package/esm2020/lib/admin/form/workflow/node.component.mjs +3 -3
  14. package/esm2020/lib/admin/form/workflow/role-node.component.mjs +3 -3
  15. package/esm2020/lib/admin/form/workflow/workflow.component.mjs +3 -3
  16. package/esm2020/lib/admin/indices/manage-cube-index.component.mjs +3 -3
  17. package/esm2020/lib/admin/patterns/patterns.component.mjs +3 -3
  18. package/esm2020/lib/admin/permissions/permissions.component.mjs +3 -3
  19. package/esm2020/lib/admin/positions/positions-popup.component.mjs +3 -3
  20. package/esm2020/lib/admin/positions/positions.component.mjs +3 -3
  21. package/esm2020/lib/admin/profiler/profiler.component.mjs +3 -3
  22. package/esm2020/lib/admin/utility-wrapper.component.mjs +3 -3
  23. package/esm2020/lib/admin/utility.pane.component.mjs +3 -3
  24. package/esm2020/lib/app.component.mjs +6 -6
  25. package/esm2020/lib/bizdoc.module.mjs +4 -4
  26. package/esm2020/lib/browse/browse-items.component.mjs +9 -7
  27. package/esm2020/lib/browse/browse.mobile.component.mjs +3 -3
  28. package/esm2020/lib/browse/browse.pane.component.mjs +4 -4
  29. package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +7 -7
  30. package/esm2020/lib/browse/filter/filter.component.mjs +3 -3
  31. package/esm2020/lib/browse/folders-menu.component.mjs +3 -3
  32. package/esm2020/lib/chat/chat-info.mjs +3 -3
  33. package/esm2020/lib/chat/chat.mobile.component.mjs +3 -3
  34. package/esm2020/lib/chat/chat.service.mjs +3 -3
  35. package/esm2020/lib/chat/contacts.component.mjs +7 -7
  36. package/esm2020/lib/chat/contacts.pane.component.mjs +3 -3
  37. package/esm2020/lib/chat/conversation.component.mjs +3 -3
  38. package/esm2020/lib/chat/conversation.pane.component.mjs +3 -3
  39. package/esm2020/lib/compose/action/action-picker.component.mjs +3 -3
  40. package/esm2020/lib/compose/action/action.dialog.mjs +3 -3
  41. package/esm2020/lib/compose/action/action.pane.dialog.exp.mjs +3 -3
  42. package/esm2020/lib/compose/action/assign-action.component.mjs +3 -3
  43. package/esm2020/lib/compose/action/return-action.component.mjs +3 -3
  44. package/esm2020/lib/compose/attachments/attachments.component.mjs +3 -3
  45. package/esm2020/lib/compose/attachments/preview/attachment-preview.component.mjs +3 -3
  46. package/esm2020/lib/compose/attachments/progress-button.directive.mjs +3 -3
  47. package/esm2020/lib/compose/can-deactivate-changes.service.mjs +3 -3
  48. package/esm2020/lib/compose/comments/Comments.pane.component.mjs +3 -3
  49. package/esm2020/lib/compose/comments/comment.component.mjs +3 -3
  50. package/esm2020/lib/compose/comments/comments.component.mjs +3 -3
  51. package/esm2020/lib/compose/comments/edit-comment.component.mjs +3 -3
  52. package/esm2020/lib/compose/comments/edits.component.mjs +3 -3
  53. package/esm2020/lib/compose/comments/quick-comment.component.exp.mjs +3 -3
  54. package/esm2020/lib/compose/comments/votes.component.mjs +3 -3
  55. package/esm2020/lib/compose/compose-resolve.service.mjs +6 -6
  56. package/esm2020/lib/compose/compose.mobile.component.mjs +3 -3
  57. package/esm2020/lib/compose/compose.pane.component.mjs +7 -6
  58. package/esm2020/lib/compose/copy/copy.dialog.mjs +3 -3
  59. package/esm2020/lib/compose/dismiss.service.mjs +3 -3
  60. package/esm2020/lib/compose/document-resolver.service.mjs +3 -3
  61. package/esm2020/lib/compose/document.component.mjs +3 -3
  62. package/esm2020/lib/compose/document.mobile.component.mjs +3 -3
  63. package/esm2020/lib/compose/document.pane.component.mjs +3 -3
  64. package/esm2020/lib/compose/events/events.component.mjs +3 -3
  65. package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +3 -3
  66. package/esm2020/lib/compose/form.component.mjs +3 -3
  67. package/esm2020/lib/compose/new-menu.component.mjs +3 -3
  68. package/esm2020/lib/compose/privilage.directive.mjs +6 -6
  69. package/esm2020/lib/compose/recipient-resolver.service.mjs +3 -3
  70. package/esm2020/lib/compose/save-changes.dialog.mjs +3 -3
  71. package/esm2020/lib/compose/state.component.mjs +3 -3
  72. package/esm2020/lib/compose/tag/tags.component.mjs +3 -3
  73. package/esm2020/lib/compose/trace/flow.component.mjs +13 -10
  74. package/esm2020/lib/compose/trace/people.component.mjs +5 -5
  75. package/esm2020/lib/compose/trace/trace.base.mjs +3 -3
  76. package/esm2020/lib/compose/trace/trace.component.mjs +15 -15
  77. package/esm2020/lib/compose/trace/trace.pane.component.mjs +3 -3
  78. package/esm2020/lib/compose/version-compare/version-compare.component.mjs +3 -3
  79. package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +9 -9
  80. package/esm2020/lib/compose/version-compare/version.pane.component.mjs +3 -3
  81. package/esm2020/lib/core/NgComponentOutlet.mjs +3 -3
  82. package/esm2020/lib/core/account.service.mjs +3 -3
  83. package/esm2020/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
  84. package/esm2020/lib/core/avatar/avatar.component.mjs +3 -3
  85. package/esm2020/lib/core/component-factory-resolver.mjs +3 -3
  86. package/esm2020/lib/core/configuration.mjs +2 -1
  87. package/esm2020/lib/core/controls/address.input.mjs +4 -4
  88. package/esm2020/lib/core/controls/auto-complete.input.mjs +4 -4
  89. package/esm2020/lib/core/controls/combination-picker-body.mjs +3 -3
  90. package/esm2020/lib/core/controls/combination-picker.mjs +3 -3
  91. package/esm2020/lib/core/controls/combination-pool.mjs +3 -3
  92. package/esm2020/lib/core/controls/file.input.mjs +3 -3
  93. package/esm2020/lib/core/controls/select.input.mjs +3 -3
  94. package/esm2020/lib/core/controls/time-picker.mjs +3 -3
  95. package/esm2020/lib/core/controls/timespan.input.mjs +3 -3
  96. package/esm2020/lib/core/datasource.service.mjs +3 -3
  97. package/esm2020/lib/core/guide/guide.component.mjs +3 -3
  98. package/esm2020/lib/core/guide/guide.service.mjs +3 -3
  99. package/esm2020/lib/core/http.interceptor.mjs +3 -3
  100. package/esm2020/lib/core/hub.service.mjs +3 -3
  101. package/esm2020/lib/core/identity/identity.component.mjs +3 -3
  102. package/esm2020/lib/core/info/attachment-info.service.mjs +3 -3
  103. package/esm2020/lib/core/info/document-info.service.mjs +3 -3
  104. package/esm2020/lib/core/info/location-info.component.mjs +3 -3
  105. package/esm2020/lib/core/info/map-info.mjs +3 -3
  106. package/esm2020/lib/core/layout/autocomplete.field.mjs +3 -3
  107. package/esm2020/lib/core/layout/checkbox.field.mjs +3 -3
  108. package/esm2020/lib/core/layout/checkbox.mjs +3 -3
  109. package/esm2020/lib/core/layout/date-range.field.mjs +3 -3
  110. package/esm2020/lib/core/layout/date.field.mjs +4 -4
  111. package/esm2020/lib/core/layout/expression.field.mjs +3 -3
  112. package/esm2020/lib/core/layout/html.field.mjs +3 -3
  113. package/esm2020/lib/core/layout/input.base.mjs +3 -3
  114. package/esm2020/lib/core/layout/input.field.mjs +4 -4
  115. package/esm2020/lib/core/layout/layout.component.mjs +3 -3
  116. package/esm2020/lib/core/layout/numeric.field.mjs +4 -4
  117. package/esm2020/lib/core/layout/select.field.mjs +3 -3
  118. package/esm2020/lib/core/layout/switch.field.mjs +3 -3
  119. package/esm2020/lib/core/layout/textarea.field.mjs +4 -4
  120. package/esm2020/lib/core/layout/timespan.field.mjs +3 -3
  121. package/esm2020/lib/core/lottie-animation.mjs +3 -3
  122. package/esm2020/lib/core/mailbox.service.mjs +12 -12
  123. package/esm2020/lib/core/models.mjs +1 -1
  124. package/esm2020/lib/core/none.component.mjs +3 -3
  125. package/esm2020/lib/core/pipes/action.pipe.mjs +3 -3
  126. package/esm2020/lib/core/pipes/calendar.pipe.mjs +3 -3
  127. package/esm2020/lib/core/pipes/date-format.pipe.mjs +3 -3
  128. package/esm2020/lib/core/pipes/daterange.pipe.mjs +6 -6
  129. package/esm2020/lib/core/pipes/difference.pipe.mjs +3 -3
  130. package/esm2020/lib/core/pipes/duration-format.pipe.mjs +3 -3
  131. package/esm2020/lib/core/pipes/duration.pipe.mjs +3 -3
  132. package/esm2020/lib/core/pipes/form.pipe.mjs +3 -3
  133. package/esm2020/lib/core/pipes/join.pipe.mjs +3 -3
  134. package/esm2020/lib/core/pipes/role.pipe.mjs +3 -3
  135. package/esm2020/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
  136. package/esm2020/lib/core/pipes/sort.pipe.mjs +6 -6
  137. package/esm2020/lib/core/pipes/state.pipe.mjs +3 -3
  138. package/esm2020/lib/core/pipes/time-ago.pipe.mjs +3 -3
  139. package/esm2020/lib/core/pipes/translate.pipe.mjs +6 -6
  140. package/esm2020/lib/core/pipes/type-value.pipe.mjs +3 -3
  141. package/esm2020/lib/core/pipes/user-name.pipe.mjs +3 -3
  142. package/esm2020/lib/core/popup/popup.component.mjs +3 -3
  143. package/esm2020/lib/core/popup/popup.service.mjs +3 -3
  144. package/esm2020/lib/core/popup/tooltip.directive.mjs +6 -6
  145. package/esm2020/lib/core/prompt/ask/ask.dialog.mjs +3 -3
  146. package/esm2020/lib/core/prompt/mask/mask.component.mjs +3 -3
  147. package/esm2020/lib/core/prompt.service.mjs +3 -3
  148. package/esm2020/lib/core/router.mjs +6 -6
  149. package/esm2020/lib/core/session.service.mjs +3 -3
  150. package/esm2020/lib/core/slots/router.directive.mjs +3 -3
  151. package/esm2020/lib/core/slots/router.service.mjs +7 -19
  152. package/esm2020/lib/core/slots/slots.component.mjs +9 -7
  153. package/esm2020/lib/core/tagging/documents.component.mjs +3 -3
  154. package/esm2020/lib/core/tagging/edit-input.component.mjs +3 -3
  155. package/esm2020/lib/core/tagging/emoji.component.mjs +3 -3
  156. package/esm2020/lib/core/tagging/tagging-item.directive.mjs +3 -3
  157. package/esm2020/lib/core/tagging/tagging.component-base.mjs +3 -3
  158. package/esm2020/lib/core/tagging/tagging.directive.mjs +3 -3
  159. package/esm2020/lib/core/tagging/tagging.pipe.mjs +3 -3
  160. package/esm2020/lib/core/tagging/users.component.mjs +3 -3
  161. package/esm2020/lib/core/translate.service.mjs +3 -3
  162. package/esm2020/lib/core/translations.mjs +5 -5
  163. package/esm2020/lib/core/window-title.service.mjs +3 -3
  164. package/esm2020/lib/cube/accum/accum.component.mjs +3 -3
  165. package/esm2020/lib/cube/chart/chart.component.mjs +3 -3
  166. package/esm2020/lib/cube/cube-info.service.mjs +3 -3
  167. package/esm2020/lib/cube/cube-menu.component.mjs +3 -3
  168. package/esm2020/lib/cube/cube-view.component.mjs +3 -3
  169. package/esm2020/lib/cube/cube.service.mjs +3 -3
  170. package/esm2020/lib/cube/explore/document-item.component.mjs +3 -3
  171. package/esm2020/lib/cube/explore/explore-item.component.mjs +3 -3
  172. package/esm2020/lib/cube/explore/explore-items.component.mjs +22 -38
  173. package/esm2020/lib/cube/explore/explore.pane.component.mjs +3 -3
  174. package/esm2020/lib/cube/explore/item-resolver.service.mjs +6 -6
  175. package/esm2020/lib/cube/explore/item.pane.component.mjs +3 -3
  176. package/esm2020/lib/cube/filter/filter-tags.component.exp.mjs +3 -3
  177. package/esm2020/lib/cube/filter/filter.component.mjs +3 -3
  178. package/esm2020/lib/cube/grid/grid.component.mjs +3 -3
  179. package/esm2020/lib/cube/grid/spreadsheet.component.mjs +3 -3
  180. package/esm2020/lib/cube/matrix/matrix.base.mjs +3 -3
  181. package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +3 -3
  182. package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +3 -3
  183. package/esm2020/lib/cube/matrix/popup.component.mjs +3 -3
  184. package/esm2020/lib/cube/matrix/table.component.mjs +9 -11
  185. package/esm2020/lib/cube/parallel/parallel.component.mjs +3 -3
  186. package/esm2020/lib/cube/pivot/pivot.component.mjs +79 -81
  187. package/esm2020/lib/cube/sum/sum.component.mjs +3 -3
  188. package/esm2020/lib/cube/view-base.mjs +3 -3
  189. package/esm2020/lib/cube/view.mobile.component.mjs +3 -3
  190. package/esm2020/lib/cube/view.pane.component.mjs +3 -3
  191. package/esm2020/lib/dashboard/actions/actions.widget.mjs +3 -3
  192. package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +3 -3
  193. package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +3 -3
  194. package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
  195. package/esm2020/lib/dashboard/cube/cube-chart.widget.mjs +3 -3
  196. package/esm2020/lib/dashboard/cube/documents.widget.mjs +3 -3
  197. package/esm2020/lib/dashboard/cube/filter/filter.component.mjs +3 -3
  198. package/esm2020/lib/dashboard/dashboard.component.mjs +3 -3
  199. package/esm2020/lib/dashboard/dashboard.pane.component.mjs +3 -3
  200. package/esm2020/lib/dashboard/recents/recents.widget.mjs +3 -3
  201. package/esm2020/lib/dashboard/score/activity.widget.mjs +3 -3
  202. package/esm2020/lib/dashboard/score/compare-departments.widget.mjs +3 -3
  203. package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +3 -3
  204. package/esm2020/lib/dashboard/score/pending-results.widget.mjs +3 -3
  205. package/esm2020/lib/dashboard/score/personal-score.widget.mjs +3 -3
  206. package/esm2020/lib/dashboard/widget-item.component.mjs +3 -3
  207. package/esm2020/lib/desktop.module.mjs +4 -4
  208. package/esm2020/lib/home/about/about.dialog.mjs +3 -3
  209. package/esm2020/lib/home/home-base.component.mjs +3 -3
  210. package/esm2020/lib/home/home.desktop.component.mjs +3 -3
  211. package/esm2020/lib/home/home.mobile.component.mjs +3 -3
  212. package/esm2020/lib/home/notifications/notifications.component.mjs +4 -4
  213. package/esm2020/lib/home/options/options.component.mjs +3 -3
  214. package/esm2020/lib/home/outofoffice/outofoffice.component.mjs +3 -3
  215. package/esm2020/lib/home/search.service.mjs +3 -3
  216. package/esm2020/lib/home/sign/sign.component.mjs +3 -3
  217. package/esm2020/lib/home/tools.component.mjs +3 -3
  218. package/esm2020/lib/impersonate/impersonate.component.mjs +3 -3
  219. package/esm2020/lib/mobile.module.mjs +4 -4
  220. package/esm2020/lib/modules/chart.module.mjs +4 -4
  221. package/esm2020/lib/modules/circular-gauge.module.mjs +4 -4
  222. package/esm2020/lib/modules/date.adapter.mjs +3 -3
  223. package/esm2020/lib/modules/datepicker.intl.mjs +3 -3
  224. package/esm2020/lib/modules/diagram.module.mjs +4 -4
  225. package/esm2020/lib/modules/gantt.module.mjs +4 -4
  226. package/esm2020/lib/modules/grid.module.mjs +4 -4
  227. package/esm2020/lib/modules/material.module.mjs +4 -4
  228. package/esm2020/lib/modules/paginator.intl.mjs +3 -3
  229. package/esm2020/lib/modules/pivot.module.mjs +4 -4
  230. package/esm2020/lib/modules/schedule.module.mjs +4 -4
  231. package/esm2020/lib/modules/spreadsheet.module.mjs +4 -4
  232. package/esm2020/lib/modules/stepper.intl.mjs +3 -3
  233. package/esm2020/lib/modules/texteditor.module.mjs +4 -4
  234. package/esm2020/lib/notifications/filter.component.mjs +3 -3
  235. package/esm2020/lib/notifications/notifications-table.component.mjs +5 -5
  236. package/esm2020/lib/notifications/notifications.component-base.mjs +1 -1
  237. package/esm2020/lib/notifications/notifications.mobile.component.mjs +3 -3
  238. package/esm2020/lib/notifications/notifications.pane.component.mjs +3 -3
  239. package/esm2020/lib/notifications/notifications.service.mjs +3 -3
  240. package/esm2020/lib/notifications/types/commented.notification.mjs +3 -3
  241. package/esm2020/lib/notifications/types/cube-anomaly.notification.mjs +3 -3
  242. package/esm2020/lib/notifications/types/escalated.notification.mjs +5 -5
  243. package/esm2020/lib/notifications/types/liked.notification.mjs +3 -3
  244. package/esm2020/lib/notifications/types/long-running-task.notification.mjs +3 -3
  245. package/esm2020/lib/notifications/types/notification-base.mjs +3 -3
  246. package/esm2020/lib/notifications/types/nudge.notification.mjs +3 -3
  247. package/esm2020/lib/notifications/types/state-changed.notification.mjs +5 -5
  248. package/esm2020/lib/notifications/types/tagged.notification.mjs +3 -3
  249. package/esm2020/lib/notifications/types/text.notification.mjs +3 -3
  250. package/esm2020/lib/notifications/types/upcoming-event.notification.mjs +3 -3
  251. package/esm2020/lib/options/options.component.mjs +3 -3
  252. package/esm2020/lib/options/options.service.mjs +3 -3
  253. package/esm2020/lib/reports/arguments-component.mjs +3 -3
  254. package/esm2020/lib/reports/cube/grid-documents.component.mjs +3 -3
  255. package/esm2020/lib/reports/cube/table-documents.component.mjs +3 -3
  256. package/esm2020/lib/reports/cube/usage-args.component.mjs +3 -3
  257. package/esm2020/lib/reports/cube/usage-base.mjs +3 -3
  258. package/esm2020/lib/reports/cube/usage-chart.component.mjs +3 -3
  259. package/esm2020/lib/reports/cube/usage-pivot.component.mjs +3 -3
  260. package/esm2020/lib/reports/report-viewer.component.mjs +3 -3
  261. package/esm2020/lib/reports/report.mobile.component.mjs +3 -3
  262. package/esm2020/lib/reports/report.pane.component.mjs +3 -3
  263. package/esm2020/lib/reports/reports-menu.component.mjs +3 -3
  264. package/esm2020/lib/reports/substitution/substitution.component.mjs +6 -6
  265. package/esm2020/lib/reports/table/table-view.component.mjs +3 -3
  266. package/esm2020/lib/reports/tasks/tasks.component.mjs +3 -3
  267. package/esm2020/lib/routes.desktop.mjs +2 -2
  268. package/esm2020/lib/scheduler/schedule.component.mjs +3 -3
  269. package/esm2020/lib/scheduler/scheduler.mobile.component.mjs +3 -3
  270. package/esm2020/lib/scheduler/scheduler.pane.component.mjs +3 -3
  271. package/esm2020/lib/shared.module.mjs +4 -4
  272. package/esm2020/lib/system.module.mjs +4 -4
  273. package/esm2020/lib/views/cube/chart.component.mjs +3 -3
  274. package/esm2020/lib/views/cube/cube-base.mjs +3 -3
  275. package/esm2020/lib/views/cube/explore.component.mjs +3 -3
  276. package/esm2020/lib/views/cube/matrix.component.mjs +3 -3
  277. package/esm2020/lib/views/cube/parallel.component.mjs +3 -3
  278. package/esm2020/lib/views/cube/pivot.component.mjs +3 -3
  279. package/esm2020/lib/views/cube/sum.component.mjs +3 -3
  280. package/esm2020/lib/views/cube/view.component.mjs +3 -3
  281. package/esm2020/lib/views/timeline/timeline.component.exp.mjs +6 -6
  282. package/esm2020/lib/views/view-item.component.mjs +3 -3
  283. package/esm2020/lib/views/views.component.mjs +3 -3
  284. package/esm2020/lib/views/views.mobile.component.mjs +3 -3
  285. package/esm2020/lib/views/views.pane.component.mjs +3 -3
  286. package/fesm2015/bizdoc-core.mjs +1083 -1087
  287. package/fesm2015/bizdoc-core.mjs.map +1 -1
  288. package/fesm2020/bizdoc-core.mjs +1081 -1094
  289. package/fesm2020/bizdoc-core.mjs.map +1 -1
  290. package/lib/admin/document-trace/document-trace.component.d.ts +4 -4
  291. package/lib/admin/document-trace/{Timeline.d.ts → timeline.d.ts} +4 -1
  292. package/lib/admin/document-trace/trace-element.component.d.ts +1 -2
  293. package/lib/core/configuration.d.ts +2 -1
  294. package/lib/core/mailbox.service.d.ts +2 -2
  295. package/lib/core/models.d.ts +4 -6
  296. package/lib/core/slots/router.service.d.ts +0 -4
  297. package/lib/cube/explore/explore-items.component.d.ts +0 -1
  298. package/lib/cube/pivot/pivot.component.d.ts +2 -1
  299. package/lib/home/notifications/notifications.component.d.ts +2 -2
  300. package/lib/notifications/notifications-table.component.d.ts +2 -2
  301. package/lib/notifications/notifications.component-base.d.ts +4 -0
  302. package/lib/notifications/types/escalated.notification.d.ts +1 -2
  303. package/package.json +14 -14
  304. package/esm2020/lib/admin/document-trace/Timeline.mjs +0 -2
@@ -52,9 +52,9 @@ export class CubeMatrixPopupComponent extends CubeMatrixBase {
52
52
  });
53
53
  }
54
54
  }
55
- CubeMatrixPopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeMatrixPopupComponent, deps: [{ token: PopupRef }, { token: POPUP_DATA }, { token: i1.CubeService }, { token: i2.DatasourceService }, { token: i3.SessionService }, { token: i4.PromptService }], target: i0.ɵɵFactoryTarget.Component });
56
- CubeMatrixPopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CubeMatrixPopupComponent, selector: "ng-component", viewQueries: [{ propertyName: "table", first: true, predicate: CubeMatrixComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <div class=\"row\" *ngIf=\"!preloading && (patterns?.length || filters?.length)\">\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\"\r\n [sum]=sum [interactive]=\"false\"\r\n [xAxisTotalLabel]=\"xAxisTotalLabel\"\r\n [seriesTotalLabel]=\"seriesTotalLabel\"\r\n [placeAt]=\"placeAt\"\r\n [indexAt]=\"indexAt\"\r\n [filters]=\"axes\" (loadingChange)=\"loading=$event\"></bizdoc-cube-matrix>\r\n</div>\r\n", styles: [".container{padding:8px}::ng-deep .cube-table{display:inline}\n"], components: [{ type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i9.CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: ["seriesTotalLabel", "xAxisTotalLabel", "cube", "xAxis", "series", "indices", "indexAt", "placeAt", "scope", "sum", "filters", "loading", "interactive"], outputs: ["explore", "loadingChange"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }], pipes: { "translate": i12.TranslatePipe, "async": i10.AsyncPipe, "typeValue": i13.TypeValuePipe } });
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeMatrixPopupComponent, decorators: [{
55
+ CubeMatrixPopupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CubeMatrixPopupComponent, deps: [{ token: PopupRef }, { token: POPUP_DATA }, { token: i1.CubeService }, { token: i2.DatasourceService }, { token: i3.SessionService }, { token: i4.PromptService }], target: i0.ɵɵFactoryTarget.Component });
56
+ CubeMatrixPopupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: CubeMatrixPopupComponent, selector: "ng-component", viewQueries: [{ propertyName: "table", first: true, predicate: CubeMatrixComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <div class=\"row\" *ngIf=\"!preloading && (patterns?.length || filters?.length)\">\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\"\r\n [sum]=sum [interactive]=\"false\"\r\n [xAxisTotalLabel]=\"xAxisTotalLabel\"\r\n [seriesTotalLabel]=\"seriesTotalLabel\"\r\n [placeAt]=\"placeAt\"\r\n [indexAt]=\"indexAt\"\r\n [filters]=\"axes\" (loadingChange)=\"loading=$event\"></bizdoc-cube-matrix>\r\n</div>\r\n", styles: [".container{padding:8px}::ng-deep .cube-table{display:inline}\n"], components: [{ type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i9.CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: ["seriesTotalLabel", "xAxisTotalLabel", "cube", "xAxis", "series", "indices", "indexAt", "placeAt", "scope", "sum", "filters", "loading", "interactive"], outputs: ["explore", "loadingChange"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }], pipes: { "translate": i12.TranslatePipe, "async": i10.AsyncPipe, "typeValue": i13.TypeValuePipe } });
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CubeMatrixPopupComponent, decorators: [{
58
58
  type: Component,
59
59
  args: [{ template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <div class=\"row\" *ngIf=\"!preloading && (patterns?.length || filters?.length)\">\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"aggregate(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{values[f.name]| typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\"\r\n [sum]=sum [interactive]=\"false\"\r\n [xAxisTotalLabel]=\"xAxisTotalLabel\"\r\n [seriesTotalLabel]=\"seriesTotalLabel\"\r\n [placeAt]=\"placeAt\"\r\n [indexAt]=\"indexAt\"\r\n [filters]=\"axes\" (loadingChange)=\"loading=$event\"></bizdoc-cube-matrix>\r\n</div>\r\n", styles: [".container{padding:8px}::ng-deep .cube-table{display:inline}\n"] }]
60
60
  }], ctorParameters: function () { return [{ type: i14.PopupRef, decorators: [{
@@ -379,16 +379,14 @@ export class CubeMatrixComponent {
379
379
  this.onExplore.emit({ axes, index });
380
380
  }
381
381
  export() {
382
- const numberFormat = this._service.numberFormat, cells = [], rows = [{ index: 1, cells }];
383
- this.columns.forEach((c, j) => !c.sum && cells.push({
382
+ const numberFormat = this._service.numberFormat, columns = this.columns.filter(c => !c.sum), cells = [], rows = [{ index: 1, cells }];
383
+ columns.forEach((c, j) => cells.push({
384
384
  index: j + 2,
385
385
  value: c.value, style: { bold: true }
386
386
  }));
387
- this.rows.forEach((r, i) => {
388
- if (r.sum)
389
- return;
387
+ this.rows.filter(r => !r.sum).forEach((r, i) => {
390
388
  const data = this._data[r.key], cells = [{ index: 1, value: r.value, style: { bold: true } }];
391
- this.columns.forEach((c, j) => !c.sum && cells.push({
389
+ columns.forEach((c, j) => cells.push({
392
390
  type: 'number',
393
391
  index: j + 2,
394
392
  value: data && data[c.key] !== undefined ? data[c.key] : 0,
@@ -407,7 +405,7 @@ export class CubeMatrixComponent {
407
405
  {
408
406
  enableRtl: this._session.inverse,
409
407
  name: this._translate.get('SheetN', 1),
410
- columns: this.columns.map((_, i) => ({ index: i + 1, width: 150 })),
408
+ columns: columns.map((_, i) => ({ index: i + 1, width: 150 })),
411
409
  rows,
412
410
  },
413
411
  ],
@@ -444,9 +442,9 @@ export class CubeMatrixComponent {
444
442
  }
445
443
  }
446
444
  }
447
- CubeMatrixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeMatrixComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }, { token: i4.TranslateService }, { token: i5.DatasourceService }], target: i0.ɵɵFactoryTarget.Component });
448
- CubeMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: { seriesTotalLabel: "seriesTotalLabel", xAxisTotalLabel: "xAxisTotalLabel", _cube: ["cube", "_cube"], _xAxis: ["xAxis", "_xAxis"], _series: ["series", "_series"], _indices: ["indices", "_indices"], indexAt: "indexAt", placeAt: "placeAt", scope: "scope", sum: "sum", filters: "filters", loading: "loading", interactive: "interactive" }, outputs: { onExplore: "explore", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "tableElement", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"_move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-header-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\"\r\n (mouseenter)=\"_move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th class=\"mat-header-cell\">{{xAxisTotalLabel}}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\"\r\n [class.cube-index]=\"row.index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"_move(-2, y )\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\"\r\n [class.explorable]=\"interactive && column.explorable !== false && row.explorable !== false\"\r\n (mouseenter)=\"_move(x + 1, y )\"\r\n (click)=\"explore(column, row)\">\r\n {{ data[row.key][column.key] }}\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"_move(-1, y )\">\r\n {{ data[row.key]['_total'] }}\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- footer -->\r\n <tr class=\"mat-footer-row\">\r\n <td class=\"mat-footer-cell\">{{seriesTotalLabel}}</td>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-footer-cell figure\"\r\n (mouseenter)=\"_move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key].startsWith('-')\">\r\n <ng-container *ngIf=\"totals[column.key] !== undefined\">\r\n {{ totals[column.key] }}\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-footer-cell figure\">{{ totals['_grand'] }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n", styles: [".explorable{cursor:pointer}.cube-table{width:100%;table-layout:fixed}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td,.cube-table th{padding-right:8px}\n"], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], animations: [matrixAnimation] });
449
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeMatrixComponent, decorators: [{
445
+ CubeMatrixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CubeMatrixComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }, { token: i4.TranslateService }, { token: i5.DatasourceService }], target: i0.ɵɵFactoryTarget.Component });
446
+ CubeMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: { seriesTotalLabel: "seriesTotalLabel", xAxisTotalLabel: "xAxisTotalLabel", _cube: ["cube", "_cube"], _xAxis: ["xAxis", "_xAxis"], _series: ["series", "_series"], _indices: ["indices", "_indices"], indexAt: "indexAt", placeAt: "placeAt", scope: "scope", sum: "sum", filters: "filters", loading: "loading", interactive: "interactive" }, outputs: { onExplore: "explore", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "tableElement", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"_move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-header-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\"\r\n (mouseenter)=\"_move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th class=\"mat-header-cell\">{{xAxisTotalLabel}}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\"\r\n [class.cube-index]=\"row.index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"_move(-2, y )\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\"\r\n [class.explorable]=\"interactive && column.explorable !== false && row.explorable !== false\"\r\n (mouseenter)=\"_move(x + 1, y )\"\r\n (click)=\"explore(column, row)\">\r\n {{ data[row.key][column.key] }}\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"_move(-1, y )\">\r\n {{ data[row.key]['_total'] }}\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- footer -->\r\n <tr class=\"mat-footer-row\">\r\n <td class=\"mat-footer-cell\">{{seriesTotalLabel}}</td>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-footer-cell figure\"\r\n (mouseenter)=\"_move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key].startsWith('-')\">\r\n <ng-container *ngIf=\"totals[column.key] !== undefined\">\r\n {{ totals[column.key] }}\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-footer-cell figure\">{{ totals['_grand'] }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n", styles: [".explorable{cursor:pointer}.cube-table{width:100%;table-layout:fixed}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td,.cube-table th{padding-right:8px}\n"], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], animations: [matrixAnimation] });
447
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CubeMatrixComponent, decorators: [{
450
448
  type: Component,
451
449
  args: [{ selector: 'bizdoc-cube-matrix', animations: [matrixAnimation], template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"_move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-header-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\"\r\n (mouseenter)=\"_move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th class=\"mat-header-cell\">{{xAxisTotalLabel}}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\"\r\n [class.cube-index]=\"row.index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"_move(-2, y )\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\"\r\n [class.explorable]=\"interactive && column.explorable !== false && row.explorable !== false\"\r\n (mouseenter)=\"_move(x + 1, y )\"\r\n (click)=\"explore(column, row)\">\r\n {{ data[row.key][column.key] }}\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"_move(-1, y )\">\r\n {{ data[row.key]['_total'] }}\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- footer -->\r\n <tr class=\"mat-footer-row\">\r\n <td class=\"mat-footer-cell\">{{seriesTotalLabel}}</td>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-footer-cell figure\"\r\n (mouseenter)=\"_move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key].startsWith('-')\">\r\n <ng-container *ngIf=\"totals[column.key] !== undefined\">\r\n {{ totals[column.key] }}\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-footer-cell figure\">{{ totals['_grand'] }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n", styles: [".explorable{cursor:pointer}.cube-table{width:100%;table-layout:fixed}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td,.cube-table th{padding-right:8px}\n"] }]
452
450
  }], ctorParameters: function () { return [{ type: i1.PromptService }, { type: i2.CubeService }, { type: i3.SessionService }, { type: i4.TranslateService }, { type: i5.DatasourceService }]; }, propDecorators: { tableElement: [{
@@ -488,4 +486,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
488
486
  }], loadingChange: [{
489
487
  type: Output
490
488
  }] } });
491
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL21hdHJpeC90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvbWF0cml4L3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUEwQixNQUFNLDhCQUE4QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFNM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQUt4RCxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUUvQywyQkFBMkI7QUFPM0IsTUFBTSxPQUFPLG1CQUFtQjtJQW1FOUIsWUFDVSxHQUFrQixFQUNsQixRQUFxQixFQUNyQixRQUF3QixFQUN4QixVQUE0QixFQUM1QixHQUFzQjtRQUp0QixRQUFHLEdBQUgsR0FBRyxDQUFlO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUF2RXZCLGNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxhQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFZM0MsWUFBTyxHQUF1QixRQUFRLENBQUM7UUFFdkMsWUFBTyxHQUEyQixTQUFTLENBQUM7UUE4QnBDLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBU1QsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBQ3hELGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUcvRCxZQUFPLEdBQWdCLEVBQUUsQ0FBQztJQWMxQixDQUFDO0lBdERELElBQWEsR0FBRyxDQUFDLEdBQWdDO1FBQy9DLElBQUksR0FBRztZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0MsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNSLElBQUksS0FBSyxDQUFDO2dCQUNWLElBQUksR0FBRyxDQUFDLEtBQUs7b0JBQ1gsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQzFCLElBQUksR0FBRyxDQUFDLFNBQVM7b0JBQ3BCLFFBQVEsR0FBRyxDQUFDLFNBQVMsRUFBRTt3QkFDckIsS0FBSyxPQUFPOzRCQUNWLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3ZFLE1BQU07d0JBQ1IsS0FBSyxNQUFNOzRCQUNULEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUM1QyxNQUFNO3dCQUNSLEtBQUssU0FBUzs0QkFDWixLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQzlELE1BQU07d0JBQ1IsS0FBSyxZQUFZOzRCQUNmLEtBQUssR0FBRyxHQUFHLENBQUM7cUJBQ2Y7Z0JBQ0gsT0FBTztvQkFDTCxHQUFHLEdBQUc7b0JBQ04sS0FBSztpQkFDTixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBSUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFDVyxXQUFXLENBQUMsS0FBYztRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFxQkQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsaUNBQWlDLENBQUM7WUFDekUsSUFBSSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzFEO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGlDQUFpQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMxRDtRQUNELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkksSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDdkUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQ2QsQ0FBQyxFQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FDakIsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUNsQixHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO2FBQ0ksSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ08sV0FBVztRQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2RSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QixNQUFNLE1BQU0sR0FBRztnQkFDYixHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUk7Z0JBQ1gsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO2dCQUNkLEtBQUssRUFBRSxDQUFDO2dCQUNSLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTthQUNYLENBQUM7WUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFVBQVU7Z0JBQzdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7O2dCQUV4QixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ08sY0FBYztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QixJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBRztnQkFDYixHQUFHLEVBQUUsVUFBVSxHQUFHLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztnQkFDZCxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssWUFBWTtnQkFDcEUsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLEtBQUs7Z0JBQzlELFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUztnQkFDdEIsR0FBRyxFQUFFLENBQUM7YUFDTyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNWLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDcEIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7b0JBQzlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxFQUFFO3dCQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFDdEMsTUFBTTtxQkFDUDtvQkFDRCxDQUFDLEVBQUUsQ0FBQztpQkFDTDtnQkFDRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07b0JBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzdCO2lCQUNJO2dCQUNILE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssRUFBRTt3QkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7d0JBQ25DLE1BQU07cUJBQ1A7b0JBQ0QsQ0FBQyxFQUFFLENBQUM7aUJBQ0w7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO29CQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMxQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQzFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDekUsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTztZQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDWCxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBVyxDQUFDO1lBQ3hCLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ2hELENBQUMsRUFDQyxDQUFDLENBQW9CLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6RCxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUNPLFVBQVUsQ0FBQyxNQUFnQjtRQUNqQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDWCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTztvQkFDMUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ25CLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxHQUFHOzRCQUNOLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyQixDQUFDLENBQUMsQ0FBQztxQkFDQTtvQkFDSCxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkM7YUFFRjtpQkFDSTtnQkFDSCxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sTUFBTSxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ08sT0FBTyxDQUFDLElBQWE7UUFDM0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixJQUFJLE9BQU8sRUFBRTtnQkFDWCxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUzt3QkFBRSxPQUFPO29CQUMxRCxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN6QixJQUFJLEdBQUcsS0FBSyxTQUFTO3dCQUNuQixXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTzs0QkFDbEUsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHO29CQUNSLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO3dCQUNoQyxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU87d0JBQ3hCLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO2FBQ3hEOztnQkFFQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHO29CQUNaLFFBQVEsRUFBRSxHQUFVO2lCQUNyQixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssU0FBUztvQkFBRSxPQUFPO2dCQUM5RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakMsSUFBSSxHQUFHLEtBQUssU0FBUztvQkFDbkIsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU87d0JBQy9ELEdBQUcsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTyxhQUFhLENBQUMsSUFBYTtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDckMsTUFBTSxJQUFJLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUM1QixJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNwQixJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssS0FBSzt3QkFBRSxPQUFPO29CQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM1QixJQUFJLENBQUMsT0FBTzt3QkFDVixPQUFPO29CQUNULElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztvQkFDWixLQUFLLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQy9CLElBQUksTUFBTSxDQUFDLEtBQUs7NEJBQUUsU0FBUzt3QkFDM0IsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQzt3QkFDckIsSUFBSSxNQUFNLENBQUMsR0FBRzs0QkFBRSxTQUFTO3dCQUN6QixJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTs0QkFDekIsSUFBSSxHQUFHLEdBQUksU0FBeUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDeEQsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJO2dDQUNuQyxHQUFHLElBQUksR0FBRyxDQUFDO3lCQUNkOzZCQUNJOzRCQUNILElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDdkIsSUFBSSxHQUFHLEtBQUssU0FBUztnQ0FDbkIsR0FBRyxJQUFJLEdBQUcsQ0FBQzs0QkFDYixJQUFJLEdBQUcsS0FBSyxLQUFLO2dDQUNmLE1BQU07eUJBQ1Q7cUJBQ0Y7b0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFDSTtnQkFDSCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUNaLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTt3QkFDekIsSUFBSSxHQUFHLENBQUMsS0FBSzs0QkFBRSxTQUFTO3dCQUN4QixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3dCQUNsQixJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTs0QkFDekIsSUFBSSxHQUFHLEdBQUksU0FBeUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDMUQsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJO2dDQUNuQyxHQUFHLElBQUksR0FBRyxDQUFDO3lCQUNkOzZCQUNJOzRCQUNILElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDeEIsSUFBSSxDQUFDLE9BQU87Z0NBQUUsU0FBUzs0QkFDdkIsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO2dDQUNkLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0NBQzlCLElBQUksR0FBRyxJQUFJLFNBQVM7b0NBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQzs2QkFDbEM7aUNBQ0k7Z0NBQ0gsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDOUIsSUFBSSxHQUFHLEtBQUssU0FBUztvQ0FDbkIsR0FBRyxJQUFJLEdBQUcsQ0FBQzs2QkFDZDs0QkFDRCxJQUFJLEdBQUcsS0FBSyxLQUFLO2dDQUNmLE1BQU07eUJBQ1Q7cUJBQ0Y7b0JBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQzVCLENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTyxVQUFVLENBQUMsSUFBYTtRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDcEIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRztvQkFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNyRSxJQUFJLENBQUMsQ0FBQyxHQUFHO29CQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O29CQUMxRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO3dCQUN0QixZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQVEsQ0FBQztZQUNqRixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBaUQ7UUFDcEUsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUztnQkFDOUIsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQzNFLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxVQUFVO2dCQUNwQyxPQUFPLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDOUc7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQ2YsT0FBTyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzs7WUFFdEYsT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCxPQUFPLENBQUMsTUFBa0IsRUFBRSxHQUFlO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssS0FBSyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssS0FBSztZQUFFLE9BQU87UUFDekYsSUFBSSxDQUFXLEVBQUUsTUFBZ0IsRUFBRSxLQUFLLENBQUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQWEsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7WUFDYixDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNaO1lBQ0gsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQ3RDLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQztnQkFBRSxPQUFPO1lBQ2xDLENBQUMsR0FBRyxFQUFjLENBQUM7WUFDbkIsS0FBSyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUMvQixJQUFJLE1BQU0sQ0FBQyxHQUFHO29CQUNaLFNBQVM7Z0JBQ1gsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztnQkFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDWixJQUFJLEdBQUcsS0FBSyxLQUFLO29CQUNmLE1BQU07YUFDVDtTQUNGO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksR0FBRyxDQUFDLEtBQUs7WUFDWCxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDcEI7WUFDSCxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUNuQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUM7b0JBQUUsT0FBTztnQkFDbEMsTUFBTSxHQUFHLEVBQWMsQ0FBQztnQkFDeEIsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUN6QixJQUFJLEdBQUcsQ0FBQyxHQUFHO3dCQUNULFNBQVM7b0JBQ1gsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztvQkFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDakIsSUFBSSxHQUFHLEtBQUssS0FBSzt3QkFDZixNQUFNO2lCQUNUO2FBQ0Y7O2dCQUVDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUNoQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ2Q7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxNQUFNO1FBQ0osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQzdDLEtBQUssR0FBRyxFQUFZLEVBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbEQsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtTQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxDQUFDLEdBQUc7Z0JBQUUsT0FBTztZQUNsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDNUIsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFXLENBQUM7WUFDMUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDbEQsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO2dCQUNaLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELEtBQUssRUFBRTtvQkFDTCxZQUFZO29CQUNaLE1BQU0sRUFBRSxPQUFPO2lCQUNoQjthQUNNLENBQUMsQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDUixLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUM7Z0JBQ1osS0FBSzthQUNDLENBQUMsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQ3ZCO1lBQ0UsVUFBVSxFQUFFO2dCQUNWO29CQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87b0JBQ2hDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUN0QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBYSxDQUFBLENBQUM7b0JBQzdFLElBQUk7aUJBQ1E7YUFDZjtTQUNGLEVBQ0QsTUFBTSxDQUNQLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNSLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2RSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7O3dCQUU3QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxRQUFRLEtBQUssQ0FBQzt3QkFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7O3dCQUU3QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbkM7Z0JBQ0QsUUFBUSxFQUFFLENBQUM7YUFDWjtZQUNELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDO29CQUNULElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztvQkFFN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDbkM7U0FDRjtJQUNILENBQUM7O2dIQTFjVSxtQkFBbUI7b0dBQW5CLG1CQUFtQixpbEJDM0JoQyxneURBMkNBLGdhRGxCYyxDQUFDLGVBQWUsQ0FBQzsyRkFFbEIsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLG9CQUFvQixjQUdsQixDQUFDLGVBQWUsQ0FBQzswTkFPVCxZQUFZO3NCQUEvQixTQUFTO3VCQUFDLE9BQU87Z0JBQ1QsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ1MsS0FBSztzQkFBbkIsS0FBSzt1QkFBQyxNQUFNO2dCQUNHLE1BQU07c0JBQXJCLEtBQUs7dUJBQUMsT0FBTztnQkFDRyxPQUFPO3NCQUF2QixLQUFLO3VCQUFDLFFBQVE7Z0JBRVAsUUFBUTtzQkFEZixLQUFLO3VCQUFDLFNBQVM7Z0JBR2hCLE9BQU87c0JBRE4sS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVPLEdBQUc7c0JBQWYsS0FBSztnQkEwQkcsT0FBTztzQkFBZixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFLSyxXQUFXO3NCQURyQixLQUFLO2dCQUlzQixTQUFTO3NCQUFwQyxNQUFNO3VCQUFDLFNBQVM7Z0JBQ0UsYUFBYTtzQkFBL0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmb3JtYXRDdXJyZW5jeSwgZm9ybWF0UGVyY2VudCwgZm9ybWF0TnVtYmVyLCBnZXRDdXJyZW5jeVN5bWJvbCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBXb3JrYm9vaywgV29ya3NoZWV0LCBSb3csIENvbHVtbiB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1leGNlbC1leHBvcnQnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGlzQXJyYXksIGlzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi9jb3JlL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IEN1YmVTZXJ2aWNlLCBtb2RlbGl6ZSwgU2VyaWVzIH0gZnJvbSAnLi4vY3ViZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFzb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9kYXRhc291cmNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IEF4ZXNNYXAsIEF4aXNUeXBlLCBDdWJlLCBDdWJlQXhpcywgQ3ViZUluZGV4IH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBtYXRyaXhBbmltYXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBTY29wZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEF4aXNDbGlja0V2ZW50IH0gZnJvbSAnLi4vZGVjbGFyYXRpb25zJztcclxuXHJcbmNvbnN0IExPQURJTkdfREVMQVkgPSAyMDAsIFNVTV9QUkVGSVggPSAnX3N1bSc7XHJcblxyXG4vKiogY3ViZSBtYXRyaXggY29tcG9uZW50Ki9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtY3ViZS1tYXRyaXgnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbbWF0cml4QW5pbWF0aW9uXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3ViZU1hdHJpeENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgcmVhZG9ubHkgUFJFQ0lTSU9OID0gdGhpcy5fc2VydmljZS5kaWdpdHNJbmZvO1xyXG4gIHJlYWRvbmx5IExBTkdVQUdFID0gdGhpcy5fc2Vzc2lvbi5sYW5ndWFnZTtcclxuICBDVVJSRU5DWTogc3RyaW5nO1xyXG4gIFNZTUJPTDogc3RyaW5nO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGVFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxUYWJsZUVsZW1lbnQ+O1xyXG4gIEBJbnB1dCgpIHNlcmllc1RvdGFsTGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoKSB4QXhpc1RvdGFsTGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoJ2N1YmUnKSBfY3ViZT86IHN0cmluZztcclxuICBASW5wdXQoJ3hBeGlzJykgX3hBeGlzITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnc2VyaWVzJykgX3NlcmllcyE6IHN0cmluZztcclxuICBASW5wdXQoJ2luZGljZXMnKVxyXG4gIHByaXZhdGUgX2luZGljZXM/OiBzdHJpbmdbXSB8IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIGluZGV4QXQ6ICdzZXJpZXMnIHwgJ3hBeGlzJyA9ICdzZXJpZXMnO1xyXG4gIEBJbnB1dCgpXHJcbiAgcGxhY2VBdDogJ2xlYWRpbmcnIHwgJ3RyYWlsaW5nJyA9ICdsZWFkaW5nJztcclxuICBASW5wdXQoKSBzY29wZTogU2NvcGVUeXBlO1xyXG4gIHByaXZhdGUgX3N1bTogU3VtU2V0dGluZ3NbXTtcclxuICBASW5wdXQoKSBzZXQgc3VtKHZhbDogU3VtU2V0dGluZ3MgfCBTdW1TZXR0aW5nc1tdKSB7XHJcbiAgICBpZiAodmFsKSB0aGlzLl9zdW0gPSAoaXNBcnJheSh2YWwpID8gdmFsIDogW3ZhbF0pLlxyXG4gICAgICBtYXAoc3VtID0+IHtcclxuICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgaWYgKHN1bS52YWx1ZSlcclxuICAgICAgICAgIHZhbHVlID0gc3VtLnZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZWxzZSBpZiAoc3VtLmNhbGN1bGF0ZSlcclxuICAgICAgICAgIHN3aXRjaCAoc3VtLmNhbGN1bGF0ZSkge1xyXG4gICAgICAgICAgICBjYXNlICdtb250aCc6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSAnTScgKyAoJzAnICsgKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkpLnNsaWNlKC0yKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAneWVhcic6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLmNlaWwoKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpIC8gMykudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYWNjdW11bGF0ZSc6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSAnfic7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnN1bSxcclxuICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGZpbHRlcnM6IEF4ZXNNYXA7XHJcbiAgcHJpdmF0ZSBfaW50ZXJhY3RpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgcHVibGljIGdldCBpbnRlcmFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2ZTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGludGVyYWN0aXZlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pbnRlcmFjdGl2ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBPdXRwdXQoJ2V4cGxvcmUnKSByZWFkb25seSBvbkV4cGxvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPEF4aXNDbGlja0V2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBsb2FkaW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIHJvd3M6IEhlYWRlckluZm9bXTtcclxuICBjb2x1bW5zOiBIZWFkZXJJbmZvW107XHJcbiAgaW5kaWNlczogQ3ViZUluZGV4W10gPSBbXTtcclxuICBkYXRhOiB7IFtzZXJpZXM6IHN0cmluZ106IHsgW3hBeGlzOiBzdHJpbmddOiBzdHJpbmc7IH07IH07XHJcbiAgdG90YWxzOiB7IFt4QXhpczogc3RyaW5nXTogbnVtYmVyIH07XHJcbiAgY3ViZTogQ3ViZTtcclxuICB4QXhpczogQ3ViZUF4aXM7XHJcbiAgc2VyaWVzOiBDdWJlQXhpcztcclxuICBwcml2YXRlIF9kYXRhOiBEYXRhTWFwO1xyXG4gIHByaXZhdGUgX3ByZXBhcmU6IFByb21pc2U8YW55PjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3NiOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogQ3ViZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RzOiBEYXRhc291cmNlU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ19jdWJlJ10pIHtcclxuICAgICAgdGhpcy5jdWJlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmN1YmVzLmZpbmQoYyA9PiBjLm5hbWUgPT09IHRoaXMuX2N1YmUpO1xyXG4gICAgICB0aGlzLkNVUlJFTkNZID0gdGhpcy5jdWJlLmN1cnJlbmN5Q29kZSAvKnx8IHRoaXMuX3NlcnZpY2UuY3VycmVuY3lDb2RlKi87XHJcbiAgICAgIHRoaXMuU1lNQk9MID0gZ2V0Q3VycmVuY3lTeW1ib2wodGhpcy5DVVJSRU5DWSwgJ25hcnJvdycpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmN1YmUpIHtcclxuICAgICAgdGhpcy5jdWJlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmN1YmVzWzBdO1xyXG4gICAgICB0aGlzLkNVUlJFTkNZID0gdGhpcy5jdWJlLmN1cnJlbmN5Q29kZSAvKnx8IHRoaXMuX3NlcnZpY2UuY3VycmVuY3lDb2RlKi87XHJcbiAgICAgIHRoaXMuU1lNQk9MID0gZ2V0Q3VycmVuY3lTeW1ib2wodGhpcy5DVVJSRU5DWSwgJ25hcnJvdycpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ19pbmRpY2VzJ10pXHJcbiAgICAgIHRoaXMuaW5kaWNlcyA9IHRoaXMuY3ViZS5pbmRpY2VzLmZpbHRlcihpID0+IGlzQXJyYXkodGhpcy5faW5kaWNlcykgPyB0aGlzLl9pbmRpY2VzLmluZGV4T2YoaS5uYW1lKSA+IC0xIDogdGhpcy5faW5kaWNlcyA9PT0gaS5uYW1lKTtcclxuICAgIGlmIChjaGFuZ2VzWydfeEF4aXMnXSB8fCBjaGFuZ2VzWydfc2VyaWVzJ10pIHtcclxuICAgICAgdGhpcy54QXhpcyA9IHRoaXMuY3ViZS5heGVzLmZpbmQoYSA9PiBhLm5hbWUgPT09IHRoaXMuX3hBeGlzKTtcclxuICAgICAgdGhpcy5zZXJpZXMgPSB0aGlzLmN1YmUuYXhlcy5maW5kKGEgPT4gYS5uYW1lID09PSB0aGlzLl9zZXJpZXMpO1xyXG4gICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLl9wcmVwYXJlID0gZm9ya0pvaW4odGhpcy5fZHMuYWxsKHRoaXMuc2VyaWVzLmRhdGFUeXBlKS5waXBlKHRhcChyID0+XHJcbiAgICAgICAgdGhpcy5yb3dzID0gclxyXG4gICAgICApKSxcclxuICAgICAgICB0aGlzLl9kcy5hbGwodGhpcy54QXhpcy5kYXRhVHlwZSkucGlwZSh0YXAoYyA9PlxyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zID0gY1xyXG4gICAgICAgICkpKS50b1Byb21pc2UoKS50aGVuKFxyXG4gICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmRpY2VzICYmIHRoaXMuX2FkZGluZGljZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5fc3VtICYmIHRoaXMuX2FkZHN1bWhlYWRlcnMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNoYW5nZXNbJ2ZpbHRlcnMnXSlcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FkZGluZGljZXMoKSB7XHJcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5pbmRleEF0ID09PSAneEF4aXMnID8gdGhpcy5jb2x1bW5zIDogdGhpcy5yb3dzO1xyXG4gICAgdGhpcy5pbmRpY2VzLmZvckVhY2goKHgsIGkpID0+IHtcclxuICAgICAgY29uc3QgaGVhZGVyID0ge1xyXG4gICAgICAgIGtleTogeC5uYW1lLFxyXG4gICAgICAgIHZhbHVlOiB4LnRpdGxlLFxyXG4gICAgICAgIGluZGV4OiB4LFxyXG4gICAgICAgIGFjY3VtdWxhdGU6IHguYWNjdW11bGF0ZVxyXG4gICAgICB9IGFzIEhlYWRlckluZm87XHJcbiAgICAgIGlmICh0aGlzLnBsYWNlQXQgPT09ICd0cmFpbGluZycpXHJcbiAgICAgICAgY29sbGVjdGlvbi5wdXNoKGhlYWRlcik7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBjb2xsZWN0aW9uLnNwbGljZShpLCAwLCBoZWFkZXIpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWRkc3VtaGVhZGVycygpIHtcclxuICAgIHRoaXMuX3N1bS5mb3JFYWNoKChzLCBpKSA9PiB7XHJcbiAgICAgIGxldCB7IHZhbHVlLCBheGlzIH0gPSBzO1xyXG4gICAgICBjb25zdCBoZWFkZXIgPSB7XHJcbiAgICAgICAga2V5OiBTVU1fUFJFRklYICsgaSxcclxuICAgICAgICB2YWx1ZTogcy50aXRsZSxcclxuICAgICAgICBhY2N1bXVsYXRlOiAhaXNGdW5jdGlvbihzLmNhbGN1bGF0ZSkgJiYgcy5jYWxjdWxhdGUgIT09ICdhY2N1bXVsYXRlJyxcclxuICAgICAgICBleHBsb3JhYmxlOiAhaXNGdW5jdGlvbihzLmNhbGN1bGF0ZSkgJiYgcy5leHBsb3JhYmxlICE9PSBmYWxzZSxcclxuICAgICAgICBwcmVjaXNpb246IHMucHJlY2lzaW9uLFxyXG4gICAgICAgIHN1bTogc1xyXG4gICAgICB9IGFzIEhlYWRlckluZm87XHJcbiAgICAgIGxldCBqID0gMDtcclxuICAgICAgaWYgKGF4aXMgPT09ICd4QXhpcycpIHtcclxuICAgICAgICB3aGlsZSAoaiA8IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbHVtbnNbal0ua2V5ID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKGogKyAxLCAwLCBoZWFkZXIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGorKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGogPT09IHRoaXMuY29sdW1ucy5sZW5ndGgpXHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChoZWFkZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHdoaWxlIChqIDwgdGhpcy5yb3dzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMucm93c1tqXS5rZXkgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93cy5zcGxpY2UoaiArIDEsIDAsIGhlYWRlcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaisrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaiA9PT0gdGhpcy5yb3dzLmxlbmd0aClcclxuICAgICAgICAgIHRoaXMucm93cy5wdXNoKGhlYWRlcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IHByb2dyZXNzVGFzayA9IHNldFRpbWVvdXQoKCkgPT5cclxuICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlLm5leHQodGhpcy5sb2FkaW5nID0gdHJ1ZSlcclxuICAgICAgLCBMT0FESU5HX0RFTEFZKTtcclxuICAgIHRoaXMuX3ByZXBhcmUudGhlbigoKSA9PiB0aGlzLl9zZXJ2aWNlLnNlcmllcyh0aGlzLmN1YmUubmFtZSwgdGhpcy5feEF4aXMsIHtcclxuICAgICAgc2VyaWVzOiB0aGlzLl9zZXJpZXMsXHJcbiAgICAgIGluZGljZXM6IHRoaXMuX2luZGljZXMsXHJcbiAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVycyxcclxuICAgICAgaW52ZXJzZUluZGljZXM6IHRoaXMuaW5kZXhBdCA9PT0gJ3hBeGlzJyxcclxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGVcclxuICAgIH0gYXMgYW55KS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9zZXJpYWxpemUocik7XHJcbiAgICAgIHRoaXMuX2Nsb25lKGRhdGEpO1xyXG4gICAgICB0aGlzLl9zdW0gJiYgdGhpcy5fY2FsY3VsYXRlc3VtKGRhdGEpO1xyXG4gICAgICB0aGlzLl90b3RhbHMoZGF0YSk7XHJcbiAgICAgIHRoaXMuX3N0cmluZ2lmeShkYXRhKTtcclxuICAgICAgdGhpcy5kYXRhID0gZGF0YSBhcyBhbnk7XHJcbiAgICAgIGNsZWFyVGltZW91dChwcm9ncmVzc1Rhc2spO1xyXG4gICAgICB0aGlzLmxvYWRpbmdDaGFuZ2UubmV4dCh0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XHJcbiAgICB9LFxyXG4gICAgICAoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLl9zYi5lcnJvcihlLnN0YXR1cyA9PT0gNDA2ID8gJ1VuYXV0aG9yaXplZCcgOiBudWxsKTtcclxuICAgICAgICBjbGVhclRpbWVvdXQocHJvZ3Jlc3NUYXNrKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdDaGFuZ2UubmV4dCh0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXJpYWxpemUoc2VyaWVzOiBTZXJpZXNbXSkge1xyXG4gICAgY29uc3QgZCA9IHt9O1xyXG4gICAgc2VyaWVzLmZvckVhY2gocyA9PiB7XHJcbiAgICAgIGlmIChzLmluZGV4KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5kZXhBdCA9PT0gJ3hBeGlzJylcclxuICAgICAgICAgIHMucG9pbnRzLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgIGxldCByb3cgPSBkW3AueF07XHJcbiAgICAgICAgICAgIGlmICghcm93KVxyXG4gICAgICAgICAgICAgIHJvdyA9IGRbcC54XSA9IHt9O1xyXG4gICAgICAgICAgICByb3dbcy5pbmRleF0gPSBwLnk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHJvdyA9IGRbcy5pbmRleF0gPSB7fTtcclxuICAgICAgICAgIHMucG9pbnRzLmZvckVhY2gocCA9PiByb3dbcC54XSA9IHAueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCByb3cgPSBkW3MubmFtZV0gPSB7fTtcclxuICAgICAgICBzLnBvaW50cy5mb3JFYWNoKHAgPT4gcm93W3AueF0gPSBwLnkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvbmUoZGF0YSkge1xyXG4gICAgdGhpcy5fZGF0YSA9IHt9O1xyXG4gICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgIGNvbnN0IGtleSA9IHIua2V5O1xyXG4gICAgICBpZiAoIWRhdGFba2V5XSkgZGF0YVtrZXldID0ge307XHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fZGF0YVtrZXldID0ge30sIGRhdGFba2V5XSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG90YWxzKGRhdGE6IERhdGFNYXApIHtcclxuICAgIGxldCBncmFuZCA9IDA7XHJcbiAgICB0aGlzLnJvd3MuZm9yRWFjaChyID0+IHtcclxuICAgICAgY29uc3QgZGF0YXJvdyA9IGRhdGFbci5rZXldO1xyXG4gICAgICBpZiAoZGF0YXJvdykge1xyXG4gICAgICAgIGxldCBjb2x1bW5Ub3RhbCA9IDA7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBpZiAoYy5hY2N1bXVsYXRlID09PSBmYWxzZSB8fCBjLnN1bSAhPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgICBsZXQgdmFsID0gZGF0YXJvd1tjLmtleV07XHJcbiAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNvbHVtblRvdGFsICs9IHRoaXMuaW5kaWNlcy5sZW5ndGggPT09IDAgfHwgdGhpcy5pbmRleEF0ICE9PSAneEF4aXMnIHx8XHJcbiAgICAgICAgICAgICAgYy5pbmRleCAhPT0gdW5kZWZpbmVkID8gdmFsIDogLXZhbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkYXRhcm93WydfdG90YWwnXSA9IHRoaXMuX2Zvcm1hdChjb2x1bW5Ub3RhbCwgcik7XHJcbiAgICAgICAgaWYgKCFyLnN1bSlcclxuICAgICAgICAgIGdyYW5kICs9IHRoaXMuaW5kaWNlcy5sZW5ndGggPT09IDAgfHxcclxuICAgICAgICAgICAgdGhpcy5pbmRleEF0ID09PSAneEF4aXMnIHx8XHJcbiAgICAgICAgICAgIHIuaW5kZXggIT09IHVuZGVmaW5lZCA/IGNvbHVtblRvdGFsIDogLWNvbHVtblRvdGFsO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBkYXRhW3Iua2V5XSA9IHtcclxuICAgICAgICAgICdfdG90YWwnOiAnMCcgYXMgYW55XHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgdG90YWxzID0gZGF0YVsnX3RvdGFsJ10gPSB0aGlzLnRvdGFscyA9IHt9O1xyXG4gICAgdG90YWxzWydfZ3JhbmQnXSA9IHRoaXMuX2Zvcm1hdChncmFuZCk7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgbGV0IHJvd1RvdGFsID0gMDtcclxuICAgICAgdGhpcy5yb3dzLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICBpZiAocm93LmFjY3VtdWxhdGUgPT09IGZhbHNlIHx8IHJvdy5zdW0gIT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IGRhdGFbcm93LmtleV1bYy5rZXldO1xyXG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgIHJvd1RvdGFsICs9IHRoaXMuaW5kaWNlcy5sZW5ndGggPT09IDAgfHwgdGhpcy5pbmRleEF0ID09PSAneEF4aXMnIHx8XHJcbiAgICAgICAgICAgIHJvdy5pbmRleCAhPT0gdW5kZWZpbmVkID8gdmFsIDogLXZhbDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRvdGFsc1tjLmtleV0gPSB0aGlzLl9mb3JtYXQocm93VG90YWwsIGMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NhbGN1bGF0ZXN1bShkYXRhOiBEYXRhTWFwKSB7XHJcbiAgICB0aGlzLl9zdW0uZm9yRWFjaCgocywgaSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGF4aXMsIHZhbHVlLCBjYWxjdWxhdGUgfSA9IHM7XHJcbiAgICAgIGNvbnN0IG5hbWUgPSBTVU1fUFJFRklYICsgaTtcclxuICAgICAgaWYgKGF4aXMgPT09ICd4QXhpcycpIHtcclxuICAgICAgICB0aGlzLnJvd3MuZm9yRWFjaChyID0+IHtcclxuICAgICAgICAgIGlmIChyLmFjY3VtdWxhdGUgPT09IGZhbHNlKSByZXR1cm47XHJcbiAgICAgICAgICBjb25zdCBkYXRhcm93ID0gZGF0YVtyLmtleV07XHJcbiAgICAgICAgICBpZiAoIWRhdGFyb3cpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uLmluZGV4KSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IGtleSA9IGNvbHVtbi5rZXk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4uc3VtKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsY3VsYXRlKSkge1xyXG4gICAgICAgICAgICAgIGxldCB2YWwgPSAoY2FsY3VsYXRlIGFzIENhbGN1bGF0ZUZuKShyLmtleSwgdGhpcy5fZGF0YSk7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbCA9IGRhdGFyb3dba2V5XTtcclxuICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gdmFsO1xyXG4gICAgICAgICAgICAgIGlmIChrZXkgPT09IHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGFyb3dbbmFtZV0gPSBzdW07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGRhdGFyb3cgPSBkYXRhW25hbWVdID0ge307XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICAgICAgZm9yIChsZXQgcm93IG9mIHRoaXMucm93cykge1xyXG4gICAgICAgICAgICBpZiAocm93LmluZGV4KSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IGtleSA9IHJvdy5rZXk7XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHtcclxuICAgICAgICAgICAgICBsZXQgdmFsID0gKGNhbGN1bGF0ZSBhcyBDYWxjdWxhdGVGbikocm93LmtleSwgdGhpcy5fZGF0YSk7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IGRhdGFyb3cgPSBkYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgaWYgKCFkYXRhcm93KSBjb250aW51ZTtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uLnN1bSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IGRhdGFyb3dbY29sdW1uLmtleV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsICE9IHVuZGVmaW5lZCkgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gZGF0YXJvd1tjb2x1bW4ua2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGtleSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0YXJvd1tjb2x1bW4ua2V5XSA9IHN1bTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N0cmluZ2lmeShkYXRhOiBEYXRhTWFwKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgY29uc3QgeEF4aXMgPSByLmtleSwgc2VyaWVzID0gYy5rZXk7XHJcbiAgICAgICAgaWYgKGMuc3VtKSBkYXRhW3hBeGlzXVtzZXJpZXNdID0gdGhpcy5fZm9ybWF0KGRhdGFbeEF4aXNdW3Nlcmllc10sIGMuc3VtKTtcclxuICAgICAgICBlbHNlIGlmIChyLnN1bSkgZGF0YVt4QXhpc11bc2VyaWVzXSA9IHRoaXMuX2Zvcm1hdChkYXRhW3hBeGlzXVtzZXJpZXNdLCByLnN1bSk7XHJcbiAgICAgICAgZWxzZSBkYXRhW3hBeGlzXVtzZXJpZXNdID1cclxuICAgICAgICAgIGZvcm1hdE51bWJlcihkYXRhW3hBeGlzXVtzZXJpZXNdIHx8IDAsIHRoaXMuTEFOR1VBR0UsIHRoaXMuUFJFQ0lTSU9OKSBhcyBhbnk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Zvcm1hdCh2YWwsIG9wdGlvbnM/OiB7IGZvcm1hdD86IHN0cmluZywgcHJlY2lzaW9uPzogc3RyaW5nIH0pOiBhbnkge1xyXG4gICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAncGVyY2VudCcpXHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFBlcmNlbnQodmFsLCB0aGlzLkxBTkdVQUdFLCBvcHRpb25zLnByZWNpc2lvbiB8fCB0aGlzLlBSRUNJU0lPTik7XHJcbiAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnY3VycmVuY3knKVxyXG4gICAgICAgIHJldHVybiBmb3JtYXRDdXJyZW5jeSh2YWwsIHRoaXMuTEFOR1VBR0UsIHRoaXMuU1lNQk9MLCB0aGlzLkNVUlJFTkNZLCBvcHRpb25zLnByZWNpc2lvbiB8fCB0aGlzLlBSRUNJU0lPTik7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5DVVJSRU5DWSlcclxuICAgICAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KHZhbCwgdGhpcy5MQU5HVUFHRSwgdGhpcy5TWU1CT0wsIHRoaXMuQ1VSUkVOQ1ksIHRoaXMuUFJFQ0lTSU9OKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWwsIHRoaXMuTEFOR1VBR0UsIHRoaXMuUFJFQ0lTSU9OKTtcclxuICB9XHJcbiAgZXhwbG9yZShjb2x1bW46IEhlYWRlckluZm8sIHJvdzogSGVhZGVySW5mbykge1xyXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aXZlIHx8IGNvbHVtbi5leHBsb3JhYmxlID09PSBmYWxzZSB8fCByb3cuZXhwbG9yYWJsZSA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgIGxldCB4OiBBeGlzVHlwZSwgc2VyaWVzOiBBeGlzVHlwZSwgaW5kZXg7XHJcbiAgICBjb25zdCBheGVzID0geyAuLi50aGlzLmZpbHRlcnMgfSBhcyBBeGVzTWFwO1xyXG4gICAgaWYgKCFjb2x1bW4uc3VtKVxyXG4gICAgICB4ID0gY29sdW1uLmtleTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgeyB2YWx1ZSwgY2FsY3VsYXRlIH0gPSBjb2x1bW4uc3VtO1xyXG4gICAgICBpZiAoaXNGdW5jdGlvbihjYWxjdWxhdGUpKSByZXR1cm47XHJcbiAgICAgIHggPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgZm9yIChsZXQgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xyXG4gICAgICAgIGlmIChjb2x1bW4uc3VtKVxyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgbGV0IGtleSA9IGNvbHVtbi5rZXk7XHJcbiAgICAgICAgeC5wdXNoKGtleSk7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXhlc1t0aGlzLnhBeGlzLm5hbWVdID0geDtcclxuICAgIGlmIChyb3cuaW5kZXgpXHJcbiAgICAgIGluZGV4ID0gcm93LmluZGV4Lm5hbWU7XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHJvdy5zdW0pIHtcclxuICAgICAgICBsZXQgeyB2YWx1ZSwgY2FsY3VsYXRlIH0gPSByb3cuc3VtO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHJldHVybjtcclxuICAgICAgICBzZXJpZXMgPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgICBmb3IgKGxldCByb3cgb2YgdGhpcy5yb3dzKSB7XHJcbiAgICAgICAgICBpZiAocm93LnN1bSlcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICBsZXQga2V5ID0gcm93LmtleTtcclxuICAgICAgICAgIHNlcmllcy5wdXNoKGtleSk7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSB2YWx1ZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBzZXJpZXMgPSByb3cua2V5O1xyXG4gICAgICBheGVzW3RoaXMuc2VyaWVzLm5hbWVdID0gc2VyaWVzO1xyXG4gICAgICBpbmRleCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uRXhwbG9yZS5lbWl0KHsgYXhlcywgaW5kZXggfSk7XHJcbiAgfVxyXG4gIGV4cG9ydCgpIHtcclxuICAgIGNvbnN0IG51bWJlckZvcm1hdCA9IHRoaXMuX3NlcnZpY2UubnVtYmVyRm9ybWF0LFxyXG4gICAgICBjZWxscyA9IFtdIGFzIENlbGxbXSxcclxuICAgICAgcm93cyA9IFt7IGluZGV4OiAxLCBjZWxscyB9XTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjLCBqKSA9PiAhYy5zdW0gJiYgY2VsbHMucHVzaCh7XHJcbiAgICAgIGluZGV4OiBqICsgMixcclxuICAgICAgdmFsdWU6IGMudmFsdWUsIHN0eWxlOiB7IGJvbGQ6IHRydWUgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMucm93cy5mb3JFYWNoKChyLCBpKSA9PiB7XHJcbiAgICAgIGlmIChyLnN1bSkgcmV0dXJuO1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YVtyLmtleV0sXHJcbiAgICAgICAgY2VsbHMgPSBbeyBpbmRleDogMSwgdmFsdWU6IHIudmFsdWUsIHN0eWxlOiB7IGJvbGQ6IHRydWUgfSB9XSBhcyBDZWxsW107XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjLCBqKSA9PiAhYy5zdW0gJiYgY2VsbHMucHVzaCh7XHJcbiAgICAgICAgdHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgaW5kZXg6IGogKyAyLFxyXG4gICAgICAgIHZhbHVlOiBkYXRhICYmIGRhdGFbYy5rZXldICE9PSB1bmRlZmluZWQgPyBkYXRhW2Mua2V5XSA6IDAsXHJcbiAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgIG51bWJlckZvcm1hdCxcclxuICAgICAgICAgIGhBbGlnbjogJ3JpZ2h0JyxcclxuICAgICAgICB9XHJcbiAgICAgIH0gYXMgQ2VsbCkpO1xyXG4gICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgIGluZGV4OiBpICsgMixcclxuICAgICAgICBjZWxsc1xyXG4gICAgICB9IGFzIFJvdyk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGJvb2sgPSBuZXcgV29ya2Jvb2soXHJcbiAgICAgIHtcclxuICAgICAgICB3b3Jrc2hlZXRzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGVuYWJsZVJ0bDogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlLFxyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTaGVldE4nLCAxKSxcclxuICAgICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLm1hcCgoXywgaSkgPT4gKHsgaW5kZXg6IGkgKyAxLCB3aWR0aDogMTUwIH0gYXMgQ29sdW1uKSksXHJcbiAgICAgICAgICAgIHJvd3MsXHJcbiAgICAgICAgICB9IGFzIFdvcmtzaGVldCxcclxuICAgICAgICBdLFxyXG4gICAgICB9LFxyXG4gICAgICAneGxzeCdcclxuICAgICk7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLm5hbWVPZih0aGlzLmZpbHRlcnMsIHRoaXMuY3ViZS5uYW1lKS5zdWJzY3JpYmUobiA9PlxyXG4gICAgICBib29rLnNhdmUoYCR7biB8fCB0aGlzLl90cmFuc2xhdGUuZ2V0KCdNYXRyaXgnKX0ueGxzeGApKTtcclxuICB9XHJcbiAgX21vdmUoeCwgeSkge1xyXG4gICAgbGV0IHJvd0luZGV4ID0gMDtcclxuICAgIGZvciAobGV0IGIgPSAwOyBiIDwgdGhpcy50YWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudC50Qm9kaWVzLmxlbmd0aDsgYisrKSB7XHJcbiAgICAgIGxldCB0Qm9keSA9IHRoaXMudGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudEJvZGllcy5pdGVtKGIpO1xyXG4gICAgICBmb3IgKGxldCByID0gMDsgciA8IHRCb2R5LnJvd3MubGVuZ3RoOyByKyspIHtcclxuICAgICAgICBsZXQgcm93ID0gdEJvZHkucm93cy5pdGVtKHIpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93LmNlbGxzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICBsZXQgY2VsbCA9IHJvdy5jZWxscy5pdGVtKGMpO1xyXG4gICAgICAgICAgaWYgKGMgPT09IHgpXHJcbiAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZCgnY2VsbC14Jyk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LnJlbW92ZSgnY2VsbC14Jyk7XHJcbiAgICAgICAgICBpZiAocm93SW5kZXggPT09IHkpXHJcbiAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZCgnY2VsbC15Jyk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LnJlbW92ZSgnY2VsbC15Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvd0luZGV4Kys7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHRGb290ID0gdGhpcy50YWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudC50Rm9vdCwgcm93ID0gdEZvb3Qucm93c1swXTtcclxuICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCByb3cuY2VsbHMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICBsZXQgY2VsbCA9IHJvdy5jZWxscy5pdGVtKGMpO1xyXG4gICAgICAgIGlmIChjID09PSB4KVxyXG4gICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKCdjZWxsLXgnKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5yZW1vdmUoJ2NlbGwteCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbnR5cGUgRGF0YU1hcCA9IHsgW3Nlcmllczogc3RyaW5nXTogeyBbeEF4aXM6IHN0cmluZ106IG51bWJlcjsgfTsgfTtcclxuXHJcbmV4cG9ydCB0eXBlIFN1bVNldHRpbmdzID0ge1xyXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGF4aXM6ICdzZXJpZXMnIHwgJ3hBeGlzJztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGZvcm1hdD86ICdwZXJjZW50JyB8ICdjdXJyZW5jeScgfCAnbnVtYmVyJztcclxuICBwcmVjaXNpb24/OiBzdHJpbmc7XHJcbiAgYWNjdW11bGF0ZT86IGJvb2xlYW47XHJcbiAgZXhwbG9yYWJsZT86IGJvb2xlYW47XHJcbiAgY2FsY3VsYXRlPzogJ3F1YXJ0ZXInIHwgJ3llYXInIHwgJ21vbnRoJyB8ICdhY2N1bXVsYXRlJyB8IENhbGN1bGF0ZUZuO1xyXG59XHJcblxyXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ2FsY3VsYXRlRm4ge1xyXG4gICh2YWx1ZTogc3RyaW5nLCBkYXRhOiB7IFtzZXJpZXM6IHN0cmluZ106IHsgW3hBeGlzOiBzdHJpbmddOiBudW1iZXI7IH07IH0pOiBudW1iZXI7XHJcbn1cclxuXHJcbnR5cGUgSGVhZGVySW5mbyA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG4gIHByZWNpc2lvbj86IHN0cmluZztcclxuICBleHBsb3JhYmxlPzogYm9vbGVhbjtcclxuICBhY2N1bXVsYXRlPzogYm9vbGVhbjtcclxuICBzdW0/OiBTdW1TZXR0aW5ncztcclxuICBpbmRleD86IEN1YmVJbmRleDtcclxufTtcclxuaW50ZXJmYWNlIENlbGwgeyB9XHJcbiIsIjx0YWJsZSAjdGFibGUgY2xhc3M9XCJtYXQtdGFibGUgY3ViZS10YWJsZVwiIChtb3VzZWxlYXZlKT1cIl9tb3ZlKC0xLCAtMSlcIiAqbmdJZj1cImRhdGFcIj5cclxuICA8dGhlYWQ+XHJcbiAgICA8IS0tIGhlYWRlcnMgLS0+XHJcbiAgICA8dHIgY2xhc3M9XCJtYXQtaGVhZGVyLXJvd1wiPlxyXG4gICAgICA8dGg+PC90aD5cclxuICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IHggPSBpbmRleFwiXHJcbiAgICAgICAgICAobW91c2VlbnRlcik9XCJfbW92ZSh4ICsgMSwgLTIpXCIgY2xhc3M9XCJtYXQtaGVhZGVyLWNlbGxcIj5cclxuICAgICAgICB7eyBjb2x1bW4udmFsdWUgfX1cclxuICAgICAgPC90aD5cclxuICAgICAgPHRoIGNsYXNzPVwibWF0LWhlYWRlci1jZWxsXCI+e3t4QXhpc1RvdGFsTGFiZWx9fTwvdGg+XHJcbiAgICA8L3RyPlxyXG4gIDwvdGhlYWQ+XHJcbiAgPHRib2R5PlxyXG4gICAgPCEtLSByb3dzIC0tPlxyXG4gICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGV0IHkgPSBpbmRleFwiIGNsYXNzPVwibWF0LXJvd1wiXHJcbiAgICAgICAgW2NsYXNzLmN1YmUtaW5kZXhdPVwicm93LmluZGV4XCI+XHJcbiAgICAgIDx0aCBjbGFzcz1cIm1hdC1oZWFkZXItY2VsbFwiIChtb3VzZWVudGVyKT1cIl9tb3ZlKC0yLCB5IClcIj57eyByb3cudmFsdWUgfX08L3RoPlxyXG4gICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgeCA9IGluZGV4XCIgY2xhc3M9XCJtYXQtY2VsbCBmaWd1cmVcIlxyXG4gICAgICAgICAgW2NsYXNzLmV4cGxvcmFibGVdPVwiaW50ZXJhY3RpdmUgJiYgY29sdW1uLmV4cGxvcmFibGUgIT09IGZhbHNlICYmIHJvdy5leHBsb3JhYmxlICE9PSBmYWxzZVwiXHJcbiAgICAgICAgICAobW91c2VlbnRlcik9XCJfbW92ZSh4ICsgMSwgeSApXCJcclxuICAgICAgICAgIChjbGljayk9XCJleHBsb3JlKGNvbHVtbiwgcm93KVwiPlxyXG4gICAgICAgICAge3sgZGF0YVtyb3cua2V5XVtjb2x1bW4ua2V5XSB9fVxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8dGggY2xhc3M9XCJtYXQtY2VsbCBmaWd1cmVcIiAobW91c2VlbnRlcik9XCJfbW92ZSgtMSwgeSApXCI+XHJcbiAgICAgICAgICB7eyBkYXRhW3Jvdy5rZXldWydfdG90YWwnXSB9fVxyXG4gICAgICA8L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3Rib2R5PlxyXG4gIDx0Zm9vdD5cclxuICAgIDwhLS0gZm9vdGVyIC0tPlxyXG4gICAgPHRyIGNsYXNzPVwibWF0LWZvb3Rlci1yb3dcIj5cclxuICAgICAgPHRkIGNsYXNzPVwibWF0LWZvb3Rlci1jZWxsXCI+e3tzZXJpZXNUb3RhbExhYmVsfX08L3RkPlxyXG4gICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgeCA9IGluZGV4XCIgY2xhc3M9XCJtYXQtZm9vdGVyLWNlbGwgZmlndXJlXCJcclxuICAgICAgICAgIChtb3VzZWVudGVyKT1cIl9tb3ZlKHggKyAxLCAtMilcIlxyXG4gICAgICAgICAgW2NsYXNzLm5lZ2F0aXZlLWZpZ3VyZV09XCJ0b3RhbHNbY29sdW1uLmtleV0uc3RhcnRzV2l0aCgnLScpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvdGFsc1tjb2x1bW4ua2V5XSAhPT0gdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICB7eyB0b3RhbHNbY29sdW1uLmtleV0gfX1cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC90ZD5cclxuICAgICAgPHRoIGNsYXNzPVwibWF0LWZvb3Rlci1jZWxsIGZpZ3VyZVwiPnt7IHRvdGFsc1snX2dyYW5kJ10gfX08L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3Rmb290PlxyXG48L3RhYmxlPlxyXG4iXX0=
489
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL21hdHJpeC90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvbWF0cml4L3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUEwQixNQUFNLDhCQUE4QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFNM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQUt4RCxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUUvQywyQkFBMkI7QUFPM0IsTUFBTSxPQUFPLG1CQUFtQjtJQW1FOUIsWUFDVSxHQUFrQixFQUNsQixRQUFxQixFQUNyQixRQUF3QixFQUN4QixVQUE0QixFQUM1QixHQUFzQjtRQUp0QixRQUFHLEdBQUgsR0FBRyxDQUFlO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsYUFBUSxHQUFSLFFBQVEs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Z0JBQ0csT0FBTztzQkFBdkIsS0FBSzt1QkFBQyxRQUFRO2dCQUVQLFFBQVE7c0JBRGYsS0FBSzt1QkFBQyxTQUFTO2dCQUdoQixPQUFPO3NCQUROLEtBQUs7Z0JBR04sT0FBTztzQkFETixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFTyxHQUFHO3NCQUFmLEtBQUs7Z0JBMEJHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0ssV0FBVztzQkFEckIsS0FBSztnQkFJc0IsU0FBUztzQkFBcEMsTUFBTTt1QkFBQyxTQUFTO2dCQUNFLGFBQWE7c0JBQS9CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3ksIGZvcm1hdFBlcmNlbnQsIGZvcm1hdE51bWJlciwgZ2V0Q3VycmVuY3lTeW1ib2wgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgV29ya2Jvb2ssIFdvcmtzaGVldCwgUm93LCBDb2x1bW4gfSBmcm9tICdAc3luY2Z1c2lvbi9lajItZXhjZWwtZXhwb3J0JztcclxuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBpc0FycmF5LCBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBDdWJlU2VydmljZSwgU2VyaWVzIH0gZnJvbSAnLi4vY3ViZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFzb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9kYXRhc291cmNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IEF4ZXNNYXAsIEF4aXNUeXBlLCBDdWJlLCBDdWJlQXhpcywgQ3ViZUluZGV4IH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBtYXRyaXhBbmltYXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBTY29wZVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEF4aXNDbGlja0V2ZW50IH0gZnJvbSAnLi4vZGVjbGFyYXRpb25zJztcclxuXHJcbmNvbnN0IExPQURJTkdfREVMQVkgPSAyMDAsIFNVTV9QUkVGSVggPSAnX3N1bSc7XHJcblxyXG4vKiogY3ViZSBtYXRyaXggY29tcG9uZW50Ki9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtY3ViZS1tYXRyaXgnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbbWF0cml4QW5pbWF0aW9uXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3ViZU1hdHJpeENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgcmVhZG9ubHkgUFJFQ0lTSU9OID0gdGhpcy5fc2VydmljZS5kaWdpdHNJbmZvO1xyXG4gIHJlYWRvbmx5IExBTkdVQUdFID0gdGhpcy5fc2Vzc2lvbi5sYW5ndWFnZTtcclxuICBDVVJSRU5DWTogc3RyaW5nO1xyXG4gIFNZTUJPTDogc3RyaW5nO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGVFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxUYWJsZUVsZW1lbnQ+O1xyXG4gIEBJbnB1dCgpIHNlcmllc1RvdGFsTGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoKSB4QXhpc1RvdGFsTGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoJ2N1YmUnKSBfY3ViZT86IHN0cmluZztcclxuICBASW5wdXQoJ3hBeGlzJykgX3hBeGlzITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnc2VyaWVzJykgX3NlcmllcyE6IHN0cmluZztcclxuICBASW5wdXQoJ2luZGljZXMnKVxyXG4gIHByaXZhdGUgX2luZGljZXM/OiBzdHJpbmdbXSB8IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIGluZGV4QXQ6ICdzZXJpZXMnIHwgJ3hBeGlzJyA9ICdzZXJpZXMnO1xyXG4gIEBJbnB1dCgpXHJcbiAgcGxhY2VBdDogJ2xlYWRpbmcnIHwgJ3RyYWlsaW5nJyA9ICdsZWFkaW5nJztcclxuICBASW5wdXQoKSBzY29wZTogU2NvcGVUeXBlO1xyXG4gIHByaXZhdGUgX3N1bTogU3VtU2V0dGluZ3NbXTtcclxuICBASW5wdXQoKSBzZXQgc3VtKHZhbDogU3VtU2V0dGluZ3MgfCBTdW1TZXR0aW5nc1tdKSB7XHJcbiAgICBpZiAodmFsKSB0aGlzLl9zdW0gPSAoaXNBcnJheSh2YWwpID8gdmFsIDogW3ZhbF0pLlxyXG4gICAgICBtYXAoc3VtID0+IHtcclxuICAgICAgICBsZXQgdmFsdWU7XHJcbiAgICAgICAgaWYgKHN1bS52YWx1ZSlcclxuICAgICAgICAgIHZhbHVlID0gc3VtLnZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZWxzZSBpZiAoc3VtLmNhbGN1bGF0ZSlcclxuICAgICAgICAgIHN3aXRjaCAoc3VtLmNhbGN1bGF0ZSkge1xyXG4gICAgICAgICAgICBjYXNlICdtb250aCc6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSAnTScgKyAoJzAnICsgKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkpLnNsaWNlKC0yKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAneWVhcic6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSBNYXRoLmNlaWwoKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSArIDEpIC8gMykudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYWNjdW11bGF0ZSc6XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSAnfic7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnN1bSxcclxuICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGZpbHRlcnM6IEF4ZXNNYXA7XHJcbiAgcHJpdmF0ZSBfaW50ZXJhY3RpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgcHVibGljIGdldCBpbnRlcmFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2ZTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGludGVyYWN0aXZlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pbnRlcmFjdGl2ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBPdXRwdXQoJ2V4cGxvcmUnKSByZWFkb25seSBvbkV4cGxvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPEF4aXNDbGlja0V2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBsb2FkaW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIHJvd3M6IEhlYWRlckluZm9bXTtcclxuICBjb2x1bW5zOiBIZWFkZXJJbmZvW107XHJcbiAgaW5kaWNlczogQ3ViZUluZGV4W10gPSBbXTtcclxuICBkYXRhOiB7IFtzZXJpZXM6IHN0cmluZ106IHsgW3hBeGlzOiBzdHJpbmddOiBzdHJpbmc7IH07IH07XHJcbiAgdG90YWxzOiB7IFt4QXhpczogc3RyaW5nXTogbnVtYmVyIH07XHJcbiAgY3ViZTogQ3ViZTtcclxuICB4QXhpczogQ3ViZUF4aXM7XHJcbiAgc2VyaWVzOiBDdWJlQXhpcztcclxuICBwcml2YXRlIF9kYXRhOiBEYXRhTWFwO1xyXG4gIHByaXZhdGUgX3ByZXBhcmU6IFByb21pc2U8YW55PjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3NiOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogQ3ViZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RzOiBEYXRhc291cmNlU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ19jdWJlJ10pIHtcclxuICAgICAgdGhpcy5jdWJlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmN1YmVzLmZpbmQoYyA9PiBjLm5hbWUgPT09IHRoaXMuX2N1YmUpO1xyXG4gICAgICB0aGlzLkNVUlJFTkNZID0gdGhpcy5jdWJlLmN1cnJlbmN5Q29kZSAvKnx8IHRoaXMuX3NlcnZpY2UuY3VycmVuY3lDb2RlKi87XHJcbiAgICAgIHRoaXMuU1lNQk9MID0gZ2V0Q3VycmVuY3lTeW1ib2wodGhpcy5DVVJSRU5DWSwgJ25hcnJvdycpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmN1YmUpIHtcclxuICAgICAgdGhpcy5jdWJlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmN1YmVzWzBdO1xyXG4gICAgICB0aGlzLkNVUlJFTkNZID0gdGhpcy5jdWJlLmN1cnJlbmN5Q29kZSAvKnx8IHRoaXMuX3NlcnZpY2UuY3VycmVuY3lDb2RlKi87XHJcbiAgICAgIHRoaXMuU1lNQk9MID0gZ2V0Q3VycmVuY3lTeW1ib2wodGhpcy5DVVJSRU5DWSwgJ25hcnJvdycpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ19pbmRpY2VzJ10pXHJcbiAgICAgIHRoaXMuaW5kaWNlcyA9IHRoaXMuY3ViZS5pbmRpY2VzLmZpbHRlcihpID0+IGlzQXJyYXkodGhpcy5faW5kaWNlcykgPyB0aGlzLl9pbmRpY2VzLmluZGV4T2YoaS5uYW1lKSA+IC0xIDogdGhpcy5faW5kaWNlcyA9PT0gaS5uYW1lKTtcclxuICAgIGlmIChjaGFuZ2VzWydfeEF4aXMnXSB8fCBjaGFuZ2VzWydfc2VyaWVzJ10pIHtcclxuICAgICAgdGhpcy54QXhpcyA9IHRoaXMuY3ViZS5heGVzLmZpbmQoYSA9PiBhLm5hbWUgPT09IHRoaXMuX3hBeGlzKTtcclxuICAgICAgdGhpcy5zZXJpZXMgPSB0aGlzLmN1YmUuYXhlcy5maW5kKGEgPT4gYS5uYW1lID09PSB0aGlzLl9zZXJpZXMpO1xyXG4gICAgICB0aGlzLmRhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLl9wcmVwYXJlID0gZm9ya0pvaW4odGhpcy5fZHMuYWxsKHRoaXMuc2VyaWVzLmRhdGFUeXBlKS5waXBlKHRhcChyID0+XHJcbiAgICAgICAgdGhpcy5yb3dzID0gclxyXG4gICAgICApKSxcclxuICAgICAgICB0aGlzLl9kcy5hbGwodGhpcy54QXhpcy5kYXRhVHlwZSkucGlwZSh0YXAoYyA9PlxyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zID0gY1xyXG4gICAgICAgICkpKS50b1Byb21pc2UoKS50aGVuKFxyXG4gICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmRpY2VzICYmIHRoaXMuX2FkZGluZGljZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5fc3VtICYmIHRoaXMuX2FkZHN1bWhlYWRlcnMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNoYW5nZXNbJ2ZpbHRlcnMnXSlcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FkZGluZGljZXMoKSB7XHJcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5pbmRleEF0ID09PSAneEF4aXMnID8gdGhpcy5jb2x1bW5zIDogdGhpcy5yb3dzO1xyXG4gICAgdGhpcy5pbmRpY2VzLmZvckVhY2goKHgsIGkpID0+IHtcclxuICAgICAgY29uc3QgaGVhZGVyID0ge1xyXG4gICAgICAgIGtleTogeC5uYW1lLFxyXG4gICAgICAgIHZhbHVlOiB4LnRpdGxlLFxyXG4gICAgICAgIGluZGV4OiB4LFxyXG4gICAgICAgIGFjY3VtdWxhdGU6IHguYWNjdW11bGF0ZVxyXG4gICAgICB9IGFzIEhlYWRlckluZm87XHJcbiAgICAgIGlmICh0aGlzLnBsYWNlQXQgPT09ICd0cmFpbGluZycpXHJcbiAgICAgICAgY29sbGVjdGlvbi5wdXNoKGhlYWRlcik7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBjb2xsZWN0aW9uLnNwbGljZShpLCAwLCBoZWFkZXIpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWRkc3VtaGVhZGVycygpIHtcclxuICAgIHRoaXMuX3N1bS5mb3JFYWNoKChzLCBpKSA9PiB7XHJcbiAgICAgIGxldCB7IHZhbHVlLCBheGlzIH0gPSBzO1xyXG4gICAgICBjb25zdCBoZWFkZXIgPSB7XHJcbiAgICAgICAga2V5OiBTVU1fUFJFRklYICsgaSxcclxuICAgICAgICB2YWx1ZTogcy50aXRsZSxcclxuICAgICAgICBhY2N1bXVsYXRlOiAhaXNGdW5jdGlvbihzLmNhbGN1bGF0ZSkgJiYgcy5jYWxjdWxhdGUgIT09ICdhY2N1bXVsYXRlJyxcclxuICAgICAgICBleHBsb3JhYmxlOiAhaXNGdW5jdGlvbihzLmNhbGN1bGF0ZSkgJiYgcy5leHBsb3JhYmxlICE9PSBmYWxzZSxcclxuICAgICAgICBwcmVjaXNpb246IHMucHJlY2lzaW9uLFxyXG4gICAgICAgIHN1bTogc1xyXG4gICAgICB9IGFzIEhlYWRlckluZm87XHJcbiAgICAgIGxldCBqID0gMDtcclxuICAgICAgaWYgKGF4aXMgPT09ICd4QXhpcycpIHtcclxuICAgICAgICB3aGlsZSAoaiA8IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbHVtbnNbal0ua2V5ID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKGogKyAxLCAwLCBoZWFkZXIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGorKztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGogPT09IHRoaXMuY29sdW1ucy5sZW5ndGgpXHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChoZWFkZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHdoaWxlIChqIDwgdGhpcy5yb3dzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMucm93c1tqXS5rZXkgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93cy5zcGxpY2UoaiArIDEsIDAsIGhlYWRlcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaisrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaiA9PT0gdGhpcy5yb3dzLmxlbmd0aClcclxuICAgICAgICAgIHRoaXMucm93cy5wdXNoKGhlYWRlcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IHByb2dyZXNzVGFzayA9IHNldFRpbWVvdXQoKCkgPT5cclxuICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlLm5leHQodGhpcy5sb2FkaW5nID0gdHJ1ZSlcclxuICAgICAgLCBMT0FESU5HX0RFTEFZKTtcclxuICAgIHRoaXMuX3ByZXBhcmUudGhlbigoKSA9PiB0aGlzLl9zZXJ2aWNlLnNlcmllcyh0aGlzLmN1YmUubmFtZSwgdGhpcy5feEF4aXMsIHtcclxuICAgICAgc2VyaWVzOiB0aGlzLl9zZXJpZXMsXHJcbiAgICAgIGluZGljZXM6IHRoaXMuX2luZGljZXMsXHJcbiAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVycyxcclxuICAgICAgaW52ZXJzZUluZGljZXM6IHRoaXMuaW5kZXhBdCA9PT0gJ3hBeGlzJyxcclxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGVcclxuICAgIH0gYXMgYW55KS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9zZXJpYWxpemUocik7XHJcbiAgICAgIHRoaXMuX2Nsb25lKGRhdGEpO1xyXG4gICAgICB0aGlzLl9zdW0gJiYgdGhpcy5fY2FsY3VsYXRlc3VtKGRhdGEpO1xyXG4gICAgICB0aGlzLl90b3RhbHMoZGF0YSk7XHJcbiAgICAgIHRoaXMuX3N0cmluZ2lmeShkYXRhKTtcclxuICAgICAgdGhpcy5kYXRhID0gZGF0YSBhcyBhbnk7XHJcbiAgICAgIGNsZWFyVGltZW91dChwcm9ncmVzc1Rhc2spO1xyXG4gICAgICB0aGlzLmxvYWRpbmdDaGFuZ2UubmV4dCh0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XHJcbiAgICB9LFxyXG4gICAgICAoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLl9zYi5lcnJvcihlLnN0YXR1cyA9PT0gNDA2ID8gJ1VuYXV0aG9yaXplZCcgOiBudWxsKTtcclxuICAgICAgICBjbGVhclRpbWVvdXQocHJvZ3Jlc3NUYXNrKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdDaGFuZ2UubmV4dCh0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXJpYWxpemUoc2VyaWVzOiBTZXJpZXNbXSkge1xyXG4gICAgY29uc3QgZCA9IHt9O1xyXG4gICAgc2VyaWVzLmZvckVhY2gocyA9PiB7XHJcbiAgICAgIGlmIChzLmluZGV4KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5kZXhBdCA9PT0gJ3hBeGlzJylcclxuICAgICAgICAgIHMucG9pbnRzLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgIGxldCByb3cgPSBkW3AueF07XHJcbiAgICAgICAgICAgIGlmICghcm93KVxyXG4gICAgICAgICAgICAgIHJvdyA9IGRbcC54XSA9IHt9O1xyXG4gICAgICAgICAgICByb3dbcy5pbmRleF0gPSBwLnk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHJvdyA9IGRbcy5pbmRleF0gPSB7fTtcclxuICAgICAgICAgIHMucG9pbnRzLmZvckVhY2gocCA9PiByb3dbcC54XSA9IHAueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCByb3cgPSBkW3MubmFtZV0gPSB7fTtcclxuICAgICAgICBzLnBvaW50cy5mb3JFYWNoKHAgPT4gcm93W3AueF0gPSBwLnkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvbmUoZGF0YSkge1xyXG4gICAgdGhpcy5fZGF0YSA9IHt9O1xyXG4gICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgIGNvbnN0IGtleSA9IHIua2V5O1xyXG4gICAgICBpZiAoIWRhdGFba2V5XSkgZGF0YVtrZXldID0ge307XHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fZGF0YVtrZXldID0ge30sIGRhdGFba2V5XSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG90YWxzKGRhdGE6IERhdGFNYXApIHtcclxuICAgIGxldCBncmFuZCA9IDA7XHJcbiAgICB0aGlzLnJvd3MuZm9yRWFjaChyID0+IHtcclxuICAgICAgY29uc3QgZGF0YXJvdyA9IGRhdGFbci5rZXldO1xyXG4gICAgICBpZiAoZGF0YXJvdykge1xyXG4gICAgICAgIGxldCBjb2x1bW5Ub3RhbCA9IDA7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICBpZiAoYy5hY2N1bXVsYXRlID09PSBmYWxzZSB8fCBjLnN1bSAhPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgICBsZXQgdmFsID0gZGF0YXJvd1tjLmtleV07XHJcbiAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIGNvbHVtblRvdGFsICs9IHRoaXMuaW5kaWNlcy5sZW5ndGggPT09IDAgfHwgdGhpcy5pbmRleEF0ICE9PSAneEF4aXMnIHx8XHJcbiAgICAgICAgICAgICAgYy5pbmRleCAhPT0gdW5kZWZpbmVkID8gdmFsIDogLXZhbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBkYXRhcm93WydfdG90YWwnXSA9IHRoaXMuX2Zvcm1hdChjb2x1bW5Ub3RhbCwgcik7XHJcbiAgICAgICAgaWYgKCFyLnN1bSlcclxuICAgICAgICAgIGdyYW5kICs9IHRoaXMuaW5kaWNlcy5sZW5ndGggPT09IDAgfHxcclxuICAgICAgICAgICAgdGhpcy5pbmRleEF0ID09PSAneEF4aXMnIHx8XHJcbiAgICAgICAgICAgIHIuaW5kZXggIT09IHVuZGVmaW5lZCA/IGNvbHVtblRvdGFsIDogLWNvbHVtblRvdGFsO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBkYXRhW3Iua2V5XSA9IHtcclxuICAgICAgICAgICdfdG90YWwnOiAnMCcgYXMgYW55XHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgdG90YWxzID0gZGF0YVsnX3RvdGFsJ10gPSB0aGlzLnRvdGFscyA9IHt9O1xyXG4gICAgdG90YWxzWydfZ3JhbmQnXSA9IHRoaXMuX2Zvcm1hdChncmFuZCk7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgbGV0IHJvd1RvdGFsID0gMDtcclxuICAgICAgdGhpcy5yb3dzLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICBpZiAocm93LmFjY3VtdWxhdGUgPT09IGZhbHNlIHx8IHJvdy5zdW0gIT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IGRhdGFbcm93LmtleV1bYy5rZXldO1xyXG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgIHJvd1RvdGFsICs9IHRoaXMuaW5kaWNlcy5sZW5ndGggPT09IDAgfHwgdGhpcy5pbmRleEF0ID09PSAneEF4aXMnIHx8XHJcbiAgICAgICAgICAgIHJvdy5pbmRleCAhPT0gdW5kZWZpbmVkID8gdmFsIDogLXZhbDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRvdGFsc1tjLmtleV0gPSB0aGlzLl9mb3JtYXQocm93VG90YWwsIGMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NhbGN1bGF0ZXN1bShkYXRhOiBEYXRhTWFwKSB7XHJcbiAgICB0aGlzLl9zdW0uZm9yRWFjaCgocywgaSkgPT4ge1xyXG4gICAgICBjb25zdCB7IGF4aXMsIHZhbHVlLCBjYWxjdWxhdGUgfSA9IHM7XHJcbiAgICAgIGNvbnN0IG5hbWUgPSBTVU1fUFJFRklYICsgaTtcclxuICAgICAgaWYgKGF4aXMgPT09ICd4QXhpcycpIHtcclxuICAgICAgICB0aGlzLnJvd3MuZm9yRWFjaChyID0+IHtcclxuICAgICAgICAgIGlmIChyLmFjY3VtdWxhdGUgPT09IGZhbHNlKSByZXR1cm47XHJcbiAgICAgICAgICBjb25zdCBkYXRhcm93ID0gZGF0YVtyLmtleV07XHJcbiAgICAgICAgICBpZiAoIWRhdGFyb3cpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICAgICAgZm9yIChsZXQgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uLmluZGV4KSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IGtleSA9IGNvbHVtbi5rZXk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4uc3VtKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsY3VsYXRlKSkge1xyXG4gICAgICAgICAgICAgIGxldCB2YWwgPSAoY2FsY3VsYXRlIGFzIENhbGN1bGF0ZUZuKShyLmtleSwgdGhpcy5fZGF0YSk7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbCA9IGRhdGFyb3dba2V5XTtcclxuICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gdmFsO1xyXG4gICAgICAgICAgICAgIGlmIChrZXkgPT09IHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGFyb3dbbmFtZV0gPSBzdW07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGRhdGFyb3cgPSBkYXRhW25hbWVdID0ge307XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgIGxldCBzdW0gPSAwO1xyXG4gICAgICAgICAgZm9yIChsZXQgcm93IG9mIHRoaXMucm93cykge1xyXG4gICAgICAgICAgICBpZiAocm93LmluZGV4KSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IGtleSA9IHJvdy5rZXk7XHJcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHtcclxuICAgICAgICAgICAgICBsZXQgdmFsID0gKGNhbGN1bGF0ZSBhcyBDYWxjdWxhdGVGbikocm93LmtleSwgdGhpcy5fZGF0YSk7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IGRhdGFyb3cgPSBkYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgaWYgKCFkYXRhcm93KSBjb250aW51ZTtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uLnN1bSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IGRhdGFyb3dbY29sdW1uLmtleV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsICE9IHVuZGVmaW5lZCkgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gZGF0YXJvd1tjb2x1bW4ua2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGtleSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0YXJvd1tjb2x1bW4ua2V5XSA9IHN1bTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N0cmluZ2lmeShkYXRhOiBEYXRhTWFwKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgY29uc3QgeEF4aXMgPSByLmtleSwgc2VyaWVzID0gYy5rZXk7XHJcbiAgICAgICAgaWYgKGMuc3VtKSBkYXRhW3hBeGlzXVtzZXJpZXNdID0gdGhpcy5fZm9ybWF0KGRhdGFbeEF4aXNdW3Nlcmllc10sIGMuc3VtKTtcclxuICAgICAgICBlbHNlIGlmIChyLnN1bSkgZGF0YVt4QXhpc11bc2VyaWVzXSA9IHRoaXMuX2Zvcm1hdChkYXRhW3hBeGlzXVtzZXJpZXNdLCByLnN1bSk7XHJcbiAgICAgICAgZWxzZSBkYXRhW3hBeGlzXVtzZXJpZXNdID1cclxuICAgICAgICAgIGZvcm1hdE51bWJlcihkYXRhW3hBeGlzXVtzZXJpZXNdIHx8IDAsIHRoaXMuTEFOR1VBR0UsIHRoaXMuUFJFQ0lTSU9OKSBhcyBhbnk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Zvcm1hdCh2YWwsIG9wdGlvbnM/OiB7IGZvcm1hdD86IHN0cmluZywgcHJlY2lzaW9uPzogc3RyaW5nIH0pOiBhbnkge1xyXG4gICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAncGVyY2VudCcpXHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFBlcmNlbnQodmFsLCB0aGlzLkxBTkdVQUdFLCBvcHRpb25zLnByZWNpc2lvbiB8fCB0aGlzLlBSRUNJU0lPTik7XHJcbiAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnY3VycmVuY3knKVxyXG4gICAgICAgIHJldHVybiBmb3JtYXRDdXJyZW5jeSh2YWwsIHRoaXMuTEFOR1VBR0UsIHRoaXMuU1lNQk9MLCB0aGlzLkNVUlJFTkNZLCBvcHRpb25zLnByZWNpc2lvbiB8fCB0aGlzLlBSRUNJU0lPTik7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5DVVJSRU5DWSlcclxuICAgICAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KHZhbCwgdGhpcy5MQU5HVUFHRSwgdGhpcy5TWU1CT0wsIHRoaXMuQ1VSUkVOQ1ksIHRoaXMuUFJFQ0lTSU9OKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWwsIHRoaXMuTEFOR1VBR0UsIHRoaXMuUFJFQ0lTSU9OKTtcclxuICB9XHJcbiAgZXhwbG9yZShjb2x1bW46IEhlYWRlckluZm8sIHJvdzogSGVhZGVySW5mbykge1xyXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aXZlIHx8IGNvbHVtbi5leHBsb3JhYmxlID09PSBmYWxzZSB8fCByb3cuZXhwbG9yYWJsZSA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgIGxldCB4OiBBeGlzVHlwZSwgc2VyaWVzOiBBeGlzVHlwZSwgaW5kZXg7XHJcbiAgICBjb25zdCBheGVzID0geyAuLi50aGlzLmZpbHRlcnMgfSBhcyBBeGVzTWFwO1xyXG4gICAgaWYgKCFjb2x1bW4uc3VtKVxyXG4gICAgICB4ID0gY29sdW1uLmtleTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgeyB2YWx1ZSwgY2FsY3VsYXRlIH0gPSBjb2x1bW4uc3VtO1xyXG4gICAgICBpZiAoaXNGdW5jdGlvbihjYWxjdWxhdGUpKSByZXR1cm47XHJcbiAgICAgIHggPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgZm9yIChsZXQgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xyXG4gICAgICAgIGlmIChjb2x1bW4uc3VtKVxyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgbGV0IGtleSA9IGNvbHVtbi5rZXk7XHJcbiAgICAgICAgeC5wdXNoKGtleSk7XHJcbiAgICAgICAgaWYgKGtleSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXhlc1t0aGlzLnhBeGlzLm5hbWVdID0geDtcclxuICAgIGlmIChyb3cuaW5kZXgpXHJcbiAgICAgIGluZGV4ID0gcm93LmluZGV4Lm5hbWU7XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHJvdy5zdW0pIHtcclxuICAgICAgICBsZXQgeyB2YWx1ZSwgY2FsY3VsYXRlIH0gPSByb3cuc3VtO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGN1bGF0ZSkpIHJldHVybjtcclxuICAgICAgICBzZXJpZXMgPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgICBmb3IgKGxldCByb3cgb2YgdGhpcy5yb3dzKSB7XHJcbiAgICAgICAgICBpZiAocm93LnN1bSlcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICBsZXQga2V5ID0gcm93LmtleTtcclxuICAgICAgICAgIHNlcmllcy5wdXNoKGtleSk7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSB2YWx1ZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBzZXJpZXMgPSByb3cua2V5O1xyXG4gICAgICBheGVzW3RoaXMuc2VyaWVzLm5hbWVdID0gc2VyaWVzO1xyXG4gICAgICBpbmRleCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uRXhwbG9yZS5lbWl0KHsgYXhlcywgaW5kZXggfSk7XHJcbiAgfVxyXG4gIGV4cG9ydCgpIHtcclxuICAgIGNvbnN0IG51bWJlckZvcm1hdCA9IHRoaXMuX3NlcnZpY2UubnVtYmVyRm9ybWF0LFxyXG4gICAgICBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+ICFjLnN1bSksXHJcbiAgICAgIGNlbGxzID0gW10gYXMgQ2VsbFtdLFxyXG4gICAgICByb3dzID0gW3sgaW5kZXg6IDEsIGNlbGxzIH1dO1xyXG4gICAgY29sdW1ucy5mb3JFYWNoKChjLCBqKSA9PiBjZWxscy5wdXNoKHtcclxuICAgICAgaW5kZXg6IGogKyAyLFxyXG4gICAgICB2YWx1ZTogYy52YWx1ZSwgc3R5bGU6IHsgYm9sZDogdHJ1ZSB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5yb3dzLmZpbHRlcihyID0+ICFyLnN1bSkuZm9yRWFjaCgociwgaSkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YVtyLmtleV0sXHJcbiAgICAgICAgY2VsbHMgPSBbeyBpbmRleDogMSwgdmFsdWU6IHIudmFsdWUsIHN0eWxlOiB7IGJvbGQ6IHRydWUgfSB9XSBhcyBDZWxsW107XHJcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYywgaikgPT4gY2VsbHMucHVzaCh7XHJcbiAgICAgICAgdHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgaW5kZXg6IGogKyAyLFxyXG4gICAgICAgIHZhbHVlOiBkYXRhICYmIGRhdGFbYy5rZXldICE9PSB1bmRlZmluZWQgPyBkYXRhW2Mua2V5XSA6IDAsXHJcbiAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgIG51bWJlckZvcm1hdCxcclxuICAgICAgICAgIGhBbGlnbjogJ3JpZ2h0JyxcclxuICAgICAgICB9XHJcbiAgICAgIH0gYXMgQ2VsbCkpO1xyXG4gICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgIGluZGV4OiBpICsgMixcclxuICAgICAgICBjZWxsc1xyXG4gICAgICB9IGFzIFJvdyk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGJvb2sgPSBuZXcgV29ya2Jvb2soXHJcbiAgICAgIHtcclxuICAgICAgICB3b3Jrc2hlZXRzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGVuYWJsZVJ0bDogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlLFxyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTaGVldE4nLCAxKSxcclxuICAgICAgICAgICAgY29sdW1uczogY29sdW1ucy5tYXAoKF8sIGkpID0+ICh7IGluZGV4OiBpICsgMSwgd2lkdGg6IDE1MCB9IGFzIENvbHVtbikpLFxyXG4gICAgICAgICAgICByb3dzLFxyXG4gICAgICAgICAgfSBhcyBXb3Jrc2hlZXQsXHJcbiAgICAgICAgXSxcclxuICAgICAgfSxcclxuICAgICAgJ3hsc3gnXHJcbiAgICApO1xyXG4gICAgdGhpcy5fc2VydmljZS5uYW1lT2YodGhpcy5maWx0ZXJzLCB0aGlzLmN1YmUubmFtZSkuc3Vic2NyaWJlKG4gPT5cclxuICAgICAgYm9vay5zYXZlKGAke24gfHwgdGhpcy5fdHJhbnNsYXRlLmdldCgnTWF0cml4Jyl9Lnhsc3hgKSk7XHJcbiAgfVxyXG4gIF9tb3ZlKHgsIHkpIHtcclxuICAgIGxldCByb3dJbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IHRoaXMudGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudEJvZGllcy5sZW5ndGg7IGIrKykge1xyXG4gICAgICBsZXQgdEJvZHkgPSB0aGlzLnRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50LnRCb2RpZXMuaXRlbShiKTtcclxuICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCB0Qm9keS5yb3dzLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgbGV0IHJvdyA9IHRCb2R5LnJvd3MuaXRlbShyKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHJvdy5jZWxscy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgbGV0IGNlbGwgPSByb3cuY2VsbHMuaXRlbShjKTtcclxuICAgICAgICAgIGlmIChjID09PSB4KVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoJ2NlbGwteCcpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5yZW1vdmUoJ2NlbGwteCcpO1xyXG4gICAgICAgICAgaWYgKHJvd0luZGV4ID09PSB5KVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoJ2NlbGwteScpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5yZW1vdmUoJ2NlbGwteScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb3dJbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCB0Rm9vdCA9IHRoaXMudGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudEZvb3QsIHJvdyA9IHRGb290LnJvd3NbMF07XHJcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93LmNlbGxzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgbGV0IGNlbGwgPSByb3cuY2VsbHMuaXRlbShjKTtcclxuICAgICAgICBpZiAoYyA9PT0geClcclxuICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZCgnY2VsbC14Jyk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKCdjZWxsLXgnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG50eXBlIERhdGFNYXAgPSB7IFtzZXJpZXM6IHN0cmluZ106IHsgW3hBeGlzOiBzdHJpbmddOiBudW1iZXI7IH07IH07XHJcblxyXG5leHBvcnQgdHlwZSBTdW1TZXR0aW5ncyA9IHtcclxuICB2YWx1ZT86IHN0cmluZyB8IG51bWJlcjtcclxuICBheGlzOiAnc2VyaWVzJyB8ICd4QXhpcyc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBmb3JtYXQ/OiAncGVyY2VudCcgfCAnY3VycmVuY3knIHwgJ251bWJlcic7XHJcbiAgcHJlY2lzaW9uPzogc3RyaW5nO1xyXG4gIGFjY3VtdWxhdGU/OiBib29sZWFuO1xyXG4gIGV4cGxvcmFibGU/OiBib29sZWFuO1xyXG4gIGNhbGN1bGF0ZT86ICdxdWFydGVyJyB8ICd5ZWFyJyB8ICdtb250aCcgfCAnYWNjdW11bGF0ZScgfCBDYWxjdWxhdGVGbjtcclxufVxyXG5cclxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENhbGN1bGF0ZUZuIHtcclxuICAodmFsdWU6IHN0cmluZywgZGF0YTogeyBbc2VyaWVzOiBzdHJpbmddOiB7IFt4QXhpczogc3RyaW5nXTogbnVtYmVyOyB9OyB9KTogbnVtYmVyO1xyXG59XHJcblxyXG50eXBlIEhlYWRlckluZm8gPSB7XHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgdmFsdWU6IGFueTtcclxuICBwcmVjaXNpb24/OiBzdHJpbmc7XHJcbiAgZXhwbG9yYWJsZT86IGJvb2xlYW47XHJcbiAgYWNjdW11bGF0ZT86IGJvb2xlYW47XHJcbiAgc3VtPzogU3VtU2V0dGluZ3M7XHJcbiAgaW5kZXg/OiBDdWJlSW5kZXg7XHJcbn07XHJcbmludGVyZmFjZSBDZWxsIHsgfVxyXG4iLCI8dGFibGUgI3RhYmxlIGNsYXNzPVwibWF0LXRhYmxlIGN1YmUtdGFibGVcIiAobW91c2VsZWF2ZSk9XCJfbW92ZSgtMSwgLTEpXCIgKm5nSWY9XCJkYXRhXCI+XHJcbiAgPHRoZWFkPlxyXG4gICAgPCEtLSBoZWFkZXJzIC0tPlxyXG4gICAgPHRyIGNsYXNzPVwibWF0LWhlYWRlci1yb3dcIj5cclxuICAgICAgPHRoPjwvdGg+XHJcbiAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCB4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgKG1vdXNlZW50ZXIpPVwiX21vdmUoeCArIDEsIC0yKVwiIGNsYXNzPVwibWF0LWhlYWRlci1jZWxsXCI+XHJcbiAgICAgICAge3sgY29sdW1uLnZhbHVlIH19XHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0aCBjbGFzcz1cIm1hdC1oZWFkZXItY2VsbFwiPnt7eEF4aXNUb3RhbExhYmVsfX08L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3RoZWFkPlxyXG4gIDx0Ym9keT5cclxuICAgIDwhLS0gcm93cyAtLT5cclxuICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3M7IGxldCB5ID0gaW5kZXhcIiBjbGFzcz1cIm1hdC1yb3dcIlxyXG4gICAgICAgIFtjbGFzcy5jdWJlLWluZGV4XT1cInJvdy5pbmRleFwiPlxyXG4gICAgICA8dGggY2xhc3M9XCJtYXQtaGVhZGVyLWNlbGxcIiAobW91c2VlbnRlcik9XCJfbW92ZSgtMiwgeSApXCI+e3sgcm93LnZhbHVlIH19PC90aD5cclxuICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IHggPSBpbmRleFwiIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCJcclxuICAgICAgICAgIFtjbGFzcy5leHBsb3JhYmxlXT1cImludGVyYWN0aXZlICYmIGNvbHVtbi5leHBsb3JhYmxlICE9PSBmYWxzZSAmJiByb3cuZXhwbG9yYWJsZSAhPT0gZmFsc2VcIlxyXG4gICAgICAgICAgKG1vdXNlZW50ZXIpPVwiX21vdmUoeCArIDEsIHkgKVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZXhwbG9yZShjb2x1bW4sIHJvdylcIj5cclxuICAgICAgICAgIHt7IGRhdGFbcm93LmtleV1bY29sdW1uLmtleV0gfX1cclxuICAgICAgPC90ZD5cclxuICAgICAgPHRoIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCIgKG1vdXNlZW50ZXIpPVwiX21vdmUoLTEsIHkgKVwiPlxyXG4gICAgICAgICAge3sgZGF0YVtyb3cua2V5XVsnX3RvdGFsJ10gfX1cclxuICAgICAgPC90aD5cclxuICAgIDwvdHI+XHJcbiAgPC90Ym9keT5cclxuICA8dGZvb3Q+XHJcbiAgICA8IS0tIGZvb3RlciAtLT5cclxuICAgIDx0ciBjbGFzcz1cIm1hdC1mb290ZXItcm93XCI+XHJcbiAgICAgIDx0ZCBjbGFzcz1cIm1hdC1mb290ZXItY2VsbFwiPnt7c2VyaWVzVG90YWxMYWJlbH19PC90ZD5cclxuICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IHggPSBpbmRleFwiIGNsYXNzPVwibWF0LWZvb3Rlci1jZWxsIGZpZ3VyZVwiXHJcbiAgICAgICAgICAobW91c2VlbnRlcik9XCJfbW92ZSh4ICsgMSwgLTIpXCJcclxuICAgICAgICAgIFtjbGFzcy5uZWdhdGl2ZS1maWd1cmVdPVwidG90YWxzW2NvbHVtbi5rZXldLnN0YXJ0c1dpdGgoJy0nKVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b3RhbHNbY29sdW1uLmtleV0gIT09IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAge3sgdG90YWxzW2NvbHVtbi5rZXldIH19XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0aCBjbGFzcz1cIm1hdC1mb290ZXItY2VsbCBmaWd1cmVcIj57eyB0b3RhbHNbJ19ncmFuZCddIH19PC90aD5cclxuICAgIDwvdHI+XHJcbiAgPC90Zm9vdD5cclxuPC90YWJsZT5cclxuIl19
@@ -130,9 +130,9 @@ export class CubeParallelComponent {
130
130
  this._loading.complete();
131
131
  }
132
132
  }
133
- CubeParallelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeParallelComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }], target: i0.ɵɵFactoryTarget.Component });
134
- CubeParallelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CubeParallelComponent, selector: "bizdoc-cube-parallel", inputs: { filters: "filters", xAxis: "xAxis", series: "series", indices: "indices", cube: "cube", size: "size", chartType: "chartType", scope: "scope", palettes: "palettes" }, outputs: { onExplore: "explore" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"items.length\" class=\"row\">\r\n <div *ngFor=\"let s of items\" class=\"element\">\r\n <ejs-sparkline [width]='width' height='100px' [type]='s.chartType' [id]=\"s.data.name\"\r\n [dataSource]=\"s.data.points\" xName=\"name\"\r\n yName=\"y\" [palette]=\"s.palette\" [format]=\"format\"\r\n valueType=\"Category\"\r\n [enableRtl]=\"enableRtl\"\r\n [border]=\"s.border\"\r\n [fill]=\"s.fill\"\r\n [axisSettings]=\"axisSettings\"\r\n [markerSettings]=\"s.markerSettings\"\r\n (pointRegionMouseClick)=\"sprklineClick(s, $event)\"\r\n [tooltipSettings]=\"s.tooltipSettings\">\r\n </ejs-sparkline>\r\n <h4 class=\"mat-h4\">{{s.data.title}}</h4>\r\n </div>\r\n</div>\r\n", styles: [":host{padding:8px}.element{display:flex;flex-direction:column;align-items:center;flex:1 1 auto}\n"], components: [{ type: i4.SparklineComponent, selector: "ejs-sparkline", inputs: ["axisSettings", "border", "containerArea", "dataLabelSettings", "dataSource", "enablePersistence", "enableRtl", "endPointColor", "fill", "format", "height", "highPointColor", "lineWidth", "locale", "lowPointColor", "markerSettings", "negativePointColor", "opacity", "padding", "palette", "query", "rangeBandSettings", "rangePadding", "startPointColor", "theme", "tiePointColor", "tooltipSettings", "type", "useGroupingSeparator", "valueType", "width", "xName", "yName"], outputs: ["axisRendering", "dataLabelRendering", "load", "loaded", "markerRendering", "pointRegionMouseClick", "pointRegionMouseMove", "pointRendering", "resize", "seriesRendering", "sparklineMouseClick", "sparklineMouseMove", "tooltipInitialize"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
135
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeParallelComponent, decorators: [{
133
+ CubeParallelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CubeParallelComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }], target: i0.ɵɵFactoryTarget.Component });
134
+ CubeParallelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: CubeParallelComponent, selector: "bizdoc-cube-parallel", inputs: { filters: "filters", xAxis: "xAxis", series: "series", indices: "indices", cube: "cube", size: "size", chartType: "chartType", scope: "scope", palettes: "palettes" }, outputs: { onExplore: "explore" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"items.length\" class=\"row\">\r\n <div *ngFor=\"let s of items\" class=\"element\">\r\n <ejs-sparkline [width]='width' height='100px' [type]='s.chartType' [id]=\"s.data.name\"\r\n [dataSource]=\"s.data.points\" xName=\"name\"\r\n yName=\"y\" [palette]=\"s.palette\" [format]=\"format\"\r\n valueType=\"Category\"\r\n [enableRtl]=\"enableRtl\"\r\n [border]=\"s.border\"\r\n [fill]=\"s.fill\"\r\n [axisSettings]=\"axisSettings\"\r\n [markerSettings]=\"s.markerSettings\"\r\n (pointRegionMouseClick)=\"sprklineClick(s, $event)\"\r\n [tooltipSettings]=\"s.tooltipSettings\">\r\n </ejs-sparkline>\r\n <h4 class=\"mat-h4\">{{s.data.title}}</h4>\r\n </div>\r\n</div>\r\n", styles: [":host{padding:8px}.element{display:flex;flex-direction:column;align-items:center;flex:1 1 auto}\n"], components: [{ type: i4.SparklineComponent, selector: "ejs-sparkline", inputs: ["axisSettings", "border", "containerArea", "dataLabelSettings", "dataSource", "enablePersistence", "enableRtl", "endPointColor", "fill", "format", "height", "highPointColor", "lineWidth", "locale", "lowPointColor", "markerSettings", "negativePointColor", "opacity", "padding", "palette", "query", "rangeBandSettings", "rangePadding", "startPointColor", "theme", "tiePointColor", "tooltipSettings", "type", "useGroupingSeparator", "valueType", "width", "xName", "yName"], outputs: ["axisRendering", "dataLabelRendering", "load", "loaded", "markerRendering", "pointRegionMouseClick", "pointRegionMouseMove", "pointRendering", "resize", "seriesRendering", "sparklineMouseClick", "sparklineMouseMove", "tooltipInitialize"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CubeParallelComponent, decorators: [{
136
136
  type: Component,
137
137
  args: [{ selector: 'bizdoc-cube-parallel', template: "<div *ngIf=\"items.length\" class=\"row\">\r\n <div *ngFor=\"let s of items\" class=\"element\">\r\n <ejs-sparkline [width]='width' height='100px' [type]='s.chartType' [id]=\"s.data.name\"\r\n [dataSource]=\"s.data.points\" xName=\"name\"\r\n yName=\"y\" [palette]=\"s.palette\" [format]=\"format\"\r\n valueType=\"Category\"\r\n [enableRtl]=\"enableRtl\"\r\n [border]=\"s.border\"\r\n [fill]=\"s.fill\"\r\n [axisSettings]=\"axisSettings\"\r\n [markerSettings]=\"s.markerSettings\"\r\n (pointRegionMouseClick)=\"sprklineClick(s, $event)\"\r\n [tooltipSettings]=\"s.tooltipSettings\">\r\n </ejs-sparkline>\r\n <h4 class=\"mat-h4\">{{s.data.title}}</h4>\r\n </div>\r\n</div>\r\n", styles: [":host{padding:8px}.element{display:flex;flex-direction:column;align-items:center;flex:1 1 auto}\n"] }]
138
138
  }], ctorParameters: function () { return [{ type: i1.PromptService }, { type: i2.CubeService }, { type: i3.SessionService }]; }, propDecorators: { filters: [{