@hmcts/ccd-case-ui-toolkit 5.0.7-angular11-upgrade → 5.0.10-angular11-upgrade
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/README.md +191 -0
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +21862 -14323
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -16
- package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
- package/esm2015/lib/shared/components/case-editor/case-create/case-create.component.js +94 -0
- package/esm2015/lib/shared/components/case-editor/case-create/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-edit/case-edit.component.js +113 -0
- package/esm2015/lib/shared/components/case-editor/case-edit/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.js +131 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-confirm/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.js +146 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-form/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page-text.enum.js +11 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.js +654 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-page/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.js +759 -0
- package/esm2015/lib/shared/components/case-editor/case-edit-submit/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/case-editor.module.js +185 -0
- package/esm2015/lib/shared/components/case-editor/case-event-completion/case-event-completion.component.js +89 -0
- package/esm2015/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.js +72 -0
- package/esm2015/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.js +157 -0
- package/esm2015/lib/shared/components/case-editor/case-event-completion/index.js +4 -0
- package/esm2015/lib/shared/components/case-editor/case-progress/case-progress.component.js +85 -0
- package/esm2015/lib/shared/components/case-editor/case-progress/index.js +2 -0
- package/esm2015/lib/shared/components/case-editor/domain/event-completion-params.model.js +2 -0
- package/esm2015/lib/shared/components/case-editor/domain/event-completion-portal-types.model.js +6 -0
- package/esm2015/lib/shared/components/case-editor/editor.routing.js +31 -0
- package/esm2015/lib/shared/components/case-editor/index.js +13 -0
- package/esm2015/lib/shared/components/case-editor/services/case-edit-wizard.guard.js +92 -0
- package/esm2015/lib/shared/components/case-editor/services/convert-href-to-router.service.js +41 -0
- package/esm2015/lib/shared/components/case-editor/services/event-completion-state-machine.service.js +162 -0
- package/esm2015/lib/shared/components/case-editor/services/event-trigger.service.js +20 -0
- package/esm2015/lib/shared/components/case-editor/services/index.js +12 -0
- package/esm2015/lib/shared/components/case-editor/services/page-validation.service.js +50 -0
- package/esm2015/lib/shared/components/case-editor/services/wizard-factory.service.js +7 -0
- package/esm2015/lib/shared/components/case-history/case-history.component.js +264 -0
- package/esm2015/lib/shared/components/case-history/case-history.module.js +52 -0
- package/esm2015/lib/shared/components/case-history/domain/case-history.model.js +28 -0
- package/esm2015/lib/shared/components/case-history/index.js +3 -0
- package/esm2015/lib/shared/components/case-history/services/case-history.service.js +40 -0
- package/esm2015/lib/shared/components/case-timeline/case-timeline.component.js +118 -0
- package/esm2015/lib/shared/components/case-timeline/case-timeline.module.js +46 -0
- package/esm2015/lib/shared/components/case-timeline/index.js +3 -0
- package/esm2015/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.js +195 -0
- package/esm2015/lib/shared/components/case-viewer/case-basic-access-view/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.js +307 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/models/case-challenged-access-request.enum.js +20 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/models/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.js +64 -0
- package/esm2015/lib/shared/components/case-viewer/case-challenged-access-success/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.js +120 -0
- package/esm2015/lib/shared/components/case-viewer/case-event-trigger/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +545 -0
- package/esm2015/lib/shared/components/case-viewer/case-full-access-view/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.js +63 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-reject/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.js +258 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/models/case-review-specific-access-request.enum.js +18 -0
- package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/models/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.js +195 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.js +11 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/models/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.js +60 -0
- package/esm2015/lib/shared/components/case-viewer/case-specific-access-success/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-view/case-view.component.js +100 -0
- package/esm2015/lib/shared/components/case-viewer/case-view/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/case-viewer.component.js +129 -0
- package/esm2015/lib/shared/components/case-viewer/case-viewer.module.js +155 -0
- package/esm2015/lib/shared/components/case-viewer/index.js +14 -0
- package/esm2015/lib/shared/components/case-viewer/printer/case-printer.component.js +111 -0
- package/esm2015/lib/shared/components/case-viewer/printer/index.js +4 -0
- package/esm2015/lib/shared/components/case-viewer/printer/pipes/index.js +2 -0
- package/esm2015/lib/shared/components/case-viewer/printer/pipes/print-url.pipe.js +60 -0
- package/esm2015/lib/shared/components/case-viewer/services/case.resolver.js +110 -0
- package/esm2015/lib/shared/components/case-viewer/services/event-trigger.resolver.js +64 -0
- package/esm2015/lib/shared/components/case-viewer/services/index.js +3 -0
- package/esm2015/lib/shared/components/case-viewer/viewer.routing.js +127 -0
- package/esm2015/lib/shared/components/event-trigger/event-trigger.component.js +108 -0
- package/esm2015/lib/shared/components/event-trigger/event-trigger.module.js +35 -0
- package/esm2015/lib/shared/components/event-trigger/index.js +3 -0
- package/esm2015/lib/shared/components/index.js +5 -5
- package/esm2015/lib/shared/components/palette/complex/index.js +1 -7
- package/esm2015/lib/shared/components/palette/complex/write-complex-field.component.js +2 -2
- package/esm2015/lib/shared/components/palette/palette.module.js +16 -27
- package/esm2015/lib/shared/components/search-result/index.js +3 -0
- package/esm2015/lib/shared/components/search-result/search-result.component.js +845 -0
- package/esm2015/lib/shared/components/search-result/search-result.module.js +67 -0
- package/esm2015/lib/shared/domain/case-view/role-request.model.js +1 -1
- package/esm2015/lib/shared/pipes/complex/ccd-collection-table-value-case-fields.pipe.js +29 -0
- package/esm2015/lib/shared/pipes/complex/ccd-cyapage-label-filter.pipe.js +29 -0
- package/esm2015/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.js +154 -0
- package/esm2015/lib/shared/pipes/complex/ccd-tab-fields.pipe.js +31 -0
- package/esm2015/lib/shared/pipes/complex/cdd-page-fields.pipe.js +39 -0
- package/esm2015/lib/shared/pipes/complex/fields-filter.pipe.js +103 -0
- package/esm2015/lib/shared/pipes/complex/index.js +7 -0
- package/esm2015/lib/shared/pipes/index.js +3 -2
- package/esm2015/lib/shared/pipes/pipes.module.js +26 -9
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js +19417 -12703
- package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
- package/lib/shared/components/case-editor/case-create/case-create.component.d.ts +33 -0
- package/lib/shared/components/case-editor/case-create/case-create.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-create/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-create/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts +50 -0
- package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-edit/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.d.ts +26 -0
- package/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-confirm/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-edit-confirm/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.d.ts +26 -0
- package/lib/shared/components/case-editor/case-edit-form/case-edit-form.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-form/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-edit-form/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page-text.enum.d.ts +10 -0
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page-text.enum.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +100 -0
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-page/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-edit-page/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +123 -0
- package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-edit-submit/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-edit-submit/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-editor.module.d.ts +27 -0
- package/lib/shared/components/case-editor/case-editor.module.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-event-completion/case-event-completion.component.d.ts +31 -0
- package/lib/shared/components/case-editor/case-event-completion/case-event-completion.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.d.ts +11 -0
- package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts +32 -0
- package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-event-completion/index.d.ts +4 -0
- package/lib/shared/components/case-editor/case-event-completion/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-progress/case-progress.component.d.ts +30 -0
- package/lib/shared/components/case-editor/case-progress/case-progress.component.d.ts.map +1 -0
- package/lib/shared/components/case-editor/case-progress/index.d.ts +2 -0
- package/lib/shared/components/case-editor/case-progress/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/domain/event-completion-params.model.d.ts +7 -0
- package/lib/shared/components/case-editor/domain/event-completion-params.model.d.ts.map +1 -0
- package/lib/shared/components/case-editor/domain/event-completion-portal-types.model.d.ts +5 -0
- package/lib/shared/components/case-editor/domain/event-completion-portal-types.model.d.ts.map +1 -0
- package/lib/shared/components/case-editor/editor.routing.d.ts +3 -0
- package/lib/shared/components/case-editor/editor.routing.d.ts.map +1 -0
- package/lib/shared/components/case-editor/index.d.ts +13 -0
- package/lib/shared/components/case-editor/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/case-edit-wizard.guard.d.ts +23 -0
- package/lib/shared/components/case-editor/services/case-edit-wizard.guard.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/convert-href-to-router.service.d.ts +14 -0
- package/lib/shared/components/case-editor/services/convert-href-to-router.service.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts +33 -0
- package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/event-trigger.service.d.ts +10 -0
- package/lib/shared/components/case-editor/services/event-trigger.service.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/index.d.ts +12 -0
- package/lib/shared/components/case-editor/services/index.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/page-validation.service.d.ts +17 -0
- package/lib/shared/components/case-editor/services/page-validation.service.d.ts.map +1 -0
- package/lib/shared/components/case-editor/services/wizard-factory.service.d.ts +6 -0
- package/lib/shared/components/case-editor/services/wizard-factory.service.d.ts.map +1 -0
- package/lib/shared/components/case-history/case-history.component.d.ts +33 -0
- package/lib/shared/components/case-history/case-history.component.d.ts.map +1 -0
- package/lib/shared/components/case-history/case-history.module.d.ts +14 -0
- package/lib/shared/components/case-history/case-history.module.d.ts.map +1 -0
- package/lib/shared/components/case-history/domain/case-history.model.d.ts +16 -0
- package/lib/shared/components/case-history/domain/case-history.model.d.ts.map +1 -0
- package/lib/shared/components/case-history/index.d.ts +3 -0
- package/lib/shared/components/case-history/index.d.ts.map +1 -0
- package/lib/shared/components/case-history/services/case-history.service.d.ts +17 -0
- package/lib/shared/components/case-history/services/case-history.service.d.ts.map +1 -0
- package/lib/shared/components/case-timeline/case-timeline.component.d.ts +27 -0
- package/lib/shared/components/case-timeline/case-timeline.component.d.ts.map +1 -0
- package/lib/shared/components/case-timeline/case-timeline.module.d.ts +13 -0
- package/lib/shared/components/case-timeline/case-timeline.module.d.ts.map +1 -0
- package/lib/shared/components/case-timeline/index.d.ts +3 -0
- package/lib/shared/components/case-timeline/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.d.ts +19 -0
- package/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-basic-access-view/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-basic-access-view/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.d.ts +40 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/models/case-challenged-access-request.enum.d.ts +17 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/models/case-challenged-access-request.enum.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/models/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-challenged-access-request/models/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.d.ts +12 -0
- package/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-challenged-access-success/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-challenged-access-success/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts +41 -0
- package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-event-trigger/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-event-trigger/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +90 -0
- package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-full-access-view/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-full-access-view/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.d.ts +14 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-reject/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-reject/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.d.ts +49 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/models/case-review-specific-access-request.enum.d.ts +15 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/models/case-review-specific-access-request.enum.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/models/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-review-specific-access-request/models/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts +33 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.d.ts +9 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/models/case-specific-access-request.enum.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/models/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-specific-access-request/models/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.d.ts +12 -0
- package/lib/shared/components/case-viewer/case-specific-access-success/case-specific-access-success.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-specific-access-success/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-specific-access-success/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-view/case-view.component.d.ts +32 -0
- package/lib/shared/components/case-viewer/case-view/case-view.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-view/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/case-view/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-viewer.component.d.ts +32 -0
- package/lib/shared/components/case-viewer/case-viewer.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/case-viewer.module.d.ts +36 -0
- package/lib/shared/components/case-viewer/case-viewer.module.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/index.d.ts +14 -0
- package/lib/shared/components/case-viewer/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/printer/case-printer.component.d.ts +24 -0
- package/lib/shared/components/case-viewer/printer/case-printer.component.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/printer/index.d.ts +4 -0
- package/lib/shared/components/case-viewer/printer/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/printer/pipes/index.d.ts +2 -0
- package/lib/shared/components/case-viewer/printer/pipes/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/printer/pipes/print-url.pipe.d.ts +24 -0
- package/lib/shared/components/case-viewer/printer/pipes/print-url.pipe.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/services/case.resolver.d.ts +29 -0
- package/lib/shared/components/case-viewer/services/case.resolver.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/services/event-trigger.resolver.d.ts +26 -0
- package/lib/shared/components/case-viewer/services/event-trigger.resolver.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/services/index.d.ts +3 -0
- package/lib/shared/components/case-viewer/services/index.d.ts.map +1 -0
- package/lib/shared/components/case-viewer/viewer.routing.d.ts +3 -0
- package/lib/shared/components/case-viewer/viewer.routing.d.ts.map +1 -0
- package/lib/shared/components/event-trigger/event-trigger.component.d.ts +24 -0
- package/lib/shared/components/event-trigger/event-trigger.component.d.ts.map +1 -0
- package/lib/shared/components/event-trigger/event-trigger.module.d.ts +11 -0
- package/lib/shared/components/event-trigger/event-trigger.module.d.ts.map +1 -0
- package/lib/shared/components/event-trigger/index.d.ts +3 -0
- package/lib/shared/components/event-trigger/index.d.ts.map +1 -0
- package/lib/shared/components/index.d.ts +4 -0
- package/lib/shared/components/index.d.ts.map +1 -1
- package/lib/shared/components/palette/complex/index.d.ts +0 -6
- package/lib/shared/components/palette/complex/index.d.ts.map +1 -1
- package/lib/shared/components/palette/complex/write-complex-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/palette.module.d.ts +87 -93
- package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
- package/lib/shared/components/search-result/index.d.ts +3 -0
- package/lib/shared/components/search-result/index.d.ts.map +1 -0
- package/lib/shared/components/search-result/search-result.component.d.ts +111 -0
- package/lib/shared/components/search-result/search-result.component.d.ts.map +1 -0
- package/lib/shared/components/search-result/search-result.module.d.ts +16 -0
- package/lib/shared/components/search-result/search-result.module.d.ts.map +1 -0
- package/lib/shared/domain/case-view/role-request.model.d.ts.map +1 -1
- package/lib/shared/{components/palette → pipes}/complex/ccd-collection-table-value-case-fields.pipe.d.ts +1 -1
- package/lib/shared/pipes/complex/ccd-collection-table-value-case-fields.pipe.d.ts.map +1 -0
- package/lib/shared/{components/palette → pipes}/complex/ccd-cyapage-label-filter.pipe.d.ts +1 -1
- package/lib/shared/pipes/complex/ccd-cyapage-label-filter.pipe.d.ts.map +1 -0
- package/lib/shared/{components/palette → pipes}/complex/ccd-read-fields-filter.pipe.d.ts +1 -1
- package/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.d.ts.map +1 -0
- package/lib/shared/{components/palette → pipes}/complex/ccd-tab-fields.pipe.d.ts +2 -2
- package/lib/shared/pipes/complex/ccd-tab-fields.pipe.d.ts.map +1 -0
- package/lib/shared/{components/palette → pipes}/complex/cdd-page-fields.pipe.d.ts +2 -2
- package/lib/shared/pipes/complex/cdd-page-fields.pipe.d.ts.map +1 -0
- package/lib/shared/{components/palette → pipes}/complex/fields-filter.pipe.d.ts +1 -1
- package/lib/shared/pipes/complex/fields-filter.pipe.d.ts.map +1 -0
- package/lib/shared/pipes/complex/index.d.ts +7 -0
- package/lib/shared/pipes/complex/index.d.ts.map +1 -0
- package/lib/shared/pipes/index.d.ts +2 -1
- package/lib/shared/pipes/index.d.ts.map +1 -1
- package/lib/shared/pipes/pipes.module.d.ts +7 -2
- package/lib/shared/pipes/pipes.module.d.ts.map +1 -1
- package/package.json +1 -1
- package/esm2015/lib/shared/components/palette/complex/ccd-collection-table-value-case-fields.pipe.js +0 -29
- package/esm2015/lib/shared/components/palette/complex/ccd-cyapage-label-filter.pipe.js +0 -29
- package/esm2015/lib/shared/components/palette/complex/ccd-read-fields-filter.pipe.js +0 -154
- package/esm2015/lib/shared/components/palette/complex/ccd-tab-fields.pipe.js +0 -31
- package/esm2015/lib/shared/components/palette/complex/cdd-page-fields.pipe.js +0 -39
- package/esm2015/lib/shared/components/palette/complex/fields-filter.pipe.js +0 -103
- package/lib/shared/components/palette/complex/ccd-collection-table-value-case-fields.pipe.d.ts.map +0 -1
- package/lib/shared/components/palette/complex/ccd-cyapage-label-filter.pipe.d.ts.map +0 -1
- package/lib/shared/components/palette/complex/ccd-read-fields-filter.pipe.d.ts.map +0 -1
- package/lib/shared/components/palette/complex/ccd-tab-fields.pipe.d.ts.map +0 -1
- package/lib/shared/components/palette/complex/cdd-page-fields.pipe.d.ts.map +0 -1
- package/lib/shared/components/palette/complex/fields-filter.pipe.d.ts.map +0 -1
package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.js
ADDED
|
@@ -0,0 +1,759 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup } from '@angular/forms';
|
|
3
|
+
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { PaletteContext } from '../../../components/palette/base-field/palette-context.enum';
|
|
6
|
+
import { CaseFieldService } from '../../../services/case-fields/case-field.service';
|
|
7
|
+
import { FieldsUtils } from '../../../services/fields/fields.utils';
|
|
8
|
+
import { FormErrorService } from '../../../services/form/form-error.service';
|
|
9
|
+
import { FormValueService } from '../../../services/form/form-value.service';
|
|
10
|
+
import { OrderService } from '../../../services/order/order.service';
|
|
11
|
+
import { ProfileNotifier } from '../../../services/profile/profile.notifier';
|
|
12
|
+
import { SessionStorageService } from '../../../services/session/session-storage.service';
|
|
13
|
+
import { CallbackErrorsComponent } from '../../error';
|
|
14
|
+
import { CaseEditPageText } from '../case-edit-page/case-edit-page-text.enum';
|
|
15
|
+
import { CaseEditComponent } from '../case-edit/case-edit.component';
|
|
16
|
+
import { Confirmation } from '../domain/confirmation.model';
|
|
17
|
+
import { CaseNotifier } from '../services/case.notifier';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
import * as i1 from "../case-edit/case-edit.component";
|
|
20
|
+
import * as i2 from "../../../services/form/form-value.service";
|
|
21
|
+
import * as i3 from "../../../services/form/form-error.service";
|
|
22
|
+
import * as i4 from "../../../services/fields/fields.utils";
|
|
23
|
+
import * as i5 from "../../../services/case-fields/case-field.service";
|
|
24
|
+
import * as i6 from "@angular/router";
|
|
25
|
+
import * as i7 from "../../../services/order/order.service";
|
|
26
|
+
import * as i8 from "../../../services/profile/profile.notifier";
|
|
27
|
+
import * as i9 from "../../../services/session/session-storage.service";
|
|
28
|
+
import * as i10 from "../services/case.notifier";
|
|
29
|
+
function CaseEditSubmitComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
30
|
+
i0.ɵɵelement(0, "div");
|
|
31
|
+
} }
|
|
32
|
+
function CaseEditSubmitComponent_div_0_ng_template_4_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
+
i0.ɵɵelement(0, "ccd-markdown", 14);
|
|
34
|
+
i0.ɵɵpipe(1, "ccdCaseTitle");
|
|
35
|
+
} if (rf & 2) {
|
|
36
|
+
const ctx_r4 = i0.ɵɵnextContext(2);
|
|
37
|
+
i0.ɵɵproperty("content", i0.ɵɵpipeBind3(1, 1, ctx_r4.getCaseTitle(), ctx_r4.contextFields, ctx_r4.editForm.controls["data"]));
|
|
38
|
+
} }
|
|
39
|
+
function CaseEditSubmitComponent_div_0_ng_template_6_h2_0_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
i0.ɵɵelementStart(0, "h2", 16);
|
|
41
|
+
i0.ɵɵtext(1);
|
|
42
|
+
i0.ɵɵpipe(2, "ccdCaseReference");
|
|
43
|
+
i0.ɵɵelementEnd();
|
|
44
|
+
} if (rf & 2) {
|
|
45
|
+
const ctx_r12 = i0.ɵɵnextContext(3);
|
|
46
|
+
i0.ɵɵadvance(1);
|
|
47
|
+
i0.ɵɵtextInterpolate1("#", i0.ɵɵpipeBind1(2, 1, ctx_r12.getCaseId()), "");
|
|
48
|
+
} }
|
|
49
|
+
function CaseEditSubmitComponent_div_0_ng_template_6_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
+
i0.ɵɵtemplate(0, CaseEditSubmitComponent_div_0_ng_template_6_h2_0_Template, 3, 3, "h2", 15);
|
|
51
|
+
} if (rf & 2) {
|
|
52
|
+
const ctx_r6 = i0.ɵɵnextContext(2);
|
|
53
|
+
i0.ɵɵproperty("ngIf", ctx_r6.getCaseId());
|
|
54
|
+
} }
|
|
55
|
+
function CaseEditSubmitComponent_div_0_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
56
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
57
|
+
i0.ɵɵelementStart(1, "h1", 18);
|
|
58
|
+
i0.ɵɵtext(2, " Something went wrong ");
|
|
59
|
+
i0.ɵɵelementEnd();
|
|
60
|
+
i0.ɵɵelementStart(3, "div", 19);
|
|
61
|
+
i0.ɵɵelementStart(4, "p");
|
|
62
|
+
i0.ɵɵtext(5, "We're working to fix the problem. Try again shortly.");
|
|
63
|
+
i0.ɵɵelementEnd();
|
|
64
|
+
i0.ɵɵelementStart(6, "p");
|
|
65
|
+
i0.ɵɵelementStart(7, "a", 20);
|
|
66
|
+
i0.ɵɵtext(8, "Contact us");
|
|
67
|
+
i0.ɵɵelementEnd();
|
|
68
|
+
i0.ɵɵtext(9, " if you're still having problems.");
|
|
69
|
+
i0.ɵɵelementEnd();
|
|
70
|
+
i0.ɵɵelementEnd();
|
|
71
|
+
i0.ɵɵelementEnd();
|
|
72
|
+
} }
|
|
73
|
+
function CaseEditSubmitComponent_div_0_div_9_ul_5_li_1_Template(rf, ctx) { if (rf & 1) {
|
|
74
|
+
i0.ɵɵelementStart(0, "li", 25);
|
|
75
|
+
i0.ɵɵtext(1);
|
|
76
|
+
i0.ɵɵelementEnd();
|
|
77
|
+
} if (rf & 2) {
|
|
78
|
+
const fieldError_r15 = ctx.$implicit;
|
|
79
|
+
i0.ɵɵadvance(1);
|
|
80
|
+
i0.ɵɵtextInterpolate(fieldError_r15.message);
|
|
81
|
+
} }
|
|
82
|
+
function CaseEditSubmitComponent_div_0_div_9_ul_5_Template(rf, ctx) { if (rf & 1) {
|
|
83
|
+
i0.ɵɵelementStart(0, "ul", 23);
|
|
84
|
+
i0.ɵɵtemplate(1, CaseEditSubmitComponent_div_0_div_9_ul_5_li_1_Template, 2, 1, "li", 24);
|
|
85
|
+
i0.ɵɵelementEnd();
|
|
86
|
+
} if (rf & 2) {
|
|
87
|
+
const ctx_r13 = i0.ɵɵnextContext(3);
|
|
88
|
+
i0.ɵɵadvance(1);
|
|
89
|
+
i0.ɵɵproperty("ngForOf", ctx_r13.error.details.field_errors);
|
|
90
|
+
} }
|
|
91
|
+
function CaseEditSubmitComponent_div_0_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
92
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
93
|
+
i0.ɵɵelementStart(1, "h3", 21);
|
|
94
|
+
i0.ɵɵtext(2, " The event could not be created ");
|
|
95
|
+
i0.ɵɵelementEnd();
|
|
96
|
+
i0.ɵɵelementStart(3, "p");
|
|
97
|
+
i0.ɵɵtext(4);
|
|
98
|
+
i0.ɵɵelementEnd();
|
|
99
|
+
i0.ɵɵtemplate(5, CaseEditSubmitComponent_div_0_div_9_ul_5_Template, 2, 1, "ul", 22);
|
|
100
|
+
i0.ɵɵelementEnd();
|
|
101
|
+
} if (rf & 2) {
|
|
102
|
+
const ctx_r8 = i0.ɵɵnextContext(2);
|
|
103
|
+
i0.ɵɵadvance(4);
|
|
104
|
+
i0.ɵɵtextInterpolate(ctx_r8.error.message);
|
|
105
|
+
i0.ɵɵadvance(1);
|
|
106
|
+
i0.ɵɵproperty("ngIf", ctx_r8.error.details == null ? null : ctx_r8.error.details.field_errors);
|
|
107
|
+
} }
|
|
108
|
+
function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_th_2_Template(rf, ctx) { if (rf & 1) {
|
|
109
|
+
i0.ɵɵelementStart(0, "th", 35);
|
|
110
|
+
i0.ɵɵelementStart(1, "span", 26);
|
|
111
|
+
i0.ɵɵtext(2);
|
|
112
|
+
i0.ɵɵelementEnd();
|
|
113
|
+
i0.ɵɵelementEnd();
|
|
114
|
+
} if (rf & 2) {
|
|
115
|
+
const field_r20 = i0.ɵɵnextContext(2).$implicit;
|
|
116
|
+
i0.ɵɵadvance(2);
|
|
117
|
+
i0.ɵɵtextInterpolate(field_r20.label);
|
|
118
|
+
} }
|
|
119
|
+
function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_a_6_Template(rf, ctx) { if (rf & 1) {
|
|
120
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
121
|
+
i0.ɵɵelementStart(0, "a", 13);
|
|
122
|
+
i0.ɵɵlistener("click", function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_a_6_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r27); const page_r17 = i0.ɵɵnextContext(4).$implicit; const ctx_r25 = i0.ɵɵnextContext(3); return ctx_r25.navigateToPage(page_r17.id); });
|
|
123
|
+
i0.ɵɵelementStart(1, "span", 26);
|
|
124
|
+
i0.ɵɵtext(2, "Change");
|
|
125
|
+
i0.ɵɵelementEnd();
|
|
126
|
+
i0.ɵɵelementEnd();
|
|
127
|
+
} if (rf & 2) {
|
|
128
|
+
const field_r20 = i0.ɵɵnextContext(2).$implicit;
|
|
129
|
+
i0.ɵɵadvance(1);
|
|
130
|
+
i0.ɵɵattributeInterpolate1("aria-label", "Change ", field_r20.label, "");
|
|
131
|
+
} }
|
|
132
|
+
function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
133
|
+
i0.ɵɵelementContainerStart(0);
|
|
134
|
+
i0.ɵɵelementStart(1, "tr", 29);
|
|
135
|
+
i0.ɵɵtemplate(2, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_th_2_Template, 3, 1, "th", 30);
|
|
136
|
+
i0.ɵɵelementStart(3, "td", 31);
|
|
137
|
+
i0.ɵɵelement(4, "ccd-field-read", 32);
|
|
138
|
+
i0.ɵɵelementEnd();
|
|
139
|
+
i0.ɵɵelementStart(5, "td", 33);
|
|
140
|
+
i0.ɵɵtemplate(6, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_a_6_Template, 3, 1, "a", 34);
|
|
141
|
+
i0.ɵɵelementEnd();
|
|
142
|
+
i0.ɵɵelementEnd();
|
|
143
|
+
i0.ɵɵelementContainerEnd();
|
|
144
|
+
} if (rf & 2) {
|
|
145
|
+
const field_r20 = i0.ɵɵnextContext().$implicit;
|
|
146
|
+
const ctx_r21 = i0.ɵɵnextContext(5);
|
|
147
|
+
i0.ɵɵadvance(1);
|
|
148
|
+
i0.ɵɵproperty("caseField", field_r20)("hidden", field_r20.hidden)("formGroup", ctx_r21.editForm.controls["data"])("contextFields", ctx_r21.contextFields);
|
|
149
|
+
i0.ɵɵadvance(1);
|
|
150
|
+
i0.ɵɵproperty("ngIf", !ctx_r21.isLabel(field_r20));
|
|
151
|
+
i0.ɵɵadvance(1);
|
|
152
|
+
i0.ɵɵattribute("colspan", ctx_r21.isLabel(field_r20) ? "2" : "1");
|
|
153
|
+
i0.ɵɵadvance(1);
|
|
154
|
+
i0.ɵɵproperty("formGroup", ctx_r21.editForm.controls["data"])("topLevelFormGroup", ctx_r21.editForm.controls["data"])("caseField", ctx_r21.summaryCaseField(field_r20))("context", ctx_r21.paletteContext)("caseFields", ctx_r21.contextFields);
|
|
155
|
+
i0.ɵɵadvance(2);
|
|
156
|
+
i0.ɵɵproperty("ngIf", ctx_r21.isChangeAllowed(field_r20));
|
|
157
|
+
} }
|
|
158
|
+
function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
159
|
+
i0.ɵɵelementContainerStart(0);
|
|
160
|
+
i0.ɵɵtemplate(1, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_ng_container_1_Template, 7, 12, "ng-container", 0);
|
|
161
|
+
i0.ɵɵelementContainerEnd();
|
|
162
|
+
} if (rf & 2) {
|
|
163
|
+
const field_r20 = ctx.$implicit;
|
|
164
|
+
const ctx_r19 = i0.ɵɵnextContext(5);
|
|
165
|
+
i0.ɵɵadvance(1);
|
|
166
|
+
i0.ɵɵproperty("ngIf", ctx_r19.canShowFieldInCYA(field_r20));
|
|
167
|
+
} }
|
|
168
|
+
const _c0 = function (a0, a4) { return [a0, false, undefined, true, a4]; };
|
|
169
|
+
function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
170
|
+
i0.ɵɵelementContainerStart(0);
|
|
171
|
+
i0.ɵɵtemplate(1, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_ng_container_1_Template, 2, 1, "ng-container", 28);
|
|
172
|
+
i0.ɵɵpipe(2, "ccdCYAPageLabelFilter");
|
|
173
|
+
i0.ɵɵpipe(3, "ccdReadFieldsFilter");
|
|
174
|
+
i0.ɵɵpipe(4, "ccdPageFields");
|
|
175
|
+
i0.ɵɵelementContainerEnd();
|
|
176
|
+
} if (rf & 2) {
|
|
177
|
+
const page_r17 = i0.ɵɵnextContext().$implicit;
|
|
178
|
+
const ctx_r18 = i0.ɵɵnextContext(3);
|
|
179
|
+
i0.ɵɵadvance(1);
|
|
180
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, i0.ɵɵpipeBindV(3, 3, i0.ɵɵpureFunction2(12, _c0, i0.ɵɵpipeBind2(4, 9, page_r17, ctx_r18.editForm), ctx_r18.editForm.controls["data"]))));
|
|
181
|
+
} }
|
|
182
|
+
function CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_Template(rf, ctx) { if (rf & 1) {
|
|
183
|
+
i0.ɵɵelementContainerStart(0);
|
|
184
|
+
i0.ɵɵtemplate(1, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_ng_container_1_Template, 5, 15, "ng-container", 0);
|
|
185
|
+
i0.ɵɵelementContainerEnd();
|
|
186
|
+
} if (rf & 2) {
|
|
187
|
+
const page_r17 = ctx.$implicit;
|
|
188
|
+
const ctx_r16 = i0.ɵɵnextContext(3);
|
|
189
|
+
i0.ɵɵadvance(1);
|
|
190
|
+
i0.ɵɵproperty("ngIf", ctx_r16.isShown(page_r17));
|
|
191
|
+
} }
|
|
192
|
+
function CaseEditSubmitComponent_div_0_ng_container_12_Template(rf, ctx) { if (rf & 1) {
|
|
193
|
+
i0.ɵɵelementContainerStart(0);
|
|
194
|
+
i0.ɵɵelementStart(1, "h2", 16);
|
|
195
|
+
i0.ɵɵtext(2, "Check your answers");
|
|
196
|
+
i0.ɵɵelementEnd();
|
|
197
|
+
i0.ɵɵelementStart(3, "span", 26);
|
|
198
|
+
i0.ɵɵtext(4, "Check the information below carefully.");
|
|
199
|
+
i0.ɵɵelementEnd();
|
|
200
|
+
i0.ɵɵelementStart(5, "table", 27);
|
|
201
|
+
i0.ɵɵelementStart(6, "tbody");
|
|
202
|
+
i0.ɵɵtemplate(7, CaseEditSubmitComponent_div_0_ng_container_12_ng_container_7_Template, 2, 1, "ng-container", 28);
|
|
203
|
+
i0.ɵɵelementEnd();
|
|
204
|
+
i0.ɵɵelementEnd();
|
|
205
|
+
i0.ɵɵelementContainerEnd();
|
|
206
|
+
} if (rf & 2) {
|
|
207
|
+
const ctx_r9 = i0.ɵɵnextContext(2);
|
|
208
|
+
i0.ɵɵadvance(7);
|
|
209
|
+
i0.ɵɵproperty("ngForOf", ctx_r9.wizard.pages);
|
|
210
|
+
} }
|
|
211
|
+
function CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_tr_3_Template(rf, ctx) { if (rf & 1) {
|
|
212
|
+
i0.ɵɵelementStart(0, "tr", 40);
|
|
213
|
+
i0.ɵɵelementStart(1, "th", 41);
|
|
214
|
+
i0.ɵɵtext(2);
|
|
215
|
+
i0.ɵɵelementEnd();
|
|
216
|
+
i0.ɵɵelementStart(3, "td", 42);
|
|
217
|
+
i0.ɵɵelement(4, "ccd-field-read", 43);
|
|
218
|
+
i0.ɵɵelementEnd();
|
|
219
|
+
i0.ɵɵelementEnd();
|
|
220
|
+
} if (rf & 2) {
|
|
221
|
+
const field_r32 = i0.ɵɵnextContext().$implicit;
|
|
222
|
+
const ctx_r33 = i0.ɵɵnextContext(3);
|
|
223
|
+
i0.ɵɵproperty("caseField", field_r32)("formGroup", ctx_r33.editForm.controls["data"])("contextFields", ctx_r33.contextFields);
|
|
224
|
+
i0.ɵɵadvance(2);
|
|
225
|
+
i0.ɵɵtextInterpolate(field_r32.label);
|
|
226
|
+
i0.ɵɵadvance(2);
|
|
227
|
+
i0.ɵɵproperty("formGroup", ctx_r33.editForm.controls["data"])("caseField", ctx_r33.summaryCaseField(field_r32));
|
|
228
|
+
} }
|
|
229
|
+
function CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_tr_4_Template(rf, ctx) { if (rf & 1) {
|
|
230
|
+
i0.ɵɵelementStart(0, "tr", 44);
|
|
231
|
+
i0.ɵɵelementStart(1, "td", 45);
|
|
232
|
+
i0.ɵɵelement(2, "ccd-field-read", 46);
|
|
233
|
+
i0.ɵɵelementEnd();
|
|
234
|
+
i0.ɵɵelementEnd();
|
|
235
|
+
} if (rf & 2) {
|
|
236
|
+
const field_r32 = i0.ɵɵnextContext().$implicit;
|
|
237
|
+
const ctx_r34 = i0.ɵɵnextContext(3);
|
|
238
|
+
i0.ɵɵproperty("caseField", field_r32)("formGroup", ctx_r34.editForm.controls["data"])("contextFields", ctx_r34.contextFields);
|
|
239
|
+
i0.ɵɵadvance(2);
|
|
240
|
+
i0.ɵɵproperty("formGroup", ctx_r34.editForm.controls["data"])("caseField", ctx_r34.summaryCaseField(field_r32))("caseFields", ctx_r34.contextFields);
|
|
241
|
+
} }
|
|
242
|
+
function CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
243
|
+
i0.ɵɵelementContainerStart(0);
|
|
244
|
+
i0.ɵɵelementContainerStart(1, 37);
|
|
245
|
+
i0.ɵɵpipe(2, "ccdIsCompound");
|
|
246
|
+
i0.ɵɵtemplate(3, CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_tr_3_Template, 5, 6, "tr", 38);
|
|
247
|
+
i0.ɵɵtemplate(4, CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_tr_4_Template, 3, 6, "tr", 39);
|
|
248
|
+
i0.ɵɵelementContainerEnd();
|
|
249
|
+
i0.ɵɵelementContainerEnd();
|
|
250
|
+
} if (rf & 2) {
|
|
251
|
+
const field_r32 = ctx.$implicit;
|
|
252
|
+
i0.ɵɵadvance(1);
|
|
253
|
+
i0.ɵɵproperty("ngSwitch", !i0.ɵɵpipeBind1(2, 3, field_r32));
|
|
254
|
+
i0.ɵɵadvance(2);
|
|
255
|
+
i0.ɵɵproperty("ngSwitchCase", true);
|
|
256
|
+
i0.ɵɵadvance(1);
|
|
257
|
+
i0.ɵɵproperty("ngSwitchCase", false);
|
|
258
|
+
} }
|
|
259
|
+
function CaseEditSubmitComponent_div_0_ng_container_13_Template(rf, ctx) { if (rf & 1) {
|
|
260
|
+
i0.ɵɵelementContainerStart(0);
|
|
261
|
+
i0.ɵɵelementStart(1, "table", 36);
|
|
262
|
+
i0.ɵɵelementStart(2, "tbody");
|
|
263
|
+
i0.ɵɵtemplate(3, CaseEditSubmitComponent_div_0_ng_container_13_ng_container_3_Template, 5, 5, "ng-container", 28);
|
|
264
|
+
i0.ɵɵelementEnd();
|
|
265
|
+
i0.ɵɵelementEnd();
|
|
266
|
+
i0.ɵɵelementContainerEnd();
|
|
267
|
+
} if (rf & 2) {
|
|
268
|
+
const ctx_r10 = i0.ɵɵnextContext(2);
|
|
269
|
+
i0.ɵɵadvance(3);
|
|
270
|
+
i0.ɵɵproperty("ngForOf", ctx_r10.showSummaryFields);
|
|
271
|
+
} }
|
|
272
|
+
function CaseEditSubmitComponent_div_0_ng_container_14_fieldset_1_Template(rf, ctx) { if (rf & 1) {
|
|
273
|
+
i0.ɵɵelementStart(0, "fieldset", 48);
|
|
274
|
+
i0.ɵɵelement(1, "legend", 49);
|
|
275
|
+
i0.ɵɵelementStart(2, "div", 50);
|
|
276
|
+
i0.ɵɵelementStart(3, "label", 51);
|
|
277
|
+
i0.ɵɵtext(4, " Event summary (optional) ");
|
|
278
|
+
i0.ɵɵelementStart(5, "span", 52);
|
|
279
|
+
i0.ɵɵtext(6, "A few words describing the purpose of the event.");
|
|
280
|
+
i0.ɵɵelementEnd();
|
|
281
|
+
i0.ɵɵelementEnd();
|
|
282
|
+
i0.ɵɵelement(7, "input", 53);
|
|
283
|
+
i0.ɵɵelementEnd();
|
|
284
|
+
i0.ɵɵelementStart(8, "div", 50);
|
|
285
|
+
i0.ɵɵelementStart(9, "label", 54);
|
|
286
|
+
i0.ɵɵtext(10, "Event description (optional)");
|
|
287
|
+
i0.ɵɵelementEnd();
|
|
288
|
+
i0.ɵɵelement(11, "textarea", 55);
|
|
289
|
+
i0.ɵɵelementEnd();
|
|
290
|
+
i0.ɵɵelementEnd();
|
|
291
|
+
} }
|
|
292
|
+
function CaseEditSubmitComponent_div_0_ng_container_14_Template(rf, ctx) { if (rf & 1) {
|
|
293
|
+
i0.ɵɵelementContainerStart(0);
|
|
294
|
+
i0.ɵɵtemplate(1, CaseEditSubmitComponent_div_0_ng_container_14_fieldset_1_Template, 12, 0, "fieldset", 47);
|
|
295
|
+
i0.ɵɵelementContainerEnd();
|
|
296
|
+
} if (rf & 2) {
|
|
297
|
+
const ctx_r11 = i0.ɵɵnextContext(2);
|
|
298
|
+
i0.ɵɵadvance(1);
|
|
299
|
+
i0.ɵɵproperty("ngIf", ctx_r11.profile && !ctx_r11.isSolicitor());
|
|
300
|
+
} }
|
|
301
|
+
function CaseEditSubmitComponent_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
302
|
+
const _r39 = i0.ɵɵgetCurrentView();
|
|
303
|
+
i0.ɵɵelementStart(0, "div");
|
|
304
|
+
i0.ɵɵelementStart(1, "h1", 2);
|
|
305
|
+
i0.ɵɵtext(2);
|
|
306
|
+
i0.ɵɵelementEnd();
|
|
307
|
+
i0.ɵɵtemplate(3, CaseEditSubmitComponent_div_0_div_3_Template, 1, 0, "div", 3);
|
|
308
|
+
i0.ɵɵtemplate(4, CaseEditSubmitComponent_div_0_ng_template_4_Template, 2, 5, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
|
|
309
|
+
i0.ɵɵtemplate(6, CaseEditSubmitComponent_div_0_ng_template_6_Template, 1, 1, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
|
|
310
|
+
i0.ɵɵtemplate(8, CaseEditSubmitComponent_div_0_div_8_Template, 10, 0, "div", 6);
|
|
311
|
+
i0.ɵɵtemplate(9, CaseEditSubmitComponent_div_0_div_9_Template, 6, 2, "div", 6);
|
|
312
|
+
i0.ɵɵelementStart(10, "ccd-callback-errors", 7);
|
|
313
|
+
i0.ɵɵlistener("callbackErrorsContext", function CaseEditSubmitComponent_div_0_Template_ccd_callback_errors_callbackErrorsContext_10_listener($event) { i0.ɵɵrestoreView(_r39); const ctx_r38 = i0.ɵɵnextContext(); return ctx_r38.callbackErrorsNotify($event); });
|
|
314
|
+
i0.ɵɵelementEnd();
|
|
315
|
+
i0.ɵɵelementStart(11, "form", 8);
|
|
316
|
+
i0.ɵɵlistener("submit", function CaseEditSubmitComponent_div_0_Template_form_submit_11_listener() { i0.ɵɵrestoreView(_r39); const ctx_r40 = i0.ɵɵnextContext(); return ctx_r40.submit(); });
|
|
317
|
+
i0.ɵɵtemplate(12, CaseEditSubmitComponent_div_0_ng_container_12_Template, 8, 1, "ng-container", 0);
|
|
318
|
+
i0.ɵɵtemplate(13, CaseEditSubmitComponent_div_0_ng_container_13_Template, 4, 1, "ng-container", 0);
|
|
319
|
+
i0.ɵɵtemplate(14, CaseEditSubmitComponent_div_0_ng_container_14_Template, 2, 1, "ng-container", 0);
|
|
320
|
+
i0.ɵɵelementStart(15, "div", 9);
|
|
321
|
+
i0.ɵɵelementStart(16, "button", 10);
|
|
322
|
+
i0.ɵɵlistener("click", function CaseEditSubmitComponent_div_0_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r39); const ctx_r41 = i0.ɵɵnextContext(); return ctx_r41.previous(); });
|
|
323
|
+
i0.ɵɵtext(17, "Previous");
|
|
324
|
+
i0.ɵɵelementEnd();
|
|
325
|
+
i0.ɵɵelementStart(18, "button", 11);
|
|
326
|
+
i0.ɵɵtext(19);
|
|
327
|
+
i0.ɵɵelementEnd();
|
|
328
|
+
i0.ɵɵelementEnd();
|
|
329
|
+
i0.ɵɵelementStart(20, "p", 12);
|
|
330
|
+
i0.ɵɵelementStart(21, "a", 13);
|
|
331
|
+
i0.ɵɵlistener("click", function CaseEditSubmitComponent_div_0_Template_a_click_21_listener() { i0.ɵɵrestoreView(_r39); const ctx_r42 = i0.ɵɵnextContext(); return ctx_r42.cancel(); });
|
|
332
|
+
i0.ɵɵtext(22);
|
|
333
|
+
i0.ɵɵelementEnd();
|
|
334
|
+
i0.ɵɵelementEnd();
|
|
335
|
+
i0.ɵɵelementEnd();
|
|
336
|
+
i0.ɵɵelementEnd();
|
|
337
|
+
} if (rf & 2) {
|
|
338
|
+
const _r3 = i0.ɵɵreference(5);
|
|
339
|
+
const _r5 = i0.ɵɵreference(7);
|
|
340
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
341
|
+
i0.ɵɵadvance(2);
|
|
342
|
+
i0.ɵɵtextInterpolate(ctx_r0.eventTrigger.name);
|
|
343
|
+
i0.ɵɵadvance(1);
|
|
344
|
+
i0.ɵɵproperty("ngIf", ctx_r0.getCaseTitle())("ngIfThen", _r3)("ngIfElse", _r5);
|
|
345
|
+
i0.ɵɵadvance(5);
|
|
346
|
+
i0.ɵɵproperty("ngIf", ctx_r0.error && (!(ctx_r0.error.callbackErrors || ctx_r0.error.callbackWarnings || ctx_r0.error.details) && !ctx_r0.error.message));
|
|
347
|
+
i0.ɵɵadvance(1);
|
|
348
|
+
i0.ɵɵproperty("ngIf", ctx_r0.error && (ctx_r0.error.details || ctx_r0.error.message));
|
|
349
|
+
i0.ɵɵadvance(1);
|
|
350
|
+
i0.ɵɵproperty("callbackErrorsSubject", ctx_r0.callbackErrorsSubject);
|
|
351
|
+
i0.ɵɵadvance(1);
|
|
352
|
+
i0.ɵɵproperty("formGroup", ctx_r0.editForm);
|
|
353
|
+
i0.ɵɵadvance(1);
|
|
354
|
+
i0.ɵɵproperty("ngIf", ctx_r0.checkYourAnswerFieldsToDisplayExists());
|
|
355
|
+
i0.ɵɵadvance(1);
|
|
356
|
+
i0.ɵɵproperty("ngIf", ctx_r0.readOnlySummaryFieldsToDisplayExists());
|
|
357
|
+
i0.ɵɵadvance(1);
|
|
358
|
+
i0.ɵɵproperty("ngIf", ctx_r0.showEventNotes());
|
|
359
|
+
i0.ɵɵadvance(2);
|
|
360
|
+
i0.ɵɵproperty("disabled", !ctx_r0.hasPrevious() || ctx_r0.isSubmitting);
|
|
361
|
+
i0.ɵɵadvance(2);
|
|
362
|
+
i0.ɵɵproperty("disabled", ctx_r0.isDisabled);
|
|
363
|
+
i0.ɵɵadvance(1);
|
|
364
|
+
i0.ɵɵtextInterpolate(ctx_r0.triggerText);
|
|
365
|
+
i0.ɵɵadvance(2);
|
|
366
|
+
i0.ɵɵclassProp("disabled", ctx_r0.isSubmitting);
|
|
367
|
+
i0.ɵɵadvance(1);
|
|
368
|
+
i0.ɵɵtextInterpolate(ctx_r0.getCancelText());
|
|
369
|
+
} }
|
|
370
|
+
function CaseEditSubmitComponent_ccd_case_event_completion_1_Template(rf, ctx) { if (rf & 1) {
|
|
371
|
+
const _r44 = i0.ɵɵgetCurrentView();
|
|
372
|
+
i0.ɵɵelementStart(0, "ccd-case-event-completion", 56);
|
|
373
|
+
i0.ɵɵlistener("eventCanBeCompleted", function CaseEditSubmitComponent_ccd_case_event_completion_1_Template_ccd_case_event_completion_eventCanBeCompleted_0_listener($event) { i0.ɵɵrestoreView(_r44); const ctx_r43 = i0.ɵɵnextContext(); return ctx_r43.onEventCanBeCompleted($event); });
|
|
374
|
+
i0.ɵɵelementEnd();
|
|
375
|
+
} if (rf & 2) {
|
|
376
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
377
|
+
i0.ɵɵproperty("eventCompletionParams", ctx_r1.eventCompletionParams);
|
|
378
|
+
} }
|
|
379
|
+
// @dynamic
|
|
380
|
+
export class CaseEditSubmitComponent {
|
|
381
|
+
constructor(caseEdit, formValueService, formErrorService, fieldsUtils, caseFieldService, route, router, orderService, profileNotifier, sessionStorageService, caseNotifier) {
|
|
382
|
+
this.caseEdit = caseEdit;
|
|
383
|
+
this.formValueService = formValueService;
|
|
384
|
+
this.formErrorService = formErrorService;
|
|
385
|
+
this.fieldsUtils = fieldsUtils;
|
|
386
|
+
this.caseFieldService = caseFieldService;
|
|
387
|
+
this.route = route;
|
|
388
|
+
this.router = router;
|
|
389
|
+
this.orderService = orderService;
|
|
390
|
+
this.profileNotifier = profileNotifier;
|
|
391
|
+
this.sessionStorageService = sessionStorageService;
|
|
392
|
+
this.caseNotifier = caseNotifier;
|
|
393
|
+
this.callbackErrorsSubject = new Subject();
|
|
394
|
+
this.ignoreWarning = false;
|
|
395
|
+
this.paletteContext = PaletteContext.CHECK_YOUR_ANSWER;
|
|
396
|
+
this.eventCompletionChecksRequired = false;
|
|
397
|
+
}
|
|
398
|
+
get isDisabled() {
|
|
399
|
+
// EUI-3452.
|
|
400
|
+
// We don't need to check the validity of the editForm as it is readonly.
|
|
401
|
+
// This was causing issues with hidden fields that aren't wanted but have
|
|
402
|
+
// not been disabled.
|
|
403
|
+
return this.isSubmitting || this.hasErrors;
|
|
404
|
+
}
|
|
405
|
+
get hasErrors() {
|
|
406
|
+
return this.error
|
|
407
|
+
&& this.error.callbackErrors
|
|
408
|
+
&& this.error.callbackErrors.length;
|
|
409
|
+
}
|
|
410
|
+
ngOnInit() {
|
|
411
|
+
this.profileSubscription = this.profileNotifier.profile.subscribe(_ => this.profile = _);
|
|
412
|
+
this.eventTrigger = this.caseEdit.eventTrigger;
|
|
413
|
+
this.triggerText = this.eventTrigger.end_button_label || CallbackErrorsComponent.TRIGGER_TEXT_SUBMIT;
|
|
414
|
+
this.editForm = this.caseEdit.form;
|
|
415
|
+
this.wizard = this.caseEdit.wizard;
|
|
416
|
+
this.showSummaryFields = this.sortFieldsByShowSummaryContent(this.eventTrigger.case_fields);
|
|
417
|
+
this.isSubmitting = false;
|
|
418
|
+
this.contextFields = this.getCaseFields();
|
|
419
|
+
}
|
|
420
|
+
ngOnDestroy() {
|
|
421
|
+
if (this.profileSubscription) {
|
|
422
|
+
this.profileSubscription.unsubscribe();
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Handler function for event completion
|
|
427
|
+
*/
|
|
428
|
+
submit() {
|
|
429
|
+
this.isSubmitting = true;
|
|
430
|
+
// We have to run the event completion checks if task in session storage
|
|
431
|
+
// and if the task is in session storage, then is it associated to the case
|
|
432
|
+
let taskInSessionStorage;
|
|
433
|
+
const taskStr = this.sessionStorageService.getItem('taskToComplete');
|
|
434
|
+
if (taskStr) {
|
|
435
|
+
taskInSessionStorage = JSON.parse(taskStr);
|
|
436
|
+
}
|
|
437
|
+
if (taskInSessionStorage && taskInSessionStorage.case_id === this.getCaseId()) {
|
|
438
|
+
// Show event completion component to perform event completion checks
|
|
439
|
+
this.eventCompletionParams = {
|
|
440
|
+
caseId: this.getCaseId(),
|
|
441
|
+
eventId: this.getEventId(),
|
|
442
|
+
task: taskInSessionStorage
|
|
443
|
+
};
|
|
444
|
+
this.eventCompletionChecksRequired = true;
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
// Task not in session storage, proceed to submit
|
|
448
|
+
const caseEventData = this.generateCaseEventData();
|
|
449
|
+
this.caseSubmit(caseEventData);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Handler function for event emitted from case event completion component
|
|
454
|
+
*/
|
|
455
|
+
onEventCanBeCompleted(eventCanBeCompleted) {
|
|
456
|
+
if (eventCanBeCompleted) {
|
|
457
|
+
// Submit
|
|
458
|
+
const caseEventData = this.generateCaseEventData();
|
|
459
|
+
this.caseSubmit(caseEventData);
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
// Navigate to tasks tab on case details page
|
|
463
|
+
this.router.navigate([`/cases/case-details/${this.getCaseId()}/tasks`], { relativeTo: this.route });
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
navigateToPage(pageId) {
|
|
467
|
+
this.caseEdit.navigateToPage(pageId);
|
|
468
|
+
}
|
|
469
|
+
callbackErrorsNotify(errorContext) {
|
|
470
|
+
this.ignoreWarning = errorContext.ignore_warning;
|
|
471
|
+
this.triggerText = errorContext.trigger_text;
|
|
472
|
+
}
|
|
473
|
+
summaryCaseField(field) {
|
|
474
|
+
if (!this.editForm.get('data').get(field.id)) {
|
|
475
|
+
// If not in form, return field itself
|
|
476
|
+
return field;
|
|
477
|
+
}
|
|
478
|
+
const cloneField = this.fieldsUtils.cloneCaseField(field);
|
|
479
|
+
cloneField.value = this.editForm.get('data').get(field.id).value;
|
|
480
|
+
return cloneField;
|
|
481
|
+
}
|
|
482
|
+
cancel() {
|
|
483
|
+
if (this.eventTrigger.can_save_draft) {
|
|
484
|
+
if (this.route.snapshot.queryParamMap.get(CaseEditComponent.ORIGIN_QUERY_PARAM) === 'viewDraft') {
|
|
485
|
+
this.caseEdit.cancelled.emit({ status: CaseEditPageText.RESUMED_FORM_DISCARD });
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
this.caseEdit.cancelled.emit({ status: CaseEditPageText.NEW_FORM_DISCARD });
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
this.caseEdit.cancelled.emit();
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
isLabel(field) {
|
|
496
|
+
return this.caseFieldService.isLabel(field);
|
|
497
|
+
}
|
|
498
|
+
isChangeAllowed(field) {
|
|
499
|
+
return !this.caseFieldService.isReadOnly(field);
|
|
500
|
+
}
|
|
501
|
+
checkYourAnswerFieldsToDisplayExists() {
|
|
502
|
+
if (!this.eventTrigger.show_summary) {
|
|
503
|
+
return false;
|
|
504
|
+
}
|
|
505
|
+
for (const page of this.wizard.pages) {
|
|
506
|
+
if (this.isShown(page)) {
|
|
507
|
+
for (const field of page.case_fields) {
|
|
508
|
+
if (this.canShowFieldInCYA(field)) {
|
|
509
|
+
// at least one field needs showing
|
|
510
|
+
return true;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
// found no fields to show in CYA summary page
|
|
516
|
+
return false;
|
|
517
|
+
}
|
|
518
|
+
readOnlySummaryFieldsToDisplayExists() {
|
|
519
|
+
return this.eventTrigger.case_fields.some(field => field.show_summary_content_option >= 0);
|
|
520
|
+
}
|
|
521
|
+
showEventNotes() {
|
|
522
|
+
return this.eventTrigger.show_event_notes !== false;
|
|
523
|
+
}
|
|
524
|
+
previous() {
|
|
525
|
+
if (this.hasPrevious()) {
|
|
526
|
+
this.navigateToPage(this.getLastPageShown().id);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
hasPrevious() {
|
|
530
|
+
return !!this.getLastPageShown();
|
|
531
|
+
}
|
|
532
|
+
isShown(page) {
|
|
533
|
+
const fields = this.fieldsUtils
|
|
534
|
+
.mergeCaseFieldsAndFormFields(this.eventTrigger.case_fields, this.editForm.controls['data'].value);
|
|
535
|
+
return page.parsedShowCondition.match(fields);
|
|
536
|
+
}
|
|
537
|
+
canShowFieldInCYA(field) {
|
|
538
|
+
return field.show_summary_change_option;
|
|
539
|
+
}
|
|
540
|
+
isSolicitor() {
|
|
541
|
+
return this.profile.isSolicitor();
|
|
542
|
+
}
|
|
543
|
+
getCaseId() {
|
|
544
|
+
return (this.caseEdit.caseDetails ? this.caseEdit.caseDetails.case_id : '');
|
|
545
|
+
}
|
|
546
|
+
getEventId() {
|
|
547
|
+
return this.editForm.value.event.id;
|
|
548
|
+
}
|
|
549
|
+
getCaseTitle() {
|
|
550
|
+
return (this.caseEdit.caseDetails && this.caseEdit.caseDetails.state &&
|
|
551
|
+
this.caseEdit.caseDetails.state.title_display ? this.caseEdit.caseDetails.state.title_display : '');
|
|
552
|
+
}
|
|
553
|
+
getCancelText() {
|
|
554
|
+
if (this.eventTrigger.can_save_draft) {
|
|
555
|
+
return 'Return to case list';
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
return 'Cancel';
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Function to generate and return case event data for completing the event
|
|
563
|
+
*/
|
|
564
|
+
generateCaseEventData() {
|
|
565
|
+
const caseEventData = {
|
|
566
|
+
data: this.replaceEmptyComplexFieldValues(this.formValueService.sanitise(this.replaceHiddenFormValuesWithOriginalCaseData(this.editForm.get('data'), this.eventTrigger.case_fields))),
|
|
567
|
+
event: this.editForm.value.event
|
|
568
|
+
};
|
|
569
|
+
this.formValueService.clearNonCaseFields(caseEventData.data, this.eventTrigger.case_fields);
|
|
570
|
+
this.formValueService.removeNullLabels(caseEventData.data, this.eventTrigger.case_fields);
|
|
571
|
+
this.formValueService.removeEmptyDocuments(caseEventData.data, this.eventTrigger.case_fields);
|
|
572
|
+
// Remove collection fields that have "min" validation of greater than zero set on the FieldType but are empty;
|
|
573
|
+
// these will fail validation
|
|
574
|
+
this.formValueService.removeEmptyCollectionsWithMinValidation(caseEventData.data, this.eventTrigger.case_fields);
|
|
575
|
+
caseEventData.event_token = this.eventTrigger.event_token;
|
|
576
|
+
caseEventData.ignore_warning = this.ignoreWarning;
|
|
577
|
+
if (this.caseEdit.confirmation) {
|
|
578
|
+
caseEventData.data = {};
|
|
579
|
+
}
|
|
580
|
+
return caseEventData;
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Function to complete the event
|
|
584
|
+
*/
|
|
585
|
+
caseSubmit(caseEventData) {
|
|
586
|
+
this.caseEdit.submit(caseEventData)
|
|
587
|
+
.subscribe(response => {
|
|
588
|
+
this.caseNotifier.cachedCaseView = null;
|
|
589
|
+
const confirmation = this.buildConfirmation(response);
|
|
590
|
+
if (confirmation && (confirmation.getHeader() || confirmation.getBody())) {
|
|
591
|
+
this.caseEdit.confirm(confirmation);
|
|
592
|
+
}
|
|
593
|
+
else {
|
|
594
|
+
this.caseEdit.submitted.emit({ caseId: response['id'], status: this.getStatus(response) });
|
|
595
|
+
}
|
|
596
|
+
}, error => {
|
|
597
|
+
this.error = error;
|
|
598
|
+
this.callbackErrorsSubject.next(this.error);
|
|
599
|
+
if (this.error.details) {
|
|
600
|
+
this.formErrorService
|
|
601
|
+
.mapFieldErrors(this.error.details.field_errors, this.editForm.controls['data'], 'validation');
|
|
602
|
+
}
|
|
603
|
+
this.isSubmitting = false;
|
|
604
|
+
});
|
|
605
|
+
}
|
|
606
|
+
/**
|
|
607
|
+
* Traverse *all* values of a FormGroup, including those for disabled fields (i.e. hidden ones), replacing the
|
|
608
|
+
* value of any that are hidden AND have `retain_hidden_value` set to `true` in the corresponding `CaseField`, with
|
|
609
|
+
* the *original* value held in the `CaseField` object.
|
|
610
|
+
*
|
|
611
|
+
* This is as per design in EUI-3622, where any user-driven updates to hidden fields with `retain_hidden_value` =
|
|
612
|
+
* `true` are ignored (thus retaining the value displayed originally).
|
|
613
|
+
*
|
|
614
|
+
* * For Complex field types, the replacement above is performed recursively for all hidden sub-fields with
|
|
615
|
+
* `retain_hidden_value` = `true`.
|
|
616
|
+
*
|
|
617
|
+
* * For Collection field types, including collections of Complex and Document field types, the replacement is
|
|
618
|
+
* performed for all fields in the collection.
|
|
619
|
+
* returns An object with the *raw* form value data (as key-value pairs), with any value replacements as necessary
|
|
620
|
+
*/
|
|
621
|
+
replaceHiddenFormValuesWithOriginalCaseData(formGroup, caseFields, parentField) {
|
|
622
|
+
// Get the raw form value data, which includes the values of any disabled controls, as key-value pairs
|
|
623
|
+
const rawFormValueData = formGroup.getRawValue();
|
|
624
|
+
// Place all case fields in a lookup object, so they can be retrieved by id
|
|
625
|
+
const caseFieldsLookup = {};
|
|
626
|
+
for (let i = 0, len = caseFields.length; i < len; i++) {
|
|
627
|
+
caseFieldsLookup[caseFields[i].id] = caseFields[i];
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Replace any form value with the original, where its CaseField is hidden AND has the retain_hidden_value flag set
|
|
631
|
+
* to true.
|
|
632
|
+
*
|
|
633
|
+
* If the CaseField's `hidden` attribute is null or undefined, then check this attribute in the parent CaseField (if
|
|
634
|
+
* one exists). This is occurring (and is possibly a bug) when a CaseField is a sub-field of a Complex type, or an
|
|
635
|
+
* item in a Collection type.
|
|
636
|
+
*
|
|
637
|
+
* If the field is a Complex type with retain_hidden_value = true, perform a recursive replacement for all (hidden)
|
|
638
|
+
* sub-fields with retain_hidden_value = true, using their original CaseField values (from the `formatted_value`
|
|
639
|
+
* attribute).
|
|
640
|
+
*
|
|
641
|
+
* If the field is a Collection type with retain_hidden_value = true, the entire collection is replaced with the
|
|
642
|
+
* original from `formatted_value`. This applies to *all* types of Collections.
|
|
643
|
+
*/
|
|
644
|
+
Object.keys(rawFormValueData).forEach((key) => {
|
|
645
|
+
const caseField = caseFieldsLookup[key];
|
|
646
|
+
// If caseField.hidden is NOT truthy and also NOT equal to false, then it must be null/undefined (remember that
|
|
647
|
+
// both null and undefined are equal to *neither false nor true*)
|
|
648
|
+
if (caseField && caseField.retain_hidden_value &&
|
|
649
|
+
(caseField.hidden || (caseField.hidden !== false && parentField && parentField.hidden))) {
|
|
650
|
+
if (caseField.field_type.type === 'Complex') {
|
|
651
|
+
if (caseField.value !== null && caseField.value !== undefined) {
|
|
652
|
+
// Call this function recursively to replace the Complex field's sub-fields as necessary, passing the
|
|
653
|
+
// CaseField itself (the sub-fields do not contain any values, so these need to be obtained from the
|
|
654
|
+
// parent)
|
|
655
|
+
// Update rawFormValueData for this field
|
|
656
|
+
// creating form group and adding control into it in case caseField is of complext type and and part of formGroup
|
|
657
|
+
const form = new FormGroup({});
|
|
658
|
+
if (formGroup.controls[key].value) {
|
|
659
|
+
Object.keys(formGroup.controls[key].value).forEach((item) => {
|
|
660
|
+
form.addControl(item, new FormControl(formGroup.controls[key].value[item]));
|
|
661
|
+
});
|
|
662
|
+
}
|
|
663
|
+
rawFormValueData[key] = this.replaceHiddenFormValuesWithOriginalCaseData(form, caseField.field_type.complex_fields, caseField);
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
else {
|
|
667
|
+
// Default case also handles collections of *all* types; the entire collection in rawFormValueData will be
|
|
668
|
+
// replaced with the original from formatted_value
|
|
669
|
+
// Use the CaseField's existing *formatted_value* from the parent, if available. (This is necessary for
|
|
670
|
+
// Complex fields, whose sub-fields do not hold any values in the model.) Otherwise, use formatted_value
|
|
671
|
+
// from the CaseField itself.
|
|
672
|
+
if (parentField && parentField.formatted_value) {
|
|
673
|
+
rawFormValueData[key] = parentField.formatted_value[caseField.id];
|
|
674
|
+
}
|
|
675
|
+
else {
|
|
676
|
+
rawFormValueData[key] = caseField.formatted_value;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
});
|
|
681
|
+
return rawFormValueData;
|
|
682
|
+
}
|
|
683
|
+
/**
|
|
684
|
+
* Replaces non-array value objects with `null` for any Complex-type fields whose value is effectively empty, i.e.
|
|
685
|
+
* all its sub-fields and descendants are `null` or `undefined`.
|
|
686
|
+
*/
|
|
687
|
+
replaceEmptyComplexFieldValues(data) {
|
|
688
|
+
Object.keys(data).forEach((key) => {
|
|
689
|
+
if (!Array.isArray(data[key]) && typeof data[key] === 'object' && !FieldsUtils.containsNonEmptyValues(data[key])) {
|
|
690
|
+
data[key] = null;
|
|
691
|
+
}
|
|
692
|
+
});
|
|
693
|
+
return data;
|
|
694
|
+
}
|
|
695
|
+
getStatus(response) {
|
|
696
|
+
return this.hasCallbackFailed(response) ? response['callback_response_status'] : response['delete_draft_response_status'];
|
|
697
|
+
}
|
|
698
|
+
hasCallbackFailed(response) {
|
|
699
|
+
return response['callback_response_status'] !== 'CALLBACK_COMPLETED';
|
|
700
|
+
}
|
|
701
|
+
getLastPageShown() {
|
|
702
|
+
let lastPage;
|
|
703
|
+
this.wizard.reverse().forEach(page => {
|
|
704
|
+
if (!lastPage && this.isShown(page)) {
|
|
705
|
+
lastPage = page;
|
|
706
|
+
}
|
|
707
|
+
});
|
|
708
|
+
// noinspection JSUnusedAssignment
|
|
709
|
+
return lastPage;
|
|
710
|
+
}
|
|
711
|
+
buildConfirmation(response) {
|
|
712
|
+
if (response['after_submit_callback_response']) {
|
|
713
|
+
return new Confirmation(response['id'], response['callback_response_status'], response['after_submit_callback_response']['confirmation_header'], response['after_submit_callback_response']['confirmation_body']);
|
|
714
|
+
}
|
|
715
|
+
else {
|
|
716
|
+
return null;
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
sortFieldsByShowSummaryContent(fields) {
|
|
720
|
+
return this.orderService
|
|
721
|
+
.sort(fields, CaseEditSubmitComponent.SHOW_SUMMARY_CONTENT_COMPARE_FUNCTION)
|
|
722
|
+
.filter(cf => cf.show_summary_content_option);
|
|
723
|
+
}
|
|
724
|
+
getCaseFields() {
|
|
725
|
+
if (this.caseEdit.caseDetails) {
|
|
726
|
+
return FieldsUtils.getCaseFields(this.caseEdit.caseDetails);
|
|
727
|
+
}
|
|
728
|
+
return this.eventTrigger.case_fields;
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
CaseEditSubmitComponent.SHOW_SUMMARY_CONTENT_COMPARE_FUNCTION = (a, b) => {
|
|
732
|
+
const aCaseField = a.show_summary_content_option === 0 || a.show_summary_content_option;
|
|
733
|
+
const bCaseField = b.show_summary_content_option === 0 || b.show_summary_content_option;
|
|
734
|
+
if (!aCaseField) {
|
|
735
|
+
return !bCaseField ? 0 : 1;
|
|
736
|
+
}
|
|
737
|
+
if (!bCaseField) {
|
|
738
|
+
return -1;
|
|
739
|
+
}
|
|
740
|
+
return a.show_summary_content_option - b.show_summary_content_option;
|
|
741
|
+
};
|
|
742
|
+
CaseEditSubmitComponent.ɵfac = function CaseEditSubmitComponent_Factory(t) { return new (t || CaseEditSubmitComponent)(i0.ɵɵdirectiveInject(i1.CaseEditComponent), i0.ɵɵdirectiveInject(i2.FormValueService), i0.ɵɵdirectiveInject(i3.FormErrorService), i0.ɵɵdirectiveInject(i4.FieldsUtils), i0.ɵɵdirectiveInject(i5.CaseFieldService), i0.ɵɵdirectiveInject(i6.ActivatedRoute), i0.ɵɵdirectiveInject(i6.Router), i0.ɵɵdirectiveInject(i7.OrderService), i0.ɵɵdirectiveInject(i8.ProfileNotifier), i0.ɵɵdirectiveInject(i9.SessionStorageService), i0.ɵɵdirectiveInject(i10.CaseNotifier)); };
|
|
743
|
+
CaseEditSubmitComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CaseEditSubmitComponent, selectors: [["ccd-case-edit-submit"]], decls: 2, vars: 2, consts: [[4, "ngIf"], [3, "eventCompletionParams", "eventCanBeCompleted", 4, "ngIf"], [1, "govuk-heading-l"], [4, "ngIf", "ngIfThen", "ngIfElse"], ["titleBlock", ""], ["idBlock", ""], ["class", "error-summary", "role", "group", "aria-labelledby", "edit-case-event_error-summary-heading", "tabindex", "-1", 4, "ngIf"], [3, "callbackErrorsSubject", "callbackErrorsContext"], [1, "check-your-answers", 3, "formGroup", "submit"], [1, "form-group", "form-group-related"], ["type", "button", 1, "button", "button-secondary", 3, "disabled", "click"], ["type", "submit", 1, "button", 3, "disabled"], [1, "cancel"], ["href", "javascript:void(0)", 3, "click"], [3, "content"], ["class", "heading-h2", 4, "ngIf"], [1, "heading-h2"], ["role", "group", "aria-labelledby", "edit-case-event_error-summary-heading", "tabindex", "-1", 1, "error-summary"], ["id", "edit-case-event_error-summary-heading", 1, "heading-h1", "error-summary-heading"], ["id", "edit-case-event_error-summary-body", 1, "govuk-error-summary__body"], ["href", "get-help", "target", "_blank"], ["id", "edit-case-event_error-summary-heading", 1, "heading-h3", "error-summary-heading"], ["class", "error-summary-list", 4, "ngIf"], [1, "error-summary-list"], ["class", "ccd-error-summary-li", 4, "ngFor", "ngForOf"], [1, "ccd-error-summary-li"], [1, "text-16"], ["aria-describedby", "check your answers table", 1, "form-table"], [4, "ngFor", "ngForOf"], ["ccdLabelSubstitutor", "", 3, "caseField", "hidden", "formGroup", "contextFields"], ["class", "valign-top case-field-label", 4, "ngIf"], [1, "form-cell", "case-field-content"], [3, "formGroup", "topLevelFormGroup", "caseField", "context", "caseFields"], [1, "valign-top", "check-your-answers__change", "case-field-change"], ["href", "javascript:void(0)", 3, "click", 4, "ngIf"], [1, "valign-top", "case-field-label"], ["aria-describedby", "summary fields table", 1, "summary-fields"], [3, "ngSwitch"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields", 4, "ngSwitchCase"], ["class", "compound-field", "ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields", 4, "ngSwitchCase"], ["ccdLabelSubstitutor", "", 3, "caseField", "formGroup", "contextFields"], ["id", "summary-field-label"], [1, "form-cell"], [3, "formGroup", "caseField"], ["ccdLabelSubstitutor", "", 1, "compound-field", 3, "caseField", "formGroup", "contextFields"], ["colspan", "2"], [3, "formGroup", "caseField", "caseFields"], ["id", "fieldset-event", "formGroupName", "event", 4, "ngIf"], ["id", "fieldset-event", "formGroupName", "event"], [2, "display", "none"], [1, "form-group"], ["for", "field-trigger-summary", 1, "form-label"], [1, "form-hint"], ["type", "text", "id", "field-trigger-summary", "formControlName", "summary", "maxlength", "1024", 1, "form-control", "bottom-30", "width-50"], ["for", "field-trigger-description", 1, "form-label"], ["id", "field-trigger-description", "formControlName", "description", "maxlength", "65536", 1, "form-control", "bottom-30", "width-50"], [3, "eventCompletionParams", "eventCanBeCompleted"]], template: function CaseEditSubmitComponent_Template(rf, ctx) { if (rf & 1) {
|
|
744
|
+
i0.ɵɵtemplate(0, CaseEditSubmitComponent_div_0_Template, 23, 17, "div", 0);
|
|
745
|
+
i0.ɵɵtemplate(1, CaseEditSubmitComponent_ccd_case_event_completion_1_Template, 1, 1, "ccd-case-event-completion", 1);
|
|
746
|
+
} if (rf & 2) {
|
|
747
|
+
i0.ɵɵproperty("ngIf", !ctx.eventCompletionChecksRequired);
|
|
748
|
+
i0.ɵɵadvance(1);
|
|
749
|
+
i0.ɵɵproperty("ngIf", ctx.eventCompletionChecksRequired);
|
|
750
|
+
} }, styles: ["#fieldset-case-data[_ngcontent-%COMP%]{margin-bottom:30px}#fieldset-case-data[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{width:1%;white-space:nowrap;vertical-align:top}.compound-field[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:0}#confirmation-header[_ngcontent-%COMP%]{width:630px;background-color:#17958b;border:1px solid #979797;color:#fff;text-align:center}#confirmation-body[_ngcontent-%COMP%]{width:630px;background-color:#fff}.valign-top[_ngcontent-%COMP%]{vertical-align:top}.summary-fields[_ngcontent-%COMP%]{margin-bottom:30px}.summary-fields[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] td[_ngcontent-%COMP%], .summary-fields[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{border-bottom:0}a.disabled[_ngcontent-%COMP%]{pointer-events:none;cursor:default}.case-field-label[_ngcontent-%COMP%]{width:45%}.case-field-content[_ngcontent-%COMP%]{width:50%}.case-field-change[_ngcontent-%COMP%]{width:5%}"] });
|
|
751
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseEditSubmitComponent, [{
|
|
752
|
+
type: Component,
|
|
753
|
+
args: [{
|
|
754
|
+
selector: 'ccd-case-edit-submit',
|
|
755
|
+
templateUrl: 'case-edit-submit.html',
|
|
756
|
+
styleUrls: ['../case-edit.scss']
|
|
757
|
+
}]
|
|
758
|
+
}], function () { return [{ type: i1.CaseEditComponent }, { type: i2.FormValueService }, { type: i3.FormErrorService }, { type: i4.FieldsUtils }, { type: i5.CaseFieldService }, { type: i6.ActivatedRoute }, { type: i6.Router }, { type: i7.OrderService }, { type: i8.ProfileNotifier }, { type: i9.SessionStorageService }, { type: i10.CaseNotifier }]; }, null); })();
|
|
759
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LXN1Ym1pdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3IvY2FzZS1lZGl0LXN1Ym1pdC9jYXNlLWVkaXQtc3VibWl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQtc3VibWl0L2Nhc2UtZWRpdC1zdWJtaXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBTzdGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxN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dUJBQXVCO2NBTG5DLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxXQUFXLEVBQUUsdUJBQXVCO2dCQUNwQyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQzthQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGFsZXR0ZUNvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3BhbGV0dGUvYmFzZS1maWVsZC9wYWxldHRlLWNvbnRleHQuZW51bSc7XG5pbXBvcnQgeyBDYXNlRXZlbnREYXRhIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2UtZXZlbnQtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlRXZlbnRUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2Utdmlldy9jYXNlLWV2ZW50LXRyaWdnZXIubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2RlZmluaXRpb24vY2FzZS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBIdHRwRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vaHR0cC9odHRwLWVycm9yLm1vZGVsJztcbmltcG9ydCB7IFByb2ZpbGUgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vcHJvZmlsZS9wcm9maWxlLm1vZGVsJztcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vd29yay1hbGxvY2F0aW9uL1Rhc2snO1xuaW1wb3J0IHsgQ2FzZUZpZWxkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Nhc2UtZmllbGRzL2Nhc2UtZmllbGQuc2VydmljZSc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcy9maWVsZHMudXRpbHMnO1xuaW1wb3J0IHsgRm9ybUVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0vZm9ybS1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1WYWx1ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtL2Zvcm0tdmFsdWUuc2VydmljZSc7XG5pbXBvcnQgeyBPcmRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmRlci9vcmRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2ZpbGVOb3RpZmllciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Byb2ZpbGUvcHJvZmlsZS5ub3RpZmllcic7XG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zZXNzaW9uL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGxiYWNrRXJyb3JzQ29tcG9uZW50LCBDYWxsYmFja0Vycm9yc0NvbnRleHQgfSBmcm9tICcuLi8uLi9lcnJvcic7XG5pbXBvcnQgeyBDYXNlRWRpdFBhZ2VUZXh0IH0gZnJvbSAnLi4vY2FzZS1lZGl0LXBhZ2UvY2FzZS1lZGl0LXBhZ2UtdGV4dC5lbnVtJztcbmltcG9ydCB7IENhc2VFZGl0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2FzZS1lZGl0L2Nhc2UtZWRpdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uIH0gZnJvbSAnLi4vZG9tYWluL2NvbmZpcm1hdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBFdmVudENvbXBsZXRpb25QYXJhbXMgfSBmcm9tICcuLi9kb21haW4vZXZlbnQtY29tcGxldGlvbi1wYXJhbXMubW9kZWwnO1xuaW1wb3J0IHsgV2l6YXJkUGFnZSB9IGZyb20gJy4uL2RvbWFpbi93aXphcmQtcGFnZS5tb2RlbCc7XG5pbXBvcnQgeyBXaXphcmQgfSBmcm9tICcuLi9kb21haW4vd2l6YXJkLm1vZGVsJztcbmltcG9ydCB7IENhc2VOb3RpZmllciB9IGZyb20gJy4uL3NlcnZpY2VzL2Nhc2Uubm90aWZpZXInO1xuXG4vLyBAZHluYW1pY1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLWNhc2UtZWRpdC1zdWJtaXQnLFxuICB0ZW1wbGF0ZVVybDogJ2Nhc2UtZWRpdC1zdWJtaXQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9jYXNlLWVkaXQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhc2VFZGl0U3VibWl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZUVkaXQ6IENhc2VFZGl0Q29tcG9uZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybVZhbHVlU2VydmljZTogRm9ybVZhbHVlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1FcnJvclNlcnZpY2U6IEZvcm1FcnJvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWVsZHNVdGlsczogRmllbGRzVXRpbHMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlRmllbGRTZXJ2aWNlOiBDYXNlRmllbGRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcmRlclNlcnZpY2U6IE9yZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2ZpbGVOb3RpZmllcjogUHJvZmlsZU5vdGlmaWVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlTm90aWZpZXI6IENhc2VOb3RpZmllcixcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBFVUktMzQ1Mi5cbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgZWRpdEZvcm0gYXMgaXQgaXMgcmVhZG9ubHkuXG4gICAgLy8gVGhpcyB3YXMgY2F1c2luZyBpc3N1ZXMgd2l0aCBoaWRkZW4gZmllbGRzIHRoYXQgYXJlbid0IHdhbnRlZCBidXQgaGF2ZVxuICAgIC8vIG5vdCBiZWVuIGRpc2FibGVkLlxuICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyB8fCB0aGlzLmhhc0Vycm9ycztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclxuICAgICAgJiYgdGhpcy5lcnJvci5jYWxsYmFja0Vycm9yc1xuICAgICAgJiYgdGhpcy5lcnJvci5jYWxsYmFja0Vycm9ycy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyO1xuICBwdWJsaWMgZWRpdEZvcm06IEZvcm1Hcm91cDtcbiAgcHVibGljIGVycm9yOiBIdHRwRXJyb3I7XG4gIHB1YmxpYyBjYWxsYmFja0Vycm9yc1N1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gIHB1YmxpYyBpZ25vcmVXYXJuaW5nID0gZmFsc2U7XG4gIHB1YmxpYyB0cmlnZ2VyVGV4dDogc3RyaW5nO1xuICBwdWJsaWMgd2l6YXJkOiBXaXphcmQ7XG4gIHB1YmxpYyBwcm9maWxlOiBQcm9maWxlO1xuICBwdWJsaWMgc2hvd1N1bW1hcnlGaWVsZHM6IENhc2VGaWVsZFtdO1xuICBwdWJsaWMgcGFsZXR0ZUNvbnRleHQ6IFBhbGV0dGVDb250ZXh0ID0gUGFsZXR0ZUNvbnRleHQuQ0hFQ0tfWU9VUl9BTlNXRVI7XG4gIHB1YmxpYyBpc1N1Ym1pdHRpbmc6IGJvb2xlYW47XG4gIHB1YmxpYyBwcm9maWxlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjb250ZXh0RmllbGRzOiBDYXNlRmllbGRbXTtcbiAgcHVibGljIHRhc2s6IFRhc2s7XG4gIHB1YmxpYyBldmVudENvbXBsZXRpb25QYXJhbXM6IEV2ZW50Q29tcGxldGlvblBhcmFtcztcbiAgcHVibGljIGV2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkID0gZmFsc2U7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0hPV19TVU1NQVJZX0NPTlRFTlRfQ09NUEFSRV9GVU5DVElPTiA9IChhOiBDYXNlRmllbGQsIGI6IENhc2VGaWVsZCk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgYUNhc2VGaWVsZCA9IGEuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uID09PSAwIHx8IGEuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uO1xuICAgIGNvbnN0IGJDYXNlRmllbGQgPSBiLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbiA9PT0gMCB8fCBiLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbjtcblxuICAgIGlmICghYUNhc2VGaWVsZCkge1xuICAgICAgcmV0dXJuICFiQ2FzZUZpZWxkID8gMCA6IDE7XG4gICAgfVxuXG4gICAgaWYgKCFiQ2FzZUZpZWxkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBhLnNob3dfc3VtbWFyeV9jb250ZW50X29wdGlvbiAtIGIuc2hvd19zdW1tYXJ5X2NvbnRlbnRfb3B0aW9uO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucHJvZmlsZVN1YnNjcmlwdGlvbiA9IHRoaXMucHJvZmlsZU5vdGlmaWVyLnByb2ZpbGUuc3Vic2NyaWJlKF8gPT4gdGhpcy5wcm9maWxlID0gXyk7XG4gICAgdGhpcy5ldmVudFRyaWdnZXIgPSB0aGlzLmNhc2VFZGl0LmV2ZW50VHJpZ2dlcjtcbiAgICB0aGlzLnRyaWdnZXJUZXh0ID0gdGhpcy5ldmVudFRyaWdnZXIuZW5kX2J1dHRvbl9sYWJlbCB8fCBDYWxsYmFja0Vycm9yc0NvbXBvbmVudC5UUklHR0VSX1RFWFRfU1VCTUlUO1xuICAgIHRoaXMuZWRpdEZvcm0gPSB0aGlzLmNhc2VFZGl0LmZvcm07XG4gICAgdGhpcy53aXphcmQgPSB0aGlzLmNhc2VFZGl0LndpemFyZDtcbiAgICB0aGlzLnNob3dTdW1tYXJ5RmllbGRzID0gdGhpcy5zb3J0RmllbGRzQnlTaG93U3VtbWFyeUNvbnRlbnQodGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jb250ZXh0RmllbGRzID0gdGhpcy5nZXRDYXNlRmllbGRzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvZmlsZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5wcm9maWxlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXIgZnVuY3Rpb24gZm9yIGV2ZW50IGNvbXBsZXRpb25cbiAgICovXG4gIHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuXG4gICAgLy8gV2UgaGF2ZSB0byBydW4gdGhlIGV2ZW50IGNvbXBsZXRpb24gY2hlY2tzIGlmIHRhc2sgaW4gc2Vzc2lvbiBzdG9yYWdlXG4gICAgLy8gYW5kIGlmIHRoZSB0YXNrIGlzIGluIHNlc3Npb24gc3RvcmFnZSwgdGhlbiBpcyBpdCBhc3NvY2lhdGVkIHRvIHRoZSBjYXNlXG4gICAgbGV0IHRhc2tJblNlc3Npb25TdG9yYWdlOiBUYXNrO1xuICAgIGNvbnN0IHRhc2tTdHIgPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCd0YXNrVG9Db21wbGV0ZScpO1xuICAgIGlmICh0YXNrU3RyKSB7XG4gICAgICB0YXNrSW5TZXNzaW9uU3RvcmFnZSA9IEpTT04ucGFyc2UodGFza1N0cik7XG4gICAgfVxuXG4gICAgaWYgKHRhc2tJblNlc3Npb25TdG9yYWdlICYmIHRhc2tJblNlc3Npb25TdG9yYWdlLmNhc2VfaWQgPT09IHRoaXMuZ2V0Q2FzZUlkKCkpIHtcbiAgICAgIC8vIFNob3cgZXZlbnQgY29tcGxldGlvbiBjb21wb25lbnQgdG8gcGVyZm9ybSBldmVudCBjb21wbGV0aW9uIGNoZWNrc1xuICAgICAgdGhpcy5ldmVudENvbXBsZXRpb25QYXJhbXMgPSB7XG4gICAgICAgIGNhc2VJZDogdGhpcy5nZXRDYXNlSWQoKSxcbiAgICAgICAgZXZlbnRJZDogdGhpcy5nZXRFdmVudElkKCksXG4gICAgICAgIHRhc2s6IHRhc2tJblNlc3Npb25TdG9yYWdlXG4gICAgICB9O1xuICAgICAgdGhpcy5ldmVudENvbXBsZXRpb25DaGVja3NSZXF1aXJlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRhc2sgbm90IGluIHNlc3Npb24gc3RvcmFnZSwgcHJvY2VlZCB0byBzdWJtaXRcbiAgICAgIGNvbnN0IGNhc2VFdmVudERhdGEgPSB0aGlzLmdlbmVyYXRlQ2FzZUV2ZW50RGF0YSgpO1xuICAgICAgdGhpcy5jYXNlU3VibWl0KGNhc2VFdmVudERhdGEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVyIGZ1bmN0aW9uIGZvciBldmVudCBlbWl0dGVkIGZyb20gY2FzZSBldmVudCBjb21wbGV0aW9uIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIG9uRXZlbnRDYW5CZUNvbXBsZXRlZChldmVudENhbkJlQ29tcGxldGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50Q2FuQmVDb21wbGV0ZWQpIHtcbiAgICAgIC8vIFN1Ym1pdFxuICAgICAgY29uc3QgY2FzZUV2ZW50RGF0YSA9IHRoaXMuZ2VuZXJhdGVDYXNlRXZlbnREYXRhKCk7XG4gICAgICB0aGlzLmNhc2VTdWJtaXQoY2FzZUV2ZW50RGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRhc2tzIHRhYiBvbiBjYXNlIGRldGFpbHMgcGFnZVxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvY2FzZXMvY2FzZS1kZXRhaWxzLyR7dGhpcy5nZXRDYXNlSWQoKX0vdGFza3NgXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvUGFnZShwYWdlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXQubmF2aWdhdGVUb1BhZ2UocGFnZUlkKTtcbiAgfVxuXG4gIHB1YmxpYyBjYWxsYmFja0Vycm9yc05vdGlmeShlcnJvckNvbnRleHQ6IENhbGxiYWNrRXJyb3JzQ29udGV4dCk6IHZvaWQge1xuICAgIHRoaXMuaWdub3JlV2FybmluZyA9IGVycm9yQ29udGV4dC5pZ25vcmVfd2FybmluZztcbiAgICB0aGlzLnRyaWdnZXJUZXh0ID0gZXJyb3JDb250ZXh0LnRyaWdnZXJfdGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkOiBDYXNlRmllbGQpOiBDYXNlRmllbGQge1xuICAgIGlmICghdGhpcy5lZGl0Rm9ybS5nZXQoJ2RhdGEnKS5nZXQoZmllbGQuaWQpKSB7XG4gICAgICAvLyBJZiBub3QgaW4gZm9ybSwgcmV0dXJuIGZpZWxkIGl0c2VsZlxuICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIGNvbnN0IGNsb25lRmllbGQ6IENhc2VGaWVsZCA9IHRoaXMuZmllbGRzVXRpbHMuY2xvbmVDYXNlRmllbGQoZmllbGQpO1xuICAgIGNsb25lRmllbGQudmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgnZGF0YScpLmdldChmaWVsZC5pZCkudmFsdWU7XG5cbiAgICByZXR1cm4gY2xvbmVGaWVsZDtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZXZlbnRUcmlnZ2VyLmNhbl9zYXZlX2RyYWZ0KSB7XG4gICAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldChDYXNlRWRpdENvbXBvbmVudC5PUklHSU5fUVVFUllfUEFSQU0pID09PSAndmlld0RyYWZ0Jykge1xuICAgICAgICB0aGlzLmNhc2VFZGl0LmNhbmNlbGxlZC5lbWl0KHtzdGF0dXM6IENhc2VFZGl0UGFnZVRleHQuUkVTVU1FRF9GT1JNX0RJU0NBUkR9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FzZUVkaXQuY2FuY2VsbGVkLmVtaXQoe3N0YXR1czogQ2FzZUVkaXRQYWdlVGV4dC5ORVdfRk9STV9ESVNDQVJEfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FzZUVkaXQuY2FuY2VsbGVkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNMYWJlbChmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FzZUZpZWxkU2VydmljZS5pc0xhYmVsKGZpZWxkKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0NoYW5nZUFsbG93ZWQoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5jYXNlRmllbGRTZXJ2aWNlLmlzUmVhZE9ubHkoZmllbGQpO1xuICB9XG5cbiAgcHVibGljIGNoZWNrWW91ckFuc3dlckZpZWxkc1RvRGlzcGxheUV4aXN0cygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZXZlbnRUcmlnZ2VyLnNob3dfc3VtbWFyeSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLndpemFyZC5wYWdlcykge1xuICAgICAgaWYgKHRoaXMuaXNTaG93bihwYWdlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHBhZ2UuY2FzZV9maWVsZHMpIHtcbiAgICAgICAgICBpZiAodGhpcy5jYW5TaG93RmllbGRJbkNZQShmaWVsZCkpIHtcbiAgICAgICAgICAgIC8vIGF0IGxlYXN0IG9uZSBmaWVsZCBuZWVkcyBzaG93aW5nXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb3VuZCBubyBmaWVsZHMgdG8gc2hvdyBpbiBDWUEgc3VtbWFyeSBwYWdlXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlYWRPbmx5U3VtbWFyeUZpZWxkc1RvRGlzcGxheUV4aXN0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMuc29tZShmaWVsZCA9PiBmaWVsZC5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24gPj0gMCApO1xuICB9XG5cbiAgcHVibGljIHNob3dFdmVudE5vdGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50VHJpZ2dlci5zaG93X2V2ZW50X25vdGVzICE9PSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBwcmV2aW91cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNQcmV2aW91cygpKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9QYWdlKHRoaXMuZ2V0TGFzdFBhZ2VTaG93bigpLmlkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFzUHJldmlvdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRMYXN0UGFnZVNob3duKCk7XG4gIH1cblxuICBwdWJsaWMgaXNTaG93bihwYWdlOiBXaXphcmRQYWdlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5maWVsZHNVdGlsc1xuICAgICAgLm1lcmdlQ2FzZUZpZWxkc0FuZEZvcm1GaWVsZHModGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMsIHRoaXMuZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXS52YWx1ZSk7XG4gICAgcmV0dXJuIHBhZ2UucGFyc2VkU2hvd0NvbmRpdGlvbi5tYXRjaChmaWVsZHMpO1xuICB9XG5cbiAgcHVibGljIGNhblNob3dGaWVsZEluQ1lBKGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmllbGQuc2hvd19zdW1tYXJ5X2NoYW5nZV9vcHRpb247XG4gIH1cblxuICBwdWJsaWMgaXNTb2xpY2l0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvZmlsZS5pc1NvbGljaXRvcigpO1xuICB9XG5cbiAgcHVibGljIGdldENhc2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyA/IHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMuY2FzZV9pZCA6ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFdmVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdEZvcm0udmFsdWUuZXZlbnQuaWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzZVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzICYmIHRoaXMuY2FzZUVkaXQuY2FzZURldGFpbHMuc3RhdGUgJiZcbiAgICB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnN0YXRlLnRpdGxlX2Rpc3BsYXkgPyB0aGlzLmNhc2VFZGl0LmNhc2VEZXRhaWxzLnN0YXRlLnRpdGxlX2Rpc3BsYXkgOiAnJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FuY2VsVGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmV2ZW50VHJpZ2dlci5jYW5fc2F2ZV9kcmFmdCkge1xuICAgICAgcmV0dXJuICdSZXR1cm4gdG8gY2FzZSBsaXN0JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdDYW5jZWwnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBnZW5lcmF0ZSBhbmQgcmV0dXJuIGNhc2UgZXZlbnQgZGF0YSBmb3IgY29tcGxldGluZyB0aGUgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVDYXNlRXZlbnREYXRhKCk6IENhc2VFdmVudERhdGEge1xuICAgIGNvbnN0IGNhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEgPSB7XG4gICAgICBkYXRhOiB0aGlzLnJlcGxhY2VFbXB0eUNvbXBsZXhGaWVsZFZhbHVlcyhcbiAgICAgICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnNhbml0aXNlKFxuICAgICAgICAgIHRoaXMucmVwbGFjZUhpZGRlbkZvcm1WYWx1ZXNXaXRoT3JpZ2luYWxDYXNlRGF0YShcbiAgICAgICAgICAgIHRoaXMuZWRpdEZvcm0uZ2V0KCdkYXRhJykgYXMgRm9ybUdyb3VwLCB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcykpKSxcbiAgICAgIGV2ZW50OiB0aGlzLmVkaXRGb3JtLnZhbHVlLmV2ZW50XG4gICAgfSBhcyBDYXNlRXZlbnREYXRhO1xuICAgIHRoaXMuZm9ybVZhbHVlU2VydmljZS5jbGVhck5vbkNhc2VGaWVsZHMoY2FzZUV2ZW50RGF0YS5kYXRhLCB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZU51bGxMYWJlbHMoY2FzZUV2ZW50RGF0YS5kYXRhLCB0aGlzLmV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZUVtcHR5RG9jdW1lbnRzKGNhc2VFdmVudERhdGEuZGF0YSwgdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIC8vIFJlbW92ZSBjb2xsZWN0aW9uIGZpZWxkcyB0aGF0IGhhdmUgXCJtaW5cIiB2YWxpZGF0aW9uIG9mIGdyZWF0ZXIgdGhhbiB6ZXJvIHNldCBvbiB0aGUgRmllbGRUeXBlIGJ1dCBhcmUgZW1wdHk7XG4gICAgLy8gdGhlc2Ugd2lsbCBmYWlsIHZhbGlkYXRpb25cbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlRW1wdHlDb2xsZWN0aW9uc1dpdGhNaW5WYWxpZGF0aW9uKGNhc2VFdmVudERhdGEuZGF0YSwgdGhpcy5ldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIGNhc2VFdmVudERhdGEuZXZlbnRfdG9rZW4gPSB0aGlzLmV2ZW50VHJpZ2dlci5ldmVudF90b2tlbjtcbiAgICBjYXNlRXZlbnREYXRhLmlnbm9yZV93YXJuaW5nID0gdGhpcy5pZ25vcmVXYXJuaW5nO1xuICAgIGlmICh0aGlzLmNhc2VFZGl0LmNvbmZpcm1hdGlvbikge1xuICAgICAgY2FzZUV2ZW50RGF0YS5kYXRhID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhc2VFdmVudERhdGE7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gY29tcGxldGUgdGhlIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIGNhc2VTdWJtaXQoY2FzZUV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUVkaXQuc3VibWl0KGNhc2VFdmVudERhdGEpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5jYXNlTm90aWZpZXIuY2FjaGVkQ2FzZVZpZXcgPSBudWxsO1xuICAgICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uID0gdGhpcy5idWlsZENvbmZpcm1hdGlvbihyZXNwb25zZSk7XG4gICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbiAmJiAoY29uZmlybWF0aW9uLmdldEhlYWRlcigpIHx8IGNvbmZpcm1hdGlvbi5nZXRCb2R5KCkpKSB7XG4gICAgICAgICAgICB0aGlzLmNhc2VFZGl0LmNvbmZpcm0oY29uZmlybWF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYXNlRWRpdC5zdWJtaXR0ZWQuZW1pdCh7Y2FzZUlkOiByZXNwb25zZVsnaWQnXSwgc3RhdHVzOiB0aGlzLmdldFN0YXR1cyhyZXNwb25zZSl9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgdGhpcy5jYWxsYmFja0Vycm9yc1N1YmplY3QubmV4dCh0aGlzLmVycm9yKTtcbiAgICAgICAgICBpZiAodGhpcy5lcnJvci5kZXRhaWxzKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FcnJvclNlcnZpY2VcbiAgICAgICAgICAgICAgLm1hcEZpZWxkRXJyb3JzKHRoaXMuZXJyb3IuZGV0YWlscy5maWVsZF9lcnJvcnMsIHRoaXMuZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXSBhcyBGb3JtR3JvdXAsICd2YWxpZGF0aW9uJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2UgKmFsbCogdmFsdWVzIG9mIGEgRm9ybUdyb3VwLCBpbmNsdWRpbmcgdGhvc2UgZm9yIGRpc2FibGVkIGZpZWxkcyAoaS5lLiBoaWRkZW4gb25lcyksIHJlcGxhY2luZyB0aGVcbiAgICogdmFsdWUgb2YgYW55IHRoYXQgYXJlIGhpZGRlbiBBTkQgaGF2ZSBgcmV0YWluX2hpZGRlbl92YWx1ZWAgc2V0IHRvIGB0cnVlYCBpbiB0aGUgY29ycmVzcG9uZGluZyBgQ2FzZUZpZWxkYCwgd2l0aFxuICAgKiB0aGUgKm9yaWdpbmFsKiB2YWx1ZSBoZWxkIGluIHRoZSBgQ2FzZUZpZWxkYCBvYmplY3QuXG4gICAqXG4gICAqIFRoaXMgaXMgYXMgcGVyIGRlc2lnbiBpbiBFVUktMzYyMiwgd2hlcmUgYW55IHVzZXItZHJpdmVuIHVwZGF0ZXMgdG8gaGlkZGVuIGZpZWxkcyB3aXRoIGByZXRhaW5faGlkZGVuX3ZhbHVlYCA9XG4gICAqIGB0cnVlYCBhcmUgaWdub3JlZCAodGh1cyByZXRhaW5pbmcgdGhlIHZhbHVlIGRpc3BsYXllZCBvcmlnaW5hbGx5KS5cbiAgICpcbiAgICogKiBGb3IgQ29tcGxleCBmaWVsZCB0eXBlcywgdGhlIHJlcGxhY2VtZW50IGFib3ZlIGlzIHBlcmZvcm1lZCByZWN1cnNpdmVseSBmb3IgYWxsIGhpZGRlbiBzdWItZmllbGRzIHdpdGhcbiAgICogYHJldGFpbl9oaWRkZW5fdmFsdWVgID0gYHRydWVgLlxuICAgKlxuICAgKiAqIEZvciBDb2xsZWN0aW9uIGZpZWxkIHR5cGVzLCBpbmNsdWRpbmcgY29sbGVjdGlvbnMgb2YgQ29tcGxleCBhbmQgRG9jdW1lbnQgZmllbGQgdHlwZXMsIHRoZSByZXBsYWNlbWVudCBpc1xuICAgKiBwZXJmb3JtZWQgZm9yIGFsbCBmaWVsZHMgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAqIHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlICpyYXcqIGZvcm0gdmFsdWUgZGF0YSAoYXMga2V5LXZhbHVlIHBhaXJzKSwgd2l0aCBhbnkgdmFsdWUgcmVwbGFjZW1lbnRzIGFzIG5lY2Vzc2FyeVxuICAgKi9cbiAgcHJpdmF0ZSByZXBsYWNlSGlkZGVuRm9ybVZhbHVlc1dpdGhPcmlnaW5hbENhc2VEYXRhKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgcGFyZW50RmllbGQ/OiBDYXNlRmllbGQpOiBvYmplY3Qge1xuICAgIC8vIEdldCB0aGUgcmF3IGZvcm0gdmFsdWUgZGF0YSwgd2hpY2ggaW5jbHVkZXMgdGhlIHZhbHVlcyBvZiBhbnkgZGlzYWJsZWQgY29udHJvbHMsIGFzIGtleS12YWx1ZSBwYWlyc1xuICAgIGNvbnN0IHJhd0Zvcm1WYWx1ZURhdGEgPSBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcblxuICAgIC8vIFBsYWNlIGFsbCBjYXNlIGZpZWxkcyBpbiBhIGxvb2t1cCBvYmplY3QsIHNvIHRoZXkgY2FuIGJlIHJldHJpZXZlZCBieSBpZFxuICAgIGNvbnN0IGNhc2VGaWVsZHNMb29rdXAgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2FzZUZpZWxkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY2FzZUZpZWxkc0xvb2t1cFtjYXNlRmllbGRzW2ldLmlkXSA9IGNhc2VGaWVsZHNbaV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZSBhbnkgZm9ybSB2YWx1ZSB3aXRoIHRoZSBvcmlnaW5hbCwgd2hlcmUgaXRzIENhc2VGaWVsZCBpcyBoaWRkZW4gQU5EIGhhcyB0aGUgcmV0YWluX2hpZGRlbl92YWx1ZSBmbGFnIHNldFxuICAgICAqIHRvIHRydWUuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgQ2FzZUZpZWxkJ3MgYGhpZGRlbmAgYXR0cmlidXRlIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIGNoZWNrIHRoaXMgYXR0cmlidXRlIGluIHRoZSBwYXJlbnQgQ2FzZUZpZWxkIChpZlxuICAgICAqIG9uZSBleGlzdHMpLiBUaGlzIGlzIG9jY3VycmluZyAoYW5kIGlzIHBvc3NpYmx5IGEgYnVnKSB3aGVuIGEgQ2FzZUZpZWxkIGlzIGEgc3ViLWZpZWxkIG9mIGEgQ29tcGxleCB0eXBlLCBvciBhblxuICAgICAqIGl0ZW0gaW4gYSBDb2xsZWN0aW9uIHR5cGUuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZmllbGQgaXMgYSBDb21wbGV4IHR5cGUgd2l0aCByZXRhaW5faGlkZGVuX3ZhbHVlID0gdHJ1ZSwgcGVyZm9ybSBhIHJlY3Vyc2l2ZSByZXBsYWNlbWVudCBmb3IgYWxsIChoaWRkZW4pXG4gICAgICogc3ViLWZpZWxkcyB3aXRoIHJldGFpbl9oaWRkZW5fdmFsdWUgPSB0cnVlLCB1c2luZyB0aGVpciBvcmlnaW5hbCBDYXNlRmllbGQgdmFsdWVzIChmcm9tIHRoZSBgZm9ybWF0dGVkX3ZhbHVlYFxuICAgICAqIGF0dHJpYnV0ZSkuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZmllbGQgaXMgYSBDb2xsZWN0aW9uIHR5cGUgd2l0aCByZXRhaW5faGlkZGVuX3ZhbHVlID0gdHJ1ZSwgdGhlIGVudGlyZSBjb2xsZWN0aW9uIGlzIHJlcGxhY2VkIHdpdGggdGhlXG4gICAgICogb3JpZ2luYWwgZnJvbSBgZm9ybWF0dGVkX3ZhbHVlYC4gVGhpcyBhcHBsaWVzIHRvICphbGwqIHR5cGVzIG9mIENvbGxlY3Rpb25zLlxuICAgICAqL1xuICAgIE9iamVjdC5rZXlzKHJhd0Zvcm1WYWx1ZURhdGEpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgY2FzZUZpZWxkOiBDYXNlRmllbGQgPSBjYXNlRmllbGRzTG9va3VwW2tleV07XG4gICAgICAvLyBJZiBjYXNlRmllbGQuaGlkZGVuIGlzIE5PVCB0cnV0aHkgYW5kIGFsc28gTk9UIGVxdWFsIHRvIGZhbHNlLCB0aGVuIGl0IG11c3QgYmUgbnVsbC91bmRlZmluZWQgKHJlbWVtYmVyIHRoYXRcbiAgICAgIC8vIGJvdGggbnVsbCBhbmQgdW5kZWZpbmVkIGFyZSBlcXVhbCB0byAqbmVpdGhlciBmYWxzZSBub3IgdHJ1ZSopXG4gICAgICBpZiAoY2FzZUZpZWxkICYmIGNhc2VGaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlICYmXG4gICAgICAgIChjYXNlRmllbGQuaGlkZGVuIHx8IChjYXNlRmllbGQuaGlkZGVuICE9PSBmYWxzZSAmJiBwYXJlbnRGaWVsZCAmJiBwYXJlbnRGaWVsZC5oaWRkZW4pKSkge1xuICAgICAgICBpZiAoY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgaWYgKGNhc2VGaWVsZC52YWx1ZSAhPT0gbnVsbCAmJiBjYXNlRmllbGQudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IHRvIHJlcGxhY2UgdGhlIENvbXBsZXggZmllbGQncyBzdWItZmllbGRzIGFzIG5lY2Vzc2FyeSwgcGFzc2luZyB0aGVcbiAgICAgICAgICAgIC8vIENhc2VGaWVsZCBpdHNlbGYgKHRoZSBzdWItZmllbGRzIGRvIG5vdCBjb250YWluIGFueSB2YWx1ZXMsIHNvIHRoZXNlIG5lZWQgdG8gYmUgb2J0YWluZWQgZnJvbSB0aGVcbiAgICAgICAgICAgIC8vIHBhcmVudClcbiAgICAgICAgICAgIC8vIFVwZGF0ZSByYXdGb3JtVmFsdWVEYXRhIGZvciB0aGlzIGZpZWxkXG4gICAgICAgICAgICAvLyBjcmVhdGluZyBmb3JtIGdyb3VwIGFuZCBhZGRpbmcgY29udHJvbCBpbnRvIGl0IGluIGNhc2UgY2FzZUZpZWxkIGlzIG9mIGNvbXBsZXh0IHR5cGUgYW5kIGFuZCBwYXJ0IG9mIGZvcm1Hcm91cFxuICAgICAgICAgICAgY29uc3QgZm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICAgICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWUpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWUpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZENvbnRyb2woaXRlbSwgbmV3IEZvcm1Db250cm9sKGZvcm1Hcm91cC5jb250cm9sc1trZXldLnZhbHVlW2l0ZW1dKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmF3Rm9ybVZhbHVlRGF0YVtrZXldID0gdGhpcy5yZXBsYWNlSGlkZGVuRm9ybVZhbHVlc1dpdGhPcmlnaW5hbENhc2VEYXRhKFxuICAgICAgICAgICAgICBmb3JtLCBjYXNlRmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgY2FzZUZpZWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGVmYXVsdCBjYXNlIGFsc28gaGFuZGxlcyBjb2xsZWN0aW9ucyBvZiAqYWxsKiB0eXBlczsgdGhlIGVudGlyZSBjb2xsZWN0aW9uIGluIHJhd0Zvcm1WYWx1ZURhdGEgd2lsbCBiZVxuICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGggdGhlIG9yaWdpbmFsIGZyb20gZm9ybWF0dGVkX3ZhbHVlXG4gICAgICAgICAgLy8gVXNlIHRoZSBDYXNlRmllbGQncyBleGlzdGluZyAqZm9ybWF0dGVkX3ZhbHVlKiBmcm9tIHRoZSBwYXJlbnQsIGlmIGF2YWlsYWJsZS4gKFRoaXMgaXMgbmVjZXNzYXJ5IGZvclxuICAgICAgICAgIC8vIENvbXBsZXggZmllbGRzLCB3aG9zZSBzdWItZmllbGRzIGRvIG5vdCBob2xkIGFueSB2YWx1ZXMgaW4gdGhlIG1vZGVsLikgT3RoZXJ3aXNlLCB1c2UgZm9ybWF0dGVkX3ZhbHVlXG4gICAgICAgICAgLy8gZnJvbSB0aGUgQ2FzZUZpZWxkIGl0c2VsZi5cbiAgICAgICAgICBpZiAocGFyZW50RmllbGQgJiYgcGFyZW50RmllbGQuZm9ybWF0dGVkX3ZhbHVlKSB7XG4gICAgICAgICAgICByYXdGb3JtVmFsdWVEYXRhW2tleV0gPSBwYXJlbnRGaWVsZC5mb3JtYXR0ZWRfdmFsdWVbY2FzZUZpZWxkLmlkXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmF3Rm9ybVZhbHVlRGF0YVtrZXldID0gY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByYXdGb3JtVmFsdWVEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIG5vbi1hcnJheSB2YWx1ZSBvYmplY3RzIHdpdGggYG51bGxgIGZvciBhbnkgQ29tcGxleC10eXBlIGZpZWxkcyB3aG9zZSB2YWx1ZSBpcyBlZmZlY3RpdmVseSBlbXB0eSwgaS5lLlxuICAgKiBhbGwgaXRzIHN1Yi1maWVsZHMgYW5kIGRlc2NlbmRhbnRzIGFyZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBwcml2YXRlIHJlcGxhY2VFbXB0eUNvbXBsZXhGaWVsZFZhbHVlcyhkYXRhOiBvYmplY3QpOiBvYmplY3Qge1xuICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGFba2V5XSkgJiYgdHlwZW9mIGRhdGFba2V5XSA9PT0gJ29iamVjdCcgJiYgIUZpZWxkc1V0aWxzLmNvbnRhaW5zTm9uRW1wdHlWYWx1ZXMoZGF0YVtrZXldKSkge1xuICAgICAgICBkYXRhW2tleV0gPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIGdldFN0YXR1cyhyZXNwb25zZTogb2JqZWN0KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5oYXNDYWxsYmFja0ZhaWxlZChyZXNwb25zZSkgPyByZXNwb25zZVsnY2FsbGJhY2tfcmVzcG9uc2Vfc3RhdHVzJ10gOiByZXNwb25zZVsnZGVsZXRlX2RyYWZ0X3Jlc3BvbnNlX3N0YXR1cyddO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNDYWxsYmFja0ZhaWxlZChyZXNwb25zZTogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlWydjYWxsYmFja19yZXNwb25zZV9zdGF0dXMnXSAhPT0gJ0NBTExCQUNLX0NPTVBMRVRFRCc7XG4gIH1cblxuICBwcml2YXRlIGdldExhc3RQYWdlU2hvd24oKTogV2l6YXJkUGFnZSB7XG4gICAgbGV0IGxhc3RQYWdlOiBXaXphcmRQYWdlO1xuICAgIHRoaXMud2l6YXJkLnJldmVyc2UoKS5mb3JFYWNoKHBhZ2UgPT4ge1xuICAgICAgaWYgKCFsYXN0UGFnZSAmJiB0aGlzLmlzU2hvd24ocGFnZSkpIHtcbiAgICAgICAgbGFzdFBhZ2UgPSBwYWdlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIG5vaW5zcGVjdGlvbiBKU1VudXNlZEFzc2lnbm1lbnRcbiAgICByZXR1cm4gbGFzdFBhZ2U7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29uZmlybWF0aW9uKHJlc3BvbnNlOiBvYmplY3QpOiBDb25maXJtYXRpb24ge1xuICAgIGlmIChyZXNwb25zZVsnYWZ0ZXJfc3VibWl0X2NhbGxiYWNrX3Jlc3BvbnNlJ10pIHtcbiAgICAgIHJldHVybiBuZXcgQ29uZmlybWF0aW9uKFxuICAgICAgICByZXNwb25zZVsnaWQnXSxcbiAgICAgICAgcmVzcG9uc2VbJ2NhbGxiYWNrX3Jlc3BvbnNlX3N0YXR1cyddLFxuICAgICAgICByZXNwb25zZVsnYWZ0ZXJfc3VibWl0X2NhbGxiYWNrX3Jlc3BvbnNlJ11bJ2NvbmZpcm1hdGlvbl9oZWFkZXInXSxcbiAgICAgICAgcmVzcG9uc2VbJ2FmdGVyX3N1Ym1pdF9jYWxsYmFja19yZXNwb25zZSddWydjb25maXJtYXRpb25fYm9keSddXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNvcnRGaWVsZHNCeVNob3dTdW1tYXJ5Q29udGVudChmaWVsZHM6IENhc2VGaWVsZFtdKTogQ2FzZUZpZWxkW10ge1xuICAgIHJldHVybiB0aGlzLm9yZGVyU2VydmljZVxuICAgICAgLnNvcnQoZmllbGRzLCBDYXNlRWRpdFN1Ym1pdENvbXBvbmVudC5TSE9XX1NVTU1BUllfQ09OVEVOVF9DT01QQVJFX0ZVTkNUSU9OKVxuICAgICAgLmZpbHRlcihjZiA9PiBjZi5zaG93X3N1bW1hcnlfY29udGVudF9vcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXNlRmllbGRzKCk6IENhc2VGaWVsZFtdIHtcbiAgICBpZiAodGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscykge1xuICAgICAgcmV0dXJuIEZpZWxkc1V0aWxzLmdldENhc2VGaWVsZHModGhpcy5jYXNlRWRpdC5jYXNlRGV0YWlscyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiIWV2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkXCI+XG4gIDwhLS0gRXZlbnQgdHJpZ2dlciBuYW1lIC0tPlxuICA8aDEgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj57eyBldmVudFRyaWdnZXIubmFtZX19PC9oMT5cblxuICA8IS0tQ2FzZSBJRCBvciBUaXRsZSAtLT5cbiAgPGRpdiAqbmdJZj1cImdldENhc2VUaXRsZSgpOyB0aGVuIHRpdGxlQmxvY2s7IGVsc2UgaWRCbG9ja1wiPjwvZGl2PlxuICA8bmctdGVtcGxhdGUgI3RpdGxlQmxvY2s+XG4gICAgPGNjZC1tYXJrZG93biBbY29udGVudF09XCJnZXRDYXNlVGl0bGUoKSB8IGNjZENhc2VUaXRsZTogY29udGV4dEZpZWxkcyA6IGVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIj48L2NjZC1tYXJrZG93bj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNpZEJsb2NrPlxuICAgIDxoMiAqbmdJZj1cImdldENhc2VJZCgpXCIgY2xhc3M9XCJoZWFkaW5nLWgyXCI+I3t7IGdldENhc2VJZCgpIHwgY2NkQ2FzZVJlZmVyZW5jZSB9fTwvaDI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPCEtLSBHZW5lcmljIGVycm9yIGhlYWRpbmcgYW5kIGVycm9yIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIG9ubHkgaWYgdGhlcmUgYXJlIG5vIHNwZWNpZmljIGNhbGxiYWNrIGVycm9ycyBvciB3YXJuaW5ncywgb3Igbm8gZXJyb3IgZGV0YWlscyAtLT5cbiAgPGRpdiAqbmdJZj1cImVycm9yICYmICghKGVycm9yLmNhbGxiYWNrRXJyb3JzIHx8IGVycm9yLmNhbGxiYWNrV2FybmluZ3MgfHwgZXJyb3IuZGV0YWlscykgJiYgIWVycm9yLm1lc3NhZ2UpXCIgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZWRpdC1jYXNlLWV2ZW50X2Vycm9yLXN1bW1hcnktaGVhZGluZ1wiIHRhYmluZGV4PVwiLTFcIj5cbiAgICA8aDEgY2xhc3M9XCJoZWFkaW5nLWgxIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZWRpdC1jYXNlLWV2ZW50X2Vycm9yLXN1bW1hcnktaGVhZGluZ1wiPlxuICAgICAgU29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICA8L2gxPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCIgaWQ9XCJlZGl0LWNhc2UtZXZlbnRfZXJyb3Itc3VtbWFyeS1ib2R5XCI+XG4gICAgICA8cD5XZSdyZSB3b3JraW5nIHRvIGZpeCB0aGUgcHJvYmxlbS4gVHJ5IGFnYWluIHNob3J0bHkuPC9wPlxuICAgICAgPHA+PGEgaHJlZj1cImdldC1oZWxwXCIgdGFyZ2V0PVwiX2JsYW5rXCI+Q29udGFjdCB1czwvYT4gaWYgeW91J3JlIHN0aWxsIGhhdmluZyBwcm9ibGVtcy48L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEV2ZW50IGVycm9yIGhlYWRpbmcgYW5kIGVycm9yIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBlcnJvciBkZXRhaWxzIC0tPlxuICA8ZGl2ICpuZ0lmPVwiZXJyb3IgJiYgKGVycm9yLmRldGFpbHMgfHwgZXJyb3IubWVzc2FnZSlcIiBjbGFzcz1cImVycm9yLXN1bW1hcnlcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsbGVkYnk9XCJlZGl0LWNhc2UtZXZlbnRfZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgIDxoMyBjbGFzcz1cImhlYWRpbmctaDMgZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgaWQ9XCJlZGl0LWNhc2UtZXZlbnRfZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCI+XG4gICAgICBUaGUgZXZlbnQgY291bGQgbm90IGJlIGNyZWF0ZWRcbiAgICA8L2gzPlxuICAgIDxwPnt7ZXJyb3IubWVzc2FnZX19PC9wPlxuICAgIDx1bCAqbmdJZj1cImVycm9yLmRldGFpbHM/LmZpZWxkX2Vycm9yc1wiIGNsYXNzPVwiZXJyb3Itc3VtbWFyeS1saXN0XCI+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGZpZWxkRXJyb3Igb2YgZXJyb3IuZGV0YWlscy5maWVsZF9lcnJvcnNcIiBjbGFzcz1cImNjZC1lcnJvci1zdW1tYXJ5LWxpXCI+e3tmaWVsZEVycm9yLm1lc3NhZ2V9fTwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG4gIDxjY2QtY2FsbGJhY2stZXJyb3JzIFtjYWxsYmFja0Vycm9yc1N1YmplY3RdPVwiY2FsbGJhY2tFcnJvcnNTdWJqZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2FsbGJhY2tFcnJvcnNDb250ZXh0KT1cImNhbGxiYWNrRXJyb3JzTm90aWZ5KCRldmVudClcIj48L2NjZC1jYWxsYmFjay1lcnJvcnM+XG5cbiAgPGZvcm0gY2xhc3M9XCJjaGVjay15b3VyLWFuc3dlcnNcIiBbZm9ybUdyb3VwXT1cImVkaXRGb3JtXCIgKHN1Ym1pdCk9XCJzdWJtaXQoKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja1lvdXJBbnN3ZXJGaWVsZHNUb0Rpc3BsYXlFeGlzdHMoKVwiPlxuXG4gICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nLWgyXCI+Q2hlY2sgeW91ciBhbnN3ZXJzPC9oMj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xNlwiPkNoZWNrIHRoZSBpbmZvcm1hdGlvbiBiZWxvdyBjYXJlZnVsbHkuPC9zcGFuPlxuXG4gICAgICA8dGFibGUgY2xhc3M9XCJmb3JtLXRhYmxlXCIgYXJpYS1kZXNjcmliZWRieT1cImNoZWNrIHlvdXIgYW5zd2VycyB0YWJsZVwiPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgdGhpcy53aXphcmQucGFnZXNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTaG93bihwYWdlKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgcGFnZVxuICAgICAgICAgICAgfCBjY2RQYWdlRmllbGRzOiBlZGl0Rm9ybVxuICAgICAgICAgICAgfCBjY2RSZWFkRmllbGRzRmlsdGVyOiBmYWxzZSA6dW5kZWZpbmVkIDp0cnVlIDogZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVxuICAgICAgICAgICAgfCBjY2RDWUFQYWdlTGFiZWxGaWx0ZXJcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhblNob3dGaWVsZEluQ1lBKGZpZWxkKVwiPlxuICAgICAgICAgICAgICAgIDx0ciBjY2RMYWJlbFN1YnN0aXR1dG9yIFtjYXNlRmllbGRdPVwiZmllbGRcIiBbaGlkZGVuXT1cImZpZWxkLmhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjb250ZXh0RmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFpc0xhYmVsKGZpZWxkKVwiIGNsYXNzPVwidmFsaWduLXRvcCBjYXNlLWZpZWxkLWxhYmVsXCI+PHNwYW4gY2xhc3M9XCJ0ZXh0LTE2XCI+e3tmaWVsZC5sYWJlbH19PC9zcGFuPjwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmb3JtLWNlbGwgY2FzZS1maWVsZC1jb250ZW50XCIgW2F0dHIuY29sc3Bhbl09XCJpc0xhYmVsKGZpZWxkKSA/ICcyJyA6ICcxJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8Y2NkLWZpZWxkLXJlYWRcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbdG9wTGV2ZWxGb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Nhc2VGaWVsZF09XCJzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkKVwiIFtjb250ZXh0XT1cInBhbGV0dGVDb250ZXh0XCIgW2Nhc2VGaWVsZHNdPVwiY29udGV4dEZpZWxkc1wiPjwvY2NkLWZpZWxkLXJlYWQ+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidmFsaWduLXRvcCBjaGVjay15b3VyLWFuc3dlcnNfX2NoYW5nZSBjYXNlLWZpZWxkLWNoYW5nZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cImlzQ2hhbmdlQWxsb3dlZChmaWVsZClcIiAoY2xpY2spPVwibmF2aWdhdGVUb1BhZ2UocGFnZS5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj48c3BhbiBjbGFzcz1cInRleHQtMTZcIiBhdHRyLmFyaWEtbGFiZWw9XCJDaGFuZ2Uge3sgZmllbGQubGFiZWwgfX1cIj5DaGFuZ2U8L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlYWRPbmx5U3VtbWFyeUZpZWxkc1RvRGlzcGxheUV4aXN0cygpXCI+XG5cbiAgICAgIDx0YWJsZSBjbGFzcz1cInN1bW1hcnktZmllbGRzXCIgYXJpYS1kZXNjcmliZWRieT1cInN1bW1hcnkgZmllbGRzIHRhYmxlXCI+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB0aGlzLnNob3dTdW1tYXJ5RmllbGRzXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cIiEoZmllbGQgfCBjY2RJc0NvbXBvdW5kKVwiPlxuICAgICAgICAgICAgICAgIDx0ciAqbmdTd2l0Y2hDYXNlPVwidHJ1ZVwiIGNjZExhYmVsU3Vic3RpdHV0b3IgW2Nhc2VGaWVsZF09XCJmaWVsZFwiIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjb250ZXh0RmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgIDx0aCBpZD1cInN1bW1hcnktZmllbGQtbGFiZWxcIj57e2ZpZWxkLmxhYmVsfX08L3RoPlxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZm9ybS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxjY2QtZmllbGQtcmVhZCBbZm9ybUdyb3VwXT1cImVkaXRGb3JtLmNvbnRyb2xzWydkYXRhJ11cIiBbY2FzZUZpZWxkXT1cInN1bW1hcnlDYXNlRmllbGQoZmllbGQpXCI+PC9jY2QtZmllbGQtcmVhZD5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8dHIgKm5nU3dpdGNoQ2FzZT1cImZhbHNlXCIgY2xhc3M9XCJjb21wb3VuZC1maWVsZFwiIGNjZExhYmVsU3Vic3RpdHV0b3IgW2Nhc2VGaWVsZF09XCJmaWVsZFwiIFtmb3JtR3JvdXBdPVwiZWRpdEZvcm0uY29udHJvbHNbJ2RhdGEnXVwiIFtjb250ZXh0RmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMlwiPlxuICAgICAgICAgICAgICAgICAgICA8Y2NkLWZpZWxkLXJlYWQgW2Zvcm1Hcm91cF09XCJlZGl0Rm9ybS5jb250cm9sc1snZGF0YSddXCIgW2Nhc2VGaWVsZF09XCJzdW1tYXJ5Q2FzZUZpZWxkKGZpZWxkKVwiIFtjYXNlRmllbGRzXT1cImNvbnRleHRGaWVsZHNcIj48L2NjZC1maWVsZC1yZWFkPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0V2ZW50Tm90ZXMoKVwiPlxuICAgICAgPGZpZWxkc2V0IGlkPVwiZmllbGRzZXQtZXZlbnRcIiBmb3JtR3JvdXBOYW1lPVwiZXZlbnRcIiAqbmdJZj1cInByb2ZpbGUgJiYgIWlzU29saWNpdG9yKClcIj5cbiAgICAgICAgPGxlZ2VuZCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9sZWdlbmQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImZpZWxkLXRyaWdnZXItc3VtbWFyeVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlxuICAgICAgICAgICAgRXZlbnQgc3VtbWFyeSAob3B0aW9uYWwpXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0taGludFwiPkEgZmV3IHdvcmRzIGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGV2ZW50Ljwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiZmllbGQtdHJpZ2dlci1zdW1tYXJ5XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm90dG9tLTMwIHdpZHRoLTUwXCIgZm9ybUNvbnRyb2xOYW1lPVwic3VtbWFyeVwiIG1heGxlbmd0aD1cIjEwMjRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImZpZWxkLXRyaWdnZXItZGVzY3JpcHRpb25cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5FdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpPC9sYWJlbD5cbiAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJmaWVsZC10cmlnZ2VyLWRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYm90dG9tLTMwIHdpZHRoLTUwXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI2NTUzNlwiPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWVsZHNldD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBmb3JtLWdyb3VwLXJlbGF0ZWRcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gYnV0dG9uLXNlY29uZGFyeVwiIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIWhhc1ByZXZpb3VzKCkgfHwgaXNTdWJtaXR0aW5nXCIgKGNsaWNrKT1cInByZXZpb3VzKClcIj5QcmV2aW91czwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBjbGFzcz1cImJ1dHRvblwiPnt7dHJpZ2dlclRleHR9fTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwiY2FuY2VsXCI+PGEgKGNsaWNrKT1cImNhbmNlbCgpXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIFtjbGFzcy5kaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmdcIj57e2dldENhbmNlbFRleHQoKX19PC9hPjwvcD5cbiAgPC9mb3JtPlxuPC9kaXY+XG48Y2NkLWNhc2UtZXZlbnQtY29tcGxldGlvbiAqbmdJZj1cImV2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkXCJcbiAgW2V2ZW50Q29tcGxldGlvblBhcmFtc109XCJldmVudENvbXBsZXRpb25QYXJhbXNcIlxuICAoZXZlbnRDYW5CZUNvbXBsZXRlZCk9XCJvbkV2ZW50Q2FuQmVDb21wbGV0ZWQoJGV2ZW50KVwiPlxuPC9jY2QtY2FzZS1ldmVudC1jb21wbGV0aW9uPlxuIl19
|