@hmcts/media-viewer 2.9.5 → 2.10.0
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/assets/all.scss +1 -1
- package/assets/sass/tags.scss +1 -1
- package/esm2020/hmcts-media-viewer.mjs +5 -0
- package/esm2020/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.mjs +116 -0
- package/esm2020/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.mjs +109 -0
- package/esm2020/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.mjs +75 -0
- package/esm2020/lib/annotations/annotation-set/annotation-set.component.mjs +50 -0
- package/esm2020/lib/annotations/annotation-set/annotation-view/annotation-view.component.mjs +94 -0
- package/esm2020/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.mjs +116 -0
- package/esm2020/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.mjs +118 -0
- package/esm2020/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.mjs +87 -0
- package/esm2020/lib/annotations/annotations.module.mjs +158 -0
- package/esm2020/lib/annotations/comment-set/comment/comment.component.mjs +176 -0
- package/esm2020/lib/annotations/comment-set/comment/comment.service.mjs +50 -0
- package/esm2020/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.mjs +47 -0
- package/esm2020/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.mjs +31 -0
- package/esm2020/lib/annotations/comment-set/comment-navigate/comments-navigate.component.mjs +91 -0
- package/esm2020/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.mjs +61 -0
- package/esm2020/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.mjs +53 -0
- package/esm2020/lib/annotations/comment-set/comment-set-header/comment-set-header.component.mjs +68 -0
- package/esm2020/lib/annotations/comment-set/comment-set-render.service.mjs +54 -0
- package/esm2020/lib/annotations/comment-set/comment-set.component.mjs +123 -0
- package/esm2020/lib/annotations/comments-summary/comments-summary.component.mjs +113 -0
- package/esm2020/lib/annotations/pipes/date/date.pipe.mjs +26 -0
- package/esm2020/lib/annotations/pipes/filter/filter.pipe.mjs +32 -0
- package/esm2020/lib/annotations/pipes/unsnake/unsnake.pipe.mjs +16 -0
- package/esm2020/lib/annotations/services/annotation-api/annotation-api.service.mjs +58 -0
- package/esm2020/lib/annotations/services/bookmarks-api/bookmarks-api.service.mjs +45 -0
- package/esm2020/lib/annotations/services/tags/tags.services.mjs +41 -0
- package/esm2020/lib/annotations/tags/tags.component.mjs +53 -0
- package/esm2020/lib/bookmark/components/bookmark-icons.component.mjs +25 -0
- package/esm2020/lib/icp/confirm-exit/confirm-action-dialog.component.mjs +22 -0
- package/esm2020/lib/icp/icp-follower.service.mjs +60 -0
- package/esm2020/lib/icp/icp-presenter.service.mjs +55 -0
- package/esm2020/lib/icp/icp-session-api.service.mjs +21 -0
- package/esm2020/lib/icp/icp-update.service.mjs +57 -0
- package/esm2020/lib/icp/icp.service.mjs +93 -0
- package/esm2020/lib/icp/participants-list/participants-list.component.mjs +30 -0
- package/esm2020/lib/icp/socket.service.mjs +118 -0
- package/esm2020/lib/media-viewer.component.mjs +244 -0
- package/esm2020/lib/media-viewer.module.mjs +151 -0
- package/{esm2015/lib/print.service.js → esm2020/lib/print.service.mjs} +9 -7
- package/esm2020/lib/redaction/components/redaction.component.mjs +91 -0
- package/esm2020/lib/redaction/services/redaction-api.service.mjs +50 -0
- package/esm2020/lib/shared/gov-uk-date/gov-uk-date.component.mjs +28 -0
- package/esm2020/lib/shared/gov-uk-error-message/gov-uk-error-message.component.mjs +34 -0
- package/esm2020/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.mjs +63 -0
- package/esm2020/lib/shared/gov-uk-label/gov-uk-label.component.mjs +44 -0
- package/esm2020/lib/shared/shared.module.mjs +53 -0
- package/esm2020/lib/shared/util/services/number.helper.service.mjs +23 -0
- package/{esm2015/lib/store/bookmarks-store-utils.js → esm2020/lib/store/bookmarks-store-utils.mjs} +1 -3
- package/esm2020/lib/store/effects/annotation.effects.mjs +44 -0
- package/esm2020/lib/store/effects/bookmarks.effects.mjs +44 -0
- package/esm2020/lib/store/effects/document.effects.mjs +44 -0
- package/esm2020/lib/store/effects/icp.effects.mjs +26 -0
- package/esm2020/lib/store/effects/redaction.effects.mjs +67 -0
- package/esm2020/lib/store/reducers/annotations.reducer.mjs +183 -0
- package/esm2020/lib/store/reducers/bookmarks.reducer.mjs +116 -0
- package/esm2020/lib/store/reducers/document.reducer.mjs +135 -0
- package/esm2020/lib/store/reducers/icp.reducer.mjs +56 -0
- package/esm2020/lib/store/reducers/redaction.reducer.mjs +116 -0
- package/esm2020/lib/store/reducers/tags.reducer.mjs +93 -0
- package/esm2020/lib/store/selectors/annotation.selectors.mjs +81 -0
- package/esm2020/lib/store/selectors/bookmark.selectors.mjs +36 -0
- package/{esm2015/lib/store/selectors/document.selectors.js → esm2020/lib/store/selectors/document.selectors.mjs} +3 -6
- package/esm2020/lib/store/selectors/icp.selectors.mjs +13 -0
- package/{esm2015/lib/store/selectors/redaction.selectors.js → esm2020/lib/store/selectors/redaction.selectors.mjs} +6 -10
- package/{esm2015/lib/store/selectors/tag.selectors.js → esm2020/lib/store/selectors/tag.selectors.mjs} +4 -7
- package/esm2020/lib/store/store-utils.mjs +131 -0
- package/esm2020/lib/toolbar/icp-toolbar/icp-toolbar.component.mjs +41 -0
- package/esm2020/lib/toolbar/main-toolbar/main-toolbar.component.mjs +188 -0
- package/esm2020/lib/toolbar/redaction-search-bar/redaction-search-bar.component.mjs +199 -0
- package/esm2020/lib/toolbar/redaction-toolbar/redaction-toolbar.component.mjs +66 -0
- package/esm2020/lib/toolbar/search-bar/search-bar.component.mjs +105 -0
- package/esm2020/lib/toolbar/toolbar-button-visibility.service.mjs +94 -0
- package/{esm2015/lib/toolbar/toolbar-event.service.js → esm2020/lib/toolbar/toolbar-event.service.mjs} +7 -5
- package/esm2020/lib/toolbar/toolbar.module.mjs +67 -0
- package/esm2020/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.mjs +78 -0
- package/esm2020/lib/viewers/convertible-content-viewer/document-conversion-api.service.mjs +22 -0
- package/esm2020/lib/viewers/grab-n-drag.directive.mjs +57 -0
- package/esm2020/lib/viewers/image-viewer/image-viewer.component.mjs +166 -0
- package/esm2020/lib/viewers/multimedia-player/multimedia-player.component.mjs +58 -0
- package/esm2020/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.mjs +193 -0
- package/esm2020/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.mjs +40 -0
- package/esm2020/lib/viewers/pdf-viewer/pdf-viewer.component.mjs +230 -0
- package/esm2020/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.mjs +192 -0
- package/esm2020/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.mjs +49 -0
- package/esm2020/lib/viewers/pdf-viewer/side-bar/side-bar.component.mjs +77 -0
- package/esm2020/lib/viewers/rotation-persist/rotation-api.service.mjs +27 -0
- package/esm2020/lib/viewers/rotation-persist/rotation-persist.directive.mjs +64 -0
- package/esm2020/lib/viewers/unsupported-viewer/unsupported-viewer.component.mjs +49 -0
- package/esm2020/lib/viewers/viewer-event.service.mjs +30 -0
- package/esm2020/lib/viewers/viewer-util.service.mjs +20 -0
- package/esm2020/public_api.mjs +32 -0
- package/fesm2015/hmcts-media-viewer.mjs +6602 -0
- package/fesm2015/hmcts-media-viewer.mjs.map +1 -0
- package/fesm2020/hmcts-media-viewer.mjs +6893 -0
- package/fesm2020/hmcts-media-viewer.mjs.map +1 -0
- package/hmcts-media-viewer.d.ts.map +1 -1
- package/index.d.ts +6 -0
- package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts +3 -0
- package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts.map +1 -1
- package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.d.ts +3 -0
- package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.d.ts.map +1 -1
- package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts +3 -0
- package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts.map +1 -1
- package/lib/annotations/annotation-set/annotation-set.component.d.ts +3 -0
- package/lib/annotations/annotation-set/annotation-set.component.d.ts.map +1 -1
- package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts +3 -0
- package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts.map +1 -1
- package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts +5 -2
- package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts.map +1 -1
- package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts +3 -0
- package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts.map +1 -1
- package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts +3 -0
- package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts.map +1 -1
- package/lib/annotations/annotations.module.d.ts +32 -0
- package/lib/annotations/annotations.module.d.ts.map +1 -1
- package/lib/annotations/comment-set/comment/comment.component.d.ts +3 -0
- package/lib/annotations/comment-set/comment/comment.component.d.ts.map +1 -1
- package/lib/annotations/comment-set/comment/comment.service.d.ts +5 -2
- package/lib/annotations/comment-set/comment/comment.service.d.ts.map +1 -1
- package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts +3 -0
- package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts.map +1 -1
- package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.d.ts +3 -0
- package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.d.ts.map +1 -1
- package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts +3 -0
- package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts.map +1 -1
- package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.d.ts +6 -3
- package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.d.ts.map +1 -1
- package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts +3 -0
- package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts.map +1 -1
- package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts +3 -0
- package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts.map +1 -1
- package/lib/annotations/comment-set/comment-set-render.service.d.ts +3 -0
- package/lib/annotations/comment-set/comment-set-render.service.d.ts.map +1 -1
- package/lib/annotations/comment-set/comment-set.component.d.ts +3 -0
- package/lib/annotations/comment-set/comment-set.component.d.ts.map +1 -1
- package/lib/annotations/comments-summary/comments-summary.component.d.ts +6 -3
- package/lib/annotations/comments-summary/comments-summary.component.d.ts.map +1 -1
- package/lib/annotations/pipes/date/date.pipe.d.ts +3 -0
- package/lib/annotations/pipes/date/date.pipe.d.ts.map +1 -1
- package/lib/annotations/pipes/filter/filter.pipe.d.ts +3 -0
- package/lib/annotations/pipes/filter/filter.pipe.d.ts.map +1 -1
- package/lib/annotations/pipes/unsnake/unsnake.pipe.d.ts +3 -0
- package/lib/annotations/pipes/unsnake/unsnake.pipe.d.ts.map +1 -1
- package/lib/annotations/services/annotation-api/annotation-api.service.d.ts +3 -0
- package/lib/annotations/services/annotation-api/annotation-api.service.d.ts.map +1 -1
- package/lib/annotations/services/bookmarks-api/bookmarks-api.service.d.ts +3 -0
- package/lib/annotations/services/bookmarks-api/bookmarks-api.service.d.ts.map +1 -1
- package/lib/annotations/services/tags/tags.services.d.ts +3 -0
- package/lib/annotations/services/tags/tags.services.d.ts.map +1 -1
- package/lib/annotations/tags/tags.component.d.ts +6 -3
- package/lib/annotations/tags/tags.component.d.ts.map +1 -1
- package/lib/bookmark/components/bookmark-icons.component.d.ts +3 -0
- package/lib/bookmark/components/bookmark-icons.component.d.ts.map +1 -1
- package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts +3 -0
- package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts.map +1 -1
- package/lib/icp/icp-follower.service.d.ts +3 -0
- package/lib/icp/icp-follower.service.d.ts.map +1 -1
- package/lib/icp/icp-presenter.service.d.ts +3 -0
- package/lib/icp/icp-presenter.service.d.ts.map +1 -1
- package/lib/icp/icp-session-api.service.d.ts +3 -0
- package/lib/icp/icp-session-api.service.d.ts.map +1 -1
- package/lib/icp/icp-update.service.d.ts +3 -0
- package/lib/icp/icp-update.service.d.ts.map +1 -1
- package/lib/icp/icp.service.d.ts +3 -0
- package/lib/icp/icp.service.d.ts.map +1 -1
- package/lib/icp/participants-list/participants-list.component.d.ts +3 -0
- package/lib/icp/participants-list/participants-list.component.d.ts.map +1 -1
- package/lib/icp/socket.service.d.ts +3 -0
- package/lib/icp/socket.service.d.ts.map +1 -1
- package/lib/media-viewer.component.d.ts +3 -0
- package/lib/media-viewer.component.d.ts.map +1 -1
- package/lib/media-viewer.module.d.ts +31 -0
- package/lib/media-viewer.module.d.ts.map +1 -1
- package/lib/print.service.d.ts +3 -0
- package/lib/print.service.d.ts.map +1 -1
- package/lib/redaction/components/redaction.component.d.ts +3 -0
- package/lib/redaction/components/redaction.component.d.ts.map +1 -1
- package/lib/redaction/services/redaction-api.service.d.ts +3 -0
- package/lib/redaction/services/redaction-api.service.d.ts.map +1 -1
- package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts +3 -0
- package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts.map +1 -1
- package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts +3 -0
- package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts.map +1 -1
- package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts +3 -0
- package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts.map +1 -1
- package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts +3 -0
- package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts.map +1 -1
- package/lib/shared/shared.module.d.ts +11 -0
- package/lib/shared/shared.module.d.ts.map +1 -1
- package/lib/shared/util/services/number.helper.service.d.ts +3 -0
- package/lib/shared/util/services/number.helper.service.d.ts.map +1 -1
- package/lib/store/actions/annotation.actions.d.ts +1 -1
- package/lib/store/actions/annotation.actions.d.ts.map +1 -1
- package/lib/store/actions/bookmark.actions.d.ts +1 -1
- package/lib/store/actions/bookmark.actions.d.ts.map +1 -1
- package/lib/store/actions/document.actions.d.ts +1 -1
- package/lib/store/actions/document.actions.d.ts.map +1 -1
- package/lib/store/actions/icp.actions.d.ts +1 -1
- package/lib/store/actions/icp.actions.d.ts.map +1 -1
- package/lib/store/actions/redaction.actions.d.ts +1 -1
- package/lib/store/actions/redaction.actions.d.ts.map +1 -1
- package/lib/store/actions/tag.actions.d.ts +1 -1
- package/lib/store/actions/tag.actions.d.ts.map +1 -1
- package/lib/store/effects/annotation.effects.d.ts +6 -3
- package/lib/store/effects/annotation.effects.d.ts.map +1 -1
- package/lib/store/effects/bookmarks.effects.d.ts +8 -5
- package/lib/store/effects/bookmarks.effects.d.ts.map +1 -1
- package/lib/store/effects/document.effects.d.ts +6 -3
- package/lib/store/effects/document.effects.d.ts.map +1 -1
- package/lib/store/effects/icp.effects.d.ts +5 -2
- package/lib/store/effects/icp.effects.d.ts.map +1 -1
- package/lib/store/effects/redaction.effects.d.ts +9 -6
- package/lib/store/effects/redaction.effects.d.ts.map +1 -1
- package/lib/store/selectors/annotation.selectors.d.ts +70 -27
- package/lib/store/selectors/annotation.selectors.d.ts.map +1 -1
- package/lib/store/selectors/bookmark.selectors.d.ts +18 -10
- package/lib/store/selectors/bookmark.selectors.d.ts.map +1 -1
- package/lib/store/selectors/document.selectors.d.ts +13 -11
- package/lib/store/selectors/document.selectors.d.ts.map +1 -1
- package/lib/store/selectors/icp.selectors.d.ts +9 -8
- package/lib/store/selectors/icp.selectors.d.ts.map +1 -1
- package/lib/store/selectors/redaction.selectors.d.ts +17 -11
- package/lib/store/selectors/redaction.selectors.d.ts.map +1 -1
- package/lib/store/selectors/tag.selectors.d.ts +14 -12
- package/lib/store/selectors/tag.selectors.d.ts.map +1 -1
- package/lib/toolbar/icp-toolbar/icp-toolbar.component.d.ts +3 -0
- package/lib/toolbar/icp-toolbar/icp-toolbar.component.d.ts.map +1 -1
- package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts +3 -0
- package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts.map +1 -1
- package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.d.ts +5 -2
- package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.d.ts.map +1 -1
- package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts +3 -0
- package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts.map +1 -1
- package/lib/toolbar/search-bar/search-bar.component.d.ts +3 -0
- package/lib/toolbar/search-bar/search-bar.component.d.ts.map +1 -1
- package/lib/toolbar/toolbar-button-visibility.service.d.ts +3 -0
- package/lib/toolbar/toolbar-button-visibility.service.d.ts.map +1 -1
- package/lib/toolbar/toolbar-event.service.d.ts +5 -2
- package/lib/toolbar/toolbar-event.service.d.ts.map +1 -1
- package/lib/toolbar/toolbar.module.d.ts +13 -0
- package/lib/toolbar/toolbar.module.d.ts.map +1 -1
- package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts +3 -0
- package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts.map +1 -1
- package/lib/viewers/convertible-content-viewer/document-conversion-api.service.d.ts +3 -0
- package/lib/viewers/convertible-content-viewer/document-conversion-api.service.d.ts.map +1 -1
- package/lib/viewers/grab-n-drag.directive.d.ts +3 -0
- package/lib/viewers/grab-n-drag.directive.d.ts.map +1 -1
- package/lib/viewers/image-viewer/image-viewer.component.d.ts +3 -0
- package/lib/viewers/image-viewer/image-viewer.component.d.ts.map +1 -1
- package/lib/viewers/multimedia-player/multimedia-player.component.d.ts +3 -0
- package/lib/viewers/multimedia-player/multimedia-player.component.d.ts.map +1 -1
- package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.d.ts +3 -0
- package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.d.ts.map +1 -1
- package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts +3 -0
- package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts.map +1 -1
- package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts +5 -2
- package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts.map +1 -1
- package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts +3 -0
- package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts.map +1 -1
- package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts +3 -0
- package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts.map +1 -1
- package/lib/viewers/rotation-persist/rotation-api.service.d.ts +3 -0
- package/lib/viewers/rotation-persist/rotation-api.service.d.ts.map +1 -1
- package/lib/viewers/rotation-persist/rotation-persist.directive.d.ts +3 -0
- package/lib/viewers/rotation-persist/rotation-persist.directive.d.ts.map +1 -1
- package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts +3 -0
- package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts.map +1 -1
- package/lib/viewers/viewer-event.service.d.ts +3 -0
- package/lib/viewers/viewer-event.service.d.ts.map +1 -1
- package/lib/viewers/viewer-util.service.d.ts +3 -0
- package/lib/viewers/viewer-util.service.d.ts.map +1 -1
- package/package.json +34 -22
- package/public_api.d.ts +1 -0
- package/public_api.d.ts.map +1 -1
- package/bundles/hmcts-media-viewer.umd.js +0 -7552
- package/bundles/hmcts-media-viewer.umd.js.map +0 -1
- package/bundles/hmcts-media-viewer.umd.min.js +0 -2
- package/bundles/hmcts-media-viewer.umd.min.js.map +0 -1
- package/esm2015/hmcts-media-viewer.js +0 -64
- package/esm2015/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.js +0 -113
- package/esm2015/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.js +0 -111
- package/esm2015/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.js +0 -61
- package/esm2015/lib/annotations/annotation-set/annotation-set.component.js +0 -47
- package/esm2015/lib/annotations/annotation-set/annotation-view/annotation-view.component.js +0 -86
- package/esm2015/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.js +0 -108
- package/esm2015/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.js +0 -107
- package/esm2015/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.js +0 -81
- package/esm2015/lib/annotations/annotations.module.js +0 -103
- package/esm2015/lib/annotations/comment-set/comment/comment.component.js +0 -162
- package/esm2015/lib/annotations/comment-set/comment/comment.service.js +0 -47
- package/esm2015/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.js +0 -48
- package/esm2015/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.js +0 -31
- package/esm2015/lib/annotations/comment-set/comment-navigate/comments-navigate.component.js +0 -95
- package/esm2015/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.js +0 -60
- package/esm2015/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.js +0 -53
- package/esm2015/lib/annotations/comment-set/comment-set-header/comment-set-header.component.js +0 -68
- package/esm2015/lib/annotations/comment-set/comment-set-render.service.js +0 -51
- package/esm2015/lib/annotations/comment-set/comment-set.component.js +0 -110
- package/esm2015/lib/annotations/comments-summary/comments-summary.component.js +0 -106
- package/esm2015/lib/annotations/pipes/date/date.pipe.js +0 -22
- package/esm2015/lib/annotations/pipes/filter/filter.pipe.js +0 -28
- package/esm2015/lib/annotations/pipes/unsnake/unsnake.pipe.js +0 -12
- package/esm2015/lib/annotations/services/annotation-api/annotation-api.service.js +0 -59
- package/esm2015/lib/annotations/services/bookmarks-api/bookmarks-api.service.js +0 -46
- package/esm2015/lib/annotations/services/tags/tags.services.js +0 -36
- package/esm2015/lib/annotations/tags/tags.component.js +0 -52
- package/esm2015/lib/bookmark/components/bookmark-icons.component.js +0 -26
- package/esm2015/lib/icp/confirm-exit/confirm-action-dialog.component.js +0 -25
- package/esm2015/lib/icp/icp-follower.service.js +0 -63
- package/esm2015/lib/icp/icp-presenter.service.js +0 -57
- package/esm2015/lib/icp/icp-session-api.service.js +0 -22
- package/esm2015/lib/icp/icp-update.service.js +0 -56
- package/esm2015/lib/icp/icp.service.js +0 -98
- package/esm2015/lib/icp/participants-list/participants-list.component.js +0 -32
- package/esm2015/lib/icp/socket.service.js +0 -117
- package/esm2015/lib/media-viewer.component.js +0 -210
- package/esm2015/lib/media-viewer.module.js +0 -102
- package/esm2015/lib/redaction/components/redaction.component.js +0 -97
- package/esm2015/lib/redaction/services/redaction-api.service.js +0 -51
- package/esm2015/lib/shared/gov-uk-date/gov-uk-date.component.js +0 -21
- package/esm2015/lib/shared/gov-uk-error-message/gov-uk-error-message.component.js +0 -27
- package/esm2015/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.js +0 -42
- package/esm2015/lib/shared/gov-uk-label/gov-uk-label.component.js +0 -32
- package/esm2015/lib/shared/shared.module.js +0 -34
- package/esm2015/lib/shared/util/services/number.helper.service.js +0 -23
- package/esm2015/lib/store/effects/annotation.effects.js +0 -58
- package/esm2015/lib/store/effects/bookmarks.effects.js +0 -66
- package/esm2015/lib/store/effects/document.effects.js +0 -59
- package/esm2015/lib/store/effects/icp.effects.js +0 -37
- package/esm2015/lib/store/effects/redaction.effects.js +0 -94
- package/esm2015/lib/store/reducers/annotations.reducer.js +0 -115
- package/esm2015/lib/store/reducers/bookmarks.reducer.js +0 -80
- package/esm2015/lib/store/reducers/document.reducer.js +0 -100
- package/esm2015/lib/store/reducers/icp.reducer.js +0 -40
- package/esm2015/lib/store/reducers/redaction.reducer.js +0 -75
- package/esm2015/lib/store/reducers/tags.reducer.js +0 -67
- package/esm2015/lib/store/selectors/annotation.selectors.js +0 -84
- package/esm2015/lib/store/selectors/bookmark.selectors.js +0 -41
- package/esm2015/lib/store/selectors/icp.selectors.js +0 -18
- package/esm2015/lib/store/store-utils.js +0 -105
- package/esm2015/lib/toolbar/icp-toolbar/icp-toolbar.component.js +0 -43
- package/esm2015/lib/toolbar/main-toolbar/main-toolbar.component.js +0 -175
- package/esm2015/lib/toolbar/redaction-search-bar/redaction-search-bar.component.js +0 -201
- package/esm2015/lib/toolbar/redaction-toolbar/redaction-toolbar.component.js +0 -70
- package/esm2015/lib/toolbar/search-bar/search-bar.component.js +0 -102
- package/esm2015/lib/toolbar/toolbar-button-visibility.service.js +0 -92
- package/esm2015/lib/toolbar/toolbar.module.js +0 -45
- package/esm2015/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.js +0 -72
- package/esm2015/lib/viewers/convertible-content-viewer/document-conversion-api.service.js +0 -23
- package/esm2015/lib/viewers/grab-n-drag.directive.js +0 -51
- package/esm2015/lib/viewers/image-viewer/image-viewer.component.js +0 -164
- package/esm2015/lib/viewers/multimedia-player/multimedia-player.component.js +0 -54
- package/esm2015/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.js +0 -203
- package/esm2015/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.js +0 -43
- package/esm2015/lib/viewers/pdf-viewer/pdf-viewer.component.js +0 -220
- package/esm2015/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.js +0 -179
- package/esm2015/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.js +0 -44
- package/esm2015/lib/viewers/pdf-viewer/side-bar/side-bar.component.js +0 -72
- package/esm2015/lib/viewers/rotation-persist/rotation-api.service.js +0 -28
- package/esm2015/lib/viewers/rotation-persist/rotation-persist.directive.js +0 -67
- package/esm2015/lib/viewers/unsupported-viewer/unsupported-viewer.component.js +0 -47
- package/esm2015/lib/viewers/viewer-event.service.js +0 -30
- package/esm2015/lib/viewers/viewer-util.service.js +0 -23
- package/esm2015/public_api.js +0 -31
- package/fesm2015/hmcts-media-viewer.js +0 -6585
- package/fesm2015/hmcts-media-viewer.js.map +0 -1
- package/hmcts-media-viewer.d.ts +0 -69
- package/hmcts-media-viewer.metadata.json +0 -1
- package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.ngfactory.d.ts.map +0 -1
- package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.ngfactory.d.ts.map +0 -1
- package/lib/annotations/annotation-set/annotation-set.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/annotation-set/annotation-view/annotation-view.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/annotations.module.ngfactory.d.ts.map +0 -1
- package/lib/annotations/comment-set/comment/comment.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/comment-set/comment/comment.service.ngfactory.d.ts.map +0 -1
- package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.ngfactory.d.ts.map +0 -1
- package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.ngfactory.d.ts.map +0 -1
- package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/comment-set/comment-set-render.service.ngfactory.d.ts.map +0 -1
- package/lib/annotations/comment-set/comment-set.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/comments-summary/comments-summary.component.ngfactory.d.ts.map +0 -1
- package/lib/annotations/pipes/date/date.pipe.ngfactory.d.ts.map +0 -1
- package/lib/annotations/pipes/filter/filter.pipe.ngfactory.d.ts.map +0 -1
- package/lib/annotations/pipes/unsnake/unsnake.pipe.ngfactory.d.ts.map +0 -1
- package/lib/annotations/services/annotation-api/annotation-api.service.ngfactory.d.ts.map +0 -1
- package/lib/annotations/services/bookmarks-api/bookmarks-api.service.ngfactory.d.ts.map +0 -1
- package/lib/annotations/services/tags/tags.services.ngfactory.d.ts.map +0 -1
- package/lib/annotations/tags/tags.component.ngfactory.d.ts.map +0 -1
- package/lib/bookmark/components/bookmark-icons.component.ngfactory.d.ts.map +0 -1
- package/lib/icp/confirm-exit/confirm-action-dialog.component.ngfactory.d.ts.map +0 -1
- package/lib/icp/icp-follower.service.ngfactory.d.ts.map +0 -1
- package/lib/icp/icp-presenter.service.ngfactory.d.ts.map +0 -1
- package/lib/icp/icp-session-api.service.ngfactory.d.ts.map +0 -1
- package/lib/icp/icp-update.service.ngfactory.d.ts.map +0 -1
- package/lib/icp/icp.service.ngfactory.d.ts.map +0 -1
- package/lib/icp/participants-list/participants-list.component.ngfactory.d.ts.map +0 -1
- package/lib/icp/socket.service.ngfactory.d.ts.map +0 -1
- package/lib/media-viewer.component.ngfactory.d.ts.map +0 -1
- package/lib/media-viewer.module.ngfactory.d.ts.map +0 -1
- package/lib/print.service.ngfactory.d.ts.map +0 -1
- package/lib/redaction/components/redaction.component.ngfactory.d.ts.map +0 -1
- package/lib/redaction/services/redaction-api.service.ngfactory.d.ts.map +0 -1
- package/lib/shared/gov-uk-date/gov-uk-date.component.ngfactory.d.ts.map +0 -1
- package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.ngfactory.d.ts.map +0 -1
- package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.ngfactory.d.ts.map +0 -1
- package/lib/shared/gov-uk-label/gov-uk-label.component.ngfactory.d.ts.map +0 -1
- package/lib/shared/shared.module.ngfactory.d.ts.map +0 -1
- package/lib/shared/util/services/number.helper.service.ngfactory.d.ts.map +0 -1
- package/lib/store/effects/annotation.effects.ngfactory.d.ts.map +0 -1
- package/lib/store/effects/bookmarks.effects.ngfactory.d.ts.map +0 -1
- package/lib/store/effects/document.effects.ngfactory.d.ts.map +0 -1
- package/lib/store/effects/icp.effects.ngfactory.d.ts.map +0 -1
- package/lib/store/effects/redaction.effects.ngfactory.d.ts.map +0 -1
- package/lib/toolbar/icp-toolbar/icp-toolbar.component.ngfactory.d.ts.map +0 -1
- package/lib/toolbar/main-toolbar/main-toolbar.component.ngfactory.d.ts.map +0 -1
- package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.ngfactory.d.ts.map +0 -1
- package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.ngfactory.d.ts.map +0 -1
- package/lib/toolbar/search-bar/search-bar.component.ngfactory.d.ts.map +0 -1
- package/lib/toolbar/toolbar-button-visibility.service.ngfactory.d.ts.map +0 -1
- package/lib/toolbar/toolbar-event.service.ngfactory.d.ts.map +0 -1
- package/lib/toolbar/toolbar.module.ngfactory.d.ts.map +0 -1
- package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.ngfactory.d.ts.map +0 -1
- package/lib/viewers/convertible-content-viewer/document-conversion-api.service.ngfactory.d.ts.map +0 -1
- package/lib/viewers/grab-n-drag.directive.ngfactory.d.ts.map +0 -1
- package/lib/viewers/image-viewer/image-viewer.component.ngfactory.d.ts.map +0 -1
- package/lib/viewers/multimedia-player/multimedia-player.component.ngfactory.d.ts.map +0 -1
- package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.ngfactory.d.ts.map +0 -1
- package/lib/viewers/pdf-viewer/pdf-viewer.component.ngfactory.d.ts.map +0 -1
- package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.ngfactory.d.ts.map +0 -1
- package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.ngfactory.d.ts.map +0 -1
- package/lib/viewers/pdf-viewer/side-bar/side-bar.component.ngfactory.d.ts.map +0 -1
- package/lib/viewers/rotation-persist/rotation-api.service.ngfactory.d.ts.map +0 -1
- package/lib/viewers/rotation-persist/rotation-persist.directive.ngfactory.d.ts.map +0 -1
- package/lib/viewers/unsupported-viewer/unsupported-viewer.component.ngfactory.d.ts.map +0 -1
- package/lib/viewers/viewer-event.service.ngfactory.d.ts.map +0 -1
- package/lib/viewers/viewer-util.service.ngfactory.d.ts.map +0 -1
- /package/{esm2015/lib/annotations/annotation-set/annotation-set.model.js → esm2020/lib/annotations/annotation-set/annotation-set.model.mjs} +0 -0
- /package/{esm2015/lib/annotations/annotation-set/annotation-view/annotation.model.js → esm2020/lib/annotations/annotation-set/annotation-view/annotation.model.mjs} +0 -0
- /package/{esm2015/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.js → esm2020/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.mjs} +0 -0
- /package/{esm2015/lib/annotations/comment-set/comment/comment.model.js → esm2020/lib/annotations/comment-set/comment/comment.model.mjs} +0 -0
- /package/{esm2015/lib/annotations/models/api-persisted.model.js → esm2020/lib/annotations/models/api-persisted.model.mjs} +0 -0
- /package/{esm2015/lib/annotations/models/event-select.model.js → esm2020/lib/annotations/models/event-select.model.mjs} +0 -0
- /package/{esm2015/lib/annotations/models/tags.model.js → esm2020/lib/annotations/models/tags.model.mjs} +0 -0
- /package/{esm2015/lib/annotations/models/user.model.js → esm2020/lib/annotations/models/user.model.mjs} +0 -0
- /package/{esm2015/lib/icp/icp.events.js → esm2020/lib/icp/icp.events.mjs} +0 -0
- /package/{esm2015/lib/icp/icp.interfaces.js → esm2020/lib/icp/icp.interfaces.mjs} +0 -0
- /package/{esm2015/lib/redaction/services/redaction.model.js → esm2020/lib/redaction/services/redaction.model.mjs} +0 -0
- /package/{esm2015/lib/shared/util/helpers/html-templates.helper.js → esm2020/lib/shared/util/helpers/html-templates.helper.mjs} +0 -0
- /package/{esm2015/lib/store/actions/annotation.actions.js → esm2020/lib/store/actions/annotation.actions.mjs} +0 -0
- /package/{esm2015/lib/store/actions/bookmark.actions.js → esm2020/lib/store/actions/bookmark.actions.mjs} +0 -0
- /package/{esm2015/lib/store/actions/document.actions.js → esm2020/lib/store/actions/document.actions.mjs} +0 -0
- /package/{esm2015/lib/store/actions/icp.actions.js → esm2020/lib/store/actions/icp.actions.mjs} +0 -0
- /package/{esm2015/lib/store/actions/redaction.actions.js → esm2020/lib/store/actions/redaction.actions.mjs} +0 -0
- /package/{esm2015/lib/store/actions/tag.actions.js → esm2020/lib/store/actions/tag.actions.mjs} +0 -0
- /package/{esm2015/lib/store/effects/index.js → esm2020/lib/store/effects/index.mjs} +0 -0
- /package/{esm2015/lib/store/models/bookmarks.interface.js → esm2020/lib/store/models/bookmarks.interface.mjs} +0 -0
- /package/{esm2015/lib/store/models/filters.interface.js → esm2020/lib/store/models/filters.interface.mjs} +0 -0
- /package/{esm2015/lib/store/reducers/reducers.js → esm2020/lib/store/reducers/reducers.mjs} +0 -0
- /package/{esm2015/lib/toolbar/icp-event.service.js → esm2020/lib/toolbar/icp-event.service.mjs} +0 -0
- /package/{esm2015/lib/toolbar/redaction-search-bar/redaction-search.model.js → esm2020/lib/toolbar/redaction-search-bar/redaction-search.model.mjs} +0 -0
- /package/{esm2015/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.js → esm2020/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.mjs} +0 -0
- /package/{esm2015/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.js → esm2020/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.mjs} +0 -0
- /package/{esm2015/lib/viewers/rotation-persist/rotation.model.js → esm2020/lib/viewers/rotation-persist/rotation.model.mjs} +0 -0
- /package/{esm2015/lib/viewers/viewer-exception.model.js → esm2020/lib/viewers/viewer-exception.model.mjs} +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { ConnectionPositionPair } from '@angular/cdk/overlay';
|
|
2
|
+
import { Component, HostListener, Input, ViewChild } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../toolbar-event.service";
|
|
5
|
+
import * as i2 from "../toolbar-button-visibility.service";
|
|
6
|
+
import * as i3 from "../../../lib/shared/util/services/number.helper.service";
|
|
7
|
+
import * as i4 from "@angular/common";
|
|
8
|
+
import * as i5 from "@angular/forms";
|
|
9
|
+
import * as i6 from "@angular/cdk/overlay";
|
|
10
|
+
import * as i7 from "../search-bar/search-bar.component";
|
|
11
|
+
export class MainToolbarComponent {
|
|
12
|
+
constructor(toolbarEvents, toolbarButtons, cdr, numberHelper) {
|
|
13
|
+
this.toolbarEvents = toolbarEvents;
|
|
14
|
+
this.toolbarButtons = toolbarButtons;
|
|
15
|
+
this.cdr = cdr;
|
|
16
|
+
this.numberHelper = numberHelper;
|
|
17
|
+
this.enableAnnotations = false;
|
|
18
|
+
this.enableRedactions = false;
|
|
19
|
+
this.enableICP = false;
|
|
20
|
+
this.contentType = null;
|
|
21
|
+
this.subscriptions = [];
|
|
22
|
+
this.icpEnabled = false;
|
|
23
|
+
this.redactionEnabled = false;
|
|
24
|
+
this.pageNumber = 1;
|
|
25
|
+
this.pageCount = 0;
|
|
26
|
+
this.isDropdownMenuOpen = false;
|
|
27
|
+
this.dropdownMenuPositions = [
|
|
28
|
+
new ConnectionPositionPair({
|
|
29
|
+
originX: 'end',
|
|
30
|
+
originY: 'bottom'
|
|
31
|
+
}, {
|
|
32
|
+
overlayX: 'end',
|
|
33
|
+
overlayY: 'top'
|
|
34
|
+
}, 0, 3)
|
|
35
|
+
];
|
|
36
|
+
this.zoomScales = [0.1, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 2.5, 3, 5];
|
|
37
|
+
this.allButtonsWidth = 0;
|
|
38
|
+
this.widthRequiredForBtn = {};
|
|
39
|
+
}
|
|
40
|
+
ngOnInit() {
|
|
41
|
+
this.subscriptions.push(this.toolbarEvents.setCurrentPageSubject.subscribe(pageNumber => this.setCurrentPage(pageNumber)), this.toolbarEvents.setCurrentPageInputValueSubject.subscribe(pageNumber => this.pageNumber = pageNumber), this.toolbarEvents.getPageCount().subscribe(count => this.pageCount = count), this.toolbarEvents.icp.enabled.subscribe(enabled => {
|
|
42
|
+
this.icpEnabled = enabled;
|
|
43
|
+
if (this.icpEnabled) {
|
|
44
|
+
this.toolbarEvents.toggleCommentsPanel(!enabled);
|
|
45
|
+
this.toolbarEvents.sidebarOpen.next(false);
|
|
46
|
+
}
|
|
47
|
+
}), this.toolbarEvents.redactionMode.subscribe(enabled => {
|
|
48
|
+
this.redactionEnabled = enabled;
|
|
49
|
+
}), this.toolbarEvents.redactAllInProgressSubject.subscribe(disable => {
|
|
50
|
+
this.redactAllInProgress = disable;
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
ngOnDestroy() {
|
|
54
|
+
for (const subscription of this.subscriptions) {
|
|
55
|
+
subscription.unsubscribe();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
ngAfterViewInit() {
|
|
59
|
+
Array.from(this.mvToolbarMain.nativeElement.children).forEach(button => {
|
|
60
|
+
this.allButtonsWidth += button.getBoundingClientRect().width;
|
|
61
|
+
this.widthRequiredForBtn[button.id] = this.allButtonsWidth;
|
|
62
|
+
});
|
|
63
|
+
this.cdr.detectChanges();
|
|
64
|
+
}
|
|
65
|
+
onResize() {
|
|
66
|
+
this.cdr.detectChanges();
|
|
67
|
+
}
|
|
68
|
+
onControlPrint(event) {
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
this.printFile();
|
|
71
|
+
}
|
|
72
|
+
onClickHighlightToggle() {
|
|
73
|
+
this.toolbarEvents.toggleHighlightMode();
|
|
74
|
+
}
|
|
75
|
+
onClickDrawToggle() {
|
|
76
|
+
this.toolbarEvents.toggleDrawMode();
|
|
77
|
+
}
|
|
78
|
+
toggleIndexSideBar() {
|
|
79
|
+
const sidebarOpen = this.toolbarEvents.sidebarOpen.getValue();
|
|
80
|
+
const sidebarView = this.toolbarEvents.sidebarOutlineView.getValue();
|
|
81
|
+
if (!(sidebarOpen && !sidebarView)) {
|
|
82
|
+
this.toolbarEvents.toggleSideBar(!sidebarOpen);
|
|
83
|
+
}
|
|
84
|
+
this.toolbarEvents.toggleSideBarView(true);
|
|
85
|
+
}
|
|
86
|
+
toggleBookmarksSideBar() {
|
|
87
|
+
const sidebarOpen = this.toolbarEvents.sidebarOpen.getValue();
|
|
88
|
+
const sidebarView = this.toolbarEvents.sidebarOutlineView.getValue();
|
|
89
|
+
if (!(sidebarOpen && sidebarView)) {
|
|
90
|
+
this.toolbarEvents.toggleSideBar(!sidebarOpen);
|
|
91
|
+
}
|
|
92
|
+
this.toolbarEvents.toggleSideBarView(false);
|
|
93
|
+
}
|
|
94
|
+
togglePresentBar() {
|
|
95
|
+
this.toolbarEvents.searchBarHidden.next(true);
|
|
96
|
+
this.toolbarEvents.icp.enable();
|
|
97
|
+
}
|
|
98
|
+
increasePageNumber() {
|
|
99
|
+
this.toolbarEvents.incrementPage(1);
|
|
100
|
+
}
|
|
101
|
+
decreasePageNumber() {
|
|
102
|
+
this.toolbarEvents.incrementPage(-1);
|
|
103
|
+
}
|
|
104
|
+
onPageNumberInputChange(pageNumber) {
|
|
105
|
+
if (Number(pageNumber) < 1) {
|
|
106
|
+
pageNumber = '1';
|
|
107
|
+
}
|
|
108
|
+
if (Number(pageNumber) > this.pageCount) {
|
|
109
|
+
pageNumber = this.pageCount.toString();
|
|
110
|
+
}
|
|
111
|
+
this.toolbarEvents.setPage(Number.parseInt(pageNumber, 10));
|
|
112
|
+
}
|
|
113
|
+
setCurrentPage(pageNumber) {
|
|
114
|
+
this.pageNumber = pageNumber;
|
|
115
|
+
}
|
|
116
|
+
rotate(rotation) {
|
|
117
|
+
this.toolbarEvents.rotate(rotation);
|
|
118
|
+
}
|
|
119
|
+
printFile() {
|
|
120
|
+
this.toolbarEvents.print();
|
|
121
|
+
}
|
|
122
|
+
downloadFile() {
|
|
123
|
+
this.toolbarEvents.download();
|
|
124
|
+
}
|
|
125
|
+
zoom(zoomFactor) {
|
|
126
|
+
this.toolbarEvents.zoom(+zoomFactor);
|
|
127
|
+
}
|
|
128
|
+
stepZoom(zoomFactor) {
|
|
129
|
+
this.toolbarEvents.stepZoom(zoomFactor);
|
|
130
|
+
this.zoomSelect.nativeElement.selected = 'selected';
|
|
131
|
+
}
|
|
132
|
+
toggleCommentsPanel() {
|
|
133
|
+
this.toolbarEvents.toggleCommentsPanel(!this.toolbarEvents.commentsPanelVisible.getValue());
|
|
134
|
+
}
|
|
135
|
+
toggleRedactBar() {
|
|
136
|
+
this.toolbarEvents.toggleRedactionMode();
|
|
137
|
+
}
|
|
138
|
+
toggleGrabNDrag() {
|
|
139
|
+
this.toolbarEvents.toggleGrabNDrag();
|
|
140
|
+
}
|
|
141
|
+
isPdf() {
|
|
142
|
+
return this.contentType === 'pdf';
|
|
143
|
+
}
|
|
144
|
+
toggleSearchBar() {
|
|
145
|
+
this.toolbarEvents.searchBarHidden.next(!this.toolbarEvents.searchBarHidden.getValue());
|
|
146
|
+
}
|
|
147
|
+
toggleMoreOptions() {
|
|
148
|
+
this.isDropdownMenuOpen = !this.isDropdownMenuOpen;
|
|
149
|
+
setTimeout(() => {
|
|
150
|
+
if (this.mvMenuItems) {
|
|
151
|
+
this.mvMenuItems.nativeElement.focus();
|
|
152
|
+
}
|
|
153
|
+
}, 100);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** @nocollapse */ MainToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MainToolbarComponent, deps: [{ token: i1.ToolbarEventService }, { token: i2.ToolbarButtonVisibilityService }, { token: i0.ChangeDetectorRef }, { token: i3.NumberHelperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
157
|
+
/** @nocollapse */ MainToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: MainToolbarComponent, selector: "mv-main-toolbar", inputs: { enableAnnotations: "enableAnnotations", enableRedactions: "enableRedactions", enableICP: "enableICP", contentType: "contentType" }, host: { listeners: { "window:resize": "onResize()", "document:keydown.control.p": "onControlPrint($event)", "document:keydown.meta.p": "onControlPrint($event)" } }, viewQueries: [{ propertyName: "zoomSelect", first: true, predicate: ["zoomSelect"], descendants: true }, { propertyName: "mvToolbarMain", first: true, predicate: ["mvToolbarMain"], descendants: true }, { propertyName: "mvMenuItems", first: true, predicate: ["dropdownMenu"], descendants: true }], ngImport: i0, template: "<div class=\"toolbar\">\n <div id=\"toolbarContainer\">\n <div class=\"mv-toolbar__container\">\n <div #mvToolbar class=\"mv-toolbar\" [class.notSupported]=\"!contentType\">\n <!-- The mvToolbarMain div contains all toolbar buttons except the \"More options\" button. This allows for calculation of the available space to display buttons -->\n <div id=\"mvToolbarMain\" class=\"mv-toolbar-main\" #mvToolbarMain>\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n <!-- The mvToolbarMoreOptions div contains the \"More options\" toolbar button (and the overlay template for the dropdown menu).\n The space occupied by the button (if visible) is excluded from the toolbar space available calculation -->\n <div id=\"mvToolbarMoreOptions\" class=\"mv-toolbar-more-options\">\n <button\n id=\"mvMoreOptionsBtn\"\n class=\"mv-button mv-toolbar__menu-button--more-options\"\n [class.mv-toolbar__menu-button--more-options__hidden]=\"\n mvToolbar.offsetWidth >= allButtonsWidth\n \"\n aria-pressed=\"false\"\n (click)=\"toggleMoreOptions()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"redactAllInProgress\"\n >\n <span>More options</span>\n </button>\n <!-- This template displays the overlay content for the dropdown menu and is connected to the \"More options\" button -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownMenuOpen\"\n [cdkConnectedOverlayPositions]=\"dropdownMenuPositions\"\n >\n <div class=\"dropdown-menu\" #dropdownMenu tabindex=\"0\">\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div id=\"mvMenuItems\" #mvMenuItems>\n <ng-template #menuItems>\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvIndexBtn\"\n title=\"Index\"\n data-l10n-id=\"index\"\n #mvIndexBtn\n class=\"mv-button mv-toolbar__menu-button--index\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvIndexBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvIndexBtn']\n \"\n aria-pressed=\"false\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleIndexSideBar(); isDropdownMenuOpen = false\"\n >\n <span>Index</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvBookmarksBtn\"\n title=\"Bookmarks\"\n data-l10n-id=\"bookmarks\"\n #mvBookmarksBtn\n [ngClass]=\"{\n 'mv-button mv-toolbar__menu-button--bookmarks': true,\n 'button-hidden-on-toolbar':\n mvToolbarMain.offsetWidth <\n widthRequiredForBtn['mvBookmarksBtn'],\n 'button-hidden-on-dropdown':\n mvToolbarMain.offsetWidth >=\n widthRequiredForBtn['mvBookmarksBtn']\n }\"\n aria-pressed=\"false\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleBookmarksSideBar(); isDropdownMenuOpen = false\"\n >\n <span>Bookmarks</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDrawButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw\"\n title=\"Draw a box\"\n tabindex=\"-1\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvDrawBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvDrawBtn']\n \"\n [class.toggled]=\"toolbarEvents.drawModeSubject | async\"\n aria-hidden=\"true\"\n aria-pressed=\"false\"\n data-l10n-id=\"toggleDrawButton\"\n (click)=\"onClickDrawToggle(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"draw_label\">Draw a box</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showHighlightButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvHighlightBtn\"\n #mvHighlightBtn\n class=\"mv-button mv-toolbar__menu-button--highlight\"\n title=\"Highlight\"\n tabindex=\"0\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.toggled]=\"toolbarEvents.highlightModeSubject | async\"\n aria-hidden=\"true\"\n aria-pressed=\"false\"\n (click)=\"onClickHighlightToggle(); isDropdownMenuOpen = false\"\n data-l10n-id=\"toggleHighlightButton\"\n >\n <span data-l10n-id=\"highlight_label\">Highlight</span>\n </button>\n\n <ng-container *ngIf=\"toolbarButtons.showNavigation\">\n <div\n id=\"mvPageBtn\"\n #mvPageBtn\n class=\"mv-toolbar__menu-button--page\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPageBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPageBtn']\n \"\n >\n <span>Page</span>\n\n <button\n id=\"mvUpBtn\"\n [disabled]=\"pageNumber === 1 || redactAllInProgress\"\n title=\"Previous Page\"\n class=\"mv-toolbar__menu-button--up button-image\"\n data-l10n-id=\"previous\"\n (click)=\"decreasePageNumber()\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvDownBtn\"\n [disabled]=\"pageNumber === pageCount || redactAllInProgress\"\n title=\"Next Page\"\n class=\"mv-toolbar__menu-button--down button-image\"\n data-l10n-id=\"next\"\n (click)=\"increasePageNumber()\"\n >\n <span></span>\n </button>\n\n <input\n type=\"number\"\n id=\"pageNumber\"\n class=\"hmcts-toolbar-input govuk-input--width-2\"\n title=\"Page Number\"\n value=\"1\"\n size=\"4\"\n min=\"1\"\n [value]=\"pageNumber\"\n aria-label=\"page number\"\n tabindex=\"0\"\n data-l10n-id=\"page\"\n (change)=\"onPageNumberInputChange(pageNumberInput.value)\"\n [disabled]=\"redactAllInProgress\"\n #pageNumberInput\n />\n <span id=\"numPages\" class=\"toolbarLabel\">/ {{ pageCount }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"toolbarButtons.showZoom\">\n <div\n id=\"mvZoomBtn\"\n #mvZoomBtn\n class=\"mv-toolbar__menu-button--zoom\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvZoomBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvZoomBtn']\n \"\n >\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 0.1 ||\n redactAllInProgress\n \"\n id=\"mvMinusBtn\"\n class=\"mv-toolbar__menu-button--zoom-out button-image\"\n title=\"Zoom Out\"\n data-l10n-id=\"zoom_out\"\n (click)=\"stepZoom(-0.1)\"\n >\n <span></span>\n </button>\n <select\n id=\"scaleSelect\"\n class=\"hmcts-toolbar-select\"\n title=\"Zoom\"\n tabindex=\"0\"\n data-l10n-id=\"zoom\"\n (change)=\"zoom($event.target.value)\"\n aria-label=\"zoom\"\n [disabled]=\"redactAllInProgress\"\n >\n <option\n #zoomSelect\n id=\"customScaleOption\"\n title=\"\"\n [value]=\"toolbarEvents.zoomValueSubject.value\"\n >\n {{\n toolbarEvents.zoomValueSubject.value * 100\n | number : \"1.0-0\"\n }}%\n </option>\n <option\n *ngFor=\"let zoomScale of zoomScales\"\n title=\"\"\n [value]=\"zoomScale\"\n [attr.data-l10n-id]=\"'page_scale_percent_' + zoomScale * 100\"\n >\n {{ zoomScale * 100 }}%\n </option>\n </select>\n\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 5 ||\n redactAllInProgress\n \"\n id=\"mvPlusBtn\"\n class=\"mv-toolbar__menu-button--zoom-in button-image\"\n (click)=\"stepZoom(0.1)\"\n title=\"Zoom In\"\n data-l10n-id=\"zoom_in\"\n >\n <span></span>\n </button>\n </div>\n </ng-container>\n\n <div\n *ngIf=\"toolbarButtons.showRotate\"\n id=\"mvRotateBtn\"\n #mvRotateBtn\n class=\"mv-toolbar__menu-button--rotate\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvRotateBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvRotateBtn']\n \"\n >\n <button\n id=\"mvRotateLeftBtn\"\n class=\"mv-toolbar__menu-button--rotate_left button-image\"\n title=\"Rotate Counterclockwise\"\n data-l10n-id=\"page_rotate_ccw\"\n (click)=\"rotate(270)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvRotateRightBtn\"\n class=\"mv-toolbar__menu-button--rotate_right button-image\"\n title=\"Rotate Clockwise\"\n data-l10n-id=\"page_rotate_cw\"\n (click)=\"rotate(90)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <span>Rotate</span>\n </div>\n\n <button\n *ngIf=\"toolbarButtons.showSearchBar\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvSearchBtn\"\n #mvSearchBtn\n title=\"Search\"\n data-l10n-id=\"searchbar\"\n class=\"mv-button mv-toolbar__menu-button--search\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvSearchBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvSearchBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleSearchBar(); isDropdownMenuOpen = false\"\n ></button>\n\n <button\n *ngIf=\"enableICP && toolbarButtons.showPresentationMode && isPdf()\"\n [disabled]=\"icpEnabled || !contentType || redactionEnabled\"\n id=\"mvPresentBtn\"\n #mvPresentBtn\n class=\"mv-button mv-toolbar__menu-button--present\"\n title=\"In-Court Presentation Mode\"\n data-l10n-id=\"icpMode_label\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPresentBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPresentBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"togglePresentBar(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"icpMode_label\">Present</span>\n </button>\n\n <button\n *ngIf=\"enableRedactions && toolbarButtons.showRedact\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvRedactBtn\"\n #mvRedactBtn\n title=\"Redact\"\n data-l10n-id=\"redact\"\n class=\"mv-button mv-toolbar__menu-button--redact\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvRedactBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvRedactBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleRedactBar(); isDropdownMenuOpen = false\"\n >\n <span>Redact</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showGrabNDragButton\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvGrabBtn\"\n #mvGrabBtn\n class=\"mv-button mv-toolbar__menu-button--grab\"\n title=\"Grab and drag\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvGrabBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvGrabBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleGrabNDrag(); isDropdownMenuOpen = false\"\n >\n <span>Grab and drag</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDownload\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDownloadBtn\"\n #mvDownloadBtn\n class=\"mv-button mv-toolbar__menu-button--download\"\n title=\"Download\"\n data-l10n-id=\"download\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvDownloadBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvDownloadBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"downloadFile(); isDropdownMenuOpen = false\"\n ></button>\n\n <button\n *ngIf=\"toolbarButtons.showPrint\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvPrintBtn\"\n #mvPrintBtn\n title=\"Print\"\n data-l10n-id=\"print\"\n class=\"mv-button mv-toolbar__menu-button--print\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPrintBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPrintBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"printFile(); isDropdownMenuOpen = false\"\n ></button>\n\n <button\n *ngIf=\"enableAnnotations && toolbarButtons.showCommentSummary\"\n [disabled]=\"redactionEnabled\"\n id=\"mvCommentsBtn\"\n #mvCommentsBtn\n class=\"mv-button mv-toolbar__menu-button--comments\"\n title=\"Comments\"\n data-l10n-id=\"comments\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvCommentsBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvCommentsBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleCommentsPanel(); isDropdownMenuOpen = false\"\n >\n <span>Comments</span>\n </button>\n </ng-template>\n </div>\n <mv-search-bar></mv-search-bar>\n </div>\n\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i7.SearchBarComponent, selector: "mv-search-bar" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }] });
|
|
158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MainToolbarComponent, decorators: [{
|
|
159
|
+
type: Component,
|
|
160
|
+
args: [{ selector: 'mv-main-toolbar', template: "<div class=\"toolbar\">\n <div id=\"toolbarContainer\">\n <div class=\"mv-toolbar__container\">\n <div #mvToolbar class=\"mv-toolbar\" [class.notSupported]=\"!contentType\">\n <!-- The mvToolbarMain div contains all toolbar buttons except the \"More options\" button. This allows for calculation of the available space to display buttons -->\n <div id=\"mvToolbarMain\" class=\"mv-toolbar-main\" #mvToolbarMain>\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n <!-- The mvToolbarMoreOptions div contains the \"More options\" toolbar button (and the overlay template for the dropdown menu).\n The space occupied by the button (if visible) is excluded from the toolbar space available calculation -->\n <div id=\"mvToolbarMoreOptions\" class=\"mv-toolbar-more-options\">\n <button\n id=\"mvMoreOptionsBtn\"\n class=\"mv-button mv-toolbar__menu-button--more-options\"\n [class.mv-toolbar__menu-button--more-options__hidden]=\"\n mvToolbar.offsetWidth >= allButtonsWidth\n \"\n aria-pressed=\"false\"\n (click)=\"toggleMoreOptions()\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n [disabled]=\"redactAllInProgress\"\n >\n <span>More options</span>\n </button>\n <!-- This template displays the overlay content for the dropdown menu and is connected to the \"More options\" button -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isDropdownMenuOpen\"\n [cdkConnectedOverlayPositions]=\"dropdownMenuPositions\"\n >\n <div class=\"dropdown-menu\" #dropdownMenu tabindex=\"0\">\n <ng-container *ngTemplateOutlet=\"menuItems\"></ng-container>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div id=\"mvMenuItems\" #mvMenuItems>\n <ng-template #menuItems>\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvIndexBtn\"\n title=\"Index\"\n data-l10n-id=\"index\"\n #mvIndexBtn\n class=\"mv-button mv-toolbar__menu-button--index\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvIndexBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvIndexBtn']\n \"\n aria-pressed=\"false\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleIndexSideBar(); isDropdownMenuOpen = false\"\n >\n <span>Index</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showSidebar\"\n id=\"mvBookmarksBtn\"\n title=\"Bookmarks\"\n data-l10n-id=\"bookmarks\"\n #mvBookmarksBtn\n [ngClass]=\"{\n 'mv-button mv-toolbar__menu-button--bookmarks': true,\n 'button-hidden-on-toolbar':\n mvToolbarMain.offsetWidth <\n widthRequiredForBtn['mvBookmarksBtn'],\n 'button-hidden-on-dropdown':\n mvToolbarMain.offsetWidth >=\n widthRequiredForBtn['mvBookmarksBtn']\n }\"\n aria-pressed=\"false\"\n [disabled]=\"redactAllInProgress\"\n (click)=\"toggleBookmarksSideBar(); isDropdownMenuOpen = false\"\n >\n <span>Bookmarks</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDrawButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw\"\n title=\"Draw a box\"\n tabindex=\"-1\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvDrawBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvDrawBtn']\n \"\n [class.toggled]=\"toolbarEvents.drawModeSubject | async\"\n aria-hidden=\"true\"\n aria-pressed=\"false\"\n data-l10n-id=\"toggleDrawButton\"\n (click)=\"onClickDrawToggle(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"draw_label\">Draw a box</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showHighlightButton\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvHighlightBtn\"\n #mvHighlightBtn\n class=\"mv-button mv-toolbar__menu-button--highlight\"\n title=\"Highlight\"\n tabindex=\"0\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvHighlightBtn']\n \"\n [class.toggled]=\"toolbarEvents.highlightModeSubject | async\"\n aria-hidden=\"true\"\n aria-pressed=\"false\"\n (click)=\"onClickHighlightToggle(); isDropdownMenuOpen = false\"\n data-l10n-id=\"toggleHighlightButton\"\n >\n <span data-l10n-id=\"highlight_label\">Highlight</span>\n </button>\n\n <ng-container *ngIf=\"toolbarButtons.showNavigation\">\n <div\n id=\"mvPageBtn\"\n #mvPageBtn\n class=\"mv-toolbar__menu-button--page\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPageBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPageBtn']\n \"\n >\n <span>Page</span>\n\n <button\n id=\"mvUpBtn\"\n [disabled]=\"pageNumber === 1 || redactAllInProgress\"\n title=\"Previous Page\"\n class=\"mv-toolbar__menu-button--up button-image\"\n data-l10n-id=\"previous\"\n (click)=\"decreasePageNumber()\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvDownBtn\"\n [disabled]=\"pageNumber === pageCount || redactAllInProgress\"\n title=\"Next Page\"\n class=\"mv-toolbar__menu-button--down button-image\"\n data-l10n-id=\"next\"\n (click)=\"increasePageNumber()\"\n >\n <span></span>\n </button>\n\n <input\n type=\"number\"\n id=\"pageNumber\"\n class=\"hmcts-toolbar-input govuk-input--width-2\"\n title=\"Page Number\"\n value=\"1\"\n size=\"4\"\n min=\"1\"\n [value]=\"pageNumber\"\n aria-label=\"page number\"\n tabindex=\"0\"\n data-l10n-id=\"page\"\n (change)=\"onPageNumberInputChange(pageNumberInput.value)\"\n [disabled]=\"redactAllInProgress\"\n #pageNumberInput\n />\n <span id=\"numPages\" class=\"toolbarLabel\">/ {{ pageCount }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"toolbarButtons.showZoom\">\n <div\n id=\"mvZoomBtn\"\n #mvZoomBtn\n class=\"mv-toolbar__menu-button--zoom\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvZoomBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvZoomBtn']\n \"\n >\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 0.1 ||\n redactAllInProgress\n \"\n id=\"mvMinusBtn\"\n class=\"mv-toolbar__menu-button--zoom-out button-image\"\n title=\"Zoom Out\"\n data-l10n-id=\"zoom_out\"\n (click)=\"stepZoom(-0.1)\"\n >\n <span></span>\n </button>\n <select\n id=\"scaleSelect\"\n class=\"hmcts-toolbar-select\"\n title=\"Zoom\"\n tabindex=\"0\"\n data-l10n-id=\"zoom\"\n (change)=\"zoom($event.target.value)\"\n aria-label=\"zoom\"\n [disabled]=\"redactAllInProgress\"\n >\n <option\n #zoomSelect\n id=\"customScaleOption\"\n title=\"\"\n [value]=\"toolbarEvents.zoomValueSubject.value\"\n >\n {{\n toolbarEvents.zoomValueSubject.value * 100\n | number : \"1.0-0\"\n }}%\n </option>\n <option\n *ngFor=\"let zoomScale of zoomScales\"\n title=\"\"\n [value]=\"zoomScale\"\n [attr.data-l10n-id]=\"'page_scale_percent_' + zoomScale * 100\"\n >\n {{ zoomScale * 100 }}%\n </option>\n </select>\n\n <button\n [disabled]=\"\n toolbarEvents.zoomValueSubject.value === 5 ||\n redactAllInProgress\n \"\n id=\"mvPlusBtn\"\n class=\"mv-toolbar__menu-button--zoom-in button-image\"\n (click)=\"stepZoom(0.1)\"\n title=\"Zoom In\"\n data-l10n-id=\"zoom_in\"\n >\n <span></span>\n </button>\n </div>\n </ng-container>\n\n <div\n *ngIf=\"toolbarButtons.showRotate\"\n id=\"mvRotateBtn\"\n #mvRotateBtn\n class=\"mv-toolbar__menu-button--rotate\"\n aria-pressed=\"false\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvRotateBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvRotateBtn']\n \"\n >\n <button\n id=\"mvRotateLeftBtn\"\n class=\"mv-toolbar__menu-button--rotate_left button-image\"\n title=\"Rotate Counterclockwise\"\n data-l10n-id=\"page_rotate_ccw\"\n (click)=\"rotate(270)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <button\n id=\"mvRotateRightBtn\"\n class=\"mv-toolbar__menu-button--rotate_right button-image\"\n title=\"Rotate Clockwise\"\n data-l10n-id=\"page_rotate_cw\"\n (click)=\"rotate(90)\"\n [disabled]=\"redactAllInProgress\"\n >\n <span></span>\n </button>\n <span>Rotate</span>\n </div>\n\n <button\n *ngIf=\"toolbarButtons.showSearchBar\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvSearchBtn\"\n #mvSearchBtn\n title=\"Search\"\n data-l10n-id=\"searchbar\"\n class=\"mv-button mv-toolbar__menu-button--search\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvSearchBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvSearchBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleSearchBar(); isDropdownMenuOpen = false\"\n ></button>\n\n <button\n *ngIf=\"enableICP && toolbarButtons.showPresentationMode && isPdf()\"\n [disabled]=\"icpEnabled || !contentType || redactionEnabled\"\n id=\"mvPresentBtn\"\n #mvPresentBtn\n class=\"mv-button mv-toolbar__menu-button--present\"\n title=\"In-Court Presentation Mode\"\n data-l10n-id=\"icpMode_label\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPresentBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPresentBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"togglePresentBar(); isDropdownMenuOpen = false\"\n >\n <span data-l10n-id=\"icpMode_label\">Present</span>\n </button>\n\n <button\n *ngIf=\"enableRedactions && toolbarButtons.showRedact\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvRedactBtn\"\n #mvRedactBtn\n title=\"Redact\"\n data-l10n-id=\"redact\"\n class=\"mv-button mv-toolbar__menu-button--redact\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvRedactBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvRedactBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleRedactBar(); isDropdownMenuOpen = false\"\n >\n <span>Redact</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showGrabNDragButton\"\n [disabled]=\"icpEnabled || redactAllInProgress\"\n id=\"mvGrabBtn\"\n #mvGrabBtn\n class=\"mv-button mv-toolbar__menu-button--grab\"\n title=\"Grab and drag\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvGrabBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvGrabBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleGrabNDrag(); isDropdownMenuOpen = false\"\n >\n <span>Grab and drag</span>\n </button>\n\n <button\n *ngIf=\"toolbarButtons.showDownload\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvDownloadBtn\"\n #mvDownloadBtn\n class=\"mv-button mv-toolbar__menu-button--download\"\n title=\"Download\"\n data-l10n-id=\"download\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvDownloadBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvDownloadBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"downloadFile(); isDropdownMenuOpen = false\"\n ></button>\n\n <button\n *ngIf=\"toolbarButtons.showPrint\"\n [disabled]=\"icpEnabled || redactionEnabled\"\n id=\"mvPrintBtn\"\n #mvPrintBtn\n title=\"Print\"\n data-l10n-id=\"print\"\n class=\"mv-button mv-toolbar__menu-button--print\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvPrintBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvPrintBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"printFile(); isDropdownMenuOpen = false\"\n ></button>\n\n <button\n *ngIf=\"enableAnnotations && toolbarButtons.showCommentSummary\"\n [disabled]=\"redactionEnabled\"\n id=\"mvCommentsBtn\"\n #mvCommentsBtn\n class=\"mv-button mv-toolbar__menu-button--comments\"\n title=\"Comments\"\n data-l10n-id=\"comments\"\n [class.button-hidden-on-toolbar]=\"\n mvToolbarMain.offsetWidth < widthRequiredForBtn['mvCommentsBtn']\n \"\n [class.button-hidden-on-dropdown]=\"\n mvToolbarMain.offsetWidth >= widthRequiredForBtn['mvCommentsBtn']\n \"\n aria-pressed=\"false\"\n (click)=\"toggleCommentsPanel(); isDropdownMenuOpen = false\"\n >\n <span>Comments</span>\n </button>\n </ng-template>\n </div>\n <mv-search-bar></mv-search-bar>\n </div>\n\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
161
|
+
}], ctorParameters: function () { return [{ type: i1.ToolbarEventService }, { type: i2.ToolbarButtonVisibilityService }, { type: i0.ChangeDetectorRef }, { type: i3.NumberHelperService }]; }, propDecorators: { enableAnnotations: [{
|
|
162
|
+
type: Input
|
|
163
|
+
}], enableRedactions: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], enableICP: [{
|
|
166
|
+
type: Input
|
|
167
|
+
}], contentType: [{
|
|
168
|
+
type: Input
|
|
169
|
+
}], zoomSelect: [{
|
|
170
|
+
type: ViewChild,
|
|
171
|
+
args: ['zoomSelect', { static: false }]
|
|
172
|
+
}], mvToolbarMain: [{
|
|
173
|
+
type: ViewChild,
|
|
174
|
+
args: ['mvToolbarMain', { static: false }]
|
|
175
|
+
}], mvMenuItems: [{
|
|
176
|
+
type: ViewChild,
|
|
177
|
+
args: ['dropdownMenu', { static: false }]
|
|
178
|
+
}], onResize: [{
|
|
179
|
+
type: HostListener,
|
|
180
|
+
args: ['window:resize', []]
|
|
181
|
+
}], onControlPrint: [{
|
|
182
|
+
type: HostListener,
|
|
183
|
+
args: ['document:keydown.control.p', ['$event']]
|
|
184
|
+
}, {
|
|
185
|
+
type: HostListener,
|
|
186
|
+
args: ['document:keydown.meta.p', ['$event']]
|
|
187
|
+
}] } });
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3Rvb2xiYXIvbWFpbi10b29sYmFyL21haW4tdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL21haW4tdG9vbGJhci9tYWluLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBVXZCLE1BQU0sT0FBTyxvQkFBb0I7SUF3Qy9CLFlBQ2tCLGFBQWtDLEVBQ2xDLGNBQThDLEVBQzdDLEdBQXNCLEVBQ3RCLFlBQWlDO1FBSGxDLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUNsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0M7UUFDN0MsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBMUMzQyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFNWCxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFFN0MsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFJekIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0IsMEJBQXFCLEdBQUc7WUFDN0Is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c0JBQTVELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDWSxhQUFhO3NCQUFsRSxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ1EsV0FBVztzQkFBL0QsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQTJFckMsUUFBUTtzQkFEZCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFO2dCQU8xQixjQUFjO3NCQUZwQixZQUFZO3VCQUFDLDRCQUE0QixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDckQsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUb29sYmFyRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vdG9vbGJhci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvb2xiYXJCdXR0b25WaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXItYnV0dG9uLXZpc2liaWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBOdW1iZXJIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vbGliL3NoYXJlZC91dGlsL3NlcnZpY2VzL251bWJlci5oZWxwZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ212LW1haW4tdG9vbGJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYWluLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIE1haW5Ub29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gIEBJbnB1dCgpIGVuYWJsZUFubm90YXRpb25zID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZVJlZGFjdGlvbnMgPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlSUNQID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbnRlbnRUeXBlID0gbnVsbDtcblxuICBAVmlld0NoaWxkKCd6b29tU2VsZWN0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyB6b29tU2VsZWN0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtdlRvb2xiYXJNYWluJywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBtdlRvb2xiYXJNYWluOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25NZW51JywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBtdk1lbnVJdGVtczogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHB1YmxpYyBpY3BFbmFibGVkID0gZmFsc2U7XG4gIHB1YmxpYyByZWRhY3Rpb25FbmFibGVkID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93Q29tbWVudHNQYW5lbDogYm9vbGVhbjtcbiAgcHVibGljIHJlZGFjdEFsbEluUHJvZ3Jlc3M6IGJvb2xlYW47XG5cbiAgcHVibGljIHBhZ2VOdW1iZXIgPSAxO1xuICBwdWJsaWMgcGFnZUNvdW50ID0gMDtcbiAgcHVibGljIGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlO1xuICBwdWJsaWMgZHJvcGRvd25NZW51UG9zaXRpb25zID0gW1xuICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKFxuICAgICAge1xuICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgb3JpZ2luWTogJ2JvdHRvbSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICB9LFxuICAgICAgMCxcbiAgICAgIDMpXG4gIF07XG5cbiAgcHVibGljIHpvb21TY2FsZXMgPSBbMC4xLCAwLjI1LCAwLjUsIDAuNzUsIDEsIDEuMjUsIDEuNSwgMi41LCAzLCA1XTtcblxuICBhbGxCdXR0b25zV2lkdGggPSAwO1xuICB3aWR0aFJlcXVpcmVkRm9yQnRuOiB7IFtpZDogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHRvb2xiYXJFdmVudHM6IFRvb2xiYXJFdmVudFNlcnZpY2UsXG4gICAgcHVibGljIHJlYWRvbmx5IHRvb2xiYXJCdXR0b25zOiBUb29sYmFyQnV0dG9uVmlzaWJpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbnVtYmVySGVscGVyOiBOdW1iZXJIZWxwZXJTZXJ2aWNlXG4gICkge1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnNldEN1cnJlbnRQYWdlU3ViamVjdC5zdWJzY3JpYmUocGFnZU51bWJlciA9PiB0aGlzLnNldEN1cnJlbnRQYWdlKHBhZ2VOdW1iZXIpKSxcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZXRDdXJyZW50UGFnZUlucHV0VmFsdWVTdWJqZWN0LnN1YnNjcmliZShwYWdlTnVtYmVyID0+IHRoaXMucGFnZU51bWJlciA9IHBhZ2VOdW1iZXIpLFxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLmdldFBhZ2VDb3VudCgpLnN1YnNjcmliZShjb3VudCA9PiB0aGlzLnBhZ2VDb3VudCA9IGNvdW50KSxcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5pY3AuZW5hYmxlZC5zdWJzY3JpYmUoZW5hYmxlZCA9PiB7XG4gICAgICAgIHRoaXMuaWNwRW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICAgIGlmICh0aGlzLmljcEVuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlQ29tbWVudHNQYW5lbCghZW5hYmxlZCk7XG4gICAgICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnNpZGViYXJPcGVuLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5yZWRhY3Rpb25Nb2RlLnN1YnNjcmliZShlbmFibGVkID0+IHtcbiAgICAgICAgdGhpcy5yZWRhY3Rpb25FbmFibGVkID0gZW5hYmxlZDtcbiAgICAgIH0pLFxuICAgICAgdGhpcy50b29sYmFyRXZlbnRzLnJlZGFjdEFsbEluUHJvZ3Jlc3NTdWJqZWN0LnN1YnNjcmliZShkaXNhYmxlID0+IHtcbiAgICAgICAgdGhpcy5yZWRhY3RBbGxJblByb2dyZXNzID0gZGlzYWJsZTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgdGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIEFycmF5LmZyb20odGhpcy5tdlRvb2xiYXJNYWluLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pLmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgIHRoaXMuYWxsQnV0dG9uc1dpZHRoICs9IGJ1dHRvbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIHRoaXMud2lkdGhSZXF1aXJlZEZvckJ0bltidXR0b24uaWRdID0gdGhpcy5hbGxCdXR0b25zV2lkdGg7XG4gICAgfSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFtdKVxuICBwdWJsaWMgb25SZXNpemUoKSB7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5jb250cm9sLnAnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLm1ldGEucCcsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbkNvbnRyb2xQcmludChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wcmludEZpbGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsaWNrSGlnaGxpZ2h0VG9nZ2xlKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVIaWdobGlnaHRNb2RlKCk7XG4gIH1cbiAgcHVibGljIG9uQ2xpY2tEcmF3VG9nZ2xlKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVEcmF3TW9kZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUluZGV4U2lkZUJhcigpIHtcbiAgICBjb25zdCBzaWRlYmFyT3BlbiA9IHRoaXMudG9vbGJhckV2ZW50cy5zaWRlYmFyT3Blbi5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHNpZGViYXJWaWV3ID0gdGhpcy50b29sYmFyRXZlbnRzLnNpZGViYXJPdXRsaW5lVmlldy5nZXRWYWx1ZSgpO1xuICAgIGlmICghKHNpZGViYXJPcGVuICYmICFzaWRlYmFyVmlldykpIHtcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVTaWRlQmFyKCFzaWRlYmFyT3Blbik7XG4gICAgfVxuICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVTaWRlQmFyVmlldyh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVCb29rbWFya3NTaWRlQmFyKCkge1xuICAgIGNvbnN0IHNpZGViYXJPcGVuID0gdGhpcy50b29sYmFyRXZlbnRzLnNpZGViYXJPcGVuLmdldFZhbHVlKCk7XG4gICAgY29uc3Qgc2lkZWJhclZpZXcgPSB0aGlzLnRvb2xiYXJFdmVudHMuc2lkZWJhck91dGxpbmVWaWV3LmdldFZhbHVlKCk7XG4gICAgaWYgKCEoc2lkZWJhck9wZW4gJiYgc2lkZWJhclZpZXcpKSB7XG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlU2lkZUJhcighc2lkZWJhck9wZW4pO1xuICAgIH1cbiAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlU2lkZUJhclZpZXcoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVByZXNlbnRCYXIoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnNlYXJjaEJhckhpZGRlbi5uZXh0KHRydWUpO1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5pY3AuZW5hYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgaW5jcmVhc2VQYWdlTnVtYmVyKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5pbmNyZW1lbnRQYWdlKDEpO1xuICB9XG5cbiAgcHVibGljIGRlY3JlYXNlUGFnZU51bWJlcigpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuaW5jcmVtZW50UGFnZSgtMSk7XG4gIH1cblxuICBwdWJsaWMgb25QYWdlTnVtYmVySW5wdXRDaGFuZ2UocGFnZU51bWJlcjogc3RyaW5nKSB7XG4gICAgaWYgKE51bWJlcihwYWdlTnVtYmVyKSA8IDEpIHtcbiAgICAgIHBhZ2VOdW1iZXIgPSAnMSc7XG4gICAgfVxuICAgIGlmIChOdW1iZXIocGFnZU51bWJlcikgPiB0aGlzLnBhZ2VDb3VudCkge1xuICAgICAgcGFnZU51bWJlciA9IHRoaXMucGFnZUNvdW50LnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnNldFBhZ2UoTnVtYmVyLnBhcnNlSW50KHBhZ2VOdW1iZXIsIDEwKSk7XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnJlbnRQYWdlKHBhZ2VOdW1iZXI6IG51bWJlcikge1xuICAgIHRoaXMucGFnZU51bWJlciA9IHBhZ2VOdW1iZXI7XG4gIH1cblxuICBwdWJsaWMgcm90YXRlKHJvdGF0aW9uOiBudW1iZXIpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMucm90YXRlKHJvdGF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludEZpbGUoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnByaW50KCk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWRGaWxlKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5kb3dubG9hZCgpO1xuICB9XG5cbiAgcHVibGljIHpvb20oem9vbUZhY3Rvcjogc3RyaW5nKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRzLnpvb20oK3pvb21GYWN0b3IpO1xuICB9XG5cbiAgcHVibGljIHN0ZXBab29tKHpvb21GYWN0b3I6IG51bWJlcikge1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy5zdGVwWm9vbSh6b29tRmFjdG9yKTtcbiAgICB0aGlzLnpvb21TZWxlY3QubmF0aXZlRWxlbWVudC5zZWxlY3RlZCA9ICdzZWxlY3RlZCc7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQ29tbWVudHNQYW5lbCgpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlQ29tbWVudHNQYW5lbCghdGhpcy50b29sYmFyRXZlbnRzLmNvbW1lbnRzUGFuZWxWaXNpYmxlLmdldFZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVJlZGFjdEJhcigpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlUmVkYWN0aW9uTW9kZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUdyYWJORHJhZygpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMudG9nZ2xlR3JhYk5EcmFnKCk7XG4gIH1cblxuICBwdWJsaWMgaXNQZGYoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFR5cGUgPT09ICdwZGYnO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlYXJjaEJhcigpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2VhcmNoQmFySGlkZGVuLm5leHQoIXRoaXMudG9vbGJhckV2ZW50cy5zZWFyY2hCYXJIaWRkZW4uZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlTW9yZU9wdGlvbnMoKSB7XG4gICAgdGhpcy5pc0Ryb3Bkb3duTWVudU9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duTWVudU9wZW47XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tdk1lbnVJdGVtcykge1xuICAgICAgICB0aGlzLm12TWVudUl0ZW1zLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidG9vbGJhclwiPlxuICA8ZGl2IGlkPVwidG9vbGJhckNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtdi10b29sYmFyX19jb250YWluZXJcIj5cbiAgICAgIDxkaXYgI212VG9vbGJhciBjbGFzcz1cIm12LXRvb2xiYXJcIiBbY2xhc3Mubm90U3VwcG9ydGVkXT1cIiFjb250ZW50VHlwZVwiPlxuICAgICAgICA8IS0tIFRoZSBtdlRvb2xiYXJNYWluIGRpdiBjb250YWlucyBhbGwgdG9vbGJhciBidXR0b25zIGV4Y2VwdCB0aGUgXCJNb3JlIG9wdGlvbnNcIiBidXR0b24uIFRoaXMgYWxsb3dzIGZvciBjYWxjdWxhdGlvbiBvZiB0aGUgYXZhaWxhYmxlIHNwYWNlIHRvIGRpc3BsYXkgYnV0dG9ucyAtLT5cbiAgICAgICAgPGRpdiBpZD1cIm12VG9vbGJhck1haW5cIiBjbGFzcz1cIm12LXRvb2xiYXItbWFpblwiICNtdlRvb2xiYXJNYWluPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gVGhlIG12VG9vbGJhck1vcmVPcHRpb25zIGRpdiBjb250YWlucyB0aGUgXCJNb3JlIG9wdGlvbnNcIiB0b29sYmFyIGJ1dHRvbiAoYW5kIHRoZSBvdmVybGF5IHRlbXBsYXRlIGZvciB0aGUgZHJvcGRvd24gbWVudSkuXG4gICAgICAgICAgICBUaGUgc3BhY2Ugb2NjdXBpZWQgYnkgdGhlIGJ1dHRvbiAoaWYgdmlzaWJsZSkgaXMgZXhjbHVkZWQgZnJvbSB0aGUgdG9vbGJhciBzcGFjZSBhdmFpbGFibGUgY2FsY3VsYXRpb24gLS0+XG4gICAgICAgIDxkaXYgaWQ9XCJtdlRvb2xiYXJNb3JlT3B0aW9uc1wiIGNsYXNzPVwibXYtdG9vbGJhci1tb3JlLW9wdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBpZD1cIm12TW9yZU9wdGlvbnNCdG5cIlxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLW1vcmUtb3B0aW9uc1wiXG4gICAgICAgICAgICBbY2xhc3MubXYtdG9vbGJhcl9fbWVudS1idXR0b24tLW1vcmUtb3B0aW9uc19faGlkZGVuXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXIub2Zmc2V0V2lkdGggPj0gYWxsQnV0dG9uc1dpZHRoXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1vcmVPcHRpb25zKClcIlxuICAgICAgICAgICAgY2RrT3ZlcmxheU9yaWdpblxuICAgICAgICAgICAgI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj5Nb3JlIG9wdGlvbnM8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPCEtLSBUaGlzIHRlbXBsYXRlIGRpc3BsYXlzIHRoZSBvdmVybGF5IGNvbnRlbnQgZm9yIHRoZSBkcm9wZG93biBtZW51IGFuZCBpcyBjb25uZWN0ZWQgdG8gdGhlIFwiTW9yZSBvcHRpb25zXCIgYnV0dG9uIC0tPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXG4gICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwiaXNEcm9wZG93bk1lbnVPcGVuXCJcbiAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cImRyb3Bkb3duTWVudVBvc2l0aW9uc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiAjZHJvcGRvd25NZW51IHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudUl0ZW1zXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGlkPVwibXZNZW51SXRlbXNcIiAjbXZNZW51SXRlbXM+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbWVudUl0ZW1zPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd1NpZGViYXJcIlxuICAgICAgICAgICAgaWQ9XCJtdkluZGV4QnRuXCJcbiAgICAgICAgICAgIHRpdGxlPVwiSW5kZXhcIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwiaW5kZXhcIlxuICAgICAgICAgICAgI212SW5kZXhCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1pbmRleFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZJbmRleEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZJbmRleEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUluZGV4U2lkZUJhcigpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+SW5kZXg8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dTaWRlYmFyXCJcbiAgICAgICAgICAgIGlkPVwibXZCb29rbWFya3NCdG5cIlxuICAgICAgICAgICAgdGl0bGU9XCJCb29rbWFya3NcIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwiYm9va21hcmtzXCJcbiAgICAgICAgICAgICNtdkJvb2ttYXJrc0J0blxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnbXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1ib29rbWFya3MnOiB0cnVlLFxuICAgICAgICAgICAgICAnYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyJzpcbiAgICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDxcbiAgICAgICAgICAgICAgICB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkJvb2ttYXJrc0J0biddLFxuICAgICAgICAgICAgICAnYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bic6XG4gICAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PVxuICAgICAgICAgICAgICAgIHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212Qm9va21hcmtzQnRuJ11cbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUJvb2ttYXJrc1NpZGVCYXIoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPkJvb2ttYXJrczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd0RyYXdCdXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImljcEVuYWJsZWQgfHwgcmVkYWN0aW9uRW5hYmxlZFwiXG4gICAgICAgICAgICBpZD1cIm12RHJhd0J0blwiXG4gICAgICAgICAgICAjbXZEcmF3QnRuXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tZHJhd1wiXG4gICAgICAgICAgICB0aXRsZT1cIkRyYXcgYSBib3hcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZEcmF3QnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkRyYXdCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy50b2dnbGVkXT1cInRvb2xiYXJFdmVudHMuZHJhd01vZGVTdWJqZWN0IHwgYXN5bmNcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInRvZ2dsZURyYXdCdXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tEcmF3VG9nZ2xlKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJkcmF3X2xhYmVsXCI+RHJhdyBhIGJveDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd0hpZ2hsaWdodEJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3Rpb25FbmFibGVkXCJcbiAgICAgICAgICAgIGlkPVwibXZIaWdobGlnaHRCdG5cIlxuICAgICAgICAgICAgI212SGlnaGxpZ2h0QnRuXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0taGlnaGxpZ2h0XCJcbiAgICAgICAgICAgIHRpdGxlPVwiSGlnaGxpZ2h0XCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZIaWdobGlnaHRCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLWRyb3Bkb3duXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoID49IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212SGlnaGxpZ2h0QnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MudG9nZ2xlZF09XCJ0b29sYmFyRXZlbnRzLmhpZ2hsaWdodE1vZGVTdWJqZWN0IHwgYXN5bmNcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrSGlnaGxpZ2h0VG9nZ2xlKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInRvZ2dsZUhpZ2hsaWdodEJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gZGF0YS1sMTBuLWlkPVwiaGlnaGxpZ2h0X2xhYmVsXCI+SGlnaGxpZ2h0PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dOYXZpZ2F0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGlkPVwibXZQYWdlQnRuXCJcbiAgICAgICAgICAgICAgI212UGFnZUJ0blxuICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1wYWdlXCJcbiAgICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPCB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlBhZ2VCdG4nXVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoID49IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212UGFnZUJ0biddXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuPlBhZ2U8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwibXZVcEJ0blwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2VOdW1iZXIgPT09IDEgfHwgcmVkYWN0QWxsSW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJQcmV2aW91cyBQYWdlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS11cCBidXR0b24taW1hZ2VcIlxuICAgICAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInByZXZpb3VzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVjcmVhc2VQYWdlTnVtYmVyKClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBpZD1cIm12RG93bkJ0blwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2VOdW1iZXIgPT09IHBhZ2VDb3VudCB8fCByZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIk5leHQgUGFnZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tZG93biBidXR0b24taW1hZ2VcIlxuICAgICAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cIm5leHRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJpbmNyZWFzZVBhZ2VOdW1iZXIoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgIGlkPVwicGFnZU51bWJlclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJobWN0cy10b29sYmFyLWlucHV0IGdvdnVrLWlucHV0LS13aWR0aC0yXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlBhZ2UgTnVtYmVyXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIjFcIlxuICAgICAgICAgICAgICAgIHNpemU9XCI0XCJcbiAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicGFnZU51bWJlclwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cInBhZ2UgbnVtYmVyXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInBhZ2VcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25QYWdlTnVtYmVySW5wdXRDaGFuZ2UocGFnZU51bWJlcklucHV0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgICNwYWdlTnVtYmVySW5wdXRcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJudW1QYWdlc1wiIGNsYXNzPVwidG9vbGJhckxhYmVsXCI+LyB7eyBwYWdlQ291bnQgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sYmFyQnV0dG9ucy5zaG93Wm9vbVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBpZD1cIm12Wm9vbUJ0blwiXG4gICAgICAgICAgICAgICNtdlpvb21CdG5cbiAgICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tem9vbVwiXG4gICAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tdG9vbGJhcl09XCJcbiAgICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZab29tQnRuJ11cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlpvb21CdG4nXVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgdG9vbGJhckV2ZW50cy56b29tVmFsdWVTdWJqZWN0LnZhbHVlID09PSAwLjEgfHxcbiAgICAgICAgICAgICAgICAgIHJlZGFjdEFsbEluUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGlkPVwibXZNaW51c0J0blwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tem9vbS1vdXQgYnV0dG9uLWltYWdlXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlpvb20gT3V0XCJcbiAgICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJ6b29tX291dFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0ZXBab29tKC0wLjEpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICBpZD1cInNjYWxlU2VsZWN0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhtY3RzLXRvb2xiYXItc2VsZWN0XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlpvb21cIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwiem9vbVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ6b29tKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiem9vbVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgI3pvb21TZWxlY3RcbiAgICAgICAgICAgICAgICAgIGlkPVwiY3VzdG9tU2NhbGVPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRvb2xiYXJFdmVudHMuem9vbVZhbHVlU3ViamVjdC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgdG9vbGJhckV2ZW50cy56b29tVmFsdWVTdWJqZWN0LnZhbHVlICogMTAwXG4gICAgICAgICAgICAgICAgICAgICAgfCBudW1iZXIgOiBcIjEuMC0wXCJcbiAgICAgICAgICAgICAgICAgIH19JVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB6b29tU2NhbGUgb2Ygem9vbVNjYWxlc1wiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIlwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiem9vbVNjYWxlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtbDEwbi1pZF09XCIncGFnZV9zY2FsZV9wZXJjZW50XycgKyB6b29tU2NhbGUgKiAxMDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHpvb21TY2FsZSAqIDEwMCB9fSVcbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgIHRvb2xiYXJFdmVudHMuem9vbVZhbHVlU3ViamVjdC52YWx1ZSA9PT0gNSB8fFxuICAgICAgICAgICAgICAgICAgcmVkYWN0QWxsSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJtdlBsdXNCdG5cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXpvb20taW4gYnV0dG9uLWltYWdlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RlcFpvb20oMC4xKVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJab29tIEluXCJcbiAgICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJ6b29tX2luXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd1JvdGF0ZVwiXG4gICAgICAgICAgICBpZD1cIm12Um90YXRlQnRuXCJcbiAgICAgICAgICAgICNtdlJvdGF0ZUJ0blxuICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tcm90YXRlXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLXRvb2xiYXJdPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPCB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlJvdGF0ZUJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZSb3RhdGVCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwibXZSb3RhdGVMZWZ0QnRuXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tcm90YXRlX2xlZnQgYnV0dG9uLWltYWdlXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJSb3RhdGUgQ291bnRlcmNsb2Nrd2lzZVwiXG4gICAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInBhZ2Vfcm90YXRlX2Njd1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyb3RhdGUoMjcwKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGlkPVwibXZSb3RhdGVSaWdodEJ0blwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXJvdGF0ZV9yaWdodCBidXR0b24taW1hZ2VcIlxuICAgICAgICAgICAgICB0aXRsZT1cIlJvdGF0ZSBDbG9ja3dpc2VcIlxuICAgICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJwYWdlX3JvdGF0ZV9jd1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyb3RhdGUoOTApXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuPlJvdGF0ZTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd1NlYXJjaEJhclwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgIGlkPVwibXZTZWFyY2hCdG5cIlxuICAgICAgICAgICAgI212U2VhcmNoQnRuXG4gICAgICAgICAgICB0aXRsZT1cIlNlYXJjaFwiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJzZWFyY2hiYXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLXNlYXJjaFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZTZWFyY2hCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLWRyb3Bkb3duXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoID49IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212U2VhcmNoQnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VhcmNoQmFyKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICA+PC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImVuYWJsZUlDUCAmJiB0b29sYmFyQnV0dG9ucy5zaG93UHJlc2VudGF0aW9uTW9kZSAmJiBpc1BkZigpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpY3BFbmFibGVkIHx8ICFjb250ZW50VHlwZSB8fCByZWRhY3Rpb25FbmFibGVkXCJcbiAgICAgICAgICAgIGlkPVwibXZQcmVzZW50QnRuXCJcbiAgICAgICAgICAgICNtdlByZXNlbnRCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1wcmVzZW50XCJcbiAgICAgICAgICAgIHRpdGxlPVwiSW4tQ291cnQgUHJlc2VudGF0aW9uIE1vZGVcIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwiaWNwTW9kZV9sYWJlbFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZQcmVzZW50QnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlByZXNlbnRCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQcmVzZW50QmFyKCk7IGlzRHJvcGRvd25NZW51T3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJpY3BNb2RlX2xhYmVsXCI+UHJlc2VudDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlUmVkYWN0aW9ucyAmJiB0b29sYmFyQnV0dG9ucy5zaG93UmVkYWN0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpY3BFbmFibGVkIHx8IHJlZGFjdEFsbEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgaWQ9XCJtdlJlZGFjdEJ0blwiXG4gICAgICAgICAgICAjbXZSZWRhY3RCdG5cbiAgICAgICAgICAgIHRpdGxlPVwiUmVkYWN0XCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInJlZGFjdFwiXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tcmVkYWN0XCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLXRvb2xiYXJdPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPCB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdlJlZGFjdEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZSZWRhY3RCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSZWRhY3RCYXIoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPlJlZGFjdDwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd0dyYWJORHJhZ0J1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3RBbGxJblByb2dyZXNzXCJcbiAgICAgICAgICAgIGlkPVwibXZHcmFiQnRuXCJcbiAgICAgICAgICAgICNtdkdyYWJCdG5cbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1ncmFiXCJcbiAgICAgICAgICAgIHRpdGxlPVwiR3JhYiBhbmQgZHJhZ1wiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZHcmFiQnRuJ11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi1kcm9wZG93bl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA+PSB3aWR0aFJlcXVpcmVkRm9yQnRuWydtdkdyYWJCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVHcmFiTkRyYWcoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPkdyYWIgYW5kIGRyYWc8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInRvb2xiYXJCdXR0b25zLnNob3dEb3dubG9hZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWNwRW5hYmxlZCB8fCByZWRhY3Rpb25FbmFibGVkXCJcbiAgICAgICAgICAgIGlkPVwibXZEb3dubG9hZEJ0blwiXG4gICAgICAgICAgICAjbXZEb3dubG9hZEJ0blxuICAgICAgICAgICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLWRvd25sb2FkXCJcbiAgICAgICAgICAgIHRpdGxlPVwiRG93bmxvYWRcIlxuICAgICAgICAgICAgZGF0YS1sMTBuLWlkPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tdG9vbGJhcl09XCJcbiAgICAgICAgICAgICAgbXZUb29sYmFyTWFpbi5vZmZzZXRXaWR0aCA8IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212RG93bmxvYWRCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5idXR0b24taGlkZGVuLW9uLWRyb3Bkb3duXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoID49IHdpZHRoUmVxdWlyZWRGb3JCdG5bJ212RG93bmxvYWRCdG4nXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEZpbGUoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidG9vbGJhckJ1dHRvbnMuc2hvd1ByaW50XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpY3BFbmFibGVkIHx8IHJlZGFjdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgaWQ9XCJtdlByaW50QnRuXCJcbiAgICAgICAgICAgICNtdlByaW50QnRuXG4gICAgICAgICAgICB0aXRsZT1cIlByaW50XCJcbiAgICAgICAgICAgIGRhdGEtbDEwbi1pZD1cInByaW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1wcmludFwiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZQcmludEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZQcmludEJ0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInByaW50RmlsZSgpOyBpc0Ryb3Bkb3duTWVudU9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVBbm5vdGF0aW9ucyAmJiB0b29sYmFyQnV0dG9ucy5zaG93Q29tbWVudFN1bW1hcnlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZGFjdGlvbkVuYWJsZWRcIlxuICAgICAgICAgICAgaWQ9XCJtdkNvbW1lbnRzQnRuXCJcbiAgICAgICAgICAgICNtdkNvbW1lbnRzQnRuXG4gICAgICAgICAgICBjbGFzcz1cIm12LWJ1dHRvbiBtdi10b29sYmFyX19tZW51LWJ1dHRvbi0tY29tbWVudHNcIlxuICAgICAgICAgICAgdGl0bGU9XCJDb21tZW50c1wiXG4gICAgICAgICAgICBkYXRhLWwxMG4taWQ9XCJjb21tZW50c1wiXG4gICAgICAgICAgICBbY2xhc3MuYnV0dG9uLWhpZGRlbi1vbi10b29sYmFyXT1cIlxuICAgICAgICAgICAgICBtdlRvb2xiYXJNYWluLm9mZnNldFdpZHRoIDwgd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZDb21tZW50c0J0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmJ1dHRvbi1oaWRkZW4tb24tZHJvcGRvd25dPVwiXG4gICAgICAgICAgICAgIG12VG9vbGJhck1haW4ub2Zmc2V0V2lkdGggPj0gd2lkdGhSZXF1aXJlZEZvckJ0blsnbXZDb21tZW50c0J0biddXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbW1lbnRzUGFuZWwoKTsgaXNEcm9wZG93bk1lbnVPcGVuID0gZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPkNvbW1lbnRzPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgICA8bXYtc2VhcmNoLWJhcj48L212LXNlYXJjaC1iYXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGlkPVwibG9hZGluZ0JhclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnbGltbWVyXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|