@bizdoc/core 1.14.5 → 1.14.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.
- package/LICENSE.md +1 -0
- package/assets/bizdoc-schema.json +10 -2
- package/karma.conf.js +44 -0
- package/ng-package.json +11 -0
- package/package.json +78 -78
- package/src/icons/pdf.svg +24 -0
- package/src/icons/word.svg +13 -0
- package/src/lib/admin/_admin-theme.scss +6 -0
- package/src/lib/admin/admin-dismiss.service.ts +24 -0
- package/src/lib/admin/admin-menu.component.html +18 -0
- package/src/lib/admin/admin-menu.component.ts +20 -0
- package/src/lib/admin/core/ace.input.ts +133 -0
- package/src/lib/admin/core/color-picker.input.scss +17 -0
- package/src/lib/admin/core/color-picker.input.ts +175 -0
- package/src/lib/admin/core/search.input.ts +32 -0
- package/src/lib/admin/diff/_configuration-diff-theme.scss +84 -0
- package/src/lib/admin/diff/configuration-diff.component.html +24 -0
- package/src/lib/admin/diff/configuration-diff.component.scss +16 -0
- package/src/lib/admin/diff/configuration-diff.component.ts +552 -0
- package/src/lib/admin/document-trace/Timeline.ts +45 -0
- package/src/lib/admin/document-trace/_timeline-theme.scss +70 -0
- package/src/lib/admin/document-trace/document-trace.component.html +96 -0
- package/src/lib/admin/document-trace/document-trace.component.scss +16 -0
- package/src/lib/admin/document-trace/document-trace.component.ts +526 -0
- package/src/lib/admin/document-trace/reassign.dialog.html +24 -0
- package/src/lib/admin/document-trace/reassign.dialog.ts +34 -0
- package/src/lib/admin/document-trace/trace-element.component.html +55 -0
- package/src/lib/admin/document-trace/trace-element.component.scss +23 -0
- package/src/lib/admin/document-trace/trace-element.component.ts +139 -0
- package/src/lib/admin/form/form.resolve.service.ts +13 -0
- package/src/lib/admin/form/form.service.ts +49 -0
- package/src/lib/admin/form/workflow/node-ref.ts +8 -0
- package/src/lib/admin/form/workflow/node.component.html +36 -0
- package/src/lib/admin/form/workflow/node.component.scss +4 -0
- package/src/lib/admin/form/workflow/node.component.ts +129 -0
- package/src/lib/admin/form/workflow/role-node.component.html +40 -0
- package/src/lib/admin/form/workflow/role-node.component.ts +66 -0
- package/src/lib/admin/form/workflow/tools.component.exp.ts +13 -0
- package/src/lib/admin/form/workflow/tools.component.html +1 -0
- package/src/lib/admin/form/workflow/workflow.component.html +66 -0
- package/src/lib/admin/form/workflow/workflow.component.scss +57 -0
- package/src/lib/admin/form/workflow/workflow.component.ts +438 -0
- package/src/lib/admin/indices/manage-cube-index.component.html +35 -0
- package/src/lib/admin/indices/manage-cube-index.component.scss +16 -0
- package/src/lib/admin/indices/manage-cube-index.component.ts +155 -0
- package/src/lib/admin/patterns/patterns.component.html +70 -0
- package/src/lib/admin/patterns/patterns.component.ts +166 -0
- package/src/lib/admin/permissions/permissions.component.html +21 -0
- package/src/lib/admin/permissions/permissions.component.scss +7 -0
- package/src/lib/admin/permissions/permissions.component.ts +89 -0
- package/src/lib/admin/positions/positions-popup.component.html +23 -0
- package/src/lib/admin/positions/positions-popup.component.ts +68 -0
- package/src/lib/admin/positions/positions.component.html +150 -0
- package/src/lib/admin/positions/positions.component.scss +20 -0
- package/src/lib/admin/positions/positions.component.ts +464 -0
- package/src/lib/admin/profiler/assign.component.html +14 -0
- package/src/lib/admin/profiler/outofoffice.component.html +64 -0
- package/src/lib/admin/profiler/outofoffice.component.ts +146 -0
- package/src/lib/admin/profiler/profiler.component.html +110 -0
- package/src/lib/admin/profiler/profiler.component.scss +23 -0
- package/src/lib/admin/profiler/profiler.component.ts +302 -0
- package/src/lib/admin/utility-ref.ts +44 -0
- package/src/lib/admin/utility-wrapper.component.ts +52 -0
- package/src/lib/admin/utility.pane.component.ts +49 -0
- package/src/lib/app.component.ts +90 -0
- package/src/lib/bizdoc.module.ts +82 -0
- package/src/lib/browse/_browse-theme.scss +86 -0
- package/src/lib/browse/browse-items.component.html +171 -0
- package/src/lib/browse/browse-items.component.scss +52 -0
- package/src/lib/browse/browse-items.component.ts +460 -0
- package/src/lib/browse/browse.mobile.component.html +33 -0
- package/src/lib/browse/browse.mobile.component.ts +90 -0
- package/src/lib/browse/browse.pane.component.html +43 -0
- package/src/lib/browse/browse.pane.component.scss +4 -0
- package/src/lib/browse/browse.pane.component.ts +141 -0
- package/src/lib/browse/expanded-item/expanded-item.component.html +38 -0
- package/src/lib/browse/expanded-item/expanded-item.component.scss +35 -0
- package/src/lib/browse/expanded-item/expanded-item.component.ts +339 -0
- package/src/lib/browse/filter/filter.component.html +50 -0
- package/src/lib/browse/filter/filter.component.scss +10 -0
- package/src/lib/browse/filter/filter.component.ts +156 -0
- package/src/lib/browse/folders-menu.component.html +20 -0
- package/src/lib/browse/folders-menu.component.scss +15 -0
- package/src/lib/browse/folders-menu.component.ts +42 -0
- package/src/lib/chat/_chat-theme.scss +95 -0
- package/src/lib/chat/chat-info.ts +74 -0
- package/src/lib/chat/chat-pool.component.exp.ts +117 -0
- package/src/lib/chat/chat-pool.component.html +13 -0
- package/src/lib/chat/chat-pool.component.scss +10 -0
- package/src/lib/chat/chat.mobile.component.html +6 -0
- package/src/lib/chat/chat.mobile.component.scss +8 -0
- package/src/lib/chat/chat.mobile.component.ts +18 -0
- package/src/lib/chat/chat.service.ts +128 -0
- package/src/lib/chat/contacts.component.html +37 -0
- package/src/lib/chat/contacts.component.scss +49 -0
- package/src/lib/chat/contacts.component.ts +88 -0
- package/src/lib/chat/contacts.pane.component.ts +25 -0
- package/src/lib/chat/conversation.component.html +28 -0
- package/src/lib/chat/conversation.component.scss +14 -0
- package/src/lib/chat/conversation.component.ts +186 -0
- package/src/lib/chat/conversation.pane.component.ts +55 -0
- package/src/lib/compose/_compose-theme.scss +63 -0
- package/src/lib/compose/action/action-picker.component.html +25 -0
- package/src/lib/compose/action/action-picker.component.scss +4 -0
- package/src/lib/compose/action/action-picker.component.ts +72 -0
- package/src/lib/compose/action/action-ref.ts +19 -0
- package/src/lib/compose/action/action.base.ts +58 -0
- package/src/lib/compose/action/action.dialog.html +17 -0
- package/src/lib/compose/action/action.dialog.scss +1 -0
- package/src/lib/compose/action/action.dialog.ts +57 -0
- package/src/lib/compose/action/action.pane.dialog.exp.ts +77 -0
- package/src/lib/compose/action/action.pane.dialog.html +12 -0
- package/src/lib/compose/action/assign-action.component.html +23 -0
- package/src/lib/compose/action/assign-action.component.ts +57 -0
- package/src/lib/compose/action/moveto-action.component.html +33 -0
- package/src/lib/compose/action/moveto-action.component.ts +77 -0
- package/src/lib/compose/action/return-action.component.html +13 -0
- package/src/lib/compose/action/return-action.component.ts +42 -0
- package/src/lib/compose/attachments/attachments.component.html +23 -0
- package/src/lib/compose/attachments/attachments.component.scss +21 -0
- package/src/lib/compose/attachments/attachments.component.ts +114 -0
- package/src/lib/compose/attachments/preview/attachment-preview.component.html +17 -0
- package/src/lib/compose/attachments/preview/attachment-preview.component.scss +36 -0
- package/src/lib/compose/attachments/preview/attachment-preview.component.ts +140 -0
- package/src/lib/compose/attachments/progress-button.directive.ts +18 -0
- package/src/lib/compose/can-deactivate-changes.service.ts +22 -0
- package/src/lib/compose/comments/_comments-theme.scss +82 -0
- package/src/lib/compose/comments/comment.component.html +36 -0
- package/src/lib/compose/comments/comment.component.ts +160 -0
- package/src/lib/compose/comments/comments.component.html +27 -0
- package/src/lib/compose/comments/comments.component.scss +33 -0
- package/src/lib/compose/comments/comments.component.ts +220 -0
- package/src/lib/compose/comments/comments.pane.component.ts +41 -0
- package/src/lib/compose/comments/edit-comment.component.html +3 -0
- package/src/lib/compose/comments/edit-comment.component.ts +35 -0
- package/src/lib/compose/comments/edits.component.html +7 -0
- package/src/lib/compose/comments/edits.component.ts +33 -0
- package/src/lib/compose/comments/quick-comment.component.exp.ts +60 -0
- package/src/lib/compose/comments/quick-comment.component.html +5 -0
- package/src/lib/compose/comments/quick-comment.component.scss +11 -0
- package/src/lib/compose/comments/votes.component.html +7 -0
- package/src/lib/compose/comments/votes.component.ts +38 -0
- package/src/lib/compose/compose-resolve.service.ts +42 -0
- package/src/lib/compose/compose.mobile.component.html +67 -0
- package/src/lib/compose/compose.mobile.component.scss +14 -0
- package/src/lib/compose/compose.mobile.component.ts +97 -0
- package/src/lib/compose/compose.pane.component.html +68 -0
- package/src/lib/compose/compose.pane.component.scss +6 -0
- package/src/lib/compose/compose.pane.component.ts +188 -0
- package/src/lib/compose/copy/copy.dialog.html +21 -0
- package/src/lib/compose/copy/copy.dialog.ts +40 -0
- package/src/lib/compose/dismiss.service.ts +26 -0
- package/src/lib/compose/document-resolver.service.ts +13 -0
- package/src/lib/compose/document.component.html +5 -0
- package/src/lib/compose/document.component.ts +41 -0
- package/src/lib/compose/document.mobile.component.ts +20 -0
- package/src/lib/compose/document.pane.component.ts +22 -0
- package/src/lib/compose/events/events.component.html +6 -0
- package/src/lib/compose/events/events.component.ts +21 -0
- package/src/lib/compose/form-ref.ts +53 -0
- package/src/lib/compose/form-selector/form-selector.sheet.html +10 -0
- package/src/lib/compose/form-selector/form-selector.sheet.ts +84 -0
- package/src/lib/compose/form.component.html +13 -0
- package/src/lib/compose/form.component.ts +456 -0
- package/src/lib/compose/maps/maps.component.html +3 -0
- package/src/lib/compose/maps/maps.component.ts +22 -0
- package/src/lib/compose/new-menu.component.html +13 -0
- package/src/lib/compose/new-menu.component.scss +11 -0
- package/src/lib/compose/new-menu.component.ts +106 -0
- package/src/lib/compose/privilage.directive.ts +43 -0
- package/src/lib/compose/recipient-resolver.service.ts +15 -0
- package/src/lib/compose/save-changes.dialog.html +13 -0
- package/src/lib/compose/save-changes.dialog.ts +10 -0
- package/src/lib/compose/state.component.ts +29 -0
- package/src/lib/compose/tag/tags.component.html +22 -0
- package/src/lib/compose/tag/tags.component.scss +1 -0
- package/src/lib/compose/tag/tags.component.ts +83 -0
- package/src/lib/compose/trace/flow.component.html +19 -0
- package/src/lib/compose/trace/flow.component.scss +7 -0
- package/src/lib/compose/trace/flow.component.ts +747 -0
- package/src/lib/compose/trace/people.component.ts +33 -0
- package/src/lib/compose/trace/trace.base.ts +72 -0
- package/src/lib/compose/trace/trace.component.html +57 -0
- package/src/lib/compose/trace/trace.component.scss +21 -0
- package/src/lib/compose/trace/trace.component.ts +388 -0
- package/src/lib/compose/trace/trace.pane.component.html +3 -0
- package/src/lib/compose/trace/trace.pane.component.scss +5 -0
- package/src/lib/compose/trace/trace.pane.component.ts +47 -0
- package/src/lib/compose/version-compare/_compare-theme.scss +147 -0
- package/src/lib/compose/version-compare/version-compare.component.ts +49 -0
- package/src/lib/compose/version-compare/version-compare.directive.ts +292 -0
- package/src/lib/compose/version-compare/version.pane.component.html +19 -0
- package/src/lib/compose/version-compare/version.pane.component.scss +8 -0
- package/src/lib/compose/version-compare/version.pane.component.ts +53 -0
- package/src/lib/core/NgComponentOutlet.ts +31 -0
- package/src/lib/core/account.service.ts +30 -0
- package/src/lib/core/animated-icon/animated-icon.directive.html +3 -0
- package/src/lib/core/animated-icon/animated-icon.directive.scss +12 -0
- package/src/lib/core/animated-icon/animated-icon.directive.ts +41 -0
- package/src/lib/core/animations.ts +207 -0
- package/src/lib/core/authentication.ts +7 -0
- package/src/lib/core/avatar/_avatar-theme.scss +60 -0
- package/src/lib/core/avatar/avatar.component.html +6 -0
- package/src/lib/core/avatar/avatar.component.ts +108 -0
- package/src/lib/core/base.ts +43 -0
- package/src/lib/core/can-activate.service.exp.ts +31 -0
- package/src/lib/core/colors.ts +322 -0
- package/src/lib/core/component-factory-resolver.ts +67 -0
- package/src/lib/core/configuration.ts +124 -0
- package/src/lib/core/controls/_daterange-theme.scss +16 -0
- package/src/lib/core/controls/address.input.ts +173 -0
- package/src/lib/core/controls/auto-complete.input.ts +218 -0
- package/src/lib/core/controls/combination-picker-body.html +34 -0
- package/src/lib/core/controls/combination-picker-body.scss +40 -0
- package/src/lib/core/controls/combination-picker-body.ts +194 -0
- package/src/lib/core/controls/combination-picker.html +6 -0
- package/src/lib/core/controls/combination-picker.scss +9 -0
- package/src/lib/core/controls/combination-picker.ts +243 -0
- package/src/lib/core/controls/combination-pool.html +10 -0
- package/src/lib/core/controls/combination-pool.scss +35 -0
- package/src/lib/core/controls/combination-pool.ts +92 -0
- package/src/lib/core/controls/file.input.html +50 -0
- package/src/lib/core/controls/file.input.scss +41 -0
- package/src/lib/core/controls/file.input.ts +400 -0
- package/src/lib/core/controls/select.input.ts +210 -0
- package/src/lib/core/controls/time-picker.html +4 -0
- package/src/lib/core/controls/time-picker.ts +199 -0
- package/src/lib/core/controls/timespan.input.ts +175 -0
- package/src/lib/core/datasource.service.ts +80 -0
- package/src/lib/core/decorators.ts +56 -0
- package/src/lib/core/firebase.service.ts +55 -0
- package/src/lib/core/functions.ts +246 -0
- package/src/lib/core/guide/_guide-theme.scss +197 -0
- package/src/lib/core/guide/guide.component.html +20 -0
- package/src/lib/core/guide/guide.component.ts +222 -0
- package/src/lib/core/guide/guide.service.ts +108 -0
- package/src/lib/core/guide/help-tip.component.ts +43 -0
- package/src/lib/core/http.interceptor.ts +80 -0
- package/src/lib/core/hub.service.ts +202 -0
- package/src/lib/core/identity/identity.component.html +2 -0
- package/src/lib/core/identity/identity.component.ts +57 -0
- package/src/lib/core/info/attachment-info.service.ts +46 -0
- package/src/lib/core/info/document-info.service.ts +15 -0
- package/src/lib/core/info/location-info.component.scss +13 -0
- package/src/lib/core/info/location-info.component.ts +64 -0
- package/src/lib/core/info/map-info.ts +33 -0
- package/src/lib/core/layout/autocomplete.field.ts +41 -0
- package/src/lib/core/layout/checkbox.field.ts +21 -0
- package/src/lib/core/layout/checkbox.scss +13 -0
- package/src/lib/core/layout/checkbox.ts +21 -0
- package/src/lib/core/layout/date-range.field.ts +32 -0
- package/src/lib/core/layout/date.field.ts +26 -0
- package/src/lib/core/layout/expression.field.ts +26 -0
- package/src/lib/core/layout/file.field.ts +27 -0
- package/src/lib/core/layout/html.field.ts +28 -0
- package/src/lib/core/layout/input.base.ts +12 -0
- package/src/lib/core/layout/input.field.ts +43 -0
- package/src/lib/core/layout/layout.component.scss +9 -0
- package/src/lib/core/layout/layout.component.ts +189 -0
- package/src/lib/core/layout/numeric.field.ts +24 -0
- package/src/lib/core/layout/select.field.ts +52 -0
- package/src/lib/core/layout/switch.field.ts +21 -0
- package/src/lib/core/layout/textarea.field.ts +21 -0
- package/src/lib/core/layout/timespan.field.ts +25 -0
- package/src/lib/core/lottie-animation.ts +37 -0
- package/src/lib/core/mailbox.service.ts +471 -0
- package/src/lib/core/models.ts +685 -0
- package/src/lib/core/none.component.scss +26 -0
- package/src/lib/core/none.component.ts +28 -0
- package/src/lib/core/pipes/action.pipe.ts +18 -0
- package/src/lib/core/pipes/calendar.pipe.ts +84 -0
- package/src/lib/core/pipes/date-format.pipe.ts +12 -0
- package/src/lib/core/pipes/daterange.pipe.ts +45 -0
- package/src/lib/core/pipes/difference.pipe.ts +9 -0
- package/src/lib/core/pipes/duration-format.pipe.ts +42 -0
- package/src/lib/core/pipes/duration.pipe.ts +13 -0
- package/src/lib/core/pipes/form.pipe.ts +19 -0
- package/src/lib/core/pipes/join.pipe.ts +10 -0
- package/src/lib/core/pipes/role.pipe.ts +19 -0
- package/src/lib/core/pipes/sanitize-html.pipe.ts +10 -0
- package/src/lib/core/pipes/sort.pipe.ts +34 -0
- package/src/lib/core/pipes/state.pipe.ts +19 -0
- package/src/lib/core/pipes/time-ago.pipe.ts +59 -0
- package/src/lib/core/pipes/translate.pipe.ts +22 -0
- package/src/lib/core/pipes/type-value.pipe.ts +37 -0
- package/src/lib/core/pipes/user-name.pipe.ts +14 -0
- package/src/lib/core/popup/_popup-theme.scss +363 -0
- package/src/lib/core/popup/popup-ref.ts +19 -0
- package/src/lib/core/popup/popup.component.html +6 -0
- package/src/lib/core/popup/popup.component.ts +40 -0
- package/src/lib/core/popup/popup.service.ts +156 -0
- package/src/lib/core/popup/tooltip.directive.ts +58 -0
- package/src/lib/core/prompt/ask/ask.dialog.html +6 -0
- package/src/lib/core/prompt/ask/ask.dialog.ts +35 -0
- package/src/lib/core/prompt/mask/mask.component.html +1 -0
- package/src/lib/core/prompt/mask/mask.component.scss +14 -0
- package/src/lib/core/prompt/mask/mask.component.ts +15 -0
- package/src/lib/core/prompt.service.ts +81 -0
- package/src/lib/core/router.ts +31 -0
- package/src/lib/core/session.service.ts +265 -0
- package/src/lib/core/slots/_slots-theme.scss +139 -0
- package/src/lib/core/slots/extended-tab.component.exp.ts +35 -0
- package/src/lib/core/slots/extended-tab.component.html +0 -0
- package/src/lib/core/slots/intro.pane.component.exp.ts +23 -0
- package/src/lib/core/slots/intro.pane.component.html +22 -0
- package/src/lib/core/slots/intro.pane.component.scss +8 -0
- package/src/lib/core/slots/pane-ref.ts +188 -0
- package/src/lib/core/slots/router.directive.ts +53 -0
- package/src/lib/core/slots/router.service.ts +53 -0
- package/src/lib/core/slots/slot.component.exp.ts +49 -0
- package/src/lib/core/slots/slot.component.html +15 -0
- package/src/lib/core/slots/slot.component.scss +18 -0
- package/src/lib/core/slots/slots.component.html +68 -0
- package/src/lib/core/slots/slots.component.scss +163 -0
- package/src/lib/core/slots/slots.component.ts +1260 -0
- package/src/lib/core/tagging/documents.component.html +11 -0
- package/src/lib/core/tagging/documents.component.ts +19 -0
- package/src/lib/core/tagging/edit-input.component.html +41 -0
- package/src/lib/core/tagging/edit-input.component.scss +21 -0
- package/src/lib/core/tagging/edit-input.component.ts +211 -0
- package/src/lib/core/tagging/emoji.component.ts +23 -0
- package/src/lib/core/tagging/tagging-item.directive.ts +34 -0
- package/src/lib/core/tagging/tagging.component-base.ts +29 -0
- package/src/lib/core/tagging/tagging.component.scss +22 -0
- package/src/lib/core/tagging/tagging.directive.ts +130 -0
- package/src/lib/core/tagging/tagging.pipe.ts +76 -0
- package/src/lib/core/tagging/users.component.html +13 -0
- package/src/lib/core/tagging/users.component.ts +28 -0
- package/src/lib/core/translate.service.ts +128 -0
- package/src/lib/core/translations.ts +1138 -0
- package/src/lib/core/window-title.service.ts +54 -0
- package/src/lib/cube/accum/accum.component.html +16 -0
- package/src/lib/cube/accum/accum.component.ts +264 -0
- package/src/lib/cube/chart/chart.component.html +32 -0
- package/src/lib/cube/chart/chart.component.ts +344 -0
- package/src/lib/cube/cube-info.service.ts +135 -0
- package/src/lib/cube/cube-menu.component.html +13 -0
- package/src/lib/cube/cube-menu.component.ts +18 -0
- package/src/lib/cube/cube-view.component.html +66 -0
- package/src/lib/cube/cube-view.component.ts +186 -0
- package/src/lib/cube/cube.service.ts +495 -0
- package/src/lib/cube/declarations.ts +24 -0
- package/src/lib/cube/explore/document-item.component.ts +28 -0
- package/src/lib/cube/explore/explore-item.component.scss +4 -0
- package/src/lib/cube/explore/explore-item.component.ts +23 -0
- package/src/lib/cube/explore/explore-items.component.html +25 -0
- package/src/lib/cube/explore/explore-items.component.scss +7 -0
- package/src/lib/cube/explore/explore-items.component.ts +185 -0
- package/src/lib/cube/explore/explore.pane.component.html +12 -0
- package/src/lib/cube/explore/explore.pane.component.ts +78 -0
- package/src/lib/cube/explore/item-resolver.service.ts +24 -0
- package/src/lib/cube/explore/item.pane.component.html +3 -0
- package/src/lib/cube/explore/item.pane.component.ts +23 -0
- package/src/lib/cube/filter/filter-tags.component.exp.ts +70 -0
- package/src/lib/cube/filter/filter-tags.component.html +11 -0
- package/src/lib/cube/filter/filter-tags.component.scss +0 -0
- package/src/lib/cube/filter/filter-tags.component.spec.ts +25 -0
- package/src/lib/cube/filter/filter.component.html +25 -0
- package/src/lib/cube/filter/filter.component.scss +8 -0
- package/src/lib/cube/filter/filter.component.ts +116 -0
- package/src/lib/cube/grid/grid.component.html +29 -0
- package/src/lib/cube/grid/grid.component.scss +10 -0
- package/src/lib/cube/grid/grid.component.ts +223 -0
- package/src/lib/cube/grid/spreadsheet.component.ts +382 -0
- package/src/lib/cube/matrix/_matrix.theme.scss +86 -0
- package/src/lib/cube/matrix/matrix.base.ts +149 -0
- package/src/lib/cube/matrix/matrix.mobile.component.html +28 -0
- package/src/lib/cube/matrix/matrix.mobile.component.ts +60 -0
- package/src/lib/cube/matrix/matrix.pane.component.html +34 -0
- package/src/lib/cube/matrix/matrix.pane.component.scss +10 -0
- package/src/lib/cube/matrix/matrix.pane.component.ts +83 -0
- package/src/lib/cube/matrix/popup.component.html +32 -0
- package/src/lib/cube/matrix/popup.component.scss +7 -0
- package/src/lib/cube/matrix/popup.component.ts +55 -0
- package/src/lib/cube/matrix/table.component.html +46 -0
- package/src/lib/cube/matrix/table.component.scss +25 -0
- package/src/lib/cube/matrix/table.component.ts +517 -0
- package/src/lib/cube/parallel/item.ts +47 -0
- package/src/lib/cube/parallel/parallel.component.html +22 -0
- package/src/lib/cube/parallel/parallel.component.scss +13 -0
- package/src/lib/cube/parallel/parallel.component.ts +166 -0
- package/src/lib/cube/pivot/pivot.component.html +14 -0
- package/src/lib/cube/pivot/pivot.component.ts +518 -0
- package/src/lib/cube/sum/_sum.theme.scss +63 -0
- package/src/lib/cube/sum/sum.component.html +60 -0
- package/src/lib/cube/sum/sum.component.scss +94 -0
- package/src/lib/cube/sum/sum.component.ts +437 -0
- package/src/lib/cube/view-base.ts +82 -0
- package/src/lib/cube/view.mobile.component.html +38 -0
- package/src/lib/cube/view.mobile.component.scss +9 -0
- package/src/lib/cube/view.mobile.component.ts +116 -0
- package/src/lib/cube/view.pane.component.html +24 -0
- package/src/lib/cube/view.pane.component.scss +12 -0
- package/src/lib/cube/view.pane.component.ts +80 -0
- package/src/lib/dashboard/_table.widget.scss +19 -0
- package/src/lib/dashboard/actions/actions.widget.html +6 -0
- package/src/lib/dashboard/actions/actions.widget.ts +118 -0
- package/src/lib/dashboard/cube/accum-cube.widget.html +15 -0
- package/src/lib/dashboard/cube/accum-cube.widget.ts +154 -0
- package/src/lib/dashboard/cube/compare.widget.ts +219 -0
- package/src/lib/dashboard/cube/cube-analysis.base.ts +113 -0
- package/src/lib/dashboard/cube/cube-analysis.widget.ts +44 -0
- package/src/lib/dashboard/cube/cube-chart.widget.html +7 -0
- package/src/lib/dashboard/cube/cube-chart.widget.ts +144 -0
- package/src/lib/dashboard/cube/documents.widget.html +19 -0
- package/src/lib/dashboard/cube/documents.widget.ts +57 -0
- package/src/lib/dashboard/cube/filter/filter.component.html +3 -0
- package/src/lib/dashboard/cube/filter/filter.component.ts +53 -0
- package/src/lib/dashboard/cube/gauge.component.exp.ts +18 -0
- package/src/lib/dashboard/dashboard.component.html +18 -0
- package/src/lib/dashboard/dashboard.component.scss +36 -0
- package/src/lib/dashboard/dashboard.component.ts +53 -0
- package/src/lib/dashboard/dashboard.pane.component.ts +19 -0
- package/src/lib/dashboard/recents/recents.widget.html +32 -0
- package/src/lib/dashboard/recents/recents.widget.scss +9 -0
- package/src/lib/dashboard/recents/recents.widget.ts +89 -0
- package/src/lib/dashboard/score/activity.widget.html +9 -0
- package/src/lib/dashboard/score/activity.widget.ts +175 -0
- package/src/lib/dashboard/score/compare-groups.widget.html +8 -0
- package/src/lib/dashboard/score/compare-groups.widget.ts +212 -0
- package/src/lib/dashboard/score/peers-performance.widget.html +23 -0
- package/src/lib/dashboard/score/peers-performance.widget.ts +254 -0
- package/src/lib/dashboard/score/pending-results.widget.html +31 -0
- package/src/lib/dashboard/score/pending-results.widget.ts +52 -0
- package/src/lib/dashboard/score/personal-score.widget.html +18 -0
- package/src/lib/dashboard/score/personal-score.widget.ts +229 -0
- package/src/lib/dashboard/widget-item.component.ts +92 -0
- package/src/lib/dashboard/widget-ref.ts +20 -0
- package/src/lib/desktop.module.ts +98 -0
- package/src/lib/home/_home-theme.scss +174 -0
- package/src/lib/home/about/about.dialog.html +19 -0
- package/src/lib/home/about/about.dialog.ts +18 -0
- package/src/lib/home/home-base.component.ts +100 -0
- package/src/lib/home/home.desktop.component.html +92 -0
- package/src/lib/home/home.desktop.component.scss +66 -0
- package/src/lib/home/home.desktop.component.ts +211 -0
- package/src/lib/home/home.mobile.component.html +81 -0
- package/src/lib/home/home.mobile.component.scss +49 -0
- package/src/lib/home/home.mobile.component.ts +105 -0
- package/src/lib/home/notifications/notifications.component.html +18 -0
- package/src/lib/home/notifications/notifications.component.scss +36 -0
- package/src/lib/home/notifications/notifications.component.ts +55 -0
- package/src/lib/home/options/_options-theme.scss +11 -0
- package/src/lib/home/options/options.component.html +41 -0
- package/src/lib/home/options/options.component.scss +16 -0
- package/src/lib/home/options/options.component.ts +95 -0
- package/src/lib/home/outofoffice/outofoffice.component.html +5 -0
- package/src/lib/home/outofoffice/outofoffice.component.scss +10 -0
- package/src/lib/home/outofoffice/outofoffice.component.ts +33 -0
- package/src/lib/home/progress-bar.directive.exp.ts +24 -0
- package/src/lib/home/search.service.ts +87 -0
- package/src/lib/home/sign/sign.component.html +15 -0
- package/src/lib/home/sign/sign.component.ts +42 -0
- package/src/lib/home/submenu.directive.exp.ts +43 -0
- package/src/lib/home/tools.component.html +27 -0
- package/src/lib/home/tools.component.scss +15 -0
- package/src/lib/home/tools.component.ts +72 -0
- package/src/lib/home/welcome/welcome.dialog.exp.ts +35 -0
- package/src/lib/home/welcome/welcome.dialog.html +14 -0
- package/src/lib/impersonate/impersonate.component.html +17 -0
- package/src/lib/impersonate/impersonate.component.scss +3 -0
- package/src/lib/impersonate/impersonate.component.spec.ts +24 -0
- package/src/lib/impersonate/impersonate.component.ts +60 -0
- package/src/lib/mobile.module.ts +39 -0
- package/src/lib/modules/chart.module.ts +53 -0
- package/src/lib/modules/circular-gauge.module.ts +10 -0
- package/src/lib/modules/date.adapter.ts +31 -0
- package/src/lib/modules/datepicker.intl.ts +35 -0
- package/src/lib/modules/dayjs.module.ts +32 -0
- package/src/lib/modules/diagram.module.ts +25 -0
- package/src/lib/modules/gantt.module.ts +12 -0
- package/src/lib/modules/grid.module.ts +16 -0
- package/src/lib/modules/material.module.ts +104 -0
- package/src/lib/modules/paginator.intl.ts +16 -0
- package/src/lib/modules/pivot.module.ts +23 -0
- package/src/lib/modules/schedule.module.ts +12 -0
- package/src/lib/modules/spreadsheet.module.ts +21 -0
- package/src/lib/modules/stepper.intl.ts +12 -0
- package/src/lib/modules/texteditor.module.ts +16 -0
- package/src/lib/notifications/filter.component.html +6 -0
- package/src/lib/notifications/filter.component.ts +16 -0
- package/src/lib/notifications/notifications-table.component.html +54 -0
- package/src/lib/notifications/notifications-table.component.scss +14 -0
- package/src/lib/notifications/notifications-table.component.ts +94 -0
- package/src/lib/notifications/notifications.component-base.ts +49 -0
- package/src/lib/notifications/notifications.mobile.component.ts +13 -0
- package/src/lib/notifications/notifications.pane.component.ts +16 -0
- package/src/lib/notifications/notifications.service.ts +66 -0
- package/src/lib/notifications/types/commented.notification.html +14 -0
- package/src/lib/notifications/types/commented.notification.ts +51 -0
- package/src/lib/notifications/types/cube-anomaly.notification.ts +51 -0
- package/src/lib/notifications/types/escalated.notification.ts +36 -0
- package/src/lib/notifications/types/liked.notification.ts +49 -0
- package/src/lib/notifications/types/long-running-task.notification.ts +23 -0
- package/src/lib/notifications/types/notification-base.ts +37 -0
- package/src/lib/notifications/types/nudge.notification.ts +32 -0
- package/src/lib/notifications/types/state-changed.notification.ts +27 -0
- package/src/lib/notifications/types/tagged.notification.ts +46 -0
- package/src/lib/notifications/types/text.notification.ts +13 -0
- package/src/lib/notifications/types/upcoming-event.notification.ts +25 -0
- package/src/lib/options/options.component.html +148 -0
- package/src/lib/options/options.component.scss +19 -0
- package/src/lib/options/options.component.ts +262 -0
- package/src/lib/options/options.service.ts +30 -0
- package/src/lib/reports/arguments-component.ts +73 -0
- package/src/lib/reports/cube/documents.component.ts +50 -0
- package/src/lib/reports/cube/grid-documents.component.html +25 -0
- package/src/lib/reports/cube/grid-documents.component.ts +67 -0
- package/src/lib/reports/cube/table-documents.component.css +18 -0
- package/src/lib/reports/cube/table-documents.component.html +30 -0
- package/src/lib/reports/cube/table-documents.component.ts +46 -0
- package/src/lib/reports/cube/usage-args.component.html +3 -0
- package/src/lib/reports/cube/usage-args.component.ts +55 -0
- package/src/lib/reports/cube/usage-base.ts +113 -0
- package/src/lib/reports/cube/usage-browse.component.exp.ts +93 -0
- package/src/lib/reports/cube/usage-browse.component.html +27 -0
- package/src/lib/reports/cube/usage-browse.component.scss +24 -0
- package/src/lib/reports/cube/usage-chart.component.html +11 -0
- package/src/lib/reports/cube/usage-chart.component.ts +386 -0
- package/src/lib/reports/cube/usage-pivot.component.html +19 -0
- package/src/lib/reports/cube/usage-pivot.component.ts +266 -0
- package/src/lib/reports/cube/usage.component.ts +34 -0
- package/src/lib/reports/report-ref.ts +41 -0
- package/src/lib/reports/report-viewer.component.html +2 -0
- package/src/lib/reports/report-viewer.component.scss +12 -0
- package/src/lib/reports/report-viewer.component.ts +159 -0
- package/src/lib/reports/report.mobile.component.html +17 -0
- package/src/lib/reports/report.mobile.component.scss +7 -0
- package/src/lib/reports/report.mobile.component.ts +117 -0
- package/src/lib/reports/report.pane.component.html +9 -0
- package/src/lib/reports/report.pane.component.scss +9 -0
- package/src/lib/reports/report.pane.component.ts +88 -0
- package/src/lib/reports/reports-menu.component.html +9 -0
- package/src/lib/reports/reports-menu.component.ts +20 -0
- package/src/lib/reports/substitution/substitution.component.html +26 -0
- package/src/lib/reports/substitution/substitution.component.ts +34 -0
- package/src/lib/reports/table/table-view.component.html +8 -0
- package/src/lib/reports/table/table-view.component.scss +0 -0
- package/src/lib/reports/table/table-view.component.ts +33 -0
- package/src/lib/reports/tasks/tasks.component.html +21 -0
- package/src/lib/reports/tasks/tasks.component.ts +115 -0
- package/src/lib/reports/timeline/timeline.component.exp.ts +225 -0
- package/src/lib/reports/timeline/timeline.component.html +9 -0
- package/src/lib/routes.desktop.ts +196 -0
- package/src/lib/routes.mobile.ts +70 -0
- package/src/lib/scheduler/schedule.component.html +36 -0
- package/src/lib/scheduler/schedule.component.scss +13 -0
- package/src/lib/scheduler/schedule.component.ts +158 -0
- package/src/lib/scheduler/scheduler.mobile.component.ts +30 -0
- package/src/lib/scheduler/scheduler.pane.component.ts +49 -0
- package/src/lib/shared.module.ts +374 -0
- package/src/lib/system.module.ts +77 -0
- package/src/lib/views/_views.theme.scss +18 -0
- package/src/lib/views/cube/chart.component.html +24 -0
- package/src/lib/views/cube/chart.component.ts +88 -0
- package/src/lib/views/cube/cube-base.ts +126 -0
- package/src/lib/views/cube/explore.component.html +33 -0
- package/src/lib/views/cube/explore.component.ts +82 -0
- package/src/lib/views/cube/filter.component.exp.ts +66 -0
- package/src/lib/views/cube/filter.component.html +25 -0
- package/src/lib/views/cube/matrix.component.html +42 -0
- package/src/lib/views/cube/matrix.component.scss +3 -0
- package/src/lib/views/cube/matrix.component.ts +106 -0
- package/src/lib/views/cube/parallel.component.html +10 -0
- package/src/lib/views/cube/parallel.component.scss +13 -0
- package/src/lib/views/cube/parallel.component.ts +63 -0
- package/src/lib/views/cube/pivot.component.html +8 -0
- package/src/lib/views/cube/pivot.component.ts +62 -0
- package/src/lib/views/cube/sum.component.html +30 -0
- package/src/lib/views/cube/sum.component.scss +3 -0
- package/src/lib/views/cube/sum.component.ts +71 -0
- package/src/lib/views/cube/view.component.html +34 -0
- package/src/lib/views/cube/view.component.scss +12 -0
- package/src/lib/views/cube/view.component.ts +103 -0
- package/src/lib/views/document-view-ref.ts +34 -0
- package/src/lib/views/timeline/timeline.component.exp.ts +333 -0
- package/src/lib/views/timeline/timeline.component.html +6 -0
- package/src/lib/views/timeline/timeline.component.scss +6 -0
- package/src/lib/views/view-item.component.ts +67 -0
- package/src/lib/views/views.component.html +4 -0
- package/src/lib/views/views.component.scss +33 -0
- package/src/lib/views/views.component.ts +29 -0
- package/src/lib/views/views.mobile.component.ts +19 -0
- package/src/lib/views/views.pane.component.ts +33 -0
- package/src/polyfills.ts +81 -0
- package/src/public-api.ts +149 -0
- package/src/styles/_app.scss +317 -0
- package/src/styles/_emoji-mart.scss +504 -0
- package/src/styles/_syncfusion-base-definitions.scss +63 -0
- package/src/styles/_syncfusion-dark-definitions.scss +21 -0
- package/src/styles/_syncfusion-dark.scss +2 -0
- package/src/styles/_syncfusion-icons.scss +57 -0
- package/src/styles/_syncfusion-light-definitions.scss +23 -0
- package/src/styles/_syncfusion-light.scss +2 -0
- package/src/styles/_syncfusion.scss +21 -0
- package/src/styles/_xslt.scss +377 -0
- package/src/styles/brown.scss +14 -0
- package/src/styles/build-xslt.ps1 +2 -0
- package/src/styles/build.ps1 +26 -0
- package/src/styles/dark.scss +13 -0
- package/src/styles/deep-purple-light-blue.scss +20 -0
- package/src/styles/deep-purple-teal.scss +20 -0
- package/src/styles/default.scss +21 -0
- package/src/styles/diagram-icons.eot +0 -0
- package/src/styles/diagram-icons.ttf +0 -0
- package/src/styles/green.scss +13 -0
- package/src/styles/indigo.scss +13 -0
- package/src/styles/xslt.scss +21 -0
- package/src/styles/xslt.scss.map +1 -0
- package/src/test.ts +26 -0
- package/tsconfig.lib.json +26 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +18 -0
- package/bizdoc-core.d.ts +0 -5
- package/esm2020/bizdoc-core.mjs +0 -5
- package/esm2020/lib/admin/admin-dismiss.service.mjs +0 -22
- package/esm2020/lib/admin/admin-menu.component.mjs +0 -27
- package/esm2020/lib/admin/core/ace.input.mjs +0 -147
- package/esm2020/lib/admin/core/color-picker.input.mjs +0 -208
- package/esm2020/lib/admin/core/search.input.mjs +0 -43
- package/esm2020/lib/admin/diff/configuration-diff.component.mjs +0 -558
- package/esm2020/lib/admin/document-trace/document-trace.component.mjs +0 -532
- package/esm2020/lib/admin/document-trace/reassign.dialog.mjs +0 -40
- package/esm2020/lib/admin/document-trace/timeline.mjs +0 -2
- package/esm2020/lib/admin/document-trace/trace-element.component.mjs +0 -123
- package/esm2020/lib/admin/form/form.resolve.service.mjs +0 -17
- package/esm2020/lib/admin/form/form.service.mjs +0 -43
- package/esm2020/lib/admin/form/workflow/node-ref.mjs +0 -8
- package/esm2020/lib/admin/form/workflow/node.component.mjs +0 -128
- package/esm2020/lib/admin/form/workflow/role-node.component.mjs +0 -90
- package/esm2020/lib/admin/form/workflow/workflow.component.mjs +0 -447
- package/esm2020/lib/admin/indices/manage-cube-index.component.mjs +0 -161
- package/esm2020/lib/admin/patterns/patterns.component.mjs +0 -179
- package/esm2020/lib/admin/permissions/permissions.component.mjs +0 -97
- package/esm2020/lib/admin/positions/positions-popup.component.mjs +0 -74
- package/esm2020/lib/admin/positions/positions.component.mjs +0 -460
- package/esm2020/lib/admin/profiler/outofoffice.component.mjs +0 -155
- package/esm2020/lib/admin/profiler/profiler.component.mjs +0 -289
- package/esm2020/lib/admin/utility-ref.mjs +0 -38
- package/esm2020/lib/admin/utility-wrapper.component.mjs +0 -51
- package/esm2020/lib/admin/utility.pane.component.mjs +0 -51
- package/esm2020/lib/app.component.mjs +0 -90
- package/esm2020/lib/bizdoc.module.mjs +0 -101
- package/esm2020/lib/browse/browse-items.component.mjs +0 -481
- package/esm2020/lib/browse/browse.mobile.component.mjs +0 -101
- package/esm2020/lib/browse/browse.pane.component.mjs +0 -149
- package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +0 -316
- package/esm2020/lib/browse/filter/filter.component.mjs +0 -164
- package/esm2020/lib/browse/folders-menu.component.mjs +0 -51
- package/esm2020/lib/chat/chat-info.mjs +0 -68
- package/esm2020/lib/chat/chat.mobile.component.mjs +0 -26
- package/esm2020/lib/chat/chat.service.mjs +0 -122
- package/esm2020/lib/chat/contacts.component.mjs +0 -103
- package/esm2020/lib/chat/contacts.pane.component.mjs +0 -29
- package/esm2020/lib/chat/conversation.component.mjs +0 -193
- package/esm2020/lib/chat/conversation.pane.component.mjs +0 -53
- package/esm2020/lib/compose/action/action-picker.component.mjs +0 -84
- package/esm2020/lib/compose/action/action-ref.mjs +0 -19
- package/esm2020/lib/compose/action/action.base.mjs +0 -49
- package/esm2020/lib/compose/action/action.dialog.mjs +0 -61
- package/esm2020/lib/compose/action/action.pane.dialog.exp.mjs +0 -72
- package/esm2020/lib/compose/action/assign-action.component.mjs +0 -70
- package/esm2020/lib/compose/action/moveto-action.component.mjs +0 -91
- package/esm2020/lib/compose/action/return-action.component.mjs +0 -52
- package/esm2020/lib/compose/attachments/attachments.component.mjs +0 -127
- package/esm2020/lib/compose/attachments/preview/attachment-preview.component.mjs +0 -155
- package/esm2020/lib/compose/attachments/progress-button.directive.mjs +0 -25
- package/esm2020/lib/compose/can-deactivate-changes.service.mjs +0 -27
- package/esm2020/lib/compose/comments/Comments.pane.component.mjs +0 -49
- package/esm2020/lib/compose/comments/comment.component.mjs +0 -186
- package/esm2020/lib/compose/comments/comments.component.mjs +0 -227
- package/esm2020/lib/compose/comments/edit-comment.component.mjs +0 -32
- package/esm2020/lib/compose/comments/edits.component.mjs +0 -30
- package/esm2020/lib/compose/comments/quick-comment.component.exp.mjs +0 -63
- package/esm2020/lib/compose/comments/votes.component.mjs +0 -42
- package/esm2020/lib/compose/compose-resolve.service.mjs +0 -55
- package/esm2020/lib/compose/compose.mobile.component.mjs +0 -112
- package/esm2020/lib/compose/compose.pane.component.mjs +0 -204
- package/esm2020/lib/compose/copy/copy.dialog.mjs +0 -46
- package/esm2020/lib/compose/dismiss.service.mjs +0 -25
- package/esm2020/lib/compose/document-resolver.service.mjs +0 -17
- package/esm2020/lib/compose/document.component.mjs +0 -45
- package/esm2020/lib/compose/document.mobile.component.mjs +0 -22
- package/esm2020/lib/compose/document.pane.component.mjs +0 -26
- package/esm2020/lib/compose/events/events.component.mjs +0 -30
- package/esm2020/lib/compose/form-ref.mjs +0 -46
- package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +0 -88
- package/esm2020/lib/compose/form.component.mjs +0 -458
- package/esm2020/lib/compose/new-menu.component.mjs +0 -104
- package/esm2020/lib/compose/privilage.directive.mjs +0 -64
- package/esm2020/lib/compose/recipient-resolver.service.mjs +0 -18
- package/esm2020/lib/compose/save-changes.dialog.mjs +0 -18
- package/esm2020/lib/compose/state.component.mjs +0 -37
- package/esm2020/lib/compose/tag/tags.component.mjs +0 -91
- package/esm2020/lib/compose/trace/flow.component.mjs +0 -700
- package/esm2020/lib/compose/trace/people.component.mjs +0 -35
- package/esm2020/lib/compose/trace/trace.base.mjs +0 -71
- package/esm2020/lib/compose/trace/trace.component.mjs +0 -359
- package/esm2020/lib/compose/trace/trace.pane.component.mjs +0 -52
- package/esm2020/lib/compose/version-compare/version-compare.component.mjs +0 -53
- package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +0 -344
- package/esm2020/lib/compose/version-compare/version.pane.component.mjs +0 -56
- package/esm2020/lib/core/NgComponentOutlet.mjs +0 -38
- package/esm2020/lib/core/account.service.mjs +0 -37
- package/esm2020/lib/core/animated-icon/animated-icon.directive.mjs +0 -17
- package/esm2020/lib/core/animations.mjs +0 -156
- package/esm2020/lib/core/authentication.mjs +0 -3
- package/esm2020/lib/core/avatar/avatar.component.mjs +0 -103
- package/esm2020/lib/core/base.mjs +0 -2
- package/esm2020/lib/core/colors.mjs +0 -322
- package/esm2020/lib/core/component-factory-resolver.mjs +0 -64
- package/esm2020/lib/core/configuration.mjs +0 -17
- package/esm2020/lib/core/controls/address.input.mjs +0 -206
- package/esm2020/lib/core/controls/auto-complete.input.mjs +0 -256
- package/esm2020/lib/core/controls/combination-picker-body.mjs +0 -173
- package/esm2020/lib/core/controls/combination-picker.mjs +0 -277
- package/esm2020/lib/core/controls/combination-pool.mjs +0 -105
- package/esm2020/lib/core/controls/file.input.mjs +0 -420
- package/esm2020/lib/core/controls/select.input.mjs +0 -237
- package/esm2020/lib/core/controls/time-picker.mjs +0 -196
- package/esm2020/lib/core/controls/timespan.input.mjs +0 -207
- package/esm2020/lib/core/datasource.service.mjs +0 -75
- package/esm2020/lib/core/decorators.mjs +0 -46
- package/esm2020/lib/core/firebase.service.mjs +0 -50
- package/esm2020/lib/core/functions.mjs +0 -205
- package/esm2020/lib/core/guide/guide.component.mjs +0 -219
- package/esm2020/lib/core/guide/guide.service.mjs +0 -118
- package/esm2020/lib/core/http.interceptor.mjs +0 -79
- package/esm2020/lib/core/hub.service.mjs +0 -108
- package/esm2020/lib/core/identity/identity.component.mjs +0 -67
- package/esm2020/lib/core/info/attachment-info.service.mjs +0 -51
- package/esm2020/lib/core/info/document-info.service.mjs +0 -21
- package/esm2020/lib/core/info/location-info.component.mjs +0 -61
- package/esm2020/lib/core/info/map-info.mjs +0 -40
- package/esm2020/lib/core/layout/autocomplete.field.mjs +0 -60
- package/esm2020/lib/core/layout/checkbox.field.mjs +0 -41
- package/esm2020/lib/core/layout/checkbox.mjs +0 -35
- package/esm2020/lib/core/layout/date-range.field.mjs +0 -53
- package/esm2020/lib/core/layout/date.field.mjs +0 -52
- package/esm2020/lib/core/layout/expression.field.mjs +0 -51
- package/esm2020/lib/core/layout/file.field.mjs +0 -47
- package/esm2020/lib/core/layout/html.field.mjs +0 -48
- package/esm2020/lib/core/layout/input.base.mjs +0 -11
- package/esm2020/lib/core/layout/input.field.mjs +0 -64
- package/esm2020/lib/core/layout/layout.component.mjs +0 -196
- package/esm2020/lib/core/layout/numeric.field.mjs +0 -47
- package/esm2020/lib/core/layout/select.field.mjs +0 -82
- package/esm2020/lib/core/layout/switch.field.mjs +0 -41
- package/esm2020/lib/core/layout/textarea.field.mjs +0 -42
- package/esm2020/lib/core/layout/timespan.field.mjs +0 -50
- package/esm2020/lib/core/lottie-animation.mjs +0 -46
- package/esm2020/lib/core/mailbox.service.mjs +0 -410
- package/esm2020/lib/core/models.mjs +0 -40
- package/esm2020/lib/core/none.component.mjs +0 -40
- package/esm2020/lib/core/pipes/action.pipe.mjs +0 -25
- package/esm2020/lib/core/pipes/calendar.pipe.mjs +0 -72
- package/esm2020/lib/core/pipes/date-format.pipe.mjs +0 -19
- package/esm2020/lib/core/pipes/daterange.pipe.mjs +0 -62
- package/esm2020/lib/core/pipes/difference.pipe.mjs +0 -15
- package/esm2020/lib/core/pipes/duration-format.pipe.mjs +0 -48
- package/esm2020/lib/core/pipes/duration.pipe.mjs +0 -19
- package/esm2020/lib/core/pipes/form.pipe.mjs +0 -25
- package/esm2020/lib/core/pipes/join.pipe.mjs +0 -18
- package/esm2020/lib/core/pipes/role.pipe.mjs +0 -25
- package/esm2020/lib/core/pipes/sanitize-html.pipe.mjs +0 -18
- package/esm2020/lib/core/pipes/sort.pipe.mjs +0 -48
- package/esm2020/lib/core/pipes/state.pipe.mjs +0 -25
- package/esm2020/lib/core/pipes/time-ago.pipe.mjs +0 -66
- package/esm2020/lib/core/pipes/translate.pipe.mjs +0 -38
- package/esm2020/lib/core/pipes/type-value.pipe.mjs +0 -42
- package/esm2020/lib/core/pipes/user-name.pipe.mjs +0 -21
- package/esm2020/lib/core/popup/popup-ref.mjs +0 -20
- package/esm2020/lib/core/popup/popup.component.mjs +0 -37
- package/esm2020/lib/core/popup/popup.service.mjs +0 -148
- package/esm2020/lib/core/popup/tooltip.directive.mjs +0 -82
- package/esm2020/lib/core/prompt/ask/ask.dialog.mjs +0 -29
- package/esm2020/lib/core/prompt/mask/mask.component.mjs +0 -21
- package/esm2020/lib/core/prompt.service.mjs +0 -86
- package/esm2020/lib/core/router.mjs +0 -35
- package/esm2020/lib/core/session.service.mjs +0 -256
- package/esm2020/lib/core/slots/pane-ref.mjs +0 -146
- package/esm2020/lib/core/slots/router.directive.mjs +0 -70
- package/esm2020/lib/core/slots/router.service.mjs +0 -33
- package/esm2020/lib/core/slots/slots.component.mjs +0 -1105
- package/esm2020/lib/core/tagging/documents.component.mjs +0 -25
- package/esm2020/lib/core/tagging/edit-input.component.mjs +0 -233
- package/esm2020/lib/core/tagging/emoji.component.mjs +0 -35
- package/esm2020/lib/core/tagging/tagging-item.directive.mjs +0 -39
- package/esm2020/lib/core/tagging/tagging.component-base.mjs +0 -29
- package/esm2020/lib/core/tagging/tagging.directive.mjs +0 -138
- package/esm2020/lib/core/tagging/tagging.pipe.mjs +0 -72
- package/esm2020/lib/core/tagging/users.component.mjs +0 -32
- package/esm2020/lib/core/translate.service.mjs +0 -124
- package/esm2020/lib/core/translations.mjs +0 -1135
- package/esm2020/lib/core/window-title.service.mjs +0 -53
- package/esm2020/lib/cube/accum/accum.component.mjs +0 -258
- package/esm2020/lib/cube/chart/chart.component.mjs +0 -341
- package/esm2020/lib/cube/cube-info.service.mjs +0 -100
- package/esm2020/lib/cube/cube-menu.component.mjs +0 -27
- package/esm2020/lib/cube/cube-view.component.mjs +0 -186
- package/esm2020/lib/cube/cube.service.mjs +0 -418
- package/esm2020/lib/cube/declarations.mjs +0 -2
- package/esm2020/lib/cube/explore/document-item.component.mjs +0 -38
- package/esm2020/lib/cube/explore/explore-item.component.mjs +0 -27
- package/esm2020/lib/cube/explore/explore-items.component.mjs +0 -186
- package/esm2020/lib/cube/explore/explore.pane.component.mjs +0 -83
- package/esm2020/lib/cube/explore/item-resolver.service.mjs +0 -32
- package/esm2020/lib/cube/explore/item.pane.component.mjs +0 -23
- package/esm2020/lib/cube/filter/filter-tags.component.exp.mjs +0 -75
- package/esm2020/lib/cube/filter/filter.component.mjs +0 -137
- package/esm2020/lib/cube/grid/grid.component.mjs +0 -218
- package/esm2020/lib/cube/grid/spreadsheet.component.mjs +0 -367
- package/esm2020/lib/cube/matrix/matrix.base.mjs +0 -127
- package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +0 -63
- package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +0 -76
- package/esm2020/lib/cube/matrix/popup.component.mjs +0 -67
- package/esm2020/lib/cube/matrix/table.component.mjs +0 -493
- package/esm2020/lib/cube/parallel/item.mjs +0 -41
- package/esm2020/lib/cube/parallel/parallel.component.mjs +0 -159
- package/esm2020/lib/cube/pivot/pivot.component.mjs +0 -507
- package/esm2020/lib/cube/sum/sum.component.mjs +0 -404
- package/esm2020/lib/cube/view-base.mjs +0 -79
- package/esm2020/lib/cube/view.mobile.component.mjs +0 -127
- package/esm2020/lib/cube/view.pane.component.mjs +0 -88
- package/esm2020/lib/dashboard/actions/actions.widget.mjs +0 -126
- package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +0 -145
- package/esm2020/lib/dashboard/cube/compare.widget.mjs +0 -215
- package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +0 -90
- package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +0 -53
- package/esm2020/lib/dashboard/cube/cube-chart.widget.mjs +0 -144
- package/esm2020/lib/dashboard/cube/documents.widget.mjs +0 -64
- package/esm2020/lib/dashboard/cube/filter/filter.component.mjs +0 -61
- package/esm2020/lib/dashboard/dashboard.component.mjs +0 -47
- package/esm2020/lib/dashboard/dashboard.pane.component.mjs +0 -24
- package/esm2020/lib/dashboard/recents/recents.widget.mjs +0 -98
- package/esm2020/lib/dashboard/score/activity.widget.mjs +0 -173
- package/esm2020/lib/dashboard/score/compare-groups.widget.mjs +0 -206
- package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +0 -253
- package/esm2020/lib/dashboard/score/pending-results.widget.mjs +0 -60
- package/esm2020/lib/dashboard/score/personal-score.widget.mjs +0 -223
- package/esm2020/lib/dashboard/widget-item.component.mjs +0 -89
- package/esm2020/lib/dashboard/widget-ref.mjs +0 -18
- package/esm2020/lib/desktop.module.mjs +0 -144
- package/esm2020/lib/home/about/about.dialog.mjs +0 -26
- package/esm2020/lib/home/home-base.component.mjs +0 -91
- package/esm2020/lib/home/home.desktop.component.mjs +0 -221
- package/esm2020/lib/home/home.mobile.component.mjs +0 -116
- package/esm2020/lib/home/notifications/notifications.component.mjs +0 -67
- package/esm2020/lib/home/options/options.component.mjs +0 -94
- package/esm2020/lib/home/outofoffice/outofoffice.component.mjs +0 -38
- package/esm2020/lib/home/search.service.mjs +0 -75
- package/esm2020/lib/home/sign/sign.component.mjs +0 -54
- package/esm2020/lib/home/tools.component.mjs +0 -82
- package/esm2020/lib/impersonate/impersonate.component.mjs +0 -65
- package/esm2020/lib/mobile.module.mjs +0 -59
- package/esm2020/lib/modules/chart.module.mjs +0 -39
- package/esm2020/lib/modules/circular-gauge.module.mjs +0 -17
- package/esm2020/lib/modules/date.adapter.mjs +0 -23
- package/esm2020/lib/modules/datepicker.intl.mjs +0 -39
- package/esm2020/lib/modules/dayjs.module.mjs +0 -41
- package/esm2020/lib/modules/diagram.module.mjs +0 -34
- package/esm2020/lib/modules/gantt.module.mjs +0 -18
- package/esm2020/lib/modules/grid.module.mjs +0 -23
- package/esm2020/lib/modules/material.module.mjs +0 -188
- package/esm2020/lib/modules/paginator.intl.mjs +0 -21
- package/esm2020/lib/modules/pivot.module.mjs +0 -24
- package/esm2020/lib/modules/schedule.module.mjs +0 -21
- package/esm2020/lib/modules/spreadsheet.module.mjs +0 -30
- package/esm2020/lib/modules/stepper.intl.mjs +0 -17
- package/esm2020/lib/modules/texteditor.module.mjs +0 -27
- package/esm2020/lib/notifications/filter.component.mjs +0 -25
- package/esm2020/lib/notifications/notifications-table.component.mjs +0 -106
- package/esm2020/lib/notifications/notifications.component-base.mjs +0 -47
- package/esm2020/lib/notifications/notifications.mobile.component.mjs +0 -20
- package/esm2020/lib/notifications/notifications.pane.component.mjs +0 -23
- package/esm2020/lib/notifications/notifications.service.mjs +0 -71
- package/esm2020/lib/notifications/types/commented.notification.mjs +0 -53
- package/esm2020/lib/notifications/types/cube-anomaly.notification.mjs +0 -58
- package/esm2020/lib/notifications/types/escalated.notification.mjs +0 -33
- package/esm2020/lib/notifications/types/liked.notification.mjs +0 -50
- package/esm2020/lib/notifications/types/long-running-task.notification.mjs +0 -31
- package/esm2020/lib/notifications/types/notification-base.mjs +0 -40
- package/esm2020/lib/notifications/types/nudge.notification.mjs +0 -31
- package/esm2020/lib/notifications/types/state-changed.notification.mjs +0 -30
- package/esm2020/lib/notifications/types/tagged.notification.mjs +0 -43
- package/esm2020/lib/notifications/types/text.notification.mjs +0 -20
- package/esm2020/lib/notifications/types/upcoming-event.notification.mjs +0 -36
- package/esm2020/lib/options/options.component.mjs +0 -248
- package/esm2020/lib/options/options.service.mjs +0 -38
- package/esm2020/lib/reports/arguments-component.mjs +0 -83
- package/esm2020/lib/reports/cube/documents.component.mjs +0 -40
- package/esm2020/lib/reports/cube/grid-documents.component.mjs +0 -72
- package/esm2020/lib/reports/cube/table-documents.component.mjs +0 -56
- package/esm2020/lib/reports/cube/usage-args.component.mjs +0 -61
- package/esm2020/lib/reports/cube/usage-base.mjs +0 -79
- package/esm2020/lib/reports/cube/usage-chart.component.mjs +0 -357
- package/esm2020/lib/reports/cube/usage-pivot.component.mjs +0 -256
- package/esm2020/lib/reports/cube/usage.component.mjs +0 -40
- package/esm2020/lib/reports/report-ref.mjs +0 -31
- package/esm2020/lib/reports/report-viewer.component.mjs +0 -151
- package/esm2020/lib/reports/report.mobile.component.mjs +0 -128
- package/esm2020/lib/reports/report.pane.component.mjs +0 -96
- package/esm2020/lib/reports/reports-menu.component.mjs +0 -26
- package/esm2020/lib/reports/substitution/substitution.component.mjs +0 -40
- package/esm2020/lib/reports/table/table-view.component.mjs +0 -41
- package/esm2020/lib/reports/tasks/tasks.component.mjs +0 -95
- package/esm2020/lib/routes.desktop.mjs +0 -197
- package/esm2020/lib/routes.mobile.mjs +0 -69
- package/esm2020/lib/scheduler/schedule.component.mjs +0 -166
- package/esm2020/lib/scheduler/scheduler.mobile.component.mjs +0 -37
- package/esm2020/lib/scheduler/scheduler.pane.component.mjs +0 -53
- package/esm2020/lib/shared.module.mjs +0 -517
- package/esm2020/lib/system.module.mjs +0 -113
- package/esm2020/lib/views/cube/chart.component.mjs +0 -75
- package/esm2020/lib/views/cube/cube-base.mjs +0 -96
- package/esm2020/lib/views/cube/explore.component.mjs +0 -83
- package/esm2020/lib/views/cube/matrix.component.mjs +0 -97
- package/esm2020/lib/views/cube/parallel.component.mjs +0 -54
- package/esm2020/lib/views/cube/pivot.component.mjs +0 -51
- package/esm2020/lib/views/cube/sum.component.mjs +0 -64
- package/esm2020/lib/views/cube/view.component.mjs +0 -102
- package/esm2020/lib/views/document-view-ref.mjs +0 -27
- package/esm2020/lib/views/timeline/timeline.component.exp.mjs +0 -313
- package/esm2020/lib/views/view-item.component.mjs +0 -66
- package/esm2020/lib/views/views.component.mjs +0 -25
- package/esm2020/lib/views/views.mobile.component.mjs +0 -20
- package/esm2020/lib/views/views.pane.component.mjs +0 -31
- package/esm2020/public-api.mjs +0 -143
- package/fesm2015/bizdoc-core.mjs +0 -30636
- package/fesm2015/bizdoc-core.mjs.map +0 -1
- package/fesm2020/bizdoc-core.mjs +0 -30414
- package/fesm2020/bizdoc-core.mjs.map +0 -1
- package/lib/admin/admin-dismiss.service.d.ts +0 -14
- package/lib/admin/admin-menu.component.d.ts +0 -12
- package/lib/admin/core/ace.input.d.ts +0 -52
- package/lib/admin/core/color-picker.input.d.ts +0 -64
- package/lib/admin/core/search.input.d.ts +0 -13
- package/lib/admin/diff/configuration-diff.component.d.ts +0 -116
- package/lib/admin/document-trace/document-trace.component.d.ts +0 -98
- package/lib/admin/document-trace/reassign.dialog.d.ts +0 -22
- package/lib/admin/document-trace/timeline.d.ts +0 -40
- package/lib/admin/document-trace/trace-element.component.d.ts +0 -51
- package/lib/admin/form/form.resolve.service.d.ts +0 -12
- package/lib/admin/form/form.service.d.ts +0 -30
- package/lib/admin/form/workflow/node-ref.d.ts +0 -7
- package/lib/admin/form/workflow/node.component.d.ts +0 -37
- package/lib/admin/form/workflow/role-node.component.d.ts +0 -22
- package/lib/admin/form/workflow/workflow.component.d.ts +0 -77
- package/lib/admin/indices/manage-cube-index.component.d.ts +0 -54
- package/lib/admin/patterns/patterns.component.d.ts +0 -79
- package/lib/admin/permissions/permissions.component.d.ts +0 -45
- package/lib/admin/positions/positions-popup.component.d.ts +0 -39
- package/lib/admin/positions/positions.component.d.ts +0 -117
- package/lib/admin/profiler/outofoffice.component.d.ts +0 -48
- package/lib/admin/profiler/profiler.component.d.ts +0 -117
- package/lib/admin/utility-ref.d.ts +0 -19
- package/lib/admin/utility-wrapper.component.d.ts +0 -28
- package/lib/admin/utility.pane.component.d.ts +0 -24
- package/lib/app.component.d.ts +0 -24
- package/lib/bizdoc.module.d.ts +0 -18
- package/lib/browse/browse-items.component.d.ts +0 -103
- package/lib/browse/browse.mobile.component.d.ts +0 -39
- package/lib/browse/browse.pane.component.d.ts +0 -50
- package/lib/browse/expanded-item/expanded-item.component.d.ts +0 -67
- package/lib/browse/filter/filter.component.d.ts +0 -71
- package/lib/browse/folders-menu.component.d.ts +0 -22
- package/lib/chat/chat-info.d.ts +0 -37
- package/lib/chat/chat.mobile.component.d.ts +0 -10
- package/lib/chat/chat.service.d.ts +0 -38
- package/lib/chat/contacts.component.d.ts +0 -38
- package/lib/chat/contacts.pane.component.d.ts +0 -12
- package/lib/chat/conversation.component.d.ts +0 -56
- package/lib/chat/conversation.pane.component.d.ts +0 -16
- package/lib/compose/action/action-picker.component.d.ts +0 -25
- package/lib/compose/action/action-ref.d.ts +0 -10
- package/lib/compose/action/action.base.d.ts +0 -15
- package/lib/compose/action/action.dialog.d.ts +0 -29
- package/lib/compose/action/action.pane.dialog.exp.d.ts +0 -31
- package/lib/compose/action/assign-action.component.d.ts +0 -30
- package/lib/compose/action/moveto-action.component.d.ts +0 -36
- package/lib/compose/action/return-action.component.d.ts +0 -19
- package/lib/compose/attachments/attachments.component.d.ts +0 -35
- package/lib/compose/attachments/preview/attachment-preview.component.d.ts +0 -49
- package/lib/compose/attachments/progress-button.directive.d.ts +0 -12
- package/lib/compose/can-deactivate-changes.service.d.ts +0 -12
- package/lib/compose/comments/Comments.pane.component.d.ts +0 -18
- package/lib/compose/comments/comment.component.d.ts +0 -51
- package/lib/compose/comments/comments.component.d.ts +0 -66
- package/lib/compose/comments/edit-comment.component.d.ts +0 -25
- package/lib/compose/comments/edits.component.d.ts +0 -26
- package/lib/compose/comments/quick-comment.component.exp.d.ts +0 -28
- package/lib/compose/comments/votes.component.d.ts +0 -22
- package/lib/compose/compose-resolve.service.d.ts +0 -27
- package/lib/compose/compose.mobile.component.d.ts +0 -42
- package/lib/compose/compose.pane.component.d.ts +0 -58
- package/lib/compose/copy/copy.dialog.d.ts +0 -23
- package/lib/compose/dismiss.service.d.ts +0 -12
- package/lib/compose/document-resolver.service.d.ts +0 -12
- package/lib/compose/document.component.d.ts +0 -18
- package/lib/compose/document.mobile.component.d.ts +0 -10
- package/lib/compose/document.pane.component.d.ts +0 -12
- package/lib/compose/events/events.component.d.ts +0 -13
- package/lib/compose/form-ref.d.ts +0 -30
- package/lib/compose/form-selector/form-selector.sheet.d.ts +0 -28
- package/lib/compose/form.component.d.ts +0 -101
- package/lib/compose/new-menu.component.d.ts +0 -36
- package/lib/compose/privilage.directive.d.ts +0 -26
- package/lib/compose/recipient-resolver.service.d.ts +0 -12
- package/lib/compose/save-changes.dialog.d.ts +0 -7
- package/lib/compose/state.component.d.ts +0 -12
- package/lib/compose/tag/tags.component.d.ts +0 -36
- package/lib/compose/trace/flow.component.d.ts +0 -59
- package/lib/compose/trace/people.component.d.ts +0 -18
- package/lib/compose/trace/trace.base.d.ts +0 -28
- package/lib/compose/trace/trace.component.d.ts +0 -55
- package/lib/compose/trace/trace.pane.component.d.ts +0 -20
- package/lib/compose/version-compare/version-compare.component.d.ts +0 -24
- package/lib/compose/version-compare/version-compare.directive.d.ts +0 -89
- package/lib/compose/version-compare/version.pane.component.d.ts +0 -21
- package/lib/core/NgComponentOutlet.d.ts +0 -15
- package/lib/core/account.service.d.ts +0 -18
- package/lib/core/animated-icon/animated-icon.directive.d.ts +0 -7
- package/lib/core/animations.d.ts +0 -26
- package/lib/core/authentication.d.ts +0 -6
- package/lib/core/avatar/avatar.component.d.ts +0 -34
- package/lib/core/base.d.ts +0 -31
- package/lib/core/colors.d.ts +0 -6
- package/lib/core/component-factory-resolver.d.ts +0 -12
- package/lib/core/configuration.d.ts +0 -113
- package/lib/core/controls/address.input.d.ts +0 -65
- package/lib/core/controls/auto-complete.input.d.ts +0 -86
- package/lib/core/controls/combination-picker-body.d.ts +0 -114
- package/lib/core/controls/combination-picker.d.ts +0 -82
- package/lib/core/controls/combination-pool.d.ts +0 -42
- package/lib/core/controls/file.input.d.ts +0 -99
- package/lib/core/controls/select.input.d.ts +0 -84
- package/lib/core/controls/time-picker.d.ts +0 -52
- package/lib/core/controls/timespan.input.d.ts +0 -55
- package/lib/core/datasource.service.d.ts +0 -46
- package/lib/core/decorators.d.ts +0 -17
- package/lib/core/firebase.service.d.ts +0 -17
- package/lib/core/functions.d.ts +0 -54
- package/lib/core/guide/guide.component.d.ts +0 -31
- package/lib/core/guide/guide.service.d.ts +0 -38
- package/lib/core/http.interceptor.d.ts +0 -21
- package/lib/core/hub.service.d.ts +0 -133
- package/lib/core/identity/identity.component.d.ts +0 -29
- package/lib/core/info/attachment-info.service.d.ts +0 -17
- package/lib/core/info/document-info.service.d.ts +0 -14
- package/lib/core/info/location-info.component.d.ts +0 -28
- package/lib/core/info/map-info.d.ts +0 -15
- package/lib/core/layout/autocomplete.field.d.ts +0 -21
- package/lib/core/layout/checkbox.d.ts +0 -10
- package/lib/core/layout/checkbox.field.d.ts +0 -11
- package/lib/core/layout/date-range.field.d.ts +0 -13
- package/lib/core/layout/date.field.d.ts +0 -11
- package/lib/core/layout/expression.field.d.ts +0 -12
- package/lib/core/layout/file.field.d.ts +0 -14
- package/lib/core/layout/html.field.d.ts +0 -12
- package/lib/core/layout/input.base.d.ts +0 -10
- package/lib/core/layout/input.field.d.ts +0 -14
- package/lib/core/layout/layout.component.d.ts +0 -33
- package/lib/core/layout/numeric.field.d.ts +0 -11
- package/lib/core/layout/select.field.d.ts +0 -22
- package/lib/core/layout/switch.field.d.ts +0 -11
- package/lib/core/layout/textarea.field.d.ts +0 -11
- package/lib/core/layout/timespan.field.d.ts +0 -11
- package/lib/core/lottie-animation.d.ts +0 -14
- package/lib/core/mailbox.service.d.ts +0 -142
- package/lib/core/models.d.ts +0 -652
- package/lib/core/none.component.d.ts +0 -9
- package/lib/core/pipes/action.pipe.d.ts +0 -10
- package/lib/core/pipes/calendar.pipe.d.ts +0 -27
- package/lib/core/pipes/date-format.pipe.d.ts +0 -8
- package/lib/core/pipes/daterange.pipe.d.ts +0 -15
- package/lib/core/pipes/difference.pipe.d.ts +0 -7
- package/lib/core/pipes/duration-format.pipe.d.ts +0 -11
- package/lib/core/pipes/duration.pipe.d.ts +0 -8
- package/lib/core/pipes/form.pipe.d.ts +0 -10
- package/lib/core/pipes/join.pipe.d.ts +0 -10
- package/lib/core/pipes/role.pipe.d.ts +0 -10
- package/lib/core/pipes/sanitize-html.pipe.d.ts +0 -10
- package/lib/core/pipes/sort.pipe.d.ts +0 -12
- package/lib/core/pipes/state.pipe.d.ts +0 -10
- package/lib/core/pipes/time-ago.pipe.d.ts +0 -16
- package/lib/core/pipes/translate.pipe.d.ts +0 -18
- package/lib/core/pipes/type-value.pipe.d.ts +0 -15
- package/lib/core/pipes/user-name.pipe.d.ts +0 -11
- package/lib/core/popup/popup-ref.d.ts +0 -14
- package/lib/core/popup/popup.component.d.ts +0 -22
- package/lib/core/popup/popup.service.d.ts +0 -24
- package/lib/core/popup/tooltip.directive.d.ts +0 -29
- package/lib/core/prompt/ask/ask.dialog.d.ts +0 -22
- package/lib/core/prompt/mask/mask.component.d.ts +0 -10
- package/lib/core/prompt.service.d.ts +0 -36
- package/lib/core/router.d.ts +0 -20
- package/lib/core/session.service.d.ts +0 -82
- package/lib/core/slots/pane-ref.d.ts +0 -136
- package/lib/core/slots/router.directive.d.ts +0 -25
- package/lib/core/slots/router.service.d.ts +0 -37
- package/lib/core/slots/slots.component.d.ts +0 -205
- package/lib/core/tagging/documents.component.d.ts +0 -11
- package/lib/core/tagging/edit-input.component.d.ts +0 -65
- package/lib/core/tagging/emoji.component.d.ts +0 -18
- package/lib/core/tagging/tagging-item.directive.d.ts +0 -15
- package/lib/core/tagging/tagging.component-base.d.ts +0 -19
- package/lib/core/tagging/tagging.directive.d.ts +0 -34
- package/lib/core/tagging/tagging.pipe.d.ts +0 -24
- package/lib/core/tagging/users.component.d.ts +0 -15
- package/lib/core/translate.service.d.ts +0 -31
- package/lib/core/translations.d.ts +0 -1128
- package/lib/core/window-title.service.d.ts +0 -21
- package/lib/cube/accum/accum.component.d.ts +0 -63
- package/lib/cube/chart/chart.component.d.ts +0 -74
- package/lib/cube/cube-info.service.d.ts +0 -77
- package/lib/cube/cube-menu.component.d.ts +0 -12
- package/lib/cube/cube-view.component.d.ts +0 -31
- package/lib/cube/cube.service.d.ts +0 -268
- package/lib/cube/declarations.d.ts +0 -23
- package/lib/cube/explore/document-item.component.d.ts +0 -16
- package/lib/cube/explore/explore-item.component.d.ts +0 -14
- package/lib/cube/explore/explore-items.component.d.ts +0 -57
- package/lib/cube/explore/explore.pane.component.d.ts +0 -30
- package/lib/cube/explore/item-resolver.service.d.ts +0 -20
- package/lib/cube/explore/item.pane.component.d.ts +0 -13
- package/lib/cube/filter/filter-tags.component.exp.d.ts +0 -31
- package/lib/cube/filter/filter.component.d.ts +0 -44
- package/lib/cube/grid/grid.component.d.ts +0 -59
- package/lib/cube/grid/spreadsheet.component.d.ts +0 -62
- package/lib/cube/matrix/matrix.base.d.ts +0 -72
- package/lib/cube/matrix/matrix.mobile.component.d.ts +0 -22
- package/lib/cube/matrix/matrix.pane.component.d.ts +0 -23
- package/lib/cube/matrix/popup.component.d.ts +0 -21
- package/lib/cube/matrix/table.component.d.ts +0 -100
- package/lib/cube/parallel/item.d.ts +0 -13
- package/lib/cube/parallel/parallel.component.d.ts +0 -52
- package/lib/cube/pivot/pivot.component.d.ts +0 -103
- package/lib/cube/sum/sum.component.d.ts +0 -81
- package/lib/cube/view-base.d.ts +0 -39
- package/lib/cube/view.mobile.component.d.ts +0 -46
- package/lib/cube/view.pane.component.d.ts +0 -27
- package/lib/dashboard/actions/actions.widget.d.ts +0 -39
- package/lib/dashboard/cube/accum-cube.widget.d.ts +0 -33
- package/lib/dashboard/cube/compare.widget.d.ts +0 -53
- package/lib/dashboard/cube/cube-analysis.base.d.ts +0 -59
- package/lib/dashboard/cube/cube-analysis.widget.d.ts +0 -17
- package/lib/dashboard/cube/cube-chart.widget.d.ts +0 -32
- package/lib/dashboard/cube/documents.widget.d.ts +0 -30
- package/lib/dashboard/cube/filter/filter.component.d.ts +0 -22
- package/lib/dashboard/dashboard.component.d.ts +0 -20
- package/lib/dashboard/dashboard.pane.component.d.ts +0 -8
- package/lib/dashboard/recents/recents.widget.d.ts +0 -40
- package/lib/dashboard/score/activity.widget.d.ts +0 -50
- package/lib/dashboard/score/compare-groups.widget.d.ts +0 -51
- package/lib/dashboard/score/peers-performance.widget.d.ts +0 -65
- package/lib/dashboard/score/pending-results.widget.d.ts +0 -27
- package/lib/dashboard/score/personal-score.widget.d.ts +0 -57
- package/lib/dashboard/widget-item.component.d.ts +0 -31
- package/lib/dashboard/widget-ref.d.ts +0 -11
- package/lib/desktop.module.d.ts +0 -45
- package/lib/home/about/about.dialog.d.ts +0 -14
- package/lib/home/home-base.component.d.ts +0 -34
- package/lib/home/home.desktop.component.d.ts +0 -60
- package/lib/home/home.mobile.component.d.ts +0 -38
- package/lib/home/notifications/notifications.component.d.ts +0 -28
- package/lib/home/options/options.component.d.ts +0 -46
- package/lib/home/outofoffice/outofoffice.component.d.ts +0 -19
- package/lib/home/search.service.d.ts +0 -23
- package/lib/home/sign/sign.component.d.ts +0 -17
- package/lib/home/tools.component.d.ts +0 -36
- package/lib/impersonate/impersonate.component.d.ts +0 -27
- package/lib/mobile.module.d.ts +0 -25
- package/lib/modules/chart.module.d.ts +0 -7
- package/lib/modules/circular-gauge.module.d.ts +0 -7
- package/lib/modules/date.adapter.d.ts +0 -10
- package/lib/modules/datepicker.intl.d.ts +0 -30
- package/lib/modules/dayjs.module.d.ts +0 -6
- package/lib/modules/diagram.module.d.ts +0 -8
- package/lib/modules/gantt.module.d.ts +0 -7
- package/lib/modules/grid.module.d.ts +0 -7
- package/lib/modules/material.module.d.ts +0 -45
- package/lib/modules/paginator.intl.d.ts +0 -14
- package/lib/modules/pivot.module.d.ts +0 -7
- package/lib/modules/schedule.module.d.ts +0 -7
- package/lib/modules/spreadsheet.module.d.ts +0 -8
- package/lib/modules/stepper.intl.d.ts +0 -10
- package/lib/modules/texteditor.module.d.ts +0 -8
- package/lib/notifications/filter.component.d.ts +0 -9
- package/lib/notifications/notifications-table.component.d.ts +0 -32
- package/lib/notifications/notifications.component-base.d.ts +0 -12
- package/lib/notifications/notifications.mobile.component.d.ts +0 -8
- package/lib/notifications/notifications.pane.component.d.ts +0 -8
- package/lib/notifications/notifications.service.d.ts +0 -24
- package/lib/notifications/types/commented.notification.d.ts +0 -26
- package/lib/notifications/types/cube-anomaly.notification.d.ts +0 -29
- package/lib/notifications/types/escalated.notification.d.ts +0 -25
- package/lib/notifications/types/liked.notification.d.ts +0 -25
- package/lib/notifications/types/long-running-task.notification.d.ts +0 -21
- package/lib/notifications/types/notification-base.d.ts +0 -20
- package/lib/notifications/types/nudge.notification.d.ts +0 -23
- package/lib/notifications/types/state-changed.notification.d.ts +0 -22
- package/lib/notifications/types/tagged.notification.d.ts +0 -26
- package/lib/notifications/types/text.notification.d.ts +0 -13
- package/lib/notifications/types/upcoming-event.notification.d.ts +0 -20
- package/lib/options/options.component.d.ts +0 -67
- package/lib/options/options.service.d.ts +0 -14
- package/lib/reports/arguments-component.d.ts +0 -27
- package/lib/reports/cube/documents.component.d.ts +0 -34
- package/lib/reports/cube/grid-documents.component.d.ts +0 -28
- package/lib/reports/cube/table-documents.component.d.ts +0 -28
- package/lib/reports/cube/usage-args.component.d.ts +0 -21
- package/lib/reports/cube/usage-base.d.ts +0 -72
- package/lib/reports/cube/usage-chart.component.d.ts +0 -62
- package/lib/reports/cube/usage-pivot.component.d.ts +0 -66
- package/lib/reports/cube/usage.component.d.ts +0 -16
- package/lib/reports/report-ref.d.ts +0 -27
- package/lib/reports/report-viewer.component.d.ts +0 -47
- package/lib/reports/report.mobile.component.d.ts +0 -48
- package/lib/reports/report.pane.component.d.ts +0 -37
- package/lib/reports/reports-menu.component.d.ts +0 -12
- package/lib/reports/substitution/substitution.component.d.ts +0 -23
- package/lib/reports/table/table-view.component.d.ts +0 -19
- package/lib/reports/tasks/tasks.component.d.ts +0 -68
- package/lib/routes.desktop.d.ts +0 -2
- package/lib/routes.mobile.d.ts +0 -2
- package/lib/scheduler/schedule.component.d.ts +0 -43
- package/lib/scheduler/scheduler.mobile.component.d.ts +0 -14
- package/lib/scheduler/scheduler.pane.component.d.ts +0 -20
- package/lib/shared.module.d.ts +0 -191
- package/lib/system.module.d.ts +0 -34
- package/lib/views/cube/chart.component.d.ts +0 -39
- package/lib/views/cube/cube-base.d.ts +0 -46
- package/lib/views/cube/explore.component.d.ts +0 -43
- package/lib/views/cube/matrix.component.d.ts +0 -51
- package/lib/views/cube/parallel.component.d.ts +0 -32
- package/lib/views/cube/pivot.component.d.ts +0 -34
- package/lib/views/cube/sum.component.d.ts +0 -33
- package/lib/views/cube/view.component.d.ts +0 -40
- package/lib/views/document-view-ref.d.ts +0 -18
- package/lib/views/timeline/timeline.component.exp.d.ts +0 -66
- package/lib/views/view-item.component.d.ts +0 -26
- package/lib/views/views.component.d.ts +0 -14
- package/lib/views/views.mobile.component.d.ts +0 -10
- package/lib/views/views.pane.component.d.ts +0 -12
- package/public-api.d.ts +0 -145
@@ -1,1105 +0,0 @@
|
|
1
|
-
import { Component, EventEmitter, Inject, Injector, Output, ViewChild, ViewContainerRef, HostListener } from '@angular/core';
|
2
|
-
import { isObservable, Subject } from 'rxjs';
|
3
|
-
import { takeUntil, tap } from 'rxjs/operators';
|
4
|
-
import { isArray, isBoolean, isDate, isPromise, isString } from '../functions';
|
5
|
-
import { PANES_DATA, PaneRef, QueryParamNavigation, ParamNavigation, NavigationMode, NavigationStart, NavigationClose, NavigationEnd, NavigationSelected, PATH_CHAR, QUERY_CHAR, ARG_CHAR, PANE_CHAR, CollapseNavigation, BackNavigation, NavigationFullscreen, NavigationResize } from './pane-ref';
|
6
|
-
import { CdkScrollable } from '@angular/cdk/overlay';
|
7
|
-
import { panesAnimation, paneAnimation, panesTitleAnimation, paramAnimation, queryAnimation, tabAnimation, tabsAnimation } from '../animations';
|
8
|
-
import { DEFAULT_POLICY, OpenPolicy } from '../configuration';
|
9
|
-
import * as i0 from "@angular/core";
|
10
|
-
import * as i1 from "../session.service";
|
11
|
-
import * as i2 from "./router.service";
|
12
|
-
import * as i3 from "../window-title.service";
|
13
|
-
import * as i4 from "../guide/guide.service";
|
14
|
-
import * as i5 from "@angular/material/button";
|
15
|
-
import * as i6 from "@angular/material/icon";
|
16
|
-
import * as i7 from "../../home/tools.component";
|
17
|
-
import * as i8 from "@angular/material/tabs";
|
18
|
-
import * as i9 from "@angular/common";
|
19
|
-
import * as i10 from "@angular/material/core";
|
20
|
-
import * as i11 from "../popup/tooltip.directive";
|
21
|
-
import * as i12 from "@angular/cdk/scrolling";
|
22
|
-
import * as i13 from "../NgComponentOutlet";
|
23
|
-
import * as i14 from "@angular/material/badge";
|
24
|
-
import * as i15 from "../pipes/translate.pipe";
|
25
|
-
const DEFAULT_ROUTE = ['dashboard'];
|
26
|
-
export class SlotsComponent {
|
27
|
-
constructor(data, _session, _cd, _router, _title, _guide, _injector) {
|
28
|
-
this._session = _session;
|
29
|
-
this._cd = _cd;
|
30
|
-
this._router = _router;
|
31
|
-
this._title = _title;
|
32
|
-
this._guide = _guide;
|
33
|
-
this._injector = _injector;
|
34
|
-
this.dialogChange = new EventEmitter();
|
35
|
-
this.titleAnimation = 0;
|
36
|
-
this.panes = [];
|
37
|
-
this.tabs = [];
|
38
|
-
this._selectedTabIndex = -1;
|
39
|
-
this.dialog = false;
|
40
|
-
this.selectedIndex = -1;
|
41
|
-
this.dragging = false;
|
42
|
-
this.ripple = {
|
43
|
-
color: this._session.getAccent(),
|
44
|
-
centered: true,
|
45
|
-
radius: 25
|
46
|
-
};
|
47
|
-
this.accent = this._session.getAccent();
|
48
|
-
this._pending = [];
|
49
|
-
this._rtl = this._session.inverse;
|
50
|
-
this._destroy = new Subject();
|
51
|
-
_session.themeChange.pipe(takeUntil(this._destroy)).
|
52
|
-
subscribe(() => this.accent = _session.getAccent());
|
53
|
-
_router._comm$.
|
54
|
-
subscribe(e => {
|
55
|
-
switch (e) {
|
56
|
-
case 'collapse':
|
57
|
-
this.collapse();
|
58
|
-
break;
|
59
|
-
default:
|
60
|
-
}
|
61
|
-
});
|
62
|
-
this._repository = prepareRoutes(data);
|
63
|
-
}
|
64
|
-
get selectedTabIndex() {
|
65
|
-
return this._selectedTabIndex;
|
66
|
-
}
|
67
|
-
set selectedTabIndex(value) {
|
68
|
-
this._selectedTabIndex = value;
|
69
|
-
if (this._selectedTabIndex > -1 && this.tabs.at(this._selectedTabIndex).dialog) {
|
70
|
-
this.dialog = true;
|
71
|
-
this.dialogChange.emit(true);
|
72
|
-
}
|
73
|
-
else {
|
74
|
-
this.dialog = false;
|
75
|
-
}
|
76
|
-
this._setTabAnimation();
|
77
|
-
}
|
78
|
-
_setTabAnimation() {
|
79
|
-
this.tabsAnimation = {
|
80
|
-
value: this.selectedTabIndex,
|
81
|
-
params: {
|
82
|
-
startWidth: this._tabsElement ? this._tabsElement.nativeElement.clientWidth : 0
|
83
|
-
}
|
84
|
-
};
|
85
|
-
}
|
86
|
-
ngOnInit() {
|
87
|
-
this._router._navigate$.
|
88
|
-
subscribe(async (n) => {
|
89
|
-
const { commands, component, pathMode, relativeTo } = n;
|
90
|
-
let { icon, title, group, help, policy, queryParams, state } = n;
|
91
|
-
let queryString, params, parent, path, route;
|
92
|
-
if (commands && commands.length) {
|
93
|
-
path = n.commands.join('/');
|
94
|
-
if (path.indexOf(QUERY_CHAR) > -1) {
|
95
|
-
const segs = path.split(QUERY_CHAR);
|
96
|
-
queryString = segs[1];
|
97
|
-
queryParams = this._parseQueryParams(queryString || '');
|
98
|
-
path = segs[0];
|
99
|
-
}
|
100
|
-
else {
|
101
|
-
queryParams = n.queryParams || {};
|
102
|
-
queryString = this._queryString(queryParams);
|
103
|
-
}
|
104
|
-
if (pathMode === 'relative' || path.startsWith('../')) {
|
105
|
-
parent = relativeTo || this.panes[this.selectedIndex];
|
106
|
-
let parentpath = parent.path;
|
107
|
-
while (path.startsWith('../')) {
|
108
|
-
parentpath = parentpath.substr(0, parentpath.lastIndexOf('/'));
|
109
|
-
path = path.substr(3);
|
110
|
-
}
|
111
|
-
path = parentpath + '/' + path;
|
112
|
-
}
|
113
|
-
route = this._match(path);
|
114
|
-
if (!route)
|
115
|
-
throw `no match ${path}`;
|
116
|
-
params = this._params(route, path);
|
117
|
-
if (!policy)
|
118
|
-
policy = route.policy || DEFAULT_POLICY;
|
119
|
-
else if (route.policy)
|
120
|
-
policy |= route.policy;
|
121
|
-
if (!icon)
|
122
|
-
icon = route.icon;
|
123
|
-
if (!help)
|
124
|
-
help = route.help;
|
125
|
-
}
|
126
|
-
else {
|
127
|
-
if (!policy)
|
128
|
-
policy = DEFAULT_POLICY;
|
129
|
-
if (!queryParams)
|
130
|
-
queryParams = {};
|
131
|
-
}
|
132
|
-
if ((policy & OpenPolicy.Clear) == OpenPolicy.Clear) {
|
133
|
-
this._clearPending();
|
134
|
-
await this._clearTabs();
|
135
|
-
if (!(policy & OpenPolicy.Tab))
|
136
|
-
await this._clearPanes();
|
137
|
-
}
|
138
|
-
if (commands) {
|
139
|
-
let i = 0;
|
140
|
-
if ((policy & OpenPolicy.Tab) == OpenPolicy.Tab)
|
141
|
-
while (i < this.tabs.length) {
|
142
|
-
let tab = this.tabs[i];
|
143
|
-
if (path === tab.path) {
|
144
|
-
if (queryString === tab.queryString) {
|
145
|
-
if ((policy & OpenPolicy.Toggle) == OpenPolicy.Toggle) {
|
146
|
-
this.tabs.splice(i, 1);
|
147
|
-
this.selectedTabIndex = this.tabs.length - 1;
|
148
|
-
}
|
149
|
-
else {
|
150
|
-
state && tab._data$.next(state);
|
151
|
-
this.group = tab.group;
|
152
|
-
this.selectedTabIndex = i;
|
153
|
-
this._cd.detectChanges();
|
154
|
-
}
|
155
|
-
return;
|
156
|
-
}
|
157
|
-
else {
|
158
|
-
this._navQueryParams(tab, queryParams, state);
|
159
|
-
this.group = tab.group;
|
160
|
-
this.selectedTabIndex = i;
|
161
|
-
this._cd.detectChanges();
|
162
|
-
this._sync();
|
163
|
-
return;
|
164
|
-
}
|
165
|
-
}
|
166
|
-
else if (tab.route === route) {
|
167
|
-
await this._navParams(path, tab, params, queryParams, state);
|
168
|
-
this.group = tab.group;
|
169
|
-
this.selectedTabIndex = i;
|
170
|
-
this._sync();
|
171
|
-
return;
|
172
|
-
}
|
173
|
-
i++;
|
174
|
-
}
|
175
|
-
else
|
176
|
-
while (i < this.panes.length) {
|
177
|
-
let pane = this.panes[i];
|
178
|
-
if (path === pane.path) {
|
179
|
-
if (queryString === pane.queryString) {
|
180
|
-
if ((policy & OpenPolicy.Toggle) == OpenPolicy.Toggle)
|
181
|
-
await this.removeAt(i);
|
182
|
-
else {
|
183
|
-
state && pane._data$.next(state);
|
184
|
-
this._cd.detectChanges();
|
185
|
-
this.scrollTo(i);
|
186
|
-
}
|
187
|
-
return;
|
188
|
-
}
|
189
|
-
else {
|
190
|
-
this._navQueryParams(pane, queryParams, state);
|
191
|
-
this.scrollTo(i);
|
192
|
-
this._sync();
|
193
|
-
return;
|
194
|
-
}
|
195
|
-
}
|
196
|
-
else if (pane.route === route) {
|
197
|
-
await this._navParams(path, pane, params, queryParams, state);
|
198
|
-
this._sync();
|
199
|
-
return;
|
200
|
-
}
|
201
|
-
i++;
|
202
|
-
}
|
203
|
-
if (commands.length) {
|
204
|
-
if (!state)
|
205
|
-
state = {};
|
206
|
-
await this._state(route, path, params, state);
|
207
|
-
if ((policy & OpenPolicy.Tab) == OpenPolicy.Tab)
|
208
|
-
this._insertTab(component || route.component, {
|
209
|
-
queryString,
|
210
|
-
path,
|
211
|
-
route,
|
212
|
-
icon,
|
213
|
-
title,
|
214
|
-
group,
|
215
|
-
help,
|
216
|
-
data: state,
|
217
|
-
parent,
|
218
|
-
params,
|
219
|
-
queryParams,
|
220
|
-
policy
|
221
|
-
});
|
222
|
-
else {
|
223
|
-
const pane = this._insertPane(component || route.component, {
|
224
|
-
queryString,
|
225
|
-
path,
|
226
|
-
route,
|
227
|
-
icon,
|
228
|
-
title,
|
229
|
-
help,
|
230
|
-
data: state,
|
231
|
-
parent,
|
232
|
-
params,
|
233
|
-
queryParams,
|
234
|
-
policy
|
235
|
-
});
|
236
|
-
pane._events$.next(new NavigationFullscreen(pane._fullscreen = this.panes.length === 1, pane));
|
237
|
-
}
|
238
|
-
route &&
|
239
|
-
this._sync();
|
240
|
-
}
|
241
|
-
else {
|
242
|
-
const pane = (policy & OpenPolicy.Tab) == OpenPolicy.Tab ?
|
243
|
-
this.tabs[this.selectedTabIndex] : this.panes[this.selectedIndex];
|
244
|
-
this._navQueryParams(pane, queryParams, state);
|
245
|
-
this._sync();
|
246
|
-
if ((policy & OpenPolicy.Tab) != OpenPolicy.Tab)
|
247
|
-
this.select(this.selectedIndex);
|
248
|
-
}
|
249
|
-
}
|
250
|
-
else {
|
251
|
-
if ((policy & OpenPolicy.Tab) == OpenPolicy.Tab)
|
252
|
-
this._insertTab(component, {
|
253
|
-
data: state,
|
254
|
-
icon, title, help,
|
255
|
-
parent,
|
256
|
-
queryString,
|
257
|
-
path,
|
258
|
-
route,
|
259
|
-
group,
|
260
|
-
params,
|
261
|
-
queryParams,
|
262
|
-
policy
|
263
|
-
});
|
264
|
-
else {
|
265
|
-
const pane = this._insertPane(component, {
|
266
|
-
data: state,
|
267
|
-
icon, title, help,
|
268
|
-
parent,
|
269
|
-
queryString,
|
270
|
-
path,
|
271
|
-
route,
|
272
|
-
params,
|
273
|
-
policy, queryParams
|
274
|
-
});
|
275
|
-
pane._events$.next(new NavigationFullscreen(pane._fullscreen = this.panes.length === 1, pane));
|
276
|
-
}
|
277
|
-
}
|
278
|
-
});
|
279
|
-
window.removeAllListeners('popstate');
|
280
|
-
window.addEventListener('popstate', e => {
|
281
|
-
if (this._navigating) {
|
282
|
-
this._navigating = false;
|
283
|
-
return;
|
284
|
-
}
|
285
|
-
const state = e.state && e.state.bizdoc ? e.state : undefined;
|
286
|
-
this._deserialize(location.pathname.substring(1), state);
|
287
|
-
if (state) {
|
288
|
-
this.swap = state.swap;
|
289
|
-
this.swapTab = state.swapTab;
|
290
|
-
this.prevGroup = state.prevGroup;
|
291
|
-
this.group = state.group;
|
292
|
-
this.selectedTabIndex = state.selectedTabIndex;
|
293
|
-
}
|
294
|
-
});
|
295
|
-
if (location.pathname.length > 1)
|
296
|
-
this._deserialize(location.pathname.substring(1), history.state && history.state.bizdoc ? history.state : undefined);
|
297
|
-
else
|
298
|
-
this._router._navigate$.next({
|
299
|
-
commands: DEFAULT_ROUTE,
|
300
|
-
});
|
301
|
-
}
|
302
|
-
async _deserialize(url, state) {
|
303
|
-
const sections = decodeURIComponent(url).split(PANE_CHAR), panes = deserialize(sections[0]), tabs = sections.length > 1 ? deserialize(sections[1]) : [];
|
304
|
-
function deserialize(path) {
|
305
|
-
return path.
|
306
|
-
split(PATH_CHAR).map(s => {
|
307
|
-
const [path, queryString] = s.split(QUERY_CHAR);
|
308
|
-
return { path, queryString };
|
309
|
-
});
|
310
|
-
}
|
311
|
-
for (let i = 0; i < panes.length; i++) {
|
312
|
-
let pane = panes[i];
|
313
|
-
await this._navigatePane(i, pane.path, pane.queryString, state ? state.panes[i] : null);
|
314
|
-
}
|
315
|
-
if (this.panes.length > panes.length) {
|
316
|
-
let i = 0;
|
317
|
-
while (i < this.panes.length) {
|
318
|
-
let pane = this.panes[i];
|
319
|
-
if (panes.length - 1 < i || pane.path !== panes[i].path) {
|
320
|
-
if (this.selectedIndex === i)
|
321
|
-
this.selectedIndex = i - 1;
|
322
|
-
this.panes.splice(i, 1);
|
323
|
-
this._destroyPane(pane);
|
324
|
-
}
|
325
|
-
else
|
326
|
-
i++;
|
327
|
-
}
|
328
|
-
}
|
329
|
-
if (this.selectedIndex < 0)
|
330
|
-
this.select(0);
|
331
|
-
for (let i = 0; i < tabs.length; i++) {
|
332
|
-
let tab = tabs[i];
|
333
|
-
await this._navigateTab(i, tab.path, tab.queryString, state ? state.tabs[i] : null);
|
334
|
-
}
|
335
|
-
if (this.tabs.length > tabs.length) {
|
336
|
-
let i = 0;
|
337
|
-
while (i < this.tabs.length) {
|
338
|
-
let tab = this.tabs[i];
|
339
|
-
if (tabs.length - 1 < i || tab.path !== tabs[i].path) {
|
340
|
-
if (this.selectedTabIndex === i) {
|
341
|
-
this.selectedTabIndex = i - 1;
|
342
|
-
}
|
343
|
-
this.tabs.splice(i, 1);
|
344
|
-
this._destroyPane(tab);
|
345
|
-
}
|
346
|
-
else
|
347
|
-
i++;
|
348
|
-
}
|
349
|
-
}
|
350
|
-
if (this.tabs.length && this.selectedTabIndex < 0) {
|
351
|
-
this.selectedTabIndex = 0;
|
352
|
-
}
|
353
|
-
const n = this.panes.length;
|
354
|
-
for (let i = 0; i < n; i++) {
|
355
|
-
let pane = this.panes[i];
|
356
|
-
pane.fullscreen !== (n === 1) &&
|
357
|
-
pane._events$.next(new NavigationFullscreen(pane._fullscreen = n === 1, pane));
|
358
|
-
}
|
359
|
-
}
|
360
|
-
/**
|
361
|
-
*
|
362
|
-
* @param index
|
363
|
-
* @param path
|
364
|
-
* @param queryString
|
365
|
-
* @param state
|
366
|
-
*/
|
367
|
-
async _navigatePane(index, path, queryString, state) {
|
368
|
-
const route = this._match(path);
|
369
|
-
if (!route)
|
370
|
-
throw `no match ${path}`;
|
371
|
-
if (!state)
|
372
|
-
state = {};
|
373
|
-
while (index < this.panes.length) {
|
374
|
-
let pane = this.panes[index];
|
375
|
-
if (path === pane.path) {
|
376
|
-
if (queryString === pane.queryString) {
|
377
|
-
return;
|
378
|
-
}
|
379
|
-
else {
|
380
|
-
const queryParams = this._parseQueryParams(queryString);
|
381
|
-
this._navQueryParams(pane, queryParams, state);
|
382
|
-
return;
|
383
|
-
}
|
384
|
-
}
|
385
|
-
else if (pane.route === route) {
|
386
|
-
const queryParams = this._parseQueryParams(queryString);
|
387
|
-
const params = this._params(pane.route, path);
|
388
|
-
await this._navParams(path, pane, params, queryParams, state);
|
389
|
-
return;
|
390
|
-
}
|
391
|
-
index++;
|
392
|
-
}
|
393
|
-
const params = this._params(route, path);
|
394
|
-
const queryParams = this._parseQueryParams(queryString);
|
395
|
-
const parent = this._findAncestor(route, path);
|
396
|
-
await this._state(route, path, params, state);
|
397
|
-
this._insertPane(route.component, {
|
398
|
-
path, parent, route, data: state, params, queryParams,
|
399
|
-
icon: route.icon,
|
400
|
-
help: route.help,
|
401
|
-
policy: route.policy,
|
402
|
-
focus: false
|
403
|
-
});
|
404
|
-
}
|
405
|
-
async _navigateTab(index, path, queryString, state) {
|
406
|
-
const route = this._match(path);
|
407
|
-
if (!route)
|
408
|
-
throw `no match ${path}`;
|
409
|
-
if (!state)
|
410
|
-
state = {};
|
411
|
-
while (index < this.tabs.length) {
|
412
|
-
let tab = this.tabs[index];
|
413
|
-
if (path === tab.path) {
|
414
|
-
if (queryString === tab.queryString) {
|
415
|
-
return;
|
416
|
-
}
|
417
|
-
else {
|
418
|
-
const queryParams = this._parseQueryParams(queryString);
|
419
|
-
this._navQueryParams(tab, queryParams, state);
|
420
|
-
return;
|
421
|
-
}
|
422
|
-
}
|
423
|
-
else if (tab.route === route) {
|
424
|
-
const queryParams = this._parseQueryParams(queryString);
|
425
|
-
const params = this._params(tab.route, path);
|
426
|
-
await this._navParams(path, tab, params, queryParams, state);
|
427
|
-
return;
|
428
|
-
}
|
429
|
-
index++;
|
430
|
-
}
|
431
|
-
const params = this._params(route, path);
|
432
|
-
const queryParams = this._parseQueryParams(queryString);
|
433
|
-
const parent = this._findAncestor(route, path);
|
434
|
-
await this._state(route, path, params, state);
|
435
|
-
this._insertTab(route.component, {
|
436
|
-
icon: route.icon,
|
437
|
-
help: route.help,
|
438
|
-
policy: route.policy | OpenPolicy.Tab,
|
439
|
-
path, parent, route,
|
440
|
-
data: state,
|
441
|
-
params, queryParams,
|
442
|
-
focus: false,
|
443
|
-
swap: false
|
444
|
-
});
|
445
|
-
}
|
446
|
-
_findAncestor(route, path) {
|
447
|
-
if (route.parent)
|
448
|
-
return this.panes.find(p => p.route ===
|
449
|
-
route.parent &&
|
450
|
-
path.startsWith(p.path));
|
451
|
-
}
|
452
|
-
/**
|
453
|
-
*
|
454
|
-
* @param pane
|
455
|
-
* @param queryParams
|
456
|
-
*/
|
457
|
-
_navQueryParams(pane, queryParams, state) {
|
458
|
-
pane._queryString = this._queryString(queryParams);
|
459
|
-
state && pane._data$.next(state);
|
460
|
-
pane._queryParams$.next(queryParams);
|
461
|
-
this._router._events$.next(new QueryParamNavigation(queryParams, pane));
|
462
|
-
}
|
463
|
-
/**
|
464
|
-
*
|
465
|
-
* @param path
|
466
|
-
* @param pane
|
467
|
-
* @param params
|
468
|
-
* @param queryParams
|
469
|
-
* @param state
|
470
|
-
*/
|
471
|
-
async _navParams(path, pane, params, queryParams, state) {
|
472
|
-
if (pane.route.canDismiss)
|
473
|
-
await this._dismiss(pane);
|
474
|
-
if (!state)
|
475
|
-
state = {};
|
476
|
-
await this._state(pane.route, path, params, state);
|
477
|
-
pane._data$.next(state);
|
478
|
-
pane._path = path;
|
479
|
-
pane._params$.next(params);
|
480
|
-
if (queryParams) {
|
481
|
-
pane._queryString = this._queryString(queryParams);
|
482
|
-
pane._queryParams$.next(queryParams);
|
483
|
-
}
|
484
|
-
else {
|
485
|
-
pane._queryString = '';
|
486
|
-
pane._queryParams$.next({});
|
487
|
-
}
|
488
|
-
this._router._events$.next(new ParamNavigation(params, pane));
|
489
|
-
this.panes.concat(this.tabs).forEach(child => {
|
490
|
-
if (child.route && child.route.parent === pane.route) {
|
491
|
-
child._data$.next(Object.assign(child.data, state));
|
492
|
-
child._params$.next(params);
|
493
|
-
child._path = pane.path + '/' + child.route.path;
|
494
|
-
if (this.selectedTabIndex > -1 && child === this.tabs[this.selectedTabIndex]) {
|
495
|
-
this.selectedTabIndex = this.selectedTabIndex;
|
496
|
-
this.group = child.group;
|
497
|
-
}
|
498
|
-
}
|
499
|
-
});
|
500
|
-
if (pane.mode === 'pane')
|
501
|
-
this.titleAnimation++;
|
502
|
-
this._cd.detectChanges();
|
503
|
-
}
|
504
|
-
/** */
|
505
|
-
_sync() {
|
506
|
-
let path = this.panes.filter(p => p.route).map(s => s.fullPath).join(PATH_CHAR);
|
507
|
-
if (this.tabs.length) {
|
508
|
-
const tabs = this.tabs.filter(p => p.route);
|
509
|
-
if (tabs.length)
|
510
|
-
path += PANE_CHAR + tabs.map(s => s.fullPath).join(PATH_CHAR);
|
511
|
-
}
|
512
|
-
const state = this._history();
|
513
|
-
this._navigating = true;
|
514
|
-
history.pushState(state, '', '/' + path);
|
515
|
-
setTimeout(() => this._navigating = false, 200);
|
516
|
-
}
|
517
|
-
/**
|
518
|
-
*
|
519
|
-
* @param mode
|
520
|
-
*/
|
521
|
-
_history() {
|
522
|
-
const state = {
|
523
|
-
bizdoc: true,
|
524
|
-
step: history.state && history.state.bizdoc ? history.state.step + 1 : 1,
|
525
|
-
selectedTabIndex: this.selectedTabIndex,
|
526
|
-
panes: this.panes.map(p => p.data),
|
527
|
-
tabs: this.tabs.map(t => t.data),
|
528
|
-
swap: this.swap,
|
529
|
-
group: this.group,
|
530
|
-
swapTab: this.swapTab,
|
531
|
-
prevGroup: this.prevGroup
|
532
|
-
};
|
533
|
-
return state;
|
534
|
-
}
|
535
|
-
drop(evt) {
|
536
|
-
const pane = this.panes[evt.previousIndex];
|
537
|
-
this.panes.splice(evt.previousIndex, 1);
|
538
|
-
this.panes.splice(evt.currentIndex, 0, pane);
|
539
|
-
this._sync();
|
540
|
-
}
|
541
|
-
togglePinned(pane) {
|
542
|
-
pane.pinned = !pane.pinned;
|
543
|
-
this.panes.forEach(s => {
|
544
|
-
if (s.decendentOf(pane))
|
545
|
-
s.pinned = pane.pinned;
|
546
|
-
});
|
547
|
-
}
|
548
|
-
_queryString(queryParams) {
|
549
|
-
const names = Object.keys(queryParams);
|
550
|
-
let queryString;
|
551
|
-
for (var i = 0; i < names.length; i++) {
|
552
|
-
let val = queryParams[names[i]];
|
553
|
-
if (val !== null && val !== undefined) {
|
554
|
-
if (!queryString)
|
555
|
-
queryString = '';
|
556
|
-
else
|
557
|
-
queryString = queryString + ARG_CHAR;
|
558
|
-
if (isString(val))
|
559
|
-
queryString += `${names[i]}=${encodeURIComponent(val)}`;
|
560
|
-
else if (isArray(val))
|
561
|
-
queryString += val.map(v => `${names[i]}=${v}`).join(ARG_CHAR);
|
562
|
-
else if (isDate(val))
|
563
|
-
queryString += `${names[i]}=${val.toJSON()}`;
|
564
|
-
else
|
565
|
-
queryString += `${names[i]}=${val}`;
|
566
|
-
}
|
567
|
-
}
|
568
|
-
return queryString;
|
569
|
-
}
|
570
|
-
_parseQueryParams(queryString) {
|
571
|
-
const queryParams = {};
|
572
|
-
queryString && queryString.
|
573
|
-
split(ARG_CHAR).forEach(p => {
|
574
|
-
const [name, value] = p.split('=');
|
575
|
-
if (!queryParams[name])
|
576
|
-
queryParams[name] = value;
|
577
|
-
else {
|
578
|
-
const vals = queryParams[name];
|
579
|
-
queryParams[name] = isArray(vals) ? [...vals, value] : [vals, value];
|
580
|
-
}
|
581
|
-
});
|
582
|
-
return queryParams;
|
583
|
-
}
|
584
|
-
/**
|
585
|
-
*
|
586
|
-
* @param route
|
587
|
-
* @param path
|
588
|
-
*/
|
589
|
-
_params(route, path) {
|
590
|
-
const ex = route.regEx.exec(path), params = ex.groups;
|
591
|
-
return params || {};
|
592
|
-
}
|
593
|
-
/**
|
594
|
-
*
|
595
|
-
* @param url
|
596
|
-
*/
|
597
|
-
_match(url) {
|
598
|
-
let route = this._repository.find(r => r.regEx.test(url));
|
599
|
-
if (route)
|
600
|
-
while (route.children) {
|
601
|
-
let child = route.children.find(r => r.regEx.test(url));
|
602
|
-
if (child)
|
603
|
-
route = child;
|
604
|
-
else
|
605
|
-
break;
|
606
|
-
}
|
607
|
-
return route;
|
608
|
-
}
|
609
|
-
/**
|
610
|
-
*
|
611
|
-
* @param route
|
612
|
-
* @param path
|
613
|
-
* @param params
|
614
|
-
* @param data
|
615
|
-
*/
|
616
|
-
async _state(route, path, params, data) {
|
617
|
-
if (this._pending.indexOf(path) > -1) {
|
618
|
-
//this._ps.toast('Working');
|
619
|
-
throw 'already processing';
|
620
|
-
}
|
621
|
-
this._pending.push(path);
|
622
|
-
const { parent, resolve } = route;
|
623
|
-
if (parent)
|
624
|
-
await this._parentstate(parent, path, params, data);
|
625
|
-
if (resolve) {
|
626
|
-
await this._resolve(resolve, params, data);
|
627
|
-
}
|
628
|
-
this._pending.remove(path);
|
629
|
-
}
|
630
|
-
/**
|
631
|
-
*
|
632
|
-
* @param route
|
633
|
-
* @param path
|
634
|
-
* @param params
|
635
|
-
* @param data
|
636
|
-
*/
|
637
|
-
async _parentstate(route, path, params, data) {
|
638
|
-
const { parent, resolve } = route;
|
639
|
-
if (parent)
|
640
|
-
await this._parentstate(parent, path, params, data);
|
641
|
-
const pane = this.panes.find(s => s.route && s.route === route
|
642
|
-
&& path.startsWith(s.path));
|
643
|
-
pane && Object.assign(data, pane.data);
|
644
|
-
if (resolve)
|
645
|
-
await this._resolve(resolve, params, data);
|
646
|
-
}
|
647
|
-
async _resolve(resolve, params, data) {
|
648
|
-
const keys = Object.keys(resolve);
|
649
|
-
for (let i = 0; i < keys.length; i++) {
|
650
|
-
let key = keys[i];
|
651
|
-
if (!data[key]) {
|
652
|
-
const instance = this._injector.get(resolve[key]);
|
653
|
-
const value = instance.onResolve(params);
|
654
|
-
if (isPromise(value))
|
655
|
-
await value.then(r => data[key] = r);
|
656
|
-
else if (isObservable(value))
|
657
|
-
await value.pipe(tap(r => data[key] = r)).toPromise();
|
658
|
-
else
|
659
|
-
data[key] = value;
|
660
|
-
}
|
661
|
-
}
|
662
|
-
}
|
663
|
-
add(component, options) {
|
664
|
-
return this.insert(this.panes.length, component, options);
|
665
|
-
}
|
666
|
-
insert(position, component, options) {
|
667
|
-
const pane = this._insertPane(component, options || {}, position);
|
668
|
-
pane._events$.next(new NavigationFullscreen(pane._fullscreen = this.panes.length === 1, pane));
|
669
|
-
return pane;
|
670
|
-
}
|
671
|
-
_insertPane(component, options, position) {
|
672
|
-
const stretch = (options.policy & OpenPolicy.Stretch) == OpenPolicy.Stretch;
|
673
|
-
const pane = this._constract(component, 'pane', {
|
674
|
-
stretch,
|
675
|
-
...options
|
676
|
-
});
|
677
|
-
if (position === undefined)
|
678
|
-
position = this.panes.length;
|
679
|
-
this.panes.push(pane);
|
680
|
-
this.titleAnimation++;
|
681
|
-
this._cd.detectChanges();
|
682
|
-
this._router._events$.next(new NavigationStart(pane));
|
683
|
-
if (options.focus !== false) {
|
684
|
-
this.selectedIndex = position;
|
685
|
-
this._router._active = pane;
|
686
|
-
this._title.set(pane.title);
|
687
|
-
if (this.panes.length > 1)
|
688
|
-
this.scrollTo(position);
|
689
|
-
}
|
690
|
-
this.navigationArrows();
|
691
|
-
return pane;
|
692
|
-
}
|
693
|
-
/**
|
694
|
-
*
|
695
|
-
* @param component
|
696
|
-
* @param options
|
697
|
-
*/
|
698
|
-
_constract(component, mode, options) {
|
699
|
-
const pane = new PaneRef(component, mode, options);
|
700
|
-
pane._injector = Injector.create([
|
701
|
-
{ provide: PaneRef, useValue: pane }
|
702
|
-
], this._injector);
|
703
|
-
pane._comm$.subscribe(e => this._action(e, pane));
|
704
|
-
return pane;
|
705
|
-
}
|
706
|
-
/**
|
707
|
-
*
|
708
|
-
* @param component
|
709
|
-
* @param options
|
710
|
-
*/
|
711
|
-
_insertTab(component, options) {
|
712
|
-
const { policy } = options, dialog = (policy & OpenPolicy.Dialog) == OpenPolicy.Dialog, expandable = (policy & OpenPolicy.Expandable) == OpenPolicy.Expandable, dismissable = (policy & OpenPolicy.Dismissable) == OpenPolicy.Dismissable;
|
713
|
-
const tab = this._constract(component, 'tab', {
|
714
|
-
...options,
|
715
|
-
dialog,
|
716
|
-
dismissable,
|
717
|
-
expandable
|
718
|
-
});
|
719
|
-
this.tabs.push(tab);
|
720
|
-
this._router._events$.next(new NavigationStart(tab));
|
721
|
-
this._cd.detectChanges();
|
722
|
-
if (tab.group && this.group !== tab.group && options.swap !== false) {
|
723
|
-
let i = 0, swap = false;
|
724
|
-
do {
|
725
|
-
if (this.tabs[i].group !== tab.group) {
|
726
|
-
this._destroyPane(this.tabs[i]);
|
727
|
-
this.tabs.splice(i, 1);
|
728
|
-
swap = true;
|
729
|
-
}
|
730
|
-
else
|
731
|
-
i++;
|
732
|
-
} while (i < this.tabs.length);
|
733
|
-
if (swap) {
|
734
|
-
this.swapTab = this._getHistoryStep();
|
735
|
-
this.prevGroup = this.group;
|
736
|
-
}
|
737
|
-
this.group = tab.group;
|
738
|
-
}
|
739
|
-
else
|
740
|
-
this.swapTab = null;
|
741
|
-
if (options.focus !== false) {
|
742
|
-
this.selectedTabIndex = this.tabs.length - 1;
|
743
|
-
}
|
744
|
-
this._cd.detectChanges();
|
745
|
-
return tab;
|
746
|
-
}
|
747
|
-
guide(name) {
|
748
|
-
this._guide.start(name);
|
749
|
-
}
|
750
|
-
back() {
|
751
|
-
this._back(this.swap);
|
752
|
-
this.swap = null;
|
753
|
-
}
|
754
|
-
async _back(steps) {
|
755
|
-
this._router._events$.next(new BackNavigation());
|
756
|
-
history.go(steps - history.state.step);
|
757
|
-
}
|
758
|
-
tabBack() {
|
759
|
-
this._back(this.swapTab);
|
760
|
-
this.swapTab = null;
|
761
|
-
}
|
762
|
-
/**
|
763
|
-
*
|
764
|
-
* @param e
|
765
|
-
* @param pane
|
766
|
-
*/
|
767
|
-
async _action(e, pane) {
|
768
|
-
switch (e) {
|
769
|
-
case 'focus':
|
770
|
-
{
|
771
|
-
if (pane.mode === 'tab') {
|
772
|
-
this.selectedTabIndex = this.tabs.indexOf(pane);
|
773
|
-
}
|
774
|
-
else {
|
775
|
-
const index = this.panes.indexOf(pane);
|
776
|
-
this.focus(index);
|
777
|
-
}
|
778
|
-
break;
|
779
|
-
}
|
780
|
-
case 'close':
|
781
|
-
if (pane.mode === 'tab') {
|
782
|
-
const index = this.tabs.indexOf(pane);
|
783
|
-
this.closeTab(index);
|
784
|
-
}
|
785
|
-
else {
|
786
|
-
const index = this.panes.indexOf(pane);
|
787
|
-
this.collapse();
|
788
|
-
await this.removeAt(index);
|
789
|
-
!this.panes.length &&
|
790
|
-
this._router.navigate(DEFAULT_ROUTE);
|
791
|
-
}
|
792
|
-
break;
|
793
|
-
case 'expand':
|
794
|
-
if (pane.mode === 'tab')
|
795
|
-
this.expandTab();
|
796
|
-
else
|
797
|
-
this.expandPane();
|
798
|
-
break;
|
799
|
-
case 'refresh': {
|
800
|
-
const state = this._history();
|
801
|
-
history.replaceState(state, '');
|
802
|
-
break;
|
803
|
-
}
|
804
|
-
}
|
805
|
-
}
|
806
|
-
/**
|
807
|
-
* escape
|
808
|
-
* @param event
|
809
|
-
*/
|
810
|
-
async collapse() {
|
811
|
-
if (!this.tabs.length)
|
812
|
-
return;
|
813
|
-
this._clearPending();
|
814
|
-
await this._clearTabs();
|
815
|
-
this._sync();
|
816
|
-
this._router._events$.next(new CollapseNavigation());
|
817
|
-
}
|
818
|
-
onResize() {
|
819
|
-
if (this.panes.length && !this.panes[this.panes.length - 1].stretch) {
|
820
|
-
const el = this._panesContainerRef.element.nativeElement, child = el.lastElementChild;
|
821
|
-
child.style.minWidth =
|
822
|
-
(el.parentElement.parentElement.clientWidth - el.parentElement.offsetLeft - child.offsetLeft - 2) + 'px';
|
823
|
-
}
|
824
|
-
}
|
825
|
-
_resize() {
|
826
|
-
//this.tabs.concat(this.panes).forEach(t => t._resize$.next({
|
827
|
-
//} as any));
|
828
|
-
window.dispatchEvent(new Event('resize'));
|
829
|
-
}
|
830
|
-
closeTab(position) {
|
831
|
-
const tab = this.tabs[position];
|
832
|
-
let evt = new NavigationClose(tab);
|
833
|
-
tab._events$.next(evt);
|
834
|
-
if (evt._preventDefault)
|
835
|
-
return;
|
836
|
-
this.tabs.splice(position, 1);
|
837
|
-
this._destroyPane(tab);
|
838
|
-
this.selectedTabIndex = this.tabs.length ? position > 0 ? position - 1 : 0 : -1;
|
839
|
-
this._sync();
|
840
|
-
}
|
841
|
-
expandPane() {
|
842
|
-
const pane = this.panes[this.selectedIndex];
|
843
|
-
this.swap = this._getHistoryStep();
|
844
|
-
let i = 0;
|
845
|
-
do {
|
846
|
-
if (this.panes[i] !== pane) {
|
847
|
-
this._destroyPane(this.panes[i]);
|
848
|
-
this.panes.splice(i, 1);
|
849
|
-
}
|
850
|
-
else
|
851
|
-
i++;
|
852
|
-
} while (i < this.panes.length);
|
853
|
-
this.selectedIndex = 0;
|
854
|
-
this._sync();
|
855
|
-
pane._events$.next(new NavigationFullscreen(pane._fullscreen = true, pane));
|
856
|
-
}
|
857
|
-
_getHistoryStep() {
|
858
|
-
return history.state && history.state.bizdoc ? history.state.step : 0;
|
859
|
-
}
|
860
|
-
expandTab() {
|
861
|
-
this.swap = this._getHistoryStep();
|
862
|
-
this.swapTab = null;
|
863
|
-
this.panes.forEach(p => this._destroyPane(p));
|
864
|
-
const tab = this.tabs[this.selectedTabIndex];
|
865
|
-
this.tabs.splice(this.selectedTabIndex, 1);
|
866
|
-
this.panes.splice(0, this.panes.length, tab);
|
867
|
-
tab._events$.next(new NavigationMode(tab._mode = 'pane', tab));
|
868
|
-
tab._events$.next(new NavigationFullscreen(tab._fullscreen = true, tab));
|
869
|
-
this.selectedTabIndex = this.tabs.length ? 0 : -1;
|
870
|
-
this._sync();
|
871
|
-
}
|
872
|
-
select(position) {
|
873
|
-
if (this.selectedIndex === position)
|
874
|
-
return;
|
875
|
-
if (position === -1) {
|
876
|
-
if (this.panes.length)
|
877
|
-
position = this.panes.length - 1;
|
878
|
-
else
|
879
|
-
return;
|
880
|
-
}
|
881
|
-
this.selectedIndex = position;
|
882
|
-
const pane = this.panes[position];
|
883
|
-
this._router._events$.next(new NavigationSelected(pane));
|
884
|
-
this._router._active = pane;
|
885
|
-
this._title.set(pane.title);
|
886
|
-
}
|
887
|
-
async removeAt(position) {
|
888
|
-
const pane = this.panes[position];
|
889
|
-
await this._dismiss(pane);
|
890
|
-
this._discardPane(pane);
|
891
|
-
if (position >= this.selectedIndex)
|
892
|
-
this.select(-1);
|
893
|
-
this._sync();
|
894
|
-
}
|
895
|
-
/**
|
896
|
-
*
|
897
|
-
* @param pane
|
898
|
-
*/
|
899
|
-
async _dismiss(pane) {
|
900
|
-
const panes = this.panes.concat(this.tabs).
|
901
|
-
filter(s => s.decendentOf(pane) && s.route && s.route.canDismiss).
|
902
|
-
reverse();
|
903
|
-
pane.route && pane.route.canDismiss &&
|
904
|
-
panes.push(pane);
|
905
|
-
for (let i = 0; i < panes.length; i++) {
|
906
|
-
let ok = await this._dismissable(panes[i]);
|
907
|
-
if (!ok)
|
908
|
-
throw '';
|
909
|
-
}
|
910
|
-
}
|
911
|
-
/**
|
912
|
-
*
|
913
|
-
* @param pane
|
914
|
-
*/
|
915
|
-
_discardPane(pane) {
|
916
|
-
this.panes.concat(this.tabs).
|
917
|
-
filter(s => s.decendentOf(pane)).
|
918
|
-
reverse().
|
919
|
-
forEach(s => this._discardPane(s));
|
920
|
-
this._destroyPane(pane);
|
921
|
-
const index = this.panes.indexOf(pane);
|
922
|
-
this.panes.splice(index, 1);
|
923
|
-
}
|
924
|
-
_clearPending() {
|
925
|
-
this._pending.splice(0, this._pending.length);
|
926
|
-
}
|
927
|
-
/** */
|
928
|
-
async _clearPanes() {
|
929
|
-
await this._dismissAll(this.panes);
|
930
|
-
this.panes.forEach(p => this._destroyPane(p));
|
931
|
-
this.panes.splice(0, this.panes.length);
|
932
|
-
this.selectedIndex = -1;
|
933
|
-
this.swap = null;
|
934
|
-
}
|
935
|
-
async _clearTabs() {
|
936
|
-
await this._dismissAll(this.tabs);
|
937
|
-
this.tabs.forEach(t => this._destroyPane(t));
|
938
|
-
this.tabs.splice(0, this.tabs.length);
|
939
|
-
this.selectedTabIndex = -1;
|
940
|
-
this.swapTab = null;
|
941
|
-
}
|
942
|
-
/**
|
943
|
-
*
|
944
|
-
* @param panes
|
945
|
-
*/
|
946
|
-
async _dismissAll(panes) {
|
947
|
-
for (let pane of panes.
|
948
|
-
filter(s => s.route && s.route.canDismiss)) {
|
949
|
-
let ok = await this._dismissable(pane);
|
950
|
-
if (!ok)
|
951
|
-
throw '';
|
952
|
-
}
|
953
|
-
}
|
954
|
-
/**
|
955
|
-
*
|
956
|
-
* @param pane
|
957
|
-
*/
|
958
|
-
_dismissable(pane) {
|
959
|
-
const { instance, route: { canDismiss } } = pane;
|
960
|
-
const dismissable = this._injector.get(canDismiss);
|
961
|
-
const ok = dismissable.onDismiss(instance);
|
962
|
-
if (isBoolean(ok))
|
963
|
-
return Promise.resolve(ok);
|
964
|
-
else if (isPromise(ok))
|
965
|
-
return ok;
|
966
|
-
else
|
967
|
-
return ok.toPromise();
|
968
|
-
}
|
969
|
-
scrollTo(index) {
|
970
|
-
const item = this._children.item(index);
|
971
|
-
item && item.scrollIntoView({ behavior: 'smooth', inline: 'end', block: 'end' });
|
972
|
-
}
|
973
|
-
get _children() {
|
974
|
-
return this._panesContainerRef.element.nativeElement.querySelectorAll('.pane-content');
|
975
|
-
}
|
976
|
-
done() {
|
977
|
-
this.navigationArrows();
|
978
|
-
this._resize();
|
979
|
-
}
|
980
|
-
navigationArrows(_) {
|
981
|
-
const container = this._panesContainerRef.element.nativeElement, scrollLeft = Math.round(container.scrollLeft);
|
982
|
-
this.next = this._rtl ? container.clientWidth - scrollLeft < container.scrollWidth :
|
983
|
-
scrollLeft + container.clientWidth < container.scrollWidth;
|
984
|
-
this.prev = this._rtl ? scrollLeft < 0 : scrollLeft > 0;
|
985
|
-
}
|
986
|
-
scrollBy(n) {
|
987
|
-
const left = n * (this._rtl ? -1 : 1);
|
988
|
-
this._panesContainerRef.element.nativeElement.scrollBy({ behavior: 'smooth', left });
|
989
|
-
}
|
990
|
-
focus(index) {
|
991
|
-
const el = this._children.item(index);
|
992
|
-
el.focus();
|
993
|
-
}
|
994
|
-
onPaneResize(pane, event) {
|
995
|
-
const el = event.srcElement.previousElementSibling;
|
996
|
-
const // remember mouse down info
|
997
|
-
width = el.clientWidth, d = this._rtl ? -1 : 1;
|
998
|
-
event.srcElement.classList.add('resizing');
|
999
|
-
this.dragging = true;
|
1000
|
-
document.onmousemove = onMouseMove;
|
1001
|
-
document.onmouseup = () => {
|
1002
|
-
event.srcElement.classList.remove('resizing');
|
1003
|
-
document.onmousemove = document.onmouseup = null;
|
1004
|
-
this.dragging = false;
|
1005
|
-
};
|
1006
|
-
function onMouseMove(e) {
|
1007
|
-
const delta = (e.clientX - event.clientX) * d;
|
1008
|
-
el.style.width = el.style.minWidth
|
1009
|
-
= Math.max(width + delta, 350) + 'px';
|
1010
|
-
pane && pane._events$.next(new NavigationResize({}, pane));
|
1011
|
-
}
|
1012
|
-
}
|
1013
|
-
onTabResize(event) {
|
1014
|
-
const el = event.srcElement.nextElementSibling;
|
1015
|
-
const me = this,
|
1016
|
-
// remember mouse down info
|
1017
|
-
width = el.clientWidth, d = this._rtl ? 1 : -1;
|
1018
|
-
event.srcElement.classList.add('resizing');
|
1019
|
-
this.dragging = true;
|
1020
|
-
document.onmousemove = onMouseMove;
|
1021
|
-
document.onmouseup = () => {
|
1022
|
-
event.srcElement.classList.remove('resizing');
|
1023
|
-
document.onmousemove = document.onmouseup = null;
|
1024
|
-
this.dragging = false;
|
1025
|
-
me.navigationArrows();
|
1026
|
-
//this._cd.detectChanges();
|
1027
|
-
this._resize();
|
1028
|
-
};
|
1029
|
-
function onMouseMove(e) {
|
1030
|
-
// prevent negative-sized elements
|
1031
|
-
const delta = Math.max((e.clientX - event.clientX) * d, -width);
|
1032
|
-
el.style.width = el.style.minWidth = (width + delta) + 'px';
|
1033
|
-
localStorage.setItem('tabs', el.style.width);
|
1034
|
-
}
|
1035
|
-
}
|
1036
|
-
_destroyPane(pane) {
|
1037
|
-
pane._destroy();
|
1038
|
-
this._router._events$.next(new NavigationEnd(pane));
|
1039
|
-
}
|
1040
|
-
ngOnDestroy() {
|
1041
|
-
this._destroy.next();
|
1042
|
-
this._destroy.complete();
|
1043
|
-
}
|
1044
|
-
}
|
1045
|
-
SlotsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SlotsComponent, deps: [{ token: PANES_DATA }, { token: i1.SessionService }, { token: i0.ChangeDetectorRef }, { token: i2.PanesRouter }, { token: i3.WindowTitleService }, { token: i4.GuideService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
1046
|
-
SlotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.1", type: SlotsComponent, selector: "bizdoc-panes-outlet", outputs: { dialogChange: "dialogChange" }, host: { listeners: { "document:keydown.escape": "collapse()", "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "_panesContainerRef", first: true, predicate: ["panning"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_tabsElement", first: true, predicate: ["tabing"], descendants: true }, { propertyName: "_scrollable", first: true, predicate: CdkScrollable, descendants: true, static: true }], ngImport: i0, template: "<div class=\"panes\">\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #panning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"navigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onPaneResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"backdrop\" *ngIf=\"dialog\" (click)=\"closeTab(selectedTabIndex)\"></div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <!--*ngIf=\"selectedTabIndex <=< -1 && tabs[selectedTabIndex].expandable\"-->\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let t of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"t.badge\" [matBadgeHidden]=\"!t.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{t.icon}}</mat-icon> \r\n {{t.title}}\r\n <mat-icon *ngIf=\"t.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid #00000014;height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes .panes-container .pane-content .pane{flex-grow:1}.panes .panes-container .pane-separator{width:8px}.pane-separator,.tabs-separator{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator{width:12px}::ng-deep [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs .tabs-title{align-items:center}.tabs .tabs-title h2{font-size:x-large;margin:9px;font-weight:100}.tabs .tabs-title:hover{opacity:1}.tabs .mat-tab-link .tool{opacity:0}.tabs .mat-tab-link:hover .tool{opacity:1}.tabs .tab{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}\n"], components: [{ type: i5.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: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.QuickToolsComponent, selector: "bizdoc-quicktools" }, { type: i8.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color"], exportAs: ["matTabNavBar", "matTabNav"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { type: i13.NgxComponentOutlet, selector: "ngx-component-outlet", inputs: ["type", "injector", "ngxComponentOutletContent"], outputs: ["create"] }, { type: i8.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matTabLink"] }, { type: i14.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }], pipes: { "translate": i15.TranslatePipe }, animations: [panesAnimation,
|
1047
|
-
panesTitleAnimation,
|
1048
|
-
paneAnimation,
|
1049
|
-
paramAnimation,
|
1050
|
-
queryAnimation,
|
1051
|
-
tabsAnimation,
|
1052
|
-
tabAnimation
|
1053
|
-
] });
|
1054
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: SlotsComponent, decorators: [{
|
1055
|
-
type: Component,
|
1056
|
-
args: [{ selector: 'bizdoc-panes-outlet', animations: [panesAnimation,
|
1057
|
-
panesTitleAnimation,
|
1058
|
-
paneAnimation,
|
1059
|
-
paramAnimation,
|
1060
|
-
queryAnimation,
|
1061
|
-
tabsAnimation,
|
1062
|
-
tabAnimation
|
1063
|
-
], template: "<div class=\"panes\">\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #panning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"navigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onPaneResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"backdrop\" *ngIf=\"dialog\" (click)=\"closeTab(selectedTabIndex)\"></div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <!--*ngIf=\"selectedTabIndex <=< -1 && tabs[selectedTabIndex].expandable\"-->\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let t of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"t.badge\" [matBadgeHidden]=\"!t.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{t.icon}}</mat-icon> \r\n {{t.title}}\r\n <mat-icon *ngIf=\"t.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid #00000014;height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes .panes-container .pane-content .pane{flex-grow:1}.panes .panes-container .pane-separator{width:8px}.pane-separator,.tabs-separator{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator{width:12px}::ng-deep [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs .tabs-title{align-items:center}.tabs .tabs-title h2{font-size:x-large;margin:9px;font-weight:100}.tabs .tabs-title:hover{opacity:1}.tabs .mat-tab-link .tool{opacity:0}.tabs .mat-tab-link:hover .tool{opacity:1}.tabs .tab{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}\n"] }]
|
1064
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
1065
|
-
type: Inject,
|
1066
|
-
args: [PANES_DATA]
|
1067
|
-
}] }, { type: i1.SessionService }, { type: i0.ChangeDetectorRef }, { type: i2.PanesRouter }, { type: i3.WindowTitleService }, { type: i4.GuideService }, { type: i0.Injector }]; }, propDecorators: { dialogChange: [{
|
1068
|
-
type: Output
|
1069
|
-
}], _panesContainerRef: [{
|
1070
|
-
type: ViewChild,
|
1071
|
-
args: ['panning', { read: ViewContainerRef, static: true }]
|
1072
|
-
}], _tabsElement: [{
|
1073
|
-
type: ViewChild,
|
1074
|
-
args: ['tabing']
|
1075
|
-
}], _scrollable: [{
|
1076
|
-
type: ViewChild,
|
1077
|
-
args: [CdkScrollable, { static: true }]
|
1078
|
-
}], collapse: [{
|
1079
|
-
type: HostListener,
|
1080
|
-
args: ['document:keydown.escape']
|
1081
|
-
}], onResize: [{
|
1082
|
-
type: HostListener,
|
1083
|
-
args: ['window:resize']
|
1084
|
-
}] } });
|
1085
|
-
const PANE_PARAMS_REGEX = /(:[\w\-]+)/g;
|
1086
|
-
function prepareRoutes(routes, treePath) {
|
1087
|
-
for (let i = 0; i < routes.length; i++) {
|
1088
|
-
let route = routes[i], fullPath = (treePath ? (treePath + '/') : '') + route.path;
|
1089
|
-
Object.assign(route, {
|
1090
|
-
fullPath,
|
1091
|
-
regEx: new RegExp('^' + fullPath.
|
1092
|
-
replace('/', '\\/').
|
1093
|
-
replace(PANE_PARAMS_REGEX, e => `(?<${e.substr(1)}>[\\w@\\-]*)`))
|
1094
|
-
});
|
1095
|
-
if (route.children) {
|
1096
|
-
let children = prepareRoutes(route.children, fullPath);
|
1097
|
-
for (var j = 0; j < children.length; j++)
|
1098
|
-
Object.assign(children[j], {
|
1099
|
-
parent: route
|
1100
|
-
});
|
1101
|
-
}
|
1102
|
-
}
|
1103
|
-
return routes;
|
1104
|
-
}
|
1105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3Nsb3RzL3Nsb3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9zbG90cy9zbG90cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFHL0ssT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBZSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQVksZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHNVQsT0FBTyxFQUFFLGFBQWEsRUFBaUIsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFD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TUFBeUIsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSaXBwbGVDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlL3JpcHBsZSc7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgaXNBcnJheSwgaXNCb29sZWFuLCBpc0RhdGUsIGlzUHJvbWlzZSwgaXNTdHJpbmcgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBQQU5FU19EQVRBLCBQYW5lUmVmLCBQYW5lT3B0aW9ucywgUXVlcnlQYXJhbU5hdmlnYXRpb24sIFBhcmFtTmF2aWdhdGlvbiwgTmF2aWdhdGlvbk1vZGUsIE5hdmlnYXRpb25TdGFydCwgTmF2aWdhdGlvbkNsb3NlLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU2VsZWN0ZWQsIFBBVEhfQ0hBUiwgUVVFUllfQ0hBUiwgQVJHX0NIQVIsIFBBTkVfQ0hBUiwgQ29sbGFwc2VOYXZpZ2F0aW9uLCBCYWNrTmF2aWdhdGlvbiwgTmF2aWdhdGlvbkZ1bGxzY3JlZW4sIFBhbmVNb2RlLCBOYXZpZ2F0aW9uUmVzaXplIH0gZnJvbSAnLi9wYW5lLXJlZic7XHJcbmltcG9ydCB7IFBhbmVzUm91dGVyIH0gZnJvbSAnLi9yb3V0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSwgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgV2luZG93VGl0bGVTZXJ2aWNlIH0gZnJvbSAnLi4vd2luZG93LXRpdGxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwYW5lc0FuaW1hdGlvbiwgcGFuZUFuaW1hdGlvbiwgcGFuZXNUaXRsZUFuaW1hdGlvbiwgcGFyYW1BbmltYXRpb24sIHF1ZXJ5QW5pbWF0aW9uLCB0YWJBbmltYXRpb24sIHRhYnNBbmltYXRpb24gfSBmcm9tICcuLi9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgUGFuZVJlc29sdmUsIFBhbmVSb3V0ZSwgUGFyYW1NYXAsIENhbkRpc21pc3MsIERFRkFVTFRfUE9MSUNZLCBPcGVuUG9saWN5IH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IEd1aWRlU2VydmljZSB9IGZyb20gJy4uL2d1aWRlL2d1aWRlLnNlcnZpY2UnO1xyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMobmFtZT86IHN0cmluZyk7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBERUZBVUxUX1JPVVRFID0gWydkYXNoYm9hcmQnXTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtcGFuZXMtb3V0bGV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2xvdHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Nsb3RzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW3BhbmVzQW5pbWF0aW9uLFxyXG4gICAgcGFuZXNUaXRsZUFuaW1hdGlvbixcclxuICAgIHBhbmVBbmltYXRpb24sXHJcbiAgICBwYXJhbUFuaW1hdGlvbixcclxuICAgIHF1ZXJ5QW5pbWF0aW9uLFxyXG4gICAgdGFic0FuaW1hdGlvbixcclxuICAgIHRhYkFuaW1hdGlvblxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNsb3RzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBkaWFsb2dDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQFZpZXdDaGlsZCgncGFubmluZycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIF9wYW5lc0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJpbmcnKSBfdGFic0VsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChDZGtTY3JvbGxhYmxlLCB7IHN0YXRpYzogdHJ1ZSB9KSBfc2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZTtcclxuICB0aXRsZUFuaW1hdGlvbiA9IDA7XHJcbiAgZ3JvdXA6IHN0cmluZztcclxuICBzd2FwPzogbnVtYmVyO1xyXG4gIHN3YXBUYWI/OiBudW1iZXI7XHJcbiAgcHJldkdyb3VwPzogc3RyaW5nO1xyXG5cclxuICByZWFkb25seSBwYW5lczogUGFuZVJlZjxhbnk+W10gPSBbXTtcclxuICByZWFkb25seSB0YWJzOiBQYW5lUmVmPGFueT5bXSA9IFtdO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkVGFiSW5kZXggPSAtMTtcclxuICBkaWFsb2cgPSBmYWxzZTtcclxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkVGFiSW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUYWJJbmRleDtcclxuICB9XHJcbiAgcHVibGljIHNldCBzZWxlY3RlZFRhYkluZGV4KHZhbHVlKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRUYWJJbmRleCA+IC0xICYmIHRoaXMudGFicy5hdCh0aGlzLl9zZWxlY3RlZFRhYkluZGV4KS5kaWFsb2cpIHtcclxuICAgICAgdGhpcy5kaWFsb2cgPSB0cnVlO1xyXG4gICAgICB0aGlzLmRpYWxvZ0NoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zZXRUYWJBbmltYXRpb24oKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc2V0VGFiQW5pbWF0aW9uKCkge1xyXG4gICAgdGhpcy50YWJzQW5pbWF0aW9uID0ge1xyXG4gICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFRhYkluZGV4LFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBzdGFydFdpZHRoOiB0aGlzLl90YWJzRWxlbWVudCA/IHRoaXMuX3RhYnNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggOiAwXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIHNlbGVjdGVkSW5kZXggPSAtMTtcclxuICBuZXh0OiBib29sZWFuO1xyXG4gIHByZXY6IGJvb2xlYW47XHJcbiAgZHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0YWJzQW5pbWF0aW9uOiB7XHJcbiAgICB2YWx1ZTogbnVtYmVyLFxyXG4gICAgcGFyYW1zOiB7XHJcbiAgICAgIHN0YXJ0V2lkdGg6IG51bWJlclxyXG4gICAgfVxyXG4gIH07XHJcbiAgcmVhZG9ubHkgcmlwcGxlOiBSaXBwbGVDb25maWcgPSB7XHJcbiAgICBjb2xvcjogdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKSxcclxuICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgcmFkaXVzOiAyNVxyXG4gIH1cclxuICBhY2NlbnQ6IHN0cmluZyA9IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCk7XHJcbiAgcHJpdmF0ZSBfbmF2aWdhdGluZzogYm9vbGVhbjtcclxuICBwcml2YXRlIF9yZXBvc2l0b3J5OiBFeHRlbmRlZFJvdXRlW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVuZGluZyA9IFtdIGFzIHN0cmluZ1tdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0bCA9IHRoaXMuX3Nlc3Npb24uaW52ZXJzZTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoUEFORVNfREFUQSkgZGF0YTogRXh0ZW5kZWRSb3V0ZVtdLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFBhbmVzUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBfdGl0bGU6IFdpbmRvd1RpdGxlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2d1aWRlOiBHdWlkZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIF9zZXNzaW9uLnRoZW1lQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKCgpID0+IHRoaXMuYWNjZW50ID0gX3Nlc3Npb24uZ2V0QWNjZW50KCkpO1xyXG4gICAgX3JvdXRlci5fY29tbSQuXHJcbiAgICAgIHN1YnNjcmliZShlID0+IHtcclxuICAgICAgICBzd2l0Y2ggKGUpIHtcclxuICAgICAgICAgIGNhc2UgJ2NvbGxhcHNlJzpcclxuICAgICAgICAgICAgdGhpcy5jb2xsYXBzZSgpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuX3JlcG9zaXRvcnkgPSBwcmVwYXJlUm91dGVzKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX25hdmlnYXRlJC5cclxuICAgICAgc3Vic2NyaWJlKGFzeW5jIG4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgY29tbWFuZHMsIGNvbXBvbmVudCwgcGF0aE1vZGUsIHJlbGF0aXZlVG8gfSA9IG47XHJcbiAgICAgICAgbGV0IHtcclxuICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgaGVscCxcclxuICAgICAgICAgIHBvbGljeSxcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgc3RhdGVcclxuICAgICAgICB9ID0gbjtcclxuICAgICAgICBsZXRcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nOiBzdHJpbmcsXHJcbiAgICAgICAgICBwYXJhbXM6IFBhcmFtTWFwLFxyXG4gICAgICAgICAgcGFyZW50OiBQYW5lUmVmLFxyXG4gICAgICAgICAgcGF0aDogc3RyaW5nLFxyXG4gICAgICAgICAgcm91dGU6IEV4dGVuZGVkUm91dGU7XHJcblxyXG4gICAgICAgIGlmIChjb21tYW5kcyAmJiBjb21tYW5kcy5sZW5ndGgpIHtcclxuICAgICAgICAgIHBhdGggPSBuLmNvbW1hbmRzLmpvaW4oJy8nKTtcclxuICAgICAgICAgIGlmIChwYXRoLmluZGV4T2YoUVVFUllfQ0hBUikgPiAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWdzID0gcGF0aC5zcGxpdChRVUVSWV9DSEFSKTtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBzZWdzWzFdO1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcgfHwgJycpO1xyXG4gICAgICAgICAgICBwYXRoID0gc2Vnc1swXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IG4ucXVlcnlQYXJhbXMgfHwge307XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBhdGhNb2RlID09PSAncmVsYXRpdmUnIHx8IHBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcclxuICAgICAgICAgICAgcGFyZW50ID0gcmVsYXRpdmVUbyB8fCB0aGlzLnBhbmVzW3RoaXMuc2VsZWN0ZWRJbmRleF07XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRwYXRoID0gcGFyZW50LnBhdGg7XHJcbiAgICAgICAgICAgIHdoaWxlIChwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XHJcbiAgICAgICAgICAgICAgcGFyZW50cGF0aCA9IHBhcmVudHBhdGguc3Vic3RyKDAsIHBhcmVudHBhdGgubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhdGggPSBwYXJlbnRwYXRoICsgJy8nICsgcGF0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgICAgICAgaWYgKCFyb3V0ZSlcclxuICAgICAgICAgICAgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG4gICAgICAgICAgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHJvdXRlLCBwYXRoKTtcclxuICAgICAgICAgIGlmICghcG9saWN5KSBwb2xpY3kgPSByb3V0ZS5wb2xpY3kgfHwgREVGQVVMVF9QT0xJQ1k7XHJcbiAgICAgICAgICBlbHNlIGlmIChyb3V0ZS5wb2xpY3kpIHBvbGljeSB8PSByb3V0ZS5wb2xpY3k7XHJcbiAgICAgICAgICBpZiAoIWljb24pIGljb24gPSByb3V0ZS5pY29uO1xyXG4gICAgICAgICAgaWYgKCFoZWxwKSBoZWxwID0gcm91dGUuaGVscDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXBvbGljeSkgcG9saWN5ID0gREVGQVVMVF9QT0xJQ1k7XHJcbiAgICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zKSBxdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LkNsZWFyKSA9PSBPcGVuUG9saWN5LkNsZWFyKSB7XHJcbiAgICAgICAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgICAgICAgaWYgKCEocG9saWN5ICYgT3BlblBvbGljeS5UYWIpKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jbGVhclBhbmVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21tYW5kcykge1xyXG4gICAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGxldCB0YWIgPSB0aGlzLnRhYnNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHRhYi5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHRhYi5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVG9nZ2xlKSA9PSBPcGVuUG9saWN5LlRvZ2dsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFicy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgJiYgdGFiLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyh0YWIsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0YWIuZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc3luYygpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHRhYi5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCB0YWIsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0YWIuZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3luYygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgd2hpbGUgKGkgPCB0aGlzLnBhbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGxldCBwYW5lID0gdGhpcy5wYW5lc1tpXTtcclxuICAgICAgICAgICAgICBpZiAocGF0aCA9PT0gcGFuZS5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHBhbmUucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRvZ2dsZSkgPT0gT3BlblBvbGljeS5Ub2dnbGUpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVBdChpKTtcclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgJiYgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oaSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHBhbmUsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oaSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N5bmMoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmIChwYW5lLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHBhbmUsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmMoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29tbWFuZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0VGFiKGNvbXBvbmVudCB8fCByb3V0ZS5jb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICByb3V0ZSxcclxuICAgICAgICAgICAgICAgICAgaWNvbixcclxuICAgICAgICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICBoZWxwLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5faW5zZXJ0UGFuZShjb21wb25lbnQgfHwgcm91dGUuY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBoZWxwLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHBhbmUuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvbkZ1bGxzY3JlZW4ocGFuZS5fZnVsbHNjcmVlbiA9IHRoaXMucGFuZXMubGVuZ3RoID09PSAxLCBwYW5lKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcm91dGUgJiZcclxuICAgICAgICAgICAgICB0aGlzLl9zeW5jKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcGFuZSA9IChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIgP1xyXG4gICAgICAgICAgICAgIHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdIDogdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9zeW5jKCk7XHJcbiAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpICE9IE9wZW5Qb2xpY3kuVGFiKSB0aGlzLnNlbGVjdCh0aGlzLnNlbGVjdGVkSW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiKVxyXG4gICAgICAgICAgICB0aGlzLl9pbnNlcnRUYWIoY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgaWNvbiwgdGl0bGUsIGhlbHAsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICByb3V0ZSxcclxuICAgICAgICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBwb2xpY3lcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBwYW5lID0gdGhpcy5faW5zZXJ0UGFuZShjb21wb25lbnQsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBpY29uLCB0aXRsZSwgaGVscCxcclxuICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcG9saWN5LCBxdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBwYW5lLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25GdWxsc2NyZWVuKHBhbmUuX2Z1bGxzY3JlZW4gPSB0aGlzLnBhbmVzLmxlbmd0aCA9PT0gMSwgcGFuZSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB3aW5kb3cucmVtb3ZlQWxsTGlzdGVuZXJzKCdwb3BzdGF0ZScpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9uYXZpZ2F0aW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbmF2aWdhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzdGF0ZSA9IGUuc3RhdGUgJiYgZS5zdGF0ZS5iaXpkb2MgPyBlLnN0YXRlIGFzIEhpc3RvcnlTdGF0ZSA6IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLCBzdGF0ZSk7XHJcbiAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc3dhcCA9IHN0YXRlLnN3YXA7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gc3RhdGUuc3dhcFRhYjtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHN0YXRlLnByZXZHcm91cDtcclxuICAgICAgICB0aGlzLmdyb3VwID0gc3RhdGUuZ3JvdXA7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gc3RhdGUuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUubGVuZ3RoID4gMSlcclxuICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLFxyXG4gICAgICAgIGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyBoaXN0b3J5LnN0YXRlIDogdW5kZWZpbmVkKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fcm91dGVyLl9uYXZpZ2F0ZSQubmV4dCh7XHJcbiAgICAgICAgY29tbWFuZHM6IERFRkFVTFRfUk9VVEUsXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9kZXNlcmlhbGl6ZSh1cmw6IHN0cmluZywgc3RhdGU/OiBIaXN0b3J5U3RhdGUpIHtcclxuXHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmwpLnNwbGl0KFBBTkVfQ0hBUiksIHBhbmVzID0gZGVzZXJpYWxpemUoc2VjdGlvbnNbMF0pLCB0YWJzID0gc2VjdGlvbnMubGVuZ3RoID4gMSA/IGRlc2VyaWFsaXplKHNlY3Rpb25zWzFdKSA6IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIGRlc2VyaWFsaXplKHBhdGg6IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gcGF0aC5cclxuICAgICAgICBzcGxpdChQQVRIX0NIQVIpLm1hcChzID0+IHtcclxuICAgICAgICAgIGNvbnN0IFtwYXRoLCBxdWVyeVN0cmluZ10gPSBzLnNwbGl0KFFVRVJZX0NIQVIpO1xyXG4gICAgICAgICAgcmV0dXJuIHsgcGF0aCwgcXVlcnlTdHJpbmcgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwYW5lID0gcGFuZXNbaV07XHJcbiAgICAgIGF3YWl0IHRoaXMuX25hdmlnYXRlUGFuZShpLCBwYW5lLnBhdGgsIHBhbmUucXVlcnlTdHJpbmcsIHN0YXRlID8gc3RhdGUucGFuZXNbaV0gOiBudWxsKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCA+IHBhbmVzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgaSA9IDA7XHJcbiAgICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgICAgaWYgKHBhbmVzLmxlbmd0aCAtIDEgPCBpIHx8IHBhbmUucGF0aCAhPT0gcGFuZXNbaV0ucGF0aCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gaSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaSAtIDE7XHJcbiAgICAgICAgICB0aGlzLnBhbmVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHBhbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPCAwKVxyXG4gICAgICB0aGlzLnNlbGVjdCgwKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdGFiID0gdGFic1tpXTtcclxuICAgICAgYXdhaXQgdGhpcy5fbmF2aWdhdGVUYWIoaSwgdGFiLnBhdGgsIHRhYi5xdWVyeVN0cmluZywgc3RhdGUgPyBzdGF0ZS50YWJzW2ldIDogbnVsbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCA+IHRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHRhYiA9IHRoaXMudGFic1tpXTtcclxuICAgICAgICBpZiAodGFicy5sZW5ndGggLSAxIDwgaSB8fCB0YWIucGF0aCAhPT0gdGFic1tpXS5wYXRoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGkgLSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50YWJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRhYik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGggJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbiA9IHRoaXMucGFuZXMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2ldO1xyXG4gICAgICBwYW5lLmZ1bGxzY3JlZW4gIT09IChuID09PSAxKSAmJlxyXG4gICAgICAgIHBhbmUuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvbkZ1bGxzY3JlZW4ocGFuZS5fZnVsbHNjcmVlbiA9IG4gPT09IDEsIHBhbmUpKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGluZGV4XHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcXVlcnlTdHJpbmdcclxuICAgKiBAcGFyYW0gc3RhdGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9uYXZpZ2F0ZVBhbmUoaW5kZXg6IG51bWJlciwgcGF0aDogc3RyaW5nLCBxdWVyeVN0cmluZzogc3RyaW5nLCBzdGF0ZT86IGFueSkge1xyXG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLl9tYXRjaChwYXRoKTtcclxuXHJcbiAgICBpZiAoIXJvdXRlKSB0aHJvdyBgbm8gbWF0Y2ggJHtwYXRofWA7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCB0aGlzLnBhbmVzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaW5kZXhdO1xyXG4gICAgICBpZiAocGF0aCA9PT0gcGFuZS5wYXRoKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSBwYW5lLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHBhbmUsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHBhbmUucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocGFuZS5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlLCBwYXRoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9uYXZQYXJhbXMocGF0aCwgcGFuZSwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZmluZEFuY2VzdG9yKHJvdXRlLCBwYXRoKTtcclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHRoaXMuX2luc2VydFBhbmUocm91dGUuY29tcG9uZW50LCB7XHJcbiAgICAgIHBhdGgsIHBhcmVudCwgcm91dGUsIGRhdGE6IHN0YXRlLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICBpY29uOiByb3V0ZS5pY29uLFxyXG4gICAgICBoZWxwOiByb3V0ZS5oZWxwLFxyXG4gICAgICBwb2xpY3k6IHJvdXRlLnBvbGljeSxcclxuICAgICAgZm9jdXM6IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2aWdhdGVUYWIoaW5kZXg6IG51bWJlciwgcGF0aDogc3RyaW5nLCBxdWVyeVN0cmluZzogc3RyaW5nLCBzdGF0ZT86IGFueSkge1xyXG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLl9tYXRjaChwYXRoKTtcclxuXHJcbiAgICBpZiAoIXJvdXRlKSB0aHJvdyBgbm8gbWF0Y2ggJHtwYXRofWA7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCB0YWIgPSB0aGlzLnRhYnNbaW5kZXhdO1xyXG4gICAgICBpZiAocGF0aCA9PT0gdGFiLnBhdGgpIHtcclxuICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHRhYi5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyh0YWIsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRhYi5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyh0YWIucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHRhYiwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG5cclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRBbmNlc3Rvcihyb3V0ZSwgcGF0aCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5fc3RhdGUocm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgdGhpcy5faW5zZXJ0VGFiKHJvdXRlLmNvbXBvbmVudCwge1xyXG4gICAgICBpY29uOiByb3V0ZS5pY29uLFxyXG4gICAgICBoZWxwOiByb3V0ZS5oZWxwLFxyXG4gICAgICBwb2xpY3k6IHJvdXRlLnBvbGljeSB8IE9wZW5Qb2xpY3kuVGFiLFxyXG4gICAgICBwYXRoLCBwYXJlbnQsIHJvdXRlLFxyXG4gICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgcGFyYW1zLCBxdWVyeVBhcmFtcyxcclxuICAgICAgZm9jdXM6IGZhbHNlLFxyXG4gICAgICBzd2FwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2ZpbmRBbmNlc3Rvcihyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nKSB7XHJcbiAgICBpZiAoKHJvdXRlIGFzIEV4dGVuZGVkUm91dGUpLnBhcmVudClcclxuICAgICAgcmV0dXJuIHRoaXMucGFuZXMuZmluZChwID0+IChwLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUpID09PVxyXG4gICAgICAgIChyb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQgJiZcclxuICAgICAgICBwYXRoLnN0YXJ0c1dpdGgocC5wYXRoKSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbmF2UXVlcnlQYXJhbXMocGFuZTogUGFuZVJlZjxhbnk+LCBxdWVyeVBhcmFtczogUGFyYW1NYXAsIHN0YXRlOiBQYXJhbU1hcCkge1xyXG4gICAgcGFuZS5fcXVlcnlTdHJpbmcgPSB0aGlzLl9xdWVyeVN0cmluZyhxdWVyeVBhcmFtcyk7XHJcbiAgICBzdGF0ZSAmJiBwYW5lLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgIHBhbmUuX3F1ZXJ5UGFyYW1zJC5uZXh0KHF1ZXJ5UGFyYW1zKTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KG5ldyBRdWVyeVBhcmFtTmF2aWdhdGlvbihxdWVyeVBhcmFtcywgcGFuZSkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xyXG4gICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX25hdlBhcmFtcyhwYXRoOiBzdHJpbmcsIHBhbmU6IFBhbmVSZWY8YW55PiwgcGFyYW1zOiBQYXJhbU1hcCwgcXVlcnlQYXJhbXM6IFBhcmFtTWFwLCBzdGF0ZTogUGFyYW1NYXApIHtcclxuICAgIGlmIChwYW5lLnJvdXRlLmNhbkRpc21pc3MpXHJcbiAgICAgIGF3YWl0IHRoaXMuX2Rpc21pc3MocGFuZSk7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHBhbmUucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICBwYW5lLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgIHBhbmUuX3BhdGggPSBwYXRoO1xyXG4gICAgcGFuZS5fcGFyYW1zJC5uZXh0KHBhcmFtcyk7XHJcbiAgICBpZiAocXVlcnlQYXJhbXMpIHtcclxuICAgICAgcGFuZS5fcXVlcnlTdHJpbmcgPSB0aGlzLl9xdWVyeVN0cmluZyhxdWVyeVBhcmFtcyk7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5UGFyYW1zJC5uZXh0KHF1ZXJ5UGFyYW1zKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwYW5lLl9xdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dCh7fSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgUGFyYW1OYXZpZ2F0aW9uKHBhcmFtcywgcGFuZSkpO1xyXG5cclxuICAgIHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgIGlmIChjaGlsZC5yb3V0ZSAmJiAoY2hpbGQucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSkucGFyZW50ID09PSBwYW5lLnJvdXRlKSB7XHJcbiAgICAgICAgY2hpbGQuX2RhdGEkLm5leHQoT2JqZWN0LmFzc2lnbihjaGlsZC5kYXRhLCBzdGF0ZSkpO1xyXG4gICAgICAgIGNoaWxkLl9wYXJhbXMkLm5leHQocGFyYW1zKTtcclxuICAgICAgICBjaGlsZC5fcGF0aCA9IHBhbmUucGF0aCArICcvJyArIGNoaWxkLnJvdXRlLnBhdGg7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA+IC0xICYmIGNoaWxkID09PSB0aGlzLnRhYnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZFRhYkluZGV4O1xyXG4gICAgICAgICAgdGhpcy5ncm91cCA9IGNoaWxkLmdyb3VwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAocGFuZS5tb2RlID09PSAncGFuZScpIHRoaXMudGl0bGVBbmltYXRpb24rKztcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBfc3luYygpIHtcclxuICAgIGxldCBwYXRoID0gdGhpcy5wYW5lcy5maWx0ZXIocCA9PiBwLnJvdXRlKS5tYXAocyA9PiBzLmZ1bGxQYXRoKS5qb2luKFBBVEhfQ0hBUik7XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCB0YWJzID0gdGhpcy50YWJzLmZpbHRlcihwID0+IHAucm91dGUpO1xyXG4gICAgICBpZiAodGFicy5sZW5ndGgpXHJcbiAgICAgICAgcGF0aCArPSBQQU5FX0NIQVIgKyB0YWJzLm1hcChzID0+IHMuZnVsbFBhdGgpLmpvaW4oUEFUSF9DSEFSKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5faGlzdG9yeSgpO1xyXG4gICAgdGhpcy5fbmF2aWdhdGluZyA9IHRydWU7XHJcbiAgICBoaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSwgJycsICcvJyArIHBhdGgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9uYXZpZ2F0aW5nID0gZmFsc2UsIDIwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gbW9kZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2hpc3RvcnkoKSB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHtcclxuICAgICAgYml6ZG9jOiB0cnVlLFxyXG4gICAgICBzdGVwOiBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuYml6ZG9jID8gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwICsgMSA6IDEsXHJcbiAgICAgIHNlbGVjdGVkVGFiSW5kZXg6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCxcclxuICAgICAgcGFuZXM6IHRoaXMucGFuZXMubWFwKHAgPT4gcC5kYXRhKSxcclxuICAgICAgdGFiczogdGhpcy50YWJzLm1hcCh0ID0+IHQuZGF0YSksXHJcbiAgICAgIHN3YXA6IHRoaXMuc3dhcCxcclxuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAsXHJcbiAgICAgIHN3YXBUYWI6IHRoaXMuc3dhcFRhYixcclxuICAgICAgcHJldkdyb3VwOiB0aGlzLnByZXZHcm91cFxyXG4gICAgfSBhcyBIaXN0b3J5U3RhdGU7XHJcbiAgICByZXR1cm4gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBkcm9wKGV2dDogQ2RrRHJhZ0Ryb3A8c3RyaW5nLCBzdHJpbmc+KSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1tldnQucHJldmlvdXNJbmRleF07XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShldnQucHJldmlvdXNJbmRleCwgMSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShldnQuY3VycmVudEluZGV4LCAwLCBwYW5lKTtcclxuICAgIHRoaXMuX3N5bmMoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVBpbm5lZChwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIHBhbmUucGlubmVkID0gIXBhbmUucGlubmVkO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBpZiAocy5kZWNlbmRlbnRPZihwYW5lKSkgcy5waW5uZWQgPSBwYW5lLnBpbm5lZDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcXVlcnlTdHJpbmcocXVlcnlQYXJhbXM6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKTtcclxuICAgIGxldCBxdWVyeVN0cmluZzogc3RyaW5nO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdmFsID0gcXVlcnlQYXJhbXNbbmFtZXNbaV1dO1xyXG5cclxuICAgICAgaWYgKHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghcXVlcnlTdHJpbmcpIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgZWxzZSBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nICsgQVJHX0NIQVI7XHJcblxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWwpKVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7bmFtZXNbaV19PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbCl9YDtcclxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KHZhbCkpXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSB2YWwubWFwKHYgPT4gYCR7bmFtZXNbaV19PSR7dn1gKS5qb2luKEFSR19DSEFSKTtcclxuICAgICAgICBlbHNlIGlmIChpc0RhdGUodmFsKSlcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbC50b0pTT04oKX1gO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbH1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlTdHJpbmc7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmc6IHN0cmluZyk6IFBhcmFtTWFwIHtcclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICBxdWVyeVN0cmluZyAmJiBxdWVyeVN0cmluZy5cclxuICAgICAgc3BsaXQoQVJHX0NIQVIpLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgY29uc3QgW25hbWUsIHZhbHVlXSA9IHAuc3BsaXQoJz0nKTtcclxuICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zW25hbWVdKVxyXG4gICAgICAgICAgcXVlcnlQYXJhbXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHMgPSBxdWVyeVBhcmFtc1tuYW1lXTtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zW25hbWVdID0gaXNBcnJheSh2YWxzKSA/IFsuLi52YWxzLCB2YWx1ZV0gOiBbdmFscywgdmFsdWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gcXVlcnlQYXJhbXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByb3V0ZVxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcGFyYW1zKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGV4ID0gcm91dGUucmVnRXguZXhlYyhwYXRoKSxcclxuICAgICAgcGFyYW1zID0gZXguZ3JvdXBzO1xyXG5cclxuICAgIHJldHVybiBwYXJhbXMgfHwge307XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB1cmxcclxuICAgKi9cclxuICBwcml2YXRlIF9tYXRjaCh1cmw6IHN0cmluZykge1xyXG4gICAgbGV0IHJvdXRlID0gdGhpcy5fcmVwb3NpdG9yeS5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgaWYgKHJvdXRlKVxyXG4gICAgICB3aGlsZSAocm91dGUuY2hpbGRyZW4pIHtcclxuICAgICAgICBsZXQgY2hpbGQgPSByb3V0ZS5jaGlsZHJlbi5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgICAgIGlmIChjaGlsZClcclxuICAgICAgICAgIHJvdXRlID0gY2hpbGQ7XHJcbiAgICAgICAgZWxzZSBicmVhaztcclxuICAgICAgfVxyXG4gICAgcmV0dXJuIHJvdXRlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcm91dGVcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXRlKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcsIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBpZiAodGhpcy5fcGVuZGluZy5pbmRleE9mKHBhdGgpID4gLTEpIHtcclxuICAgICAgLy90aGlzLl9wcy50b2FzdCgnV29ya2luZycpO1xyXG4gICAgICB0aHJvdyAnYWxyZWFkeSBwcm9jZXNzaW5nJztcclxuICAgIH1cclxuICAgIHRoaXMuX3BlbmRpbmcucHVzaChwYXRoKTtcclxuXHJcbiAgICBjb25zdCB7IHBhcmVudCwgcmVzb2x2ZSB9ID0gcm91dGU7XHJcbiAgICBpZiAocGFyZW50KVxyXG4gICAgICBhd2FpdCB0aGlzLl9wYXJlbnRzdGF0ZShwYXJlbnQsIHBhdGgsIHBhcmFtcywgZGF0YSk7XHJcbiAgICBpZiAocmVzb2x2ZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9yZXNvbHZlKHJlc29sdmUsIHBhcmFtcywgZGF0YSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wZW5kaW5nLnJlbW92ZShwYXRoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJvdXRlXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9wYXJlbnRzdGF0ZShyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3QgeyBwYXJlbnQsIHJlc29sdmUgfSA9IHJvdXRlO1xyXG5cclxuICAgIGlmIChwYXJlbnQpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3BhcmVudHN0YXRlKHBhcmVudCwgcGF0aCwgcGFyYW1zLCBkYXRhKTtcclxuXHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lcy5maW5kKHMgPT4gcy5yb3V0ZSAmJiBzLnJvdXRlID09PSByb3V0ZVxyXG4gICAgICAmJiBwYXRoLnN0YXJ0c1dpdGgocy5wYXRoKSk7XHJcblxyXG4gICAgcGFuZSAmJiBPYmplY3QuYXNzaWduKGRhdGEsIHBhbmUuZGF0YSk7XHJcblxyXG4gICAgaWYgKHJlc29sdmUpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3Jlc29sdmUocmVzb2x2ZSwgcGFyYW1zLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3Jlc29sdmUocmVzb2x2ZTogeyBba2V5OiBzdHJpbmddOiBDb21wb25lbnRUeXBlPFBhbmVSZXNvbHZlPGFueT4+IH0sIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVzb2x2ZSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGtleSA9IGtleXNbaV07XHJcbiAgICAgIGlmICghZGF0YVtrZXldKSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQocmVzb2x2ZVtrZXldKSBhcyBQYW5lUmVzb2x2ZTxhbnk+O1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5zdGFuY2Uub25SZXNvbHZlKHBhcmFtcyk7XHJcbiAgICAgICAgaWYgKGlzUHJvbWlzZSh2YWx1ZSkpXHJcbiAgICAgICAgICBhd2FpdCB2YWx1ZS50aGVuKHIgPT4gZGF0YVtrZXldID0gcik7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSlcclxuICAgICAgICAgIGF3YWl0IHZhbHVlLnBpcGUodGFwKHIgPT4gZGF0YVtrZXldID0gcikpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGQ8VD4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zPzogUGFuZU9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0aGlzLmluc2VydCh0aGlzLnBhbmVzLmxlbmd0aCwgY29tcG9uZW50LCBvcHRpb25zKTtcclxuICB9XHJcbiAgaW5zZXJ0PFQ+KHBvc2l0aW9uOiBudW1iZXIsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9ucz86IFBhbmVPcHRpb25zKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5faW5zZXJ0UGFuZTxUPihjb21wb25lbnQsIG9wdGlvbnMgfHwge30sIHBvc2l0aW9uKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvbkZ1bGxzY3JlZW4ocGFuZS5fZnVsbHNjcmVlbiA9IHRoaXMucGFuZXMubGVuZ3RoID09PSAxLCBwYW5lKSk7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5zZXJ0UGFuZTxUID0gYW55Pihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM6IHtcclxuICAgIHBhdGg/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGljb24/OiBzdHJpbmc7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxuICAgIGlucHV0cz86IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxyXG4gICAgZGF0YT86IFBhcmFtTWFwO1xyXG4gICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBxdWVyeVBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgaGVscD86IHN0cmluZztcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgcG9saWN5PzogT3BlblBvbGljeTtcclxuICAgIGZvY3VzPzogYm9vbGVhblxyXG4gIH0sIHBvc2l0aW9uPzogbnVtYmVyKSB7XHJcblxyXG4gICAgY29uc3Qgc3RyZXRjaCA9IChvcHRpb25zLnBvbGljeSAmIE9wZW5Qb2xpY3kuU3RyZXRjaCkgPT0gT3BlblBvbGljeS5TdHJldGNoO1xyXG5cclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLl9jb25zdHJhY3Q8VD4oY29tcG9uZW50LCAncGFuZScsIHtcclxuICAgICAgc3RyZXRjaCxcclxuICAgICAgLi4uXHJcbiAgICAgIG9wdGlvbnNcclxuICAgIH0pO1xyXG4gICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHBvc2l0aW9uID0gdGhpcy5wYW5lcy5sZW5ndGg7XHJcbiAgICB0aGlzLnBhbmVzLnB1c2gocGFuZSk7XHJcbiAgICB0aGlzLnRpdGxlQW5pbWF0aW9uKys7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblN0YXJ0KHBhbmUpKTtcclxuICAgIGlmIChvcHRpb25zLmZvY3VzICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBwb3NpdGlvbjtcclxuICAgICAgdGhpcy5fcm91dGVyLl9hY3RpdmUgPSBwYW5lO1xyXG4gICAgICB0aGlzLl90aXRsZS5zZXQocGFuZS50aXRsZSk7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCA+IDEpIHRoaXMuc2Nyb2xsVG8ocG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5uYXZpZ2F0aW9uQXJyb3dzKCk7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY29uc3RyYWN0PFQgPSBhbnk+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPixcclxuICAgIG1vZGU6IFBhbmVNb2RlLFxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICBkaWFsb2c/OiBib29sZWFuO1xyXG4gICAgICBzdHJldGNoPzogYm9vbGVhbjtcclxuICAgICAgcGF0aD86IHN0cmluZzsgcm91dGU/OiBQYW5lUm91dGU7IGljb24/OiBzdHJpbmc7IHRpdGxlPzogc3RyaW5nO1xyXG4gICAgICBncm91cD86IHN0cmluZztcclxuICAgICAgZGF0YT86IFBhcmFtTWFwO1xyXG4gICAgICBwYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgICAgaGVscD86IHN0cmluZztcclxuICAgICAgcGFyZW50PzogUGFuZVJlZjxhbnk+O1xyXG4gICAgICBxdWVyeVN0cmluZz86IHN0cmluZztcclxuICAgICAgZGlzbWlzc2FibGU/OiBib29sZWFuO1xyXG4gICAgICBleHBhbmRhYmxlPzogYm9vbGVhblxyXG4gICAgfSkge1xyXG4gICAgY29uc3QgcGFuZSA9IG5ldyBQYW5lUmVmPFQ+KGNvbXBvbmVudCwgbW9kZSwgb3B0aW9ucyk7XHJcbiAgICBwYW5lLl9pbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZShbXHJcbiAgICAgIHsgcHJvdmlkZTogUGFuZVJlZiwgdXNlVmFsdWU6IHBhbmUgfVxyXG4gICAgXSwgdGhpcy5faW5qZWN0b3IpO1xyXG4gICAgcGFuZS5fY29tbSQuc3Vic2NyaWJlKGUgPT4gdGhpcy5fYWN0aW9uPFQ+KGUsIHBhbmUpKTtcclxuICAgIHJldHVybiBwYW5lO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29tcG9uZW50XHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKi9cclxuICBwcml2YXRlIF9pbnNlcnRUYWI8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zOiB7XHJcbiAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICBncm91cD86IHN0cmluZztcclxuICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHBvbGljeT86IE9wZW5Qb2xpY3k7XHJcbiAgICBzd2FwPzogYm9vbGVhbjtcclxuICAgIGZvY3VzPzogYm9vbGVhbjtcclxuICB9KSB7XHJcbiAgICBjb25zdCB7IHBvbGljeSB9ID0gb3B0aW9ucyxcclxuICAgICAgZGlhbG9nID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuRGlhbG9nKSA9PSBPcGVuUG9saWN5LkRpYWxvZyxcclxuICAgICAgZXhwYW5kYWJsZSA9IChwb2xpY3kgJiBPcGVuUG9saWN5LkV4cGFuZGFibGUpID09IE9wZW5Qb2xpY3kuRXhwYW5kYWJsZSxcclxuICAgICAgZGlzbWlzc2FibGUgPSAocG9saWN5ICYgT3BlblBvbGljeS5EaXNtaXNzYWJsZSkgPT0gT3BlblBvbGljeS5EaXNtaXNzYWJsZTtcclxuXHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLl9jb25zdHJhY3Q8VD4oY29tcG9uZW50LFxyXG4gICAgICAndGFiJywge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICBkaWFsb2csXHJcbiAgICAgIGRpc21pc3NhYmxlLFxyXG4gICAgICBleHBhbmRhYmxlXHJcbiAgICB9KTtcclxuICAgIHRoaXMudGFicy5wdXNoKHRhYik7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblN0YXJ0KHRhYikpO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgaWYgKHRhYi5ncm91cCAmJiB0aGlzLmdyb3VwICE9PSB0YWIuZ3JvdXAgJiYgb3B0aW9ucy5zd2FwICE9PSBmYWxzZSkge1xyXG4gICAgICBsZXQgaSA9IDAsIHN3YXAgPSBmYWxzZTtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIGlmICh0aGlzLnRhYnNbaV0uZ3JvdXAgIT09IHRhYi5ncm91cCkge1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGhpcy50YWJzW2ldKTtcclxuICAgICAgICAgIHRoaXMudGFicy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICBzd2FwID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaSsrXHJcbiAgICAgIH0gd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKTtcclxuICAgICAgaWYgKHN3YXApIHtcclxuICAgICAgICB0aGlzLnN3YXBUYWIgPSB0aGlzLl9nZXRIaXN0b3J5U3RlcCgpO1xyXG4gICAgICAgIHRoaXMucHJldkdyb3VwID0gdGhpcy5ncm91cDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gICAgaWYgKG9wdGlvbnMuZm9jdXMgIT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggLSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgcmV0dXJuIHRhYjtcclxuICB9XHJcblxyXG4gIGd1aWRlKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZ3VpZGUuc3RhcnQobmFtZSk7XHJcbiAgfVxyXG4gIGJhY2soKSB7XHJcbiAgICB0aGlzLl9iYWNrKHRoaXMuc3dhcCk7XHJcbiAgICB0aGlzLnN3YXAgPSBudWxsO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9iYWNrKHN0ZXBzOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KG5ldyBCYWNrTmF2aWdhdGlvbigpKTtcclxuICAgIGhpc3RvcnkuZ28oc3RlcHMgLSAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXApO1xyXG4gIH1cclxuICB0YWJCYWNrKCkge1xyXG4gICAgdGhpcy5fYmFjayh0aGlzLnN3YXBUYWIpO1xyXG4gICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGVcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2FjdGlvbjxUID0gYW55PihlOiBzdHJpbmcsIHBhbmU6IFBhbmVSZWY8VD4pIHtcclxuICAgIHN3aXRjaCAoZSkge1xyXG4gICAgICBjYXNlICdmb2N1cyc6XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWYgKHBhbmUubW9kZSA9PT0gJ3RhYicpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhbmVzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoaW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICBjYXNlICdjbG9zZSc6XHJcbiAgICAgICAgaWYgKHBhbmUubW9kZSA9PT0gJ3RhYicpIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50YWJzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlVGFiKGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgICAgICAgIXRoaXMucGFuZXMubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShERUZBVUxUX1JPVVRFKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2V4cGFuZCc6XHJcbiAgICAgICAgaWYgKHBhbmUubW9kZSA9PT0gJ3RhYicpXHJcbiAgICAgICAgICB0aGlzLmV4cGFuZFRhYigpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuZXhwYW5kUGFuZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZWZyZXNoJzoge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5faGlzdG9yeSgpO1xyXG4gICAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlLCAnJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogZXNjYXBlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxyXG4gIGFzeW5jIGNvbGxhcHNlKCkge1xyXG4gICAgaWYgKCF0aGlzLnRhYnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgdGhpcy5fc3luYygpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IENvbGxhcHNlTmF2aWdhdGlvbigpKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGggJiYgIXRoaXMucGFuZXNbdGhpcy5wYW5lcy5sZW5ndGggLSAxXS5zdHJldGNoKSB7XHJcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgIGNoaWxkID0gZWwubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgICAgY2hpbGQuc3R5bGUubWluV2lkdGggPVxyXG4gICAgICAgIChlbC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBlbC5wYXJlbnRFbGVtZW50Lm9mZnNldExlZnQgLSBjaGlsZC5vZmZzZXRMZWZ0IC0gMikgKyAncHgnO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9yZXNpemUoKSB7XHJcbiAgICAvL3RoaXMudGFicy5jb25jYXQodGhpcy5wYW5lcykuZm9yRWFjaCh0ID0+IHQuX3Jlc2l6ZSQubmV4dCh7XHJcbiAgICAvL30gYXMgYW55KSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKTtcclxuICB9XHJcbiAgY2xvc2VUYWIocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgdGFiID0gdGhpcy50YWJzW3Bvc2l0aW9uXTtcclxuICAgIGxldCBldnQgPSBuZXcgTmF2aWdhdGlvbkNsb3NlKHRhYik7XHJcbiAgICB0YWIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgaWYgKGV2dC5fcHJldmVudERlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMudGFicy5zcGxpY2UocG9zaXRpb24sIDEpO1xyXG4gICAgdGhpcy5fZGVzdHJveVBhbmUodGFiKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggPyBwb3NpdGlvbiA+IDAgPyBwb3NpdGlvbiAtIDEgOiAwIDogLTE7XHJcbiAgICB0aGlzLl9zeW5jKCk7XHJcbiAgfVxyXG4gIGV4cGFuZFBhbmUoKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgdGhpcy5zd2FwID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGRvIHtcclxuICAgICAgaWYgKHRoaXMucGFuZXNbaV0gIT09IHBhbmUpIHtcclxuICAgICAgICB0aGlzLl9kZXN0cm95UGFuZSh0aGlzLnBhbmVzW2ldKTtcclxuICAgICAgICB0aGlzLnBhbmVzLnNwbGljZShpLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaSsrO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGkgPCB0aGlzLnBhbmVzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xyXG4gICAgdGhpcy5fc3luYygpO1xyXG4gICAgcGFuZS5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uRnVsbHNjcmVlbihwYW5lLl9mdWxsc2NyZWVuID0gdHJ1ZSwgcGFuZSkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9nZXRIaXN0b3J5U3RlcCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXAgOiAwO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kVGFiKCkge1xyXG4gICAgdGhpcy5zd2FwID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgICB0aGlzLnBhbmVzLmZvckVhY2gocCA9PlxyXG4gICAgICB0aGlzLl9kZXN0cm95UGFuZShwKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdO1xyXG4gICAgdGhpcy50YWJzLnNwbGljZSh0aGlzLnNlbGVjdGVkVGFiSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoMCwgdGhpcy5wYW5lcy5sZW5ndGgsIHRhYik7XHJcbiAgICB0YWIuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvbk1vZGUodGFiLl9tb2RlID0gJ3BhbmUnLCB0YWIpKTtcclxuICAgIHRhYi5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uRnVsbHNjcmVlbih0YWIuX2Z1bGxzY3JlZW4gPSB0cnVlLCB0YWIpKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoID8gMCA6IC0xO1xyXG4gICAgdGhpcy5fc3luYygpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0KHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPT09IHBvc2l0aW9uKSByZXR1cm47XHJcbiAgICBpZiAocG9zaXRpb24gPT09IC0xKSB7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCkgcG9zaXRpb24gPSB0aGlzLnBhbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgIGVsc2UgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gcG9zaXRpb247XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1twb3NpdGlvbl07XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblNlbGVjdGVkKHBhbmUpKTtcclxuICAgIHRoaXMuX3JvdXRlci5fYWN0aXZlID0gcGFuZTtcclxuICAgIHRoaXMuX3RpdGxlLnNldChwYW5lLnRpdGxlKTtcclxuICB9XHJcbiAgYXN5bmMgcmVtb3ZlQXQocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbcG9zaXRpb25dO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX2Rpc21pc3MocGFuZSk7XHJcblxyXG4gICAgdGhpcy5fZGlzY2FyZFBhbmUocGFuZSk7XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uID49IHRoaXMuc2VsZWN0ZWRJbmRleClcclxuICAgICAgdGhpcy5zZWxlY3QoLTEpO1xyXG4gICAgdGhpcy5fc3luYygpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2Rpc21pc3MocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBjb25zdCBwYW5lcyA9IHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuXHJcbiAgICAgIGZpbHRlcihzID0+IHMuZGVjZW5kZW50T2YocGFuZSkgJiYgcy5yb3V0ZSAmJiBzLnJvdXRlLmNhbkRpc21pc3MpLlxyXG4gICAgICByZXZlcnNlKCk7XHJcblxyXG4gICAgcGFuZS5yb3V0ZSAmJiBwYW5lLnJvdXRlLmNhbkRpc21pc3MgJiZcclxuICAgICAgcGFuZXMucHVzaChwYW5lKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBvayA9IGF3YWl0IHRoaXMuX2Rpc21pc3NhYmxlKHBhbmVzW2ldKTtcclxuICAgICAgaWYgKCFvaykgdGhyb3cgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZGlzY2FyZFBhbmUocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLmRlY2VuZGVudE9mKHBhbmUpKS5cclxuICAgICAgcmV2ZXJzZSgpLlxyXG4gICAgICBmb3JFYWNoKHMgPT4gdGhpcy5fZGlzY2FyZFBhbmUocykpO1xyXG4gICAgdGhpcy5fZGVzdHJveVBhbmUocGFuZSk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2xlYXJQZW5kaW5nKCkge1xyXG4gICAgdGhpcy5fcGVuZGluZy5zcGxpY2UoMCwgdGhpcy5fcGVuZGluZy5sZW5ndGgpO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIGFzeW5jIF9jbGVhclBhbmVzKCkge1xyXG4gICAgYXdhaXQgdGhpcy5fZGlzbWlzc0FsbCh0aGlzLnBhbmVzKTtcclxuICAgIHRoaXMucGFuZXMuZm9yRWFjaChwID0+IHRoaXMuX2Rlc3Ryb3lQYW5lKHApKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKDAsIHRoaXMucGFuZXMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfY2xlYXJUYWJzKCkge1xyXG4gICAgYXdhaXQgdGhpcy5fZGlzbWlzc0FsbCh0aGlzLnRhYnMpO1xyXG4gICAgdGhpcy50YWJzLmZvckVhY2godCA9PiB0aGlzLl9kZXN0cm95UGFuZSh0KSk7XHJcbiAgICB0aGlzLnRhYnMuc3BsaWNlKDAsIHRoaXMudGFicy5sZW5ndGgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZXNcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9kaXNtaXNzQWxsKHBhbmVzOiBQYW5lUmVmW10pIHtcclxuICAgIGZvciAobGV0IHBhbmUgb2YgcGFuZXMuXHJcbiAgICAgIGZpbHRlcihzID0+IHMucm91dGUgJiYgcy5yb3V0ZS5jYW5EaXNtaXNzKSkge1xyXG4gICAgICBsZXQgb2sgPSBhd2FpdCB0aGlzLl9kaXNtaXNzYWJsZShwYW5lKTtcclxuICAgICAgaWYgKCFvaylcclxuICAgICAgICB0aHJvdyAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZGlzbWlzc2FibGUocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBjb25zdCB7IGluc3RhbmNlLCByb3V0ZTogeyBjYW5EaXNtaXNzIH0gfSA9IHBhbmU7XHJcbiAgICBjb25zdCBkaXNtaXNzYWJsZSA9IHRoaXMuX2luamVjdG9yLmdldChjYW5EaXNtaXNzKSBhcyBDYW5EaXNtaXNzPGFueT47XHJcbiAgICBjb25zdCBvayA9IGRpc21pc3NhYmxlLm9uRGlzbWlzcyhpbnN0YW5jZSk7XHJcbiAgICBpZiAoaXNCb29sZWFuKG9rKSlcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShvayk7XHJcbiAgICBlbHNlIGlmIChpc1Byb21pc2Uob2spKVxyXG4gICAgICByZXR1cm4gb2s7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiBvay50b1Byb21pc2UoKTtcclxuICB9XHJcbiAgc2Nyb2xsVG8oaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2NoaWxkcmVuLml0ZW0oaW5kZXgpIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgaXRlbSAmJiBpdGVtLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBpbmxpbmU6ICdlbmQnLCBibG9jazogJ2VuZCcgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBfY2hpbGRyZW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wYW5lLWNvbnRlbnQnKTtcclxuICB9XHJcbiAgZG9uZSgpIHtcclxuICAgIHRoaXMubmF2aWdhdGlvbkFycm93cygpO1xyXG4gICAgdGhpcy5fcmVzaXplKCk7XHJcbiAgfVxyXG4gIG5hdmlnYXRpb25BcnJvd3MoXz86IEV2ZW50KSB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHNjcm9sbExlZnQgPSBNYXRoLnJvdW5kKGNvbnRhaW5lci5zY3JvbGxMZWZ0KTtcclxuICAgIHRoaXMubmV4dCA9IHRoaXMuX3J0bCA/IGNvbnRhaW5lci5jbGllbnRXaWR0aCAtIHNjcm9sbExlZnQgPCBjb250YWluZXIuc2Nyb2xsV2lkdGggOlxyXG4gICAgICBzY3JvbGxMZWZ0ICsgY29udGFpbmVyLmNsaWVudFdpZHRoIDwgY29udGFpbmVyLnNjcm9sbFdpZHRoO1xyXG4gICAgdGhpcy5wcmV2ID0gdGhpcy5fcnRsID8gc2Nyb2xsTGVmdCA8IDAgOiBzY3JvbGxMZWZ0ID4gMDtcclxuICB9XHJcbiAgc2Nyb2xsQnkobjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsZWZ0ID0gbiAqICh0aGlzLl9ydGwgPyAtMSA6IDEpO1xyXG4gICAgdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEJ5KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBsZWZ0IH0pO1xyXG4gIH1cclxuICBmb2N1cyhpbmRleCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLl9jaGlsZHJlbi5pdGVtKGluZGV4KSBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGVsLmZvY3VzKCk7XHJcbiAgfVxyXG4gIG9uUGFuZVJlc2l6ZShwYW5lOiBQYW5lUmVmPGFueT4sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCBlbCA9IChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIGFzIEhUTUxEaXZFbGVtZW50O1xyXG5cclxuICAgIGNvbnN0IC8vIHJlbWVtYmVyIG1vdXNlIGRvd24gaW5mb1xyXG4gICAgICB3aWR0aCA9IGVsLmNsaWVudFdpZHRoLFxyXG4gICAgICBkID0gdGhpcy5fcnRsID8gLTEgOiAxO1xyXG5cclxuICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdyZXNpemluZycpO1xyXG5cclxuICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xyXG5cclxuICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gb25Nb3VzZU1vdmU7XHJcbiAgICBkb2N1bWVudC5vbm1vdXNldXAgPSAoKSA9PiB7XHJcbiAgICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xyXG4gICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIH07XHJcbiAgICBmdW5jdGlvbiBvbk1vdXNlTW92ZShlKSB7XHJcblxyXG4gICAgICBjb25zdCBkZWx0YSA9IChlLmNsaWVudFggLSBldmVudC5jbGllbnRYKSAqIGQ7XHJcbiAgICAgIGVsLnN0eWxlLndpZHRoID0gZWwuc3R5bGUubWluV2lkdGhcclxuICAgICAgICA9IE1hdGgubWF4KHdpZHRoICsgZGVsdGEsIDM1MCkgKyAncHgnO1xyXG4gICAgICBwYW5lICYmIHBhbmUuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblJlc2l6ZSh7fSBhcyBhbnksIHBhbmUpKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25UYWJSZXNpemUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IGVsID0gKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLm5leHRFbGVtZW50U2libGluZyBhcyBIVE1MRGl2RWxlbWVudDtcclxuXHJcbiAgICBjb25zdFxyXG4gICAgICBtZSA9IHRoaXMsXHJcbiAgICAgIC8vIHJlbWVtYmVyIG1vdXNlIGRvd24gaW5mb1xyXG4gICAgICB3aWR0aCA9IGVsLmNsaWVudFdpZHRoLFxyXG4gICAgICBkID0gdGhpcy5fcnRsID8gMSA6IC0xO1xyXG5cclxuICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdyZXNpemluZycpO1xyXG5cclxuICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xyXG5cclxuICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gb25Nb3VzZU1vdmU7XHJcbiAgICBkb2N1bWVudC5vbm1vdXNldXAgPSAoKSA9PiB7XHJcbiAgICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xyXG4gICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgbWUubmF2aWdhdGlvbkFycm93cygpO1xyXG4gICAgICAvL3RoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5fcmVzaXplKCk7XHJcbiAgICB9O1xyXG4gICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZSkge1xyXG5cclxuICAgICAgLy8gcHJldmVudCBuZWdhdGl2ZS1zaXplZCBlbGVtZW50c1xyXG4gICAgICBjb25zdCBkZWx0YSA9IE1hdGgubWF4KChlLmNsaWVudFggLSBldmVudC5jbGllbnRYKSAqIGQsIC13aWR0aCk7XHJcbiAgICAgIGVsLnN0eWxlLndpZHRoID0gZWwuc3R5bGUubWluV2lkdGggPSAod2lkdGggKyBkZWx0YSkgKyAncHgnO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGFicycsIGVsLnN0eWxlLndpZHRoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfZGVzdHJveVBhbmUocGFuZTogUGFuZVJlZikge1xyXG4gICAgcGFuZS5fZGVzdHJveSgpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25FbmQocGFuZSkpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgUEFORV9QQVJBTVNfUkVHRVggPSAvKDpbXFx3XFwtXSspL2c7XHJcblxyXG5mdW5jdGlvbiBwcmVwYXJlUm91dGVzKHJvdXRlczogUGFuZVJvdXRlW10sIHRyZWVQYXRoPzogc3RyaW5nKTogRXh0ZW5kZWRSb3V0ZVtdIHtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgbGV0IHJvdXRlID0gcm91dGVzW2ldLCBmdWxsUGF0aCA9ICh0cmVlUGF0aCA/ICh0cmVlUGF0aCArICcvJykgOiAnJykgKyByb3V0ZS5wYXRoO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24ocm91dGUsIHtcclxuICAgICAgZnVsbFBhdGgsXHJcbiAgICAgIHJlZ0V4OiBuZXcgUmVnRXhwKCdeJyArIGZ1bGxQYXRoLlxyXG4gICAgICAgIHJlcGxhY2UoJy8nLCAnXFxcXC8nKS5cclxuICAgICAgICByZXBsYWNlKFBBTkVfUEFSQU1TX1JFR0VYLCBlID0+IGAoPzwke2Uuc3Vic3RyKDEpfT5bXFxcXHdAXFxcXC1dKilgKSlcclxuICAgIH0pO1xyXG4gICAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCBjaGlsZHJlbiA9IHByZXBhcmVSb3V0ZXMocm91dGUuY2hpbGRyZW4sIGZ1bGxQYXRoKTtcclxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKylcclxuICAgICAgICBPYmplY3QuYXNzaWduKGNoaWxkcmVuW2pdLCB7XHJcbiAgICAgICAgICBwYXJlbnQ6IHJvdXRlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByb3V0ZXMgYXMgRXh0ZW5kZWRSb3V0ZVtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRXh0ZW5kZWRSb3V0ZSBleHRlbmRzIFBhbmVSb3V0ZSB7XHJcbiAgZnVsbFBhdGg6IHN0cmluZztcclxuICByZWdFeDogUmVnRXhwO1xyXG4gIHBhcmVudD86IEV4dGVuZGVkUm91dGU7XHJcbiAgY2hpbGRyZW4/OiBFeHRlbmRlZFJvdXRlW107XHJcbn1cclxuaW50ZXJmYWNlIEhpc3RvcnlTdGF0ZSB7XHJcbiAgYml6ZG9jOiB0cnVlO1xyXG4gIHN0ZXA6IG51bWJlcjtcclxuICBzd2FwPzogbnVtYmVyO1xyXG4gIHN3YXBUYWI/OiBudW1iZXI7XHJcbiAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgcHJldkdyb3VwPzogc3RyaW5nO1xyXG4gIHBhbmVzOiBhbnlbXTtcclxuICB0YWJzOiBhbnlbXTtcclxuICBzZWxlY3RlZFRhYkluZGV4PzogbnVtYmVyO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJwYW5lc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJyb3dcIiAoY2xpY2spPVwic2Nyb2xsQnkoLTQwMClcIiBtYXRSaXBwbGUgW21hdFJpcHBsZVVuYm91bmRlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ29sb3JdPVwiYWNjZW50XCJcclxuICAgICAgICpuZ0lmPVwicHJldlwiPlxyXG4gICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgIGFycm93X2JhY2tfaW9zXHJcbiAgICA8L2k+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInBhbmVzLXRpdGxlXCIgW0B0aXRsZV09XCJ0aXRsZUFuaW1hdGlvblwiPlxyXG4gICAgPGgxPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYmFjaygpXCIgKm5nSWY9XCJzd2FwXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0JhY2snfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5hcnJvd19jaXJjbGVfbGVmdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgcGFuZXM7IGxldCBmaXJzdCA9IGZpcnN0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJicmVhZGNydW1ic1wiICpuZ0lmPVwiIWZpcnN0XCI+XFw8L3NwYW4+XHJcbiAgICAgICAge3twLnRpdGxlfX1cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJndWlkZShwYW5lc1swXS5ndWlkZSlcIiAqbmdJZj1cInBhbmVzWzBdPy5ndWlkZVwiIFtiaXpkb2NUb29sdGlwXT1cIidIZWxwJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+aGVscDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L2gxPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8Yml6ZG9jLXF1aWNrdG9vbHM+PC9iaXpkb2MtcXVpY2t0b29scz5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICNwYW5uaW5nIGNsYXNzPVwicGFuZXMtY29udGFpbmVyXCJcclxuICAgICAgIGNka1Njcm9sbGFibGVcclxuICAgICAgIEBwYW5lc1xyXG4gICAgICAgKHNjcm9sbCk9XCJuYXZpZ2F0aW9uQXJyb3dzKCRldmVudClcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgcGFuZXM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgPGRpdiAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4ICE9PSBpICYmICFkcmFnZ2luZyAmJiBzZWxlY3QoaSlcIlxyXG4gICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoaSlcIlxyXG4gICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRJbmRleCA9PT0gaVwiIGNsYXNzPVwicGFuZS1jb250ZW50XCIgQHBhbmU+XHJcbiAgICAgICAgPG5neC1jb21wb25lbnQtb3V0bGV0IFt0eXBlXT1cInAuY29tcG9uZW50XCIgW2luamVjdG9yXT1cInAuaW5qZWN0b3JcIiAoY3JlYXRlKT1cInAuX2luc3RhbmNlID0gJGV2ZW50XCI+PC9uZ3gtY29tcG9uZW50LW91dGxldD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lLXNlcGFyYXRvclwiICpuZ0lmPVwiaSA8IHBhbmVzLmxlbmd0aCAtIDFcIiAobW91c2Vkb3duKT1cIm9uUGFuZVJlc2l6ZShwLCAkZXZlbnQpXCI+Jm5ic3A7PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiYmFja2Ryb3BcIiAqbmdJZj1cImRpYWxvZ1wiIChjbGljayk9XCJjbG9zZVRhYihzZWxlY3RlZFRhYkluZGV4KVwiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJyb3cgZm9yd2FyZFwiXHJcbiAgICAgICAqbmdJZj1cIm5leHRcIj5cclxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tcnRsLW1pcnJvclwiIG1hdFJpcHBsZSBbbWF0UmlwcGxlVW5ib3VuZGVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVSYWRpdXNdPVwiMzBcIiBbbWF0UmlwcGxlQ29sb3JdPVwiYWNjZW50XCJcclxuICAgICAgIChjbGljayk9XCJzY3JvbGxCeSg0MDApXCI+XHJcbiAgICAgIGFycm93X2ZvcndhcmRfaW9zXHJcbiAgICA8L2k+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwidGFicy5sZW5ndGhcIj5cclxuICA8ZGl2IGNsYXNzPVwidGFicy1zZXBhcmF0b3JcIiAobW91c2Vkb3duKT1cIm9uVGFiUmVzaXplKCRldmVudClcIj4mbmJzcDs8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MTggdGFic1wiIFtAdGFic109XCJ0YWJzQW5pbWF0aW9uXCIgKEB0YWJzLmRvbmUpPVwiZG9uZSgpXCIgI3RhYmluZz5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGFicy10aXRsZVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidGFiQmFjaygpXCIgKm5nSWY9XCJzd2FwVGFiXCIgW2JpemRvY1Rvb2x0aXBdPVwicHJldkdyb3VwIHx8ICgnQmFjayd8dHJhbnNsYXRlKVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5hcnJvd19iYWNrPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPGgyPnt7Z3JvdXB9fTwvaDI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJleHBhbmRUYWIoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidFeHBhbmQnfCB0cmFuc2xhdGVcIj48bWF0LWljb24gaW5saW5lPVwidHJ1ZVwiIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPm9wZW5faW5fZnVsbDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDwhLS0qbmdJZj1cInNlbGVjdGVkVGFiSW5kZXggPD08IC0xICYmIHRhYnNbc2VsZWN0ZWRUYWJJbmRleF0uZXhwYW5kYWJsZVwiLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNvbGxhcHNlKClcIiBiaXpkb2NUb29sdGlwPVwiRXNjXCI+PG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5hdiBtYXQtdGFiLW5hdi1iYXIgY29sb3I9XCJhY2NlbnRcIiBbZGlzYWJsZVBhZ2luYXRpb25dPVwidHJ1ZVwiPlxyXG4gICAgICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPVwibGV0IHQgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwibWF0LXRhYi1saW5rXCJcclxuICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVGFiSW5kZXggPSBpXCJcclxuICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIFttYXRCYWRnZV09XCJ0LmJhZGdlXCIgW21hdEJhZGdlSGlkZGVuXT1cIiF0LmJhZGdlXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIiBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+e3t0Lmljb259fTwvbWF0LWljb24+Jm5ic3A7XHJcbiAgICAgICAge3t0LnRpdGxlfX1cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJ0LmRpc21pc3NhYmxlXCIgKGNsaWNrKT1cImNsb3NlVGFiKGkpXCIgY2xhc3M9XCJ0b29sXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwhLS1pbmxpbmU9XCJ0cnVlXCItLT5cclxuICAgICAgPC9hPlxyXG4gICAgPC9uYXY+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0IG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIiBbc3R5bGUuZGlzcGxheV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpID8gJyc6ICdub25lJ1wiIGNsYXNzPVwidGFiXCIgW0B0YWJdPVwic2VsZWN0ZWRUYWJJbmRleFwiPlxyXG4gICAgICA8bmd4LWNvbXBvbmVudC1vdXRsZXQgW3R5cGVdPVwidC5jb21wb25lbnRcIiBbaW5qZWN0b3JdPVwidC5pbmplY3RvclwiIChjcmVhdGUpPVwidC5faW5zdGFuY2UgPSAkZXZlbnRcIj48L25neC1jb21wb25lbnQtb3V0bGV0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
|