@openmrs/ngx-formentry 3.2.1-pre.245 → 3.2.1-pre.271
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/.editorconfig +13 -0
- package/.eslintrc.json +45 -0
- package/.prettierignore +40 -0
- package/.prettierrc +6 -0
- package/.turbo/turbo-build:lib.log +37 -0
- package/.yarn/plugins/@yarnpkg/plugin-version.cjs +550 -0
- package/.yarn/versions/b206d73c.yml +0 -0
- package/README.md +429 -0
- package/angular.json +164 -0
- package/{components → dist/ngx-formentry/components}/input/text-area.directive.d.ts +1 -0
- package/{esm2015/components/afe-ng-select.component.js → dist/ngx-formentry/esm2020/components/afe-ng-select.component.mjs} +4 -4
- package/dist/ngx-formentry/esm2020/components/appointments-overview/appointments-overview.component.mjs +116 -0
- package/{esm2015/components/check-box/checkbox.component.js → dist/ngx-formentry/esm2020/components/check-box/checkbox.component.mjs} +6 -10
- package/{esm2015/components/check-box/checkbox.module.js → dist/ngx-formentry/esm2020/components/check-box/checkbox.module.mjs} +5 -5
- package/{esm2015/components/custom-component-wrapper/custom-component-wrapper..module.js → dist/ngx-formentry/esm2020/components/custom-component-wrapper/custom-component-wrapper..module.mjs} +5 -5
- package/dist/ngx-formentry/esm2020/components/custom-component-wrapper/custom-component-wrapper.component.mjs +21 -0
- package/{esm2015/components/custom-control-wrapper/custom-control-wrapper..module.js → dist/ngx-formentry/esm2020/components/custom-control-wrapper/custom-control-wrapper..module.mjs} +5 -5
- package/dist/ngx-formentry/esm2020/components/custom-control-wrapper/custom-control-wrapper.component.mjs +68 -0
- package/dist/ngx-formentry/esm2020/components/date-time-picker/date-picker/date-picker.component.mjs +188 -0
- package/dist/ngx-formentry/esm2020/components/date-time-picker/date-time-picker.component.mjs +115 -0
- package/{esm2015/components/date-time-picker/date-time-picker.module.js → dist/ngx-formentry/esm2020/components/date-time-picker/date-time-picker.module.mjs} +5 -5
- package/dist/ngx-formentry/esm2020/components/date-time-picker/picker-modal/modal.component.mjs +25 -0
- package/{esm2015/components/date-time-picker/pipes/moment.pipe.js → dist/ngx-formentry/esm2020/components/date-time-picker/pipes/moment.pipe.mjs} +4 -4
- package/dist/ngx-formentry/esm2020/components/date-time-picker/time-picker/time-picker.component.mjs +121 -0
- package/{esm2015/components/file-upload/file-upload.component.js → dist/ngx-formentry/esm2020/components/file-upload/file-upload.component.mjs} +8 -13
- package/{esm2015/components/file-upload/file-upload.module.js → dist/ngx-formentry/esm2020/components/file-upload/file-upload.module.mjs} +5 -5
- package/dist/ngx-formentry/esm2020/components/file-upload/secure.pipe.mjs +101 -0
- package/{esm2015/components/input/input.directive.js → dist/ngx-formentry/esm2020/components/input/input.directive.mjs} +4 -4
- package/{esm2015/components/input/input.module.js → dist/ngx-formentry/esm2020/components/input/input.module.mjs} +5 -5
- package/{esm2015/components/input/label.component.js → dist/ngx-formentry/esm2020/components/input/label.component.mjs} +4 -4
- package/dist/ngx-formentry/esm2020/components/input/text-area.directive.mjs +58 -0
- package/dist/ngx-formentry/esm2020/components/ngx-datetime-picker/ngx-datetime-picker.component.mjs +76 -0
- package/{esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js → dist/ngx-formentry/esm2020/components/ngx-datetime-picker/ngx-datetime-picker.module.mjs} +5 -5
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.mjs} +5 -5
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.mjs} +9 -9
- package/dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/calendar-body.component.mjs +142 -0
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.mjs} +5 -11
- package/dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.mjs +373 -0
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.mjs} +5 -11
- package/dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/calendar.component.mjs +342 -0
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.mjs} +5 -11
- package/dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.mjs +392 -0
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.mjs} +4 -4
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.mjs} +4 -4
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.mjs} +4 -4
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.mjs} +5 -11
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/date-time.class.mjs} +4 -4
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/date-time.module.mjs} +6 -7
- package/{esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.mjs} +4 -4
- package/dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/timer-box.component.mjs +90 -0
- package/dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/timer.component.mjs +292 -0
- package/{esm2015/components/ngx-pick-datetime/lib/dialog/dialog-container.component.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/dialog/dialog-container.component.mjs} +6 -10
- package/dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/dialog/dialog.module.mjs +26 -0
- package/{esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/dialog/dialog.service.mjs} +4 -4
- package/{esm2015/components/ngx-remote-select/ngx-remote-select.component.js → dist/ngx-formentry/esm2020/components/ngx-remote-select/ngx-remote-select.component.mjs} +6 -10
- package/{esm2015/components/ngx-remote-select/ngx-remote-select.module.js → dist/ngx-formentry/esm2020/components/ngx-remote-select/ngx-remote-select.module.mjs} +5 -5
- package/dist/ngx-formentry/esm2020/components/ngx-tabset/components/ngx-tab-set.component.mjs +72 -0
- package/dist/ngx-formentry/esm2020/components/ngx-tabset/components/tab.component.mjs +33 -0
- package/{esm2015/components/ngx-tabset/directives/hover-class.directive.js → dist/ngx-formentry/esm2020/components/ngx-tabset/directives/hover-class.directive.mjs} +4 -4
- package/{esm2015/components/ngx-tabset/modules/ngx-tabset.module.js → dist/ngx-formentry/esm2020/components/ngx-tabset/modules/ngx-tabset.module.mjs} +5 -5
- package/dist/ngx-formentry/esm2020/components/number-input/number-input.component.mjs +248 -0
- package/{esm2015/components/number-input/number-input.module.js → dist/ngx-formentry/esm2020/components/number-input/number-input.module.mjs} +5 -5
- package/{esm2015/components/number-input/number.directive.js → dist/ngx-formentry/esm2020/components/number-input/number.directive.mjs} +4 -4
- package/dist/ngx-formentry/esm2020/components/radio-button/radio.component.mjs +96 -0
- package/{esm2015/components/radio-button/radio.module.js → dist/ngx-formentry/esm2020/components/radio-button/radio.module.mjs} +5 -5
- package/{esm2015/components/select/optgroup.directive.js → dist/ngx-formentry/esm2020/components/select/optgroup.directive.mjs} +4 -4
- package/{esm2015/components/select/option.directive.js → dist/ngx-formentry/esm2020/components/select/option.directive.mjs} +4 -4
- package/dist/ngx-formentry/esm2020/components/select/select.component.mjs +182 -0
- package/{esm2015/components/select/select.module.js → dist/ngx-formentry/esm2020/components/select/select.module.mjs} +5 -5
- package/{esm2015/form-entry/data-sources/data-sources.js → dist/ngx-formentry/esm2020/form-entry/data-sources/data-sources.mjs} +4 -4
- package/{esm2015/form-entry/directives/collapse.directive.js → dist/ngx-formentry/esm2020/form-entry/directives/collapse.directive.mjs} +5 -5
- package/{esm2015/form-entry/directives/historical-value.directive.js → dist/ngx-formentry/esm2020/form-entry/directives/historical-value.directive.mjs} +4 -4
- package/dist/ngx-formentry/esm2020/form-entry/error-renderer/error-renderer.component.mjs +53 -0
- package/{esm2015/form-entry/expression-runner/expression-runner.js → dist/ngx-formentry/esm2020/form-entry/expression-runner/expression-runner.mjs} +6 -6
- package/{esm2015/form-entry/form-entry.module.js → dist/ngx-formentry/esm2020/form-entry/form-entry.module.mjs} +5 -5
- package/{esm2015/form-entry/form-factory/control-relations.factory.js → dist/ngx-formentry/esm2020/form-entry/form-factory/control-relations.factory.mjs} +4 -4
- package/dist/ngx-formentry/esm2020/form-entry/form-factory/form-control.service.mjs +118 -0
- package/{esm2015/form-entry/form-factory/form.factory.js → dist/ngx-formentry/esm2020/form-entry/form-factory/form.factory.mjs} +4 -4
- package/{esm2015/form-entry/form-factory/hiders-disablers.factory.js → dist/ngx-formentry/esm2020/form-entry/form-factory/hiders-disablers.factory.mjs} +4 -4
- package/dist/ngx-formentry/esm2020/form-entry/form-factory/question.factory.mjs +1000 -0
- package/{esm2015/form-entry/form-factory/show-messages.factory.js → dist/ngx-formentry/esm2020/form-entry/form-factory/show-messages.factory.mjs} +4 -4
- package/{esm2015/form-entry/form-factory/validation.factory.js → dist/ngx-formentry/esm2020/form-entry/form-factory/validation.factory.mjs} +4 -4
- package/dist/ngx-formentry/esm2020/form-entry/form-renderer/form-renderer.component.mjs +263 -0
- package/{esm2015/form-entry/helpers/historical-expression-helper-service.js → dist/ngx-formentry/esm2020/form-entry/helpers/historical-expression-helper-service.mjs} +4 -4
- package/{esm2015/form-entry/helpers/historical-field-helper-service.js → dist/ngx-formentry/esm2020/form-entry/helpers/historical-field-helper-service.mjs} +4 -4
- package/{esm2015/form-entry/helpers/js-expression-helper.js → dist/ngx-formentry/esm2020/form-entry/helpers/js-expression-helper.mjs} +7 -11
- package/{esm2015/form-entry/pipes/time-ago.pipe.js → dist/ngx-formentry/esm2020/form-entry/pipes/time-ago.pipe.mjs} +4 -4
- package/{esm2015/form-entry/services/debug-mode.service.js → dist/ngx-formentry/esm2020/form-entry/services/debug-mode.service.mjs} +4 -4
- package/{esm2015/form-entry/services/form-errors.service.js → dist/ngx-formentry/esm2020/form-entry/services/form-errors.service.mjs} +4 -4
- package/{esm2015/form-entry/services/form-schema-compiler.service.js → dist/ngx-formentry/esm2020/form-entry/services/form-schema-compiler.service.mjs} +4 -4
- package/{esm2015/form-entry/services/historical-encounter-data.service.js → dist/ngx-formentry/esm2020/form-entry/services/historical-encounter-data.service.mjs} +4 -4
- package/dist/ngx-formentry/esm2020/form-entry/value-adapters/diagnosis.adapter.mjs +144 -0
- package/dist/ngx-formentry/esm2020/form-entry/value-adapters/encounter.adapter.mjs +186 -0
- package/dist/ngx-formentry/esm2020/form-entry/value-adapters/obs-adapter-helper.mjs +533 -0
- package/{esm2015/form-entry/value-adapters/obs.adapter.js → dist/ngx-formentry/esm2020/form-entry/value-adapters/obs.adapter.mjs} +4 -4
- package/{esm2015/form-entry/value-adapters/order.adapter.js → dist/ngx-formentry/esm2020/form-entry/value-adapters/order.adapter.mjs} +4 -4
- package/{esm2015/form-entry/value-adapters/patient-identifier.adapter.js → dist/ngx-formentry/esm2020/form-entry/value-adapters/patient-identifier.adapter.mjs} +4 -4
- package/{esm2015/form-entry/value-adapters/person-attribute.adapter.js → dist/ngx-formentry/esm2020/form-entry/value-adapters/person-attribute.adapter.mjs} +4 -4
- package/{esm2015/shared.module.js → dist/ngx-formentry/esm2020/shared.module.mjs} +5 -5
- package/dist/ngx-formentry/fesm2015/openmrs-ngx-formentry.mjs +14718 -0
- package/dist/ngx-formentry/fesm2015/openmrs-ngx-formentry.mjs.map +1 -0
- package/{fesm2015/openmrs-ngx-formentry.js → dist/ngx-formentry/fesm2020/openmrs-ngx-formentry.mjs} +546 -699
- package/dist/ngx-formentry/fesm2020/openmrs-ngx-formentry.mjs.map +1 -0
- package/dist/ngx-formentry/package.json +48 -0
- package/package.json +92 -26
- package/proxy.conf.json +6 -0
- package/scripts/build.sh +2 -0
- package/tsconfig.json +29 -0
- package/turbo.json +18 -0
- package/bundles/openmrs-ngx-formentry.umd.js +0 -16636
- package/bundles/openmrs-ngx-formentry.umd.js.map +0 -1
- package/esm2015/components/appointments-overview/appointments-overview.component.js +0 -121
- package/esm2015/components/custom-component-wrapper/custom-component-wrapper.component.js +0 -24
- package/esm2015/components/custom-control-wrapper/custom-control-wrapper.component.js +0 -74
- package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +0 -192
- package/esm2015/components/date-time-picker/date-time-picker.component.js +0 -120
- package/esm2015/components/date-time-picker/picker-modal/modal.component.js +0 -31
- package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +0 -125
- package/esm2015/components/file-upload/secure.pipe.js +0 -101
- package/esm2015/components/input/text-area.directive.js +0 -54
- package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +0 -81
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-body.component.js +0 -149
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +0 -378
- package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +0 -348
- package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +0 -399
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +0 -96
- package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +0 -298
- package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.module.js +0 -27
- package/esm2015/components/ngx-tabset/components/ngx-tab-set.component.js +0 -76
- package/esm2015/components/ngx-tabset/components/tab.component.js +0 -37
- package/esm2015/components/number-input/number-input.component.js +0 -252
- package/esm2015/components/radio-button/radio.component.js +0 -102
- package/esm2015/components/select/select.component.js +0 -187
- package/esm2015/form-entry/error-renderer/error-renderer.component.js +0 -57
- package/esm2015/form-entry/form-factory/form-control.service.js +0 -119
- package/esm2015/form-entry/form-factory/question.factory.js +0 -1001
- package/esm2015/form-entry/form-renderer/form-renderer.component.js +0 -270
- package/esm2015/form-entry/value-adapters/diagnosis.adapter.js +0 -140
- package/esm2015/form-entry/value-adapters/encounter.adapter.js +0 -187
- package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +0 -536
- package/fesm2015/openmrs-ngx-formentry.js.map +0 -1
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/afe-control-type.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/afe-form-array.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/afe-form-control.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/afe-form-group.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/control-extensions.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/index.d.ts +0 -0
- /package/{abstract-controls-extension → dist/ngx-formentry/abstract-controls-extension}/value-change.listener.d.ts +0 -0
- /package/{change-tracking → dist/ngx-formentry/change-tracking}/control-relation.d.ts +0 -0
- /package/{change-tracking → dist/ngx-formentry/change-tracking}/control-relations.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/afe-ng-select.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/appointments-overview/appointments-overview.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/check-box/checkbox.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/check-box/checkbox.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/custom-component-wrapper/custom-component-wrapper..module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/custom-component-wrapper/custom-component-wrapper.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/custom-control-wrapper/custom-control-wrapper..module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/custom-control-wrapper/custom-control-wrapper.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/date-picker/date-picker.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/date-time-picker.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/date-time-picker.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/index.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/picker-modal/modal.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/pipes/moment.pipe.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/date-time-picker/time-picker/time-picker.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/file-upload/file-upload.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/file-upload/file-upload.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/file-upload/secure.pipe.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/input/input.directive.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/input/input.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/input/label.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-datetime-picker/ngx-datetime-picker.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/date-time-picker.animations.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/date-time/timer.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/dialog/dialog-config.class.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/dialog/dialog-container.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/dialog/dialog-ref.class.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/dialog/dialog.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/utils/index.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-pick-datetime/lib/utils/object.utils.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-remote-select/ngx-remote-select.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-remote-select/ngx-remote-select.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-tabset/components/ngx-tab-set.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-tabset/components/tab.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-tabset/directives/hover-class.directive.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/ngx-tabset/modules/ngx-tabset.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/number-input/number-input.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/number-input/number-input.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/number-input/number.directive.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/radio-button/radio.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/radio-button/radio.module.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/optgroup.directive.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/option.directive.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/select.component.d.ts +0 -0
- /package/{components → dist/ngx-formentry/components}/select/select.module.d.ts +0 -0
- /package/{esm2015/abstract-controls-extension/afe-control-type.js → dist/ngx-formentry/esm2020/abstract-controls-extension/afe-control-type.mjs} +0 -0
- /package/{esm2015/abstract-controls-extension/afe-form-array.js → dist/ngx-formentry/esm2020/abstract-controls-extension/afe-form-array.mjs} +0 -0
- /package/{esm2015/abstract-controls-extension/afe-form-control.js → dist/ngx-formentry/esm2020/abstract-controls-extension/afe-form-control.mjs} +0 -0
- /package/{esm2015/abstract-controls-extension/afe-form-group.js → dist/ngx-formentry/esm2020/abstract-controls-extension/afe-form-group.mjs} +0 -0
- /package/{esm2015/abstract-controls-extension/control-extensions.js → dist/ngx-formentry/esm2020/abstract-controls-extension/control-extensions.mjs} +0 -0
- /package/{esm2015/abstract-controls-extension/index.js → dist/ngx-formentry/esm2020/abstract-controls-extension/index.mjs} +0 -0
- /package/{esm2015/abstract-controls-extension/value-change.listener.js → dist/ngx-formentry/esm2020/abstract-controls-extension/value-change.listener.mjs} +0 -0
- /package/{esm2015/change-tracking/control-relation.js → dist/ngx-formentry/esm2020/change-tracking/control-relation.mjs} +0 -0
- /package/{esm2015/change-tracking/control-relations.js → dist/ngx-formentry/esm2020/change-tracking/control-relations.mjs} +0 -0
- /package/{esm2015/components/date-time-picker/index.js → dist/ngx-formentry/esm2020/components/date-time-picker/index.mjs} +0 -0
- /package/{esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.mjs} +0 -0
- /package/{esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.mjs} +0 -0
- /package/{esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.mjs} +0 -0
- /package/{esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.mjs} +0 -0
- /package/{esm2015/components/ngx-pick-datetime/lib/dialog/dialog-config.class.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/dialog/dialog-config.class.mjs} +0 -0
- /package/{esm2015/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.mjs} +0 -0
- /package/{esm2015/components/ngx-pick-datetime/lib/utils/index.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/utils/index.mjs} +0 -0
- /package/{esm2015/components/ngx-pick-datetime/lib/utils/object.utils.js → dist/ngx-formentry/esm2020/components/ngx-pick-datetime/lib/utils/object.utils.mjs} +0 -0
- /package/{esm2015/form-entry/control-alerts/alert-helpers.js → dist/ngx-formentry/esm2020/form-entry/control-alerts/alert-helpers.mjs} +0 -0
- /package/{esm2015/form-entry/control-alerts/can-generate-alert.js → dist/ngx-formentry/esm2020/form-entry/control-alerts/can-generate-alert.mjs} +0 -0
- /package/{esm2015/form-entry/control-calculators/can-calculate.js → dist/ngx-formentry/esm2020/form-entry/control-calculators/can-calculate.mjs} +0 -0
- /package/{esm2015/form-entry/control-hiders-disablers/can-disable.js → dist/ngx-formentry/esm2020/form-entry/control-hiders-disablers/can-disable.mjs} +0 -0
- /package/{esm2015/form-entry/control-hiders-disablers/can-hide.js → dist/ngx-formentry/esm2020/form-entry/control-hiders-disablers/can-hide.mjs} +0 -0
- /package/{esm2015/form-entry/control-hiders-disablers/disabler-helper.js → dist/ngx-formentry/esm2020/form-entry/control-hiders-disablers/disabler-helper.mjs} +0 -0
- /package/{esm2015/form-entry/control-hiders-disablers/hider-helpers.js → dist/ngx-formentry/esm2020/form-entry/control-hiders-disablers/hider-helpers.mjs} +0 -0
- /package/{esm2015/form-entry/data-sources/dummy-data-source.js → dist/ngx-formentry/esm2020/form-entry/data-sources/dummy-data-source.mjs} +0 -0
- /package/{esm2015/form-entry/directives/collapse-animations.js → dist/ngx-formentry/esm2020/form-entry/directives/collapse-animations.mjs} +0 -0
- /package/{esm2015/form-entry/form-factory/form-node.js → dist/ngx-formentry/esm2020/form-entry/form-factory/form-node.mjs} +0 -0
- /package/{esm2015/form-entry/form-factory/form.js → dist/ngx-formentry/esm2020/form-entry/form-factory/form.mjs} +0 -0
- /package/{esm2015/form-entry/form-factory/index.js → dist/ngx-formentry/esm2020/form-entry/form-factory/index.mjs} +0 -0
- /package/{esm2015/form-entry/helpers/risk-dataset-table.js → dist/ngx-formentry/esm2020/form-entry/helpers/risk-dataset-table.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/checkbox.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/checkbox.model.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/conditional-validation.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/conditional-validation.model.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/custom-control-question.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/custom-control-question.model.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/date-question.js → dist/ngx-formentry/esm2020/form-entry/question-models/date-question.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/date-validation.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/date-validation.model.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/diagnosis-question.js → dist/ngx-formentry/esm2020/form-entry/question-models/diagnosis-question.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/file-upload-question.js → dist/ngx-formentry/esm2020/form-entry/question-models/file-upload-question.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/group-question.js → dist/ngx-formentry/esm2020/form-entry/question-models/group-question.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/base-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/base-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/checkbox-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/checkbox-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/data-source.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/data-source.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/date-question-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/date-question-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/diagnosis-question-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/diagnosis-question-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/file-upload-question-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/file-upload-question-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/group-question-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/group-question-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/multi-select-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/multi-select-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/nested-questions.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/nested-questions.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/radio-button-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/radio-button-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/repeating-question-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/repeating-question-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/select-option.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/select-option.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/select-question-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/select-question-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/test-order-question-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/test-order-question-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/text-area-question-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/text-area-question-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/text-question-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/text-question-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/interfaces/ui-select-question-options.js → dist/ngx-formentry/esm2020/form-entry/question-models/interfaces/ui-select-question-options.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/js-expression-validation.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/js-expression-validation.model.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/max-length-validation.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/max-length-validation.model.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/max-validation.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/max-validation.model.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/min-length-validation.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/min-length-validation.model.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/min-validation.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/min-validation.model.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/models.js → dist/ngx-formentry/esm2020/form-entry/question-models/models.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/multi-select-question.js → dist/ngx-formentry/esm2020/form-entry/question-models/multi-select-question.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/pair.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/pair.model.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/question-base.js → dist/ngx-formentry/esm2020/form-entry/question-models/question-base.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/radio-button.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/radio-button.model.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/rendering-type.js → dist/ngx-formentry/esm2020/form-entry/question-models/rendering-type.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/repeating-question.js → dist/ngx-formentry/esm2020/form-entry/question-models/repeating-question.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/select-option.js → dist/ngx-formentry/esm2020/form-entry/question-models/select-option.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/select-question.js → dist/ngx-formentry/esm2020/form-entry/question-models/select-question.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/test-order-question.js → dist/ngx-formentry/esm2020/form-entry/question-models/test-order-question.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/text-area-input-question.js → dist/ngx-formentry/esm2020/form-entry/question-models/text-area-input-question.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/text-input-question.js → dist/ngx-formentry/esm2020/form-entry/question-models/text-input-question.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/ui-select-question.js → dist/ngx-formentry/esm2020/form-entry/question-models/ui-select-question.mjs} +0 -0
- /package/{esm2015/form-entry/question-models/validation.model.js → dist/ngx-formentry/esm2020/form-entry/question-models/validation.model.mjs} +0 -0
- /package/{esm2015/form-entry/validators/conditional-answered.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/conditional-answered.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/conditional-required.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/conditional-required.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/date.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/date.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/future-date-restriction.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/future-date-restriction.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/js-expression.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/js-expression.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/max-date.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/max-date.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/max-length.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/max-length.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/max.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/max.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/min-date.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/min-date.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/min-length.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/min-length.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/min.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/min.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/required.validator.js → dist/ngx-formentry/esm2020/form-entry/validators/required.validator.mjs} +0 -0
- /package/{esm2015/form-entry/validators/validations.js → dist/ngx-formentry/esm2020/form-entry/validators/validations.mjs} +0 -0
- /package/{esm2015/form-entry/value-adapters/value.adapter.js → dist/ngx-formentry/esm2020/form-entry/value-adapters/value.adapter.mjs} +0 -0
- /package/{esm2015/lib/index.js → dist/ngx-formentry/esm2020/lib/index.mjs} +0 -0
- /package/{esm2015/openmrs-ngx-formentry.js → dist/ngx-formentry/esm2020/openmrs-ngx-formentry.mjs} +0 -0
- /package/{esm2015/public_api.js → dist/ngx-formentry/esm2020/public_api.mjs} +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-alerts/alert-helpers.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-alerts/can-generate-alert.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-calculators/can-calculate.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-hiders-disablers/can-disable.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-hiders-disablers/can-hide.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-hiders-disablers/disabler-helper.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/control-hiders-disablers/hider-helpers.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/data-sources/data-sources.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/data-sources/dummy-data-source.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/directives/collapse-animations.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/directives/collapse.directive.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/directives/historical-value.directive.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/error-renderer/error-renderer.component.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/expression-runner/expression-runner.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-entry.module.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/control-relations.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/form-control.service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/form-node.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/form.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/form.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/hiders-disablers.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/index.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/question.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/show-messages.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-factory/validation.factory.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/form-renderer/form-renderer.component.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/helpers/historical-expression-helper-service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/helpers/historical-field-helper-service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/helpers/js-expression-helper.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/helpers/risk-dataset-table.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/pipes/time-ago.pipe.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/checkbox.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/conditional-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/custom-control-question.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/date-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/date-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/diagnosis-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/file-upload-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/group-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/base-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/checkbox-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/data-source.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/date-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/diagnosis-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/file-upload-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/group-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/multi-select-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/nested-questions.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/radio-button-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/repeating-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/select-option.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/select-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/test-order-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/text-area-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/text-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/interfaces/ui-select-question-options.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/js-expression-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/max-length-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/max-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/min-length-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/min-validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/models.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/multi-select-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/pair.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/question-base.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/radio-button.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/rendering-type.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/repeating-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/select-option.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/select-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/test-order-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/text-area-input-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/text-input-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/ui-select-question.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/question-models/validation.model.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/services/debug-mode.service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/services/form-errors.service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/services/form-schema-compiler.service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/services/historical-encounter-data.service.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/conditional-answered.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/conditional-required.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/date.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/future-date-restriction.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/js-expression.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/max-date.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/max-length.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/max.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/min-date.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/min-length.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/min.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/required.validator.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/validators/validations.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/diagnosis.adapter.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/encounter.adapter.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/obs-adapter-helper.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/obs.adapter.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/order.adapter.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/patient-identifier.adapter.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/person-attribute.adapter.d.ts +0 -0
- /package/{form-entry → dist/ngx-formentry/form-entry}/value-adapters/value.adapter.d.ts +0 -0
- /package/{lib → dist/ngx-formentry/lib}/index.d.ts +0 -0
- /package/{openmrs-ngx-formentry.d.ts → dist/ngx-formentry/openmrs-ngx-formentry.d.ts} +0 -0
- /package/{public_api.d.ts → dist/ngx-formentry/public_api.d.ts} +0 -0
- /package/{shared.module.d.ts → dist/ngx-formentry/shared.module.d.ts} +0 -0
- /package/{styles → dist/ngx-formentry/styles}/ngx-formentry.css +0 -0
- /package/{styles → dist/ngx-formentry/styles}/picker.min.css +0 -0
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Inject } from '@angular/core';
|
|
2
|
-
import { DOCUMENT } from '@angular/common';
|
|
3
|
-
import * as _ from 'lodash';
|
|
4
|
-
import { DataSources } from '../data-sources/data-sources';
|
|
5
|
-
import { NodeBase, GroupNode } from '../form-factory/form-node';
|
|
6
|
-
import { AfeFormGroup } from '../../abstract-controls-extension/afe-form-group';
|
|
7
|
-
import { ValidationFactory } from '../form-factory/validation.factory';
|
|
8
|
-
import { FormErrorsService } from '../services/form-errors.service';
|
|
9
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "../form-factory/validation.factory";
|
|
12
|
-
import * as i2 from "../data-sources/data-sources";
|
|
13
|
-
import * as i3 from "../services/form-errors.service";
|
|
14
|
-
import * as i4 from "@ngx-translate/core";
|
|
15
|
-
import * as i5 from "../../components/ngx-tabset/components/ngx-tab-set.component";
|
|
16
|
-
import * as i6 from "../../components/ngx-tabset/components/tab.component";
|
|
17
|
-
import * as i7 from "../../components/custom-component-wrapper/custom-component-wrapper.component";
|
|
18
|
-
import * as i8 from "../../components/custom-control-wrapper/custom-control-wrapper.component";
|
|
19
|
-
import * as i9 from "../../components/select/select.component";
|
|
20
|
-
import * as i10 from "../../components/file-upload/file-upload.component";
|
|
21
|
-
import * as i11 from "../../components/ngx-remote-select/ngx-remote-select.component";
|
|
22
|
-
import * as i12 from "../../components/ngx-datetime-picker/ngx-datetime-picker.component";
|
|
23
|
-
import * as i13 from "@ng-select/ng-select";
|
|
24
|
-
import * as i14 from "../../components/number-input/number-input.component";
|
|
25
|
-
import * as i15 from "../../components/radio-button/radio.component";
|
|
26
|
-
import * as i16 from "../../components/check-box/checkbox.component";
|
|
27
|
-
import * as i17 from "../../components/appointments-overview/appointments-overview.component";
|
|
28
|
-
import * as i18 from "@angular/common";
|
|
29
|
-
import * as i19 from "../directives/historical-value.directive";
|
|
30
|
-
import * as i20 from "../directives/collapse.directive";
|
|
31
|
-
import * as i21 from "@angular/forms";
|
|
32
|
-
import * as i22 from "../../components/input/text-area.directive";
|
|
33
|
-
import * as i23 from "../../components/input/input.directive";
|
|
34
|
-
import * as i24 from "../pipes/time-ago.pipe";
|
|
35
|
-
export class FormRendererComponent {
|
|
36
|
-
constructor(validationFactory, dataSources, formErrorsService, translate, document) {
|
|
37
|
-
this.validationFactory = validationFactory;
|
|
38
|
-
this.dataSources = dataSources;
|
|
39
|
-
this.formErrorsService = formErrorsService;
|
|
40
|
-
this.translate = translate;
|
|
41
|
-
this.document = document;
|
|
42
|
-
this.theme = 'light';
|
|
43
|
-
this.controlId = '';
|
|
44
|
-
this.childComponents = [];
|
|
45
|
-
this.isCollapsed = false;
|
|
46
|
-
this.followFocus = true;
|
|
47
|
-
this.cacheActive = false;
|
|
48
|
-
this.isNavigation = true;
|
|
49
|
-
this.type = 'default';
|
|
50
|
-
this.inlineDatePicker = new Date();
|
|
51
|
-
this.activeTab = 0;
|
|
52
|
-
}
|
|
53
|
-
ngOnInit() {
|
|
54
|
-
var _a, _b, _c, _d;
|
|
55
|
-
this.setUpRemoteSelect();
|
|
56
|
-
this.setUpFileUpload();
|
|
57
|
-
this.loadLabels();
|
|
58
|
-
if (this.node && this.node.form) {
|
|
59
|
-
const tab = this.node.form.valueProcessingInfo.lastFormTab;
|
|
60
|
-
if (tab && tab !== this.activeTab) {
|
|
61
|
-
this.activeTab = tab;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (this.node && this.node.question.renderingType === 'form') {
|
|
65
|
-
this.formErrorsService.announceErrorField$.subscribe((error) => {
|
|
66
|
-
this.scrollToControl(error);
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
if (this.node && this.node.question.renderingType === 'section') {
|
|
70
|
-
this.isCollapsed = !this.node.question.isExpanded;
|
|
71
|
-
}
|
|
72
|
-
if (this.parentComponent) {
|
|
73
|
-
this.parentComponent.addChildComponent(this);
|
|
74
|
-
}
|
|
75
|
-
if (this.node &&
|
|
76
|
-
this.node.question.renderingType === 'repeating' &&
|
|
77
|
-
((_d = (_c = (_b = (_a = this === null || this === void 0 ? void 0 : this.node) === null || _a === void 0 ? void 0 : _a.question) === null || _b === void 0 ? void 0 : _b.extras) === null || _c === void 0 ? void 0 : _c.questionOptions) === null || _d === void 0 ? void 0 : _d.min) >= 0) {
|
|
78
|
-
for (let index = this.node.children.length; index < this.node.question.extras.questionOptions.min; index++) {
|
|
79
|
-
this.node.createChildNode();
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
ngOnChanges(changes) {
|
|
84
|
-
if (changes.labelMap) {
|
|
85
|
-
this.loadLabels();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
addChildComponent(child) {
|
|
89
|
-
this.childComponents.push(child);
|
|
90
|
-
}
|
|
91
|
-
setUpRemoteSelect() {
|
|
92
|
-
if (this.node &&
|
|
93
|
-
this.node.question.extras &&
|
|
94
|
-
this.node.question.renderingType === 'remote-select') {
|
|
95
|
-
this.dataSource = this.dataSources.dataSources[this.node.question.dataSource];
|
|
96
|
-
if (this.dataSource && this.node.question.dataSourceOptions) {
|
|
97
|
-
this.dataSource.dataSourceOptions = this.node.question.dataSourceOptions;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
setUpFileUpload() {
|
|
102
|
-
if (this.node &&
|
|
103
|
-
this.node.question.extras &&
|
|
104
|
-
this.node.question.renderingType === 'file') {
|
|
105
|
-
this.dataSource = this.dataSources.dataSources[this.node.question.dataSource];
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
loadLabels() {
|
|
109
|
-
var _a, _b;
|
|
110
|
-
if (!this.node.question.label &&
|
|
111
|
-
this.labelMap[(_b = (_a = this.node.question.extras) === null || _a === void 0 ? void 0 : _a.questionOptions) === null || _b === void 0 ? void 0 : _b.concept]) {
|
|
112
|
-
this.node.question.label = this.labelMap[this.node.question.extras.questionOptions.concept];
|
|
113
|
-
}
|
|
114
|
-
if (this.node.question.options) {
|
|
115
|
-
this.node.question.options.forEach((option) => {
|
|
116
|
-
if (!option.label && this.labelMap[option.value]) {
|
|
117
|
-
option.label = this.labelMap[option.value];
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
checkSection(node) {
|
|
123
|
-
if (node.question.renderingType === 'section') {
|
|
124
|
-
let groupChildrenHidden = false;
|
|
125
|
-
const allSectionControlsHidden = Object.keys(node.children).every((k) => {
|
|
126
|
-
const innerNode = node.children[k];
|
|
127
|
-
if (innerNode instanceof GroupNode) {
|
|
128
|
-
groupChildrenHidden = Object.keys(innerNode.children).every((i) => innerNode.children[i].control.hidden);
|
|
129
|
-
}
|
|
130
|
-
return node.children[k].control.hidden || groupChildrenHidden;
|
|
131
|
-
});
|
|
132
|
-
return !allSectionControlsHidden;
|
|
133
|
-
}
|
|
134
|
-
return true;
|
|
135
|
-
}
|
|
136
|
-
clickTab(tabNumber) {
|
|
137
|
-
this.activeTab = tabNumber;
|
|
138
|
-
}
|
|
139
|
-
loadPreviousTab() {
|
|
140
|
-
if (!this.isCurrentTabFirst()) {
|
|
141
|
-
this.clickTab(this.activeTab - 1);
|
|
142
|
-
document.body.scrollTop = 0;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
isCurrentTabFirst() {
|
|
146
|
-
return this.activeTab === 0;
|
|
147
|
-
}
|
|
148
|
-
isCurrentTabLast() {
|
|
149
|
-
return this.activeTab === this.node.question['questions'].length - 1;
|
|
150
|
-
}
|
|
151
|
-
loadNextTab() {
|
|
152
|
-
if (!this.isCurrentTabLast()) {
|
|
153
|
-
this.clickTab(this.activeTab + 1);
|
|
154
|
-
document.body.scrollTop = 0;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
tabSelected($event) {
|
|
158
|
-
this.activeTab = $event;
|
|
159
|
-
this.setPreviousTab();
|
|
160
|
-
}
|
|
161
|
-
setPreviousTab() {
|
|
162
|
-
if (this.node && this.node.form) {
|
|
163
|
-
this.node.form.valueProcessingInfo['lastFormTab'] = this.activeTab;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
hasErrors() {
|
|
167
|
-
return (this.node.control.touched &&
|
|
168
|
-
!this.node.control.valid &&
|
|
169
|
-
this.node.control.disablers.length === 0);
|
|
170
|
-
}
|
|
171
|
-
errors() {
|
|
172
|
-
return this.getErrors(this.node);
|
|
173
|
-
}
|
|
174
|
-
scrollToControl(error) {
|
|
175
|
-
const tab = +error.split(',')[0];
|
|
176
|
-
const elSelector = error.split(',')[1] + 'id';
|
|
177
|
-
// the tab components
|
|
178
|
-
const tabComponent = this.childComponents[tab];
|
|
179
|
-
this.clickTab(tab);
|
|
180
|
-
setTimeout(() => {
|
|
181
|
-
// expand all sections
|
|
182
|
-
tabComponent.childComponents.forEach((section) => {
|
|
183
|
-
section.isCollapsed = false;
|
|
184
|
-
setTimeout(() => {
|
|
185
|
-
const element = this.document.getElementById(elSelector);
|
|
186
|
-
if (element !== null && element.focus) {
|
|
187
|
-
element.focus();
|
|
188
|
-
element.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
189
|
-
}
|
|
190
|
-
}, 100);
|
|
191
|
-
});
|
|
192
|
-
}, 200);
|
|
193
|
-
}
|
|
194
|
-
onDateChanged(node) {
|
|
195
|
-
this.node = node;
|
|
196
|
-
}
|
|
197
|
-
upload(event) {
|
|
198
|
-
// TO DO Add upload functionality
|
|
199
|
-
}
|
|
200
|
-
toggleInformation(infoId) {
|
|
201
|
-
const e = document.getElementById(infoId);
|
|
202
|
-
if (e.style.display === 'block') {
|
|
203
|
-
e.style.display = 'none';
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
e.style.display = 'block';
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
getErrors(node) {
|
|
210
|
-
const errors = node.control.errors;
|
|
211
|
-
if (errors) {
|
|
212
|
-
return this.validationFactory.errors(errors, node.question);
|
|
213
|
-
}
|
|
214
|
-
return [];
|
|
215
|
-
}
|
|
216
|
-
showErrors() {
|
|
217
|
-
return !this.node.form.valid && this.node.form.showErrors;
|
|
218
|
-
}
|
|
219
|
-
get errorNodes() {
|
|
220
|
-
const invalidControls = this.node.form.markInvalidControls(this.node.form.rootNode, []);
|
|
221
|
-
return invalidControls;
|
|
222
|
-
}
|
|
223
|
-
getControlError(node) {
|
|
224
|
-
const errors = node.control.errors;
|
|
225
|
-
if (errors) {
|
|
226
|
-
return this.validationFactory.errors(errors, node.question);
|
|
227
|
-
}
|
|
228
|
-
return [];
|
|
229
|
-
}
|
|
230
|
-
announceErrorField(errorNode) {
|
|
231
|
-
const nodes = this.node.form.searchNodeByQuestionId(errorNode.path.substring(0, errorNode.path.indexOf('.')));
|
|
232
|
-
_.forEach(nodes, (node) => {
|
|
233
|
-
if (node.question.renderingType === 'page') {
|
|
234
|
-
const pageIndex = this.getPageIndex(node);
|
|
235
|
-
this.formErrorsService.announceErrorField(pageIndex + ',' + errorNode.question.key);
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
getPageIndex(node) {
|
|
240
|
-
const questionGroup = this.node.form.rootNode
|
|
241
|
-
.question;
|
|
242
|
-
return questionGroup.questions.indexOf(node.question);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
FormRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormRendererComponent, deps: [{ token: i1.ValidationFactory }, { token: i2.DataSources }, { token: i3.FormErrorsService }, { token: i4.TranslateService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
246
|
-
FormRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FormRendererComponent, selector: "ofe-form-renderer", inputs: { parentComponent: "parentComponent", node: "node", parentGroup: "parentGroup", theme: "theme", labelMap: "labelMap", controlId: "controlId" }, usesOnChanges: true, ngImport: i0, template: "<!--CONTAINERS-->\n<div *ngIf=\"node.question.renderingType === 'form'\">\n <ofe-tab-set (tabSelect)=\"tabSelected($event)\" [selectedIndex]=\"activeTab\">\n <ofe-tab\n [tabTitle]=\"question.label | translate\"\n *ngFor=\"let question of node.question.questions; let i = index\"\n >\n <ofe-form-renderer\n [node]=\"node.children[question.key] | translate\"\n [parentComponent]=\"this\"\n [parentGroup]=\"node.control\"\n [labelMap]=\"labelMap\"\n >\n </ofe-form-renderer>\n </ofe-tab>\n <div *ngIf=\"showErrors()\" class=\"container\">\n <div\n data-notification\n *ngFor=\"let errorNode of errorNodes\"\n class=\"cds--inline-notification cds--inline-notification--error cds--inline-notification--low-contrast pointer\"\n role=\"alert\"\n (click)=\"announceErrorField(errorNode)\"\n >\n <div class=\"cds--inline-notification__details\">\n <div class=\"cds--inline-notification__text-wrapper\">\n <p class=\"cds--inline-notification__title\">\n {{ errorNode.question.label | translate }}\n </p>\n <p class=\"cds--inline-notification__subtitle\">\n {{ getControlError(errorNode | translate) }}\n </p>\n </div>\n </div>\n <button\n tabindex=\"0\"\n class=\"cds--inline-notification__action-button cds--btn cds--btn--sm cds--btn--ghost\"\n type=\"button\"\n >\n {{ 'fix' | translate }}\n </button>\n <svg\n focusable=\"false\"\n preserveAspectRatio=\"xMidYMid meet\"\n style=\"will-change: transform\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"cds--inline-notification__icon\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M10,1c-5,0-9,4-9,9s4,9,9,9s9-4,9-9S15,1,10,1z M13.5,14.5l-8-8l1-1l8,8L13.5,14.5z\"\n ></path>\n <path\n d=\"M13.5,14.5l-8-8l1-1l8,8L13.5,14.5z\"\n data-icon-path=\"inner-path\"\n opacity=\"0\"\n ></path>\n </svg>\n </div>\n </div>\n </ofe-tab-set>\n</div>\n<div *ngIf=\"node.question.renderingType === 'page'\">\n <!--Page Components-->\n <ofe-custom-component-wrapper\n [dark]=\"theme === 'light'\"\n [componentConfigs]=\"node.question.componentConfigs\"\n >\n </ofe-custom-component-wrapper>\n <ofe-form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n [labelMap]=\"labelMap\"\n ></ofe-form-renderer>\n</div>\n<div *ngIf=\"node.question.renderingType === 'section' && checkSection(node)\">\n <div\n class=\"cds--accordion__item\"\n [ngClass]=\"{ 'cds--accordion__item--active': !isCollapsed }\"\n >\n <button\n class=\"cds--accordion__heading\"\n type=\"button\"\n [attr.aria-expanded]=\"isCollapsed ? 'false' : 'true'\"\n aria-controls=\"accordion-item-0\"\n (click)=\"isCollapsed = !isCollapsed\"\n >\n <svg\n class=\"cds--accordion__arrow\"\n ibmIcon=\"chevron--right\"\n size=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M11 8L6 13 5.3 12.3 9.6 8 5.3 3.7 6 3z\"></path>\n </svg>\n <p class=\"cds--accordion__title\">\n {{ node.question.label | translate }}\n </p>\n </button>\n <div ofeCollapse=\"isCollapsed\">\n <!--Section Components-->\n <ofe-custom-component-wrapper\n [dark]=\"theme === 'light'\"\n [componentConfigs]=\"node.question.componentConfigs\"\n >\n </ofe-custom-component-wrapper>\n <div\n class=\"cds--accordion__content accordion-content-override\"\n [ngClass]=\"{\n 'accordion-content-dark': theme === 'light'\n }\"\n >\n <ofe-form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"parentGroup\"\n [labelMap]=\"labelMap\"\n ></ofe-form-renderer>\n </div>\n </div>\n </div>\n</div>\n\n<!-- MESSAGES -->\n<div\n *ngIf=\"node.control && node.control.alert && node.control.alert !== ''\"\n class=\"alert alert-warning\"\n>\n <a class=\"close\" data-dismiss=\"alert\">×</a> {{ node.control.alert }}\n</div>\n\n<!--CONTROLS-->\n\n<div\n *ngIf=\"node.question.controlType === 0\"\n [formGroup]=\"parentGroup\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <ofe-custom-component-wrapper\n [dark]=\"!(theme === 'light')\"\n [componentConfigs]=\"node.question.componentConfigs\"\n >\n </ofe-custom-component-wrapper>\n <div class=\"cds--form-item\">\n <!--LEAF CONTROL-->\n <div class=\"question-area\">\n <a\n class=\"form-tooltip pull-right\"\n (click)=\"toggleInformation(node.question.extras.id)\"\n data-placement=\"right\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n <i class=\"glyphicon glyphicon-question-sign\" aria-hidden=\"true\"></i>\n </a>\n\n <label\n *ngIf=\"node.question.label\"\n [style.color]=\"hasErrors() ? 'red' : ''\"\n class=\"cds--label\"\n [attr.for]=\"node.question.key | translate\"\n >\n {{ node.question.required ? '*' : '' }}\n {{ node.question.prefix ? node.question.prefix + ' ' : '' }}\n {{ node.question.label | translate }}\n </label>\n\n <div\n *ngIf=\"\n node.question.extras.questionOptions.customControl;\n else nativeControls\n \"\n >\n <ofe-custom-control-wrapper\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [question]=\"node.question\"\n >\n </ofe-custom-control-wrapper>\n </div>\n\n <ng-template #nativeControls>\n <div class=\"afe-control\" [ngSwitch]=\"node.question.renderingType\">\n <ofe-select\n [theme]=\"theme\"\n *ngSwitchCase=\"'select'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n >\n <option\n *ngFor=\"let option of node.question.options\"\n [value]=\"option.value\"\n >\n {{ option.label | translate }}\n </option>\n </ofe-select>\n\n <div *ngSwitchCase=\"'file'\">\n <ofe-file-upload\n [dataSource]=\"dataSource\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n (fileChanged)=\"upload($event)\"\n >\n </ofe-file-upload>\n </div>\n\n <textarea\n [theme]=\"theme\"\n ofeTextAreaInput\n [ngClass]=\"{\n 'cds--text-area--light': theme === 'light',\n 'cds--text-area--invalid': !node.control.valid\n }\"\n [placeholder]=\"node.question.placeholder | translate\"\n [rows]=\"node.question.rows\"\n class=\"cds--text-area\"\n *ngSwitchCase=\"'textarea'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n [readOnly]=\"node.question.extras.readOnly\"\n >\n </textarea>\n\n <ofe-remote-select\n [theme]=\"theme\"\n *ngSwitchCase=\"'remote-select'\"\n [placeholder]=\"node.question.placeholder | translate\"\n tabindex=\"0\"\n [dataSource]=\"dataSource\"\n [componentID]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [id]=\"node.question.key + 'id'\"\n ></ofe-remote-select>\n\n <ofe-ngx-date-time-picker\n [weeks]=\"node.question.extras.questionOptions.weeksList\"\n [showWeeks]=\"node.question.showWeeksAdder\"\n [theme]=\"theme\"\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n *ngSwitchCase=\"'date'\"\n [datePickerFormat]=\"node.question.datePickerFormat\"\n >\n </ofe-ngx-date-time-picker>\n <ng-select\n [ngClass]=\"{ 'afe-custom': theme === 'light' }\"\n [id]=\"node.question.key + 'id'\"\n *ngSwitchCase=\"'multi-select'\"\n [multiple]=\"true\"\n [appendTo]=\"'form'\"\n placeholder=\"\"\n clearAllText=\"Clear\"\n [formControlName]=\"node.question.key\"\n >\n <ng-option\n *ngFor=\"let option of node.question.options\"\n [value]=\"option.value\"\n >\n {{ option.label | translate }}\n </ng-option>\n </ng-select>\n\n <ng-select\n [ngClass]=\"{ 'afe-custom': theme === 'light' }\"\n [id]=\"node.question.key + 'id'\"\n *ngSwitchCase=\"'single-select'\"\n placeholder=\"\"\n clearAllText=\"Clear\"\n [formControlName]=\"node.question.key\"\n >\n <ng-option\n *ngFor=\"let option of node.question.options\"\n [value]=\"option.value\"\n >\n {{ option.label | translate }}\n </ng-option>\n </ng-select>\n\n <ofe-number-input\n [theme]=\"theme\"\n *ngSwitchCase=\"'number'\"\n [id]=\"node.question.key + 'id'\"\n [min]=\"node.question.extras.questionOptions.min\"\n [max]=\"node.question.extras.questionOptions.max\"\n [maxlength]=\"node.question.extras.questionOptions.maxLength\"\n [minlength]=\"node.question.extras.questionOptions.minLength\"\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder | translate\"\n >\n </ofe-number-input>\n\n <input\n [theme]=\"theme\"\n class=\"cds--text-input\"\n ofeTextInput\n *ngSwitchDefault\n [formControlName]=\"node.question.key\"\n [attr.placeholder]=\"node.question.placeholder | translate\"\n [type]=\"node.question.renderingType\"\n [id]=\"node.question.key + 'id'\"\n [readOnly]=\"node.question.extras.readOnly\"\n />\n\n <div *ngSwitchCase=\"'radio'\">\n <ofe-radio-button\n [id]=\"node.question.key + 'id'\"\n [formControlName]=\"node.question.key\"\n [options]=\"node.question.options\"\n [allowUnselect]=\"node.question.allowUnselect\"\n [selected]=\"node.control.value\"\n [orientation]=\"node.question.orientation\"\n ></ofe-radio-button>\n </div>\n\n <div *ngSwitchCase=\"'checkbox'\">\n <ofe-checkbox\n [id]=\"node.question.key + 'id' + controlId\"\n [formControlName]=\"node.question.key\"\n [options]=\"node.question.options\"\n [selected]=\"node.control.value\"\n ></ofe-checkbox>\n </div>\n\n <div\n *ngIf=\"\n node.question.enableHistoricalValue &&\n node.question.historicalDisplay\n \"\n style=\"margin-top: 2px\"\n >\n <div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-xs-9\">\n <span class=\"text-warning\"\n >{{ 'previousValue' | translate }}:\n </span>\n <strong>{{ node.question.historicalDisplay?.text }}</strong>\n <span *ngIf=\"node.question.showHistoricalValueDate\">\n <span> | </span>\n <strong class=\"text-primary\"\n >{{ node.question.historicalDisplay?._date | date }}\n </strong>\n <span\n class=\"text-primary\"\n *ngIf=\"\n node.question.historicalDisplay &&\n node.question.historicalDisplay._date\n \"\n >\n ({{\n node.question.historicalDisplay._date | timeAgo\n }})</span\n >\n </span>\n </div>\n <button\n type=\"button\"\n [name]=\"'historyValue'\"\n class=\"cds--btn cds--btn--primary cds--btn--sm col-xs-3\"\n >\n {{ 'useValue' | translate }}\n </button>\n </div>\n </div>\n </div>\n <ofe-appointments-overview [node]=\"node\"></ofe-appointments-overview>\n <div *ngIf=\"hasErrors()\">\n <div *ngFor=\"let e of errors()\">\n <span class=\"text-danger\">{{ e }}</span>\n </div>\n </div>\n </div>\n </ng-template>\n\n <div\n class=\"question-info col-md-12 col-lg-12 col-sm-12\"\n id=\"{{ node.question.extras.id }}\"\n *ngIf=\"\n node.question &&\n node.question.extras.questionInfo &&\n node.question.extras.questionInfo !== '' &&\n node.question.extras.questionInfo !== ' '\n \"\n >\n {{ node.question.extras.questionInfo | translate }}\n </div>\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 1\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--ARRAY CONTROL-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div class=\"well\" style=\"padding: 2px\" *ngSwitchCase=\"'repeating'\">\n <h4 style=\"margin: 2px; font-weight: bold\">\n {{ node.question.label | translate }}\n </h4>\n <div>\n <label\n class=\"cds--label\"\n *ngIf=\"node.question.extras.questionOptions.min\"\n style=\"margin-right: 2px\"\n >min: {{ node.question.extras.questionOptions.min }}</label\n >\n <label\n class=\"cds--label\"\n *ngIf=\"node.question.extras.questionOptions.max\"\n >max: {{ node.question.extras.questionOptions.max }}</label\n >\n </div>\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 2px;\n \"\n />\n <div [ngSwitch]=\"node.question.extras.type\">\n <div *ngSwitchCase=\"'testOrder'\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <ofe-form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [labelMap]=\"labelMap\"\n ></ofe-form-renderer>\n <div>{{ child.orderNumber }}</div>\n <button\n type=\"button \"\n class=\"cds--btn cds--btn--danger cds--btn--sm\"\n (click)=\"node.removeAt(i)\"\n >\n {{ 'remove' | translate }}\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n\n <div *ngSwitchCase=\"'diagnosis'\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <ofe-form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [labelMap]=\"labelMap\"\n ></ofe-form-renderer>\n <button\n type=\"button \"\n class=\"cds--btn cds--btn--danger cds--btn--sm\"\n (click)=\"node.removeAt(i)\"\n >\n {{ 'remove' | translate }}\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n\n <div *ngSwitchCase=\"'obsGroup'\" style=\"margin-bottom: 20px\">\n <div *ngFor=\"let child of node.children; let i = index\">\n <ofe-form-renderer\n *ngFor=\"let question of child.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"child.children[question.key]\"\n [parentGroup]=\"child.control\"\n [labelMap]=\"labelMap\"\n [controlId]=\"i\"\n ></ofe-form-renderer>\n <button\n type=\"button\"\n style=\"width: 100px\"\n class=\"cds--btn cds--btn--danger cds--btn--sm\"\n (click)=\"node.removeAt(i)\"\n >\n {{ 'remove' | translate }}\n </button>\n <br />\n <hr\n style=\"\n margin-left: -2px;\n margin-right: -2px;\n margin-bottom: 4px;\n margin-top: 8px;\n border-width: 1px;\n \"\n />\n </div>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"cds--btn cds--btn--primary cds--btn--sm\"\n (click)=\"node.createChildNode()\"\n [ngClass]=\"{\n disabled:\n node.children.length >= node.question.extras.questionOptions.max\n }\"\n >\n {{ 'add' | translate }}\n </button>\n </div>\n </div>\n</div>\n<div\n *ngIf=\"node.question.controlType === 2\"\n [hidden]=\"node.control.hidden\"\n [ngClass]=\"{ disabled: node.control.disabled }\"\n>\n <!--GROUP-->\n <div [ngSwitch]=\"node.question.renderingType\">\n <div *ngSwitchCase=\"'group'\">\n <ofe-form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n [labelMap]=\"labelMap\"\n ></ofe-form-renderer>\n </div>\n <div\n *ngSwitchCase=\"'field-set'\"\n style=\"border: 1px solid #eeeeee; padding: 2px; margin: 2px\"\n >\n <ofe-form-renderer\n *ngFor=\"let question of node.question.questions\"\n [parentComponent]=\"this\"\n [node]=\"node.children[question.key]\"\n [parentGroup]=\"node.control\"\n [labelMap]=\"labelMap\"\n ></ofe-form-renderer>\n </div>\n </div>\n</div>\n", styles: [".slider{width:auto;margin:30px}.slick-prev:before,.slick-next:before{color:#337ab7}.slick-dots{bottom:-40px}.slick-slide{outline:none}\n", "a{color:#fff;text-decoration:none;font-size:12px;text-transform:uppercase}ul{list-style-type:none;margin:2px auto;position:relative}li{display:block;padding:10px 20px;white-space:nowrap;transition:all .3s ease-in;border-bottom:4px solid transparent}li:hover{border-bottom:4px solid white;opacity:.7;cursor:pointer}.owl-theme .owl-controls .owl-nav{position:absolute;width:100%;top:0}.owl-theme .owl-controls .owl-nav [class*=owl-]{position:absolute;background:none;color:#000}.owl-theme .owl-controls .owl-nav [class*=owl-]:hover{background:none;color:#000}.owl-theme .owl-controls .owl-nav .owl-next{right:0;transform:translate(120%)}.owl-theme .owl-controls .owl-nav .owl-prev{left:0;transform:translate(-120%)}.slick-initialized .swipe-tab-content{position:relative;min-height:365px}@media screen and (min-width: 767px){.slick-initialized .swipe-tab-content{min-height:500px}}.slick-initialized .swipe-tab{display:flex;align-items:center;justify-content:center;height:50px;background:none;border:0;color:#757575;cursor:pointer;text-align:center;border-bottom:2px solid rgba(51,122,183,0);transition:all .5s}.slick-initialized .swipe-tab:hover{color:#337ab7}.slick-initialized .swipe-tab.active-tab{border-bottom-color:#337ab7;color:#337ab7;font-weight:bold}.disabled{opacity:.5;pointer-events:none}.select2-container{margin-top:-5px}.btn{padding:0 12px!important}.form-tooltip{color:#337ab7;display:inline-block}.question-info{opacity:0;height:0px;display:none;transition-duration:opacity 1s ease-out;transtion-delay:.5s;padding-top:2px;padding-bottom:2px;color:#696969;border-style:ridge;border-width:1px;border-color:#337ab7;margin-top:2px}.hide-info{display:none;height:0px}.form-tooltip:hover~.question-info{display:block;opacity:1;height:auto}.form-tooltip .tooltipcontent:after{content:\" \";position:absolute;bottom:100%;right:0%;margin-left:-5px;border-width:5px;border-style:solid;border-top-color:transparent;border-right-color:transparent;border-bottom-color:#337ab7;border-left-color:transparent}ng-select.form-control{padding-top:0;height:auto;padding-bottom:0}.forms-dropdown-menu{max-height:450px;overflow-y:scroll}.no-border{border:0;box-shadow:none}.text-danger{color:var(--cds-support-01, #da1e28)}.error{margin-bottom:3rem}.afe-control{margin-bottom:.125rem}[hidden]{display:none!important}.accordion-content-dark{background-color:#f4f4f4;padding-right:1rem}.accordion-content-override{box-sizing:content-box}.question-area{width:100%;max-width:95%}.in-line{display:inline-block;padding-right:.5rem}\n"], components: [{ type: i5.TabSetComponent, selector: "ofe-tab-set", inputs: ["disableStyle", "customNavClass", "customTabsClass", "selectedIndex"], outputs: ["tabSelect"] }, { type: i6.TabComponent, selector: "ofe-tab", inputs: ["tabTitle", "tabSubTitle", "active", "disabled", "bypassDOM", "customPaneClass"] }, { type: FormRendererComponent, selector: "ofe-form-renderer", inputs: ["parentComponent", "node", "parentGroup", "theme", "labelMap", "controlId"] }, { type: i7.CustomComponentWrapperComponent, selector: "ofe-custom-component-wrapper", inputs: ["componentConfigs", "dark"] }, { type: i8.CustomControlWrapperComponent, selector: "ofe-custom-control-wrapper", inputs: ["question"] }, { type: i9.SelectComponent, selector: "ofe-select", inputs: ["display", "label", "helperText", "invalidText", "warn", "warnText", "id", "size", "disabled", "skeleton", "invalid", "theme", "ariaLabel", "value"], outputs: ["valueChange"] }, { type: i10.FileUploadComponent, selector: "ofe-file-upload", inputs: ["dataSource"] }, { type: i11.RemoteSelectComponent, selector: "ofe-remote-select", inputs: ["placeholder", "componentID", "disabled", "theme", "dataSource"], outputs: ["done"] }, { type: i12.NgxDatetimeComponent, selector: "ofe-ngx-date-time-picker", inputs: ["id", "theme", "datePickerFormat", "showWeeks", "weeks"] }, { type: i13.NgSelectComponent, selector: "ng-select", inputs: ["markFirst", "dropdownPosition", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "bufferAmount", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "bindLabel", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "virtualScroll", "openOnEnter", "appendTo", "bindValue", "appearance", "maxSelectedItems", "groupBy", "groupValue", "tabIndex", "typeahead"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i13.ɵr, selector: "ng-option", inputs: ["disabled", "value"] }, { type: i14.NumberInputComponent, selector: "ofe-number-input", inputs: ["theme", "disabled", "skeleton", "invalid", "id", "size", "required", "value", "min", "max", "maxlength", "minlength", "label", "helperText", "invalidText", "step", "precision", "warn", "warnText", "decrementLabel", "incrementLabel"], outputs: ["numberChange"] }, { type: i15.RadioButtonControlComponent, selector: "ofe-radio-button", inputs: ["id", "options", "selected", "allowUnselect", "orientation"] }, { type: i16.CheckboxControlComponent, selector: "ofe-checkbox", inputs: ["id", "options", "selected"] }, { type: i17.AppointmentsOverviewComponent, selector: "ofe-appointments-overview", inputs: ["node"] }], directives: [{ type: i18.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i18.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i19.HistoricalValueDirective, selector: "[node]", inputs: ["_node", "node"], outputs: ["_nodeChange"] }, { type: i18.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i20.CollapseDirective, selector: "[ofeCollapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { type: i21.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i21.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i21.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i21.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i18.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i18.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i21.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i21.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i21.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i22.TextAreaDirective, selector: "[ofeTextAreaInput]", inputs: ["theme", "invalid", "skeleton"] }, { type: i21.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i21.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { type: i18.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i23.TextInputDirective, selector: "[ofeTextInput]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }], pipes: { "translate": i4.TranslatePipe, "date": i18.DatePipe, "timeAgo": i24.TimeAgoPipe } });
|
|
247
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormRendererComponent, decorators: [{
|
|
248
|
-
type: Component,
|
|
249
|
-
args: [{
|
|
250
|
-
selector: 'ofe-form-renderer',
|
|
251
|
-
templateUrl: 'form-renderer.component.html',
|
|
252
|
-
styleUrls: ['../../style/app.css', './form-renderer.component.css']
|
|
253
|
-
}]
|
|
254
|
-
}], ctorParameters: function () { return [{ type: i1.ValidationFactory }, { type: i2.DataSources }, { type: i3.FormErrorsService }, { type: i4.TranslateService }, { type: undefined, decorators: [{
|
|
255
|
-
type: Inject,
|
|
256
|
-
args: [DOCUMENT]
|
|
257
|
-
}] }]; }, propDecorators: { parentComponent: [{
|
|
258
|
-
type: Input
|
|
259
|
-
}], node: [{
|
|
260
|
-
type: Input
|
|
261
|
-
}], parentGroup: [{
|
|
262
|
-
type: Input
|
|
263
|
-
}], theme: [{
|
|
264
|
-
type: Input
|
|
265
|
-
}], labelMap: [{
|
|
266
|
-
type: Input
|
|
267
|
-
}], controlId: [{
|
|
268
|
-
type: Input
|
|
269
|
-
}] } });
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L2Zvcm0tcmVuZGVyZXIvZm9ybS1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L2Zvcm0tcmVuZGVyZXIvZm9ybS1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFZLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUdwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPdkQsTUFBTSxPQUFPLHFCQUFxQjtJQW9CaEMsWUFDVSxpQkFBb0MsRUFDcEMsV0FBd0IsRUFDeEIsaUJBQW9DLEVBQ3JDLFNBQTJCLEVBQ1IsUUFBYTtRQUovQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixp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QixDQUFDO1FBQzdCLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7O21IQXpSVSxxQkFBcUIsK0lBeUJ0QixRQUFRO3VHQXpCUCxxQkFBcUIsc09DMUJsQyxzM21CQThqQkEsczdGRHBpQmEscUJBQXFCOzRGQUFyQixxQkFBcUI7a0JBTGpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMscUJBQXFCLEVBQUUsK0JBQStCLENBQUM7aUJBQ3BFOzswQkEwQkksTUFBTTsyQkFBQyxRQUFROzRDQXhCRixlQUFlO3NCQUE5QixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgSW5qZWN0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IERhdGFTb3VyY2VzIH0gZnJvbSAnLi4vZGF0YS1zb3VyY2VzL2RhdGEtc291cmNlcyc7XG5pbXBvcnQgeyBOb2RlQmFzZSwgTGVhZk5vZGUsIEdyb3VwTm9kZSB9IGZyb20gJy4uL2Zvcm0tZmFjdG9yeS9mb3JtLW5vZGUnO1xuaW1wb3J0IHsgQWZlRm9ybUdyb3VwIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3QtY29udHJvbHMtZXh0ZW5zaW9uL2FmZS1mb3JtLWdyb3VwJztcbmltcG9ydCB7IFZhbGlkYXRpb25GYWN0b3J5IH0gZnJvbSAnLi4vZm9ybS1mYWN0b3J5L3ZhbGlkYXRpb24uZmFjdG9yeSc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vcXVlc3Rpb24tbW9kZWxzL2ludGVyZmFjZXMvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgRm9ybUVycm9yc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLWVycm9ycy5zZXJ2aWNlJztcbmltcG9ydCB7IFF1ZXN0aW9uR3JvdXAgfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMvZ3JvdXAtcXVlc3Rpb24nO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2ZlLWZvcm0tcmVuZGVyZXInLFxuICB0ZW1wbGF0ZVVybDogJ2Zvcm0tcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi4vLi4vc3R5bGUvYXBwLmNzcycsICcuL2Zvcm0tcmVuZGVyZXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1SZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgcHVibGljIHBhcmVudENvbXBvbmVudDogRm9ybVJlbmRlcmVyQ29tcG9uZW50O1xuICBASW5wdXQoKSBwdWJsaWMgbm9kZTogTm9kZUJhc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYXJlbnRHcm91cDogQWZlRm9ybUdyb3VwO1xuICBASW5wdXQoKSBwdWJsaWMgdGhlbWUgPSAnbGlnaHQnO1xuICBASW5wdXQoKSBwdWJsaWMgbGFiZWxNYXA6IE9iamVjdDtcbiAgQElucHV0KCkgcHVibGljIGNvbnRyb2xJZDogU3RyaW5nID0gJyc7XG4gIHB1YmxpYyBjaGlsZENvbXBvbmVudHM6IEZvcm1SZW5kZXJlckNvbXBvbmVudFtdID0gW107XG4gIHB1YmxpYyBzaG93VGltZTogYm9vbGVhbjtcbiAgcHVibGljIHNob3dXZWVrczogYm9vbGVhbjtcbiAgcHVibGljIGFjdGl2ZVRhYjogbnVtYmVyO1xuICBwdWJsaWMgZGF0YVNvdXJjZTogRGF0YVNvdXJjZTtcbiAgcHVibGljIGlzQ29sbGFwc2VkID0gZmFsc2U7XG4gIHB1YmxpYyBhdXRvOiBhbnk7XG4gIHB1YmxpYyBmb2xsb3dGb2N1cyA9IHRydWU7XG4gIHB1YmxpYyBjYWNoZUFjdGl2ZSA9IGZhbHNlO1xuICBwdWJsaWMgaXNOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgcHVibGljIHR5cGUgPSAnZGVmYXVsdCc7XG4gIGlubGluZURhdGVQaWNrZXI6IERhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdmFsaWRhdGlvbkZhY3Rvcnk6IFZhbGlkYXRpb25GYWN0b3J5LFxuICAgIHByaXZhdGUgZGF0YVNvdXJjZXM6IERhdGFTb3VyY2VzLFxuICAgIHByaXZhdGUgZm9ybUVycm9yc1NlcnZpY2U6IEZvcm1FcnJvcnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55XG4gICkge1xuICAgIHRoaXMuYWN0aXZlVGFiID0gMDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldFVwUmVtb3RlU2VsZWN0KCk7XG4gICAgdGhpcy5zZXRVcEZpbGVVcGxvYWQoKTtcbiAgICB0aGlzLmxvYWRMYWJlbHMoKTtcbiAgICBpZiAodGhpcy5ub2RlICYmIHRoaXMubm9kZS5mb3JtKSB7XG4gICAgICBjb25zdCB0YWIgPSB0aGlzLm5vZGUuZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvLmxhc3RGb3JtVGFiO1xuICAgICAgaWYgKHRhYiAmJiB0YWIgIT09IHRoaXMuYWN0aXZlVGFiKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5ub2RlICYmIHRoaXMubm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlID09PSAnZm9ybScpIHtcbiAgICAgIHRoaXMuZm9ybUVycm9yc1NlcnZpY2UuYW5ub3VuY2VFcnJvckZpZWxkJC5zdWJzY3JpYmUoKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Db250cm9sKGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5vZGUgJiYgdGhpcy5ub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUgPT09ICdzZWN0aW9uJykge1xuICAgICAgdGhpcy5pc0NvbGxhcHNlZCA9ICEodGhpcy5ub2RlLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uR3JvdXApLmlzRXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFyZW50Q29tcG9uZW50KSB7XG4gICAgICB0aGlzLnBhcmVudENvbXBvbmVudC5hZGRDaGlsZENvbXBvbmVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLm5vZGUgJiZcbiAgICAgIHRoaXMubm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlID09PSAncmVwZWF0aW5nJyAmJlxuICAgICAgdGhpcz8ubm9kZT8ucXVlc3Rpb24/LmV4dHJhcz8ucXVlc3Rpb25PcHRpb25zPy5taW4gPj0gMFxuICAgICkge1xuICAgICAgZm9yIChcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5ub2RlLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgaW5kZXggPCB0aGlzLm5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5taW47XG4gICAgICAgIGluZGV4KytcbiAgICAgICkge1xuICAgICAgICB0aGlzLm5vZGUuY3JlYXRlQ2hpbGROb2RlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5sYWJlbE1hcCkge1xuICAgICAgdGhpcy5sb2FkTGFiZWxzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZENoaWxkQ29tcG9uZW50KGNoaWxkOiBGb3JtUmVuZGVyZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLmNoaWxkQ29tcG9uZW50cy5wdXNoKGNoaWxkKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRVcFJlbW90ZVNlbGVjdCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm5vZGUgJiZcbiAgICAgIHRoaXMubm9kZS5xdWVzdGlvbi5leHRyYXMgJiZcbiAgICAgIHRoaXMubm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlID09PSAncmVtb3RlLXNlbGVjdCdcbiAgICApIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZXMuZGF0YVNvdXJjZXNbXG4gICAgICAgIHRoaXMubm9kZS5xdWVzdGlvbi5kYXRhU291cmNlXG4gICAgICBdO1xuXG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlICYmIHRoaXMubm9kZS5xdWVzdGlvbi5kYXRhU291cmNlT3B0aW9ucykge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YVNvdXJjZU9wdGlvbnMgPSB0aGlzLm5vZGUucXVlc3Rpb24uZGF0YVNvdXJjZU9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFVwRmlsZVVwbG9hZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm5vZGUgJiZcbiAgICAgIHRoaXMubm9kZS5xdWVzdGlvbi5leHRyYXMgJiZcbiAgICAgIHRoaXMubm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlID09PSAnZmlsZSdcbiAgICApIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZXMuZGF0YVNvdXJjZXNbXG4gICAgICAgIHRoaXMubm9kZS5xdWVzdGlvbi5kYXRhU291cmNlXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBsb2FkTGFiZWxzKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLm5vZGUucXVlc3Rpb24ubGFiZWwgJiZcbiAgICAgIHRoaXMubGFiZWxNYXBbdGhpcy5ub2RlLnF1ZXN0aW9uLmV4dHJhcz8ucXVlc3Rpb25PcHRpb25zPy5jb25jZXB0XVxuICAgICkge1xuICAgICAgdGhpcy5ub2RlLnF1ZXN0aW9uLmxhYmVsID0gdGhpcy5sYWJlbE1hcFtcbiAgICAgICAgdGhpcy5ub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMuY29uY2VwdFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKHRoaXMubm9kZS5xdWVzdGlvbi5vcHRpb25zKSB7XG4gICAgICB0aGlzLm5vZGUucXVlc3Rpb24ub3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb24ubGFiZWwgJiYgdGhpcy5sYWJlbE1hcFtvcHRpb24udmFsdWVdKSB7XG4gICAgICAgICAgb3B0aW9uLmxhYmVsID0gdGhpcy5sYWJlbE1hcFtvcHRpb24udmFsdWVdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGVja1NlY3Rpb24obm9kZTogTm9kZUJhc2UpIHtcbiAgICBpZiAobm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlID09PSAnc2VjdGlvbicpIHtcbiAgICAgIGxldCBncm91cENoaWxkcmVuSGlkZGVuID0gZmFsc2U7XG4gICAgICBjb25zdCBhbGxTZWN0aW9uQ29udHJvbHNIaWRkZW4gPSBPYmplY3Qua2V5cyhub2RlLmNoaWxkcmVuKS5ldmVyeSgoaykgPT4ge1xuICAgICAgICBjb25zdCBpbm5lck5vZGUgPSBub2RlLmNoaWxkcmVuW2tdO1xuICAgICAgICBpZiAoaW5uZXJOb2RlIGluc3RhbmNlb2YgR3JvdXBOb2RlKSB7XG4gICAgICAgICAgZ3JvdXBDaGlsZHJlbkhpZGRlbiA9IE9iamVjdC5rZXlzKGlubmVyTm9kZS5jaGlsZHJlbikuZXZlcnkoXG4gICAgICAgICAgICAoaSkgPT4gaW5uZXJOb2RlLmNoaWxkcmVuW2ldLmNvbnRyb2wuaGlkZGVuXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZHJlbltrXS5jb250cm9sLmhpZGRlbiB8fCBncm91cENoaWxkcmVuSGlkZGVuO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gIWFsbFNlY3Rpb25Db250cm9sc0hpZGRlbjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgY2xpY2tUYWIodGFiTnVtYmVyOiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYk51bWJlcjtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkUHJldmlvdXNUYWIoKSB7XG4gICAgaWYgKCF0aGlzLmlzQ3VycmVudFRhYkZpcnN0KCkpIHtcbiAgICAgIHRoaXMuY2xpY2tUYWIodGhpcy5hY3RpdmVUYWIgLSAxKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNDdXJyZW50VGFiRmlyc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlVGFiID09PSAwO1xuICB9XG5cbiAgcHVibGljIGlzQ3VycmVudFRhYkxhc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlVGFiID09PSB0aGlzLm5vZGUucXVlc3Rpb25bJ3F1ZXN0aW9ucyddLmxlbmd0aCAtIDE7XG4gIH1cblxuICBwdWJsaWMgbG9hZE5leHRUYWIoKSB7XG4gICAgaWYgKCF0aGlzLmlzQ3VycmVudFRhYkxhc3QoKSkge1xuICAgICAgdGhpcy5jbGlja1RhYih0aGlzLmFjdGl2ZVRhYiArIDEpO1xuICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgdGFiU2VsZWN0ZWQoJGV2ZW50KSB7XG4gICAgdGhpcy5hY3RpdmVUYWIgPSAkZXZlbnQ7XG4gICAgdGhpcy5zZXRQcmV2aW91c1RhYigpO1xuICB9XG4gIHB1YmxpYyBzZXRQcmV2aW91c1RhYigpIHtcbiAgICBpZiAodGhpcy5ub2RlICYmIHRoaXMubm9kZS5mb3JtKSB7XG4gICAgICB0aGlzLm5vZGUuZm9ybS52YWx1ZVByb2Nlc3NpbmdJbmZvWydsYXN0Rm9ybVRhYiddID0gdGhpcy5hY3RpdmVUYWI7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubm9kZS5jb250cm9sLnRvdWNoZWQgJiZcbiAgICAgICF0aGlzLm5vZGUuY29udHJvbC52YWxpZCAmJlxuICAgICAgdGhpcy5ub2RlLmNvbnRyb2wuZGlzYWJsZXJzLmxlbmd0aCA9PT0gMFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVycm9ycyh0aGlzLm5vZGUpO1xuICB9XG5cbiAgcHVibGljIHNjcm9sbFRvQ29udHJvbChlcnJvcjogc3RyaW5nKSB7XG4gICAgY29uc3QgdGFiOiBudW1iZXIgPSArZXJyb3Iuc3BsaXQoJywnKVswXTtcbiAgICBjb25zdCBlbFNlbGVjdG9yID0gZXJyb3Iuc3BsaXQoJywnKVsxXSArICdpZCc7XG5cbiAgICAvLyB0aGUgdGFiIGNvbXBvbmVudHNcbiAgICBjb25zdCB0YWJDb21wb25lbnQ6IEZvcm1SZW5kZXJlckNvbXBvbmVudCA9IHRoaXMuY2hpbGRDb21wb25lbnRzW3RhYl07XG5cbiAgICB0aGlzLmNsaWNrVGFiKHRhYik7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGV4cGFuZCBhbGwgc2VjdGlvbnNcbiAgICAgIHRhYkNvbXBvbmVudC5jaGlsZENvbXBvbmVudHMuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgICAgICBzZWN0aW9uLmlzQ29sbGFwc2VkID0gZmFsc2U7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudDogYW55ID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbFNlbGVjdG9yKTtcbiAgICAgICAgICBpZiAoZWxlbWVudCAhPT0gbnVsbCAmJiBlbGVtZW50LmZvY3VzKSB7XG4gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDApO1xuICAgICAgfSk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRhdGVDaGFuZ2VkKG5vZGU6IExlYWZOb2RlKSB7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGxvYWQoZXZlbnQpIHtcbiAgICAvLyBUTyBETyBBZGQgdXBsb2FkIGZ1bmN0aW9uYWxpdHlcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVJbmZvcm1hdGlvbihpbmZvSWQpIHtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5mb0lkKTtcblxuICAgIGlmIChlLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycpIHtcbiAgICAgIGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9IGVsc2Uge1xuICAgICAgZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRFcnJvcnMobm9kZTogTm9kZUJhc2UpIHtcbiAgICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSBub2RlLmNvbnRyb2wuZXJyb3JzO1xuXG4gICAgaWYgKGVycm9ycykge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGlvbkZhY3RvcnkuZXJyb3JzKGVycm9ycywgbm9kZS5xdWVzdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgc2hvd0Vycm9ycygpIHtcbiAgICByZXR1cm4gIXRoaXMubm9kZS5mb3JtLnZhbGlkICYmIHRoaXMubm9kZS5mb3JtLnNob3dFcnJvcnM7XG4gIH1cblxuICBnZXQgZXJyb3JOb2RlcygpIHtcbiAgICBjb25zdCBpbnZhbGlkQ29udHJvbHMgPSB0aGlzLm5vZGUuZm9ybS5tYXJrSW52YWxpZENvbnRyb2xzKFxuICAgICAgdGhpcy5ub2RlLmZvcm0ucm9vdE5vZGUsXG4gICAgICBbXVxuICAgICk7XG4gICAgcmV0dXJuIGludmFsaWRDb250cm9scztcbiAgfVxuXG4gIGdldENvbnRyb2xFcnJvcihub2RlOiBMZWFmTm9kZSkge1xuICAgIGNvbnN0IGVycm9yczogYW55ID0gbm9kZS5jb250cm9sLmVycm9ycztcblxuICAgIGlmIChlcnJvcnMpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25GYWN0b3J5LmVycm9ycyhlcnJvcnMsIG5vZGUucXVlc3Rpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFubm91bmNlRXJyb3JGaWVsZChlcnJvck5vZGU6IExlYWZOb2RlKSB7XG4gICAgY29uc3Qgbm9kZXM6IEFycmF5PE5vZGVCYXNlPiA9IHRoaXMubm9kZS5mb3JtLnNlYXJjaE5vZGVCeVF1ZXN0aW9uSWQoXG4gICAgICBlcnJvck5vZGUucGF0aC5zdWJzdHJpbmcoMCwgZXJyb3JOb2RlLnBhdGguaW5kZXhPZignLicpKVxuICAgICk7XG5cbiAgICBfLmZvckVhY2gobm9kZXMsIChub2RlOiBOb2RlQmFzZSkgPT4ge1xuICAgICAgaWYgKG5vZGUucXVlc3Rpb24ucmVuZGVyaW5nVHlwZSA9PT0gJ3BhZ2UnKSB7XG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleDogbnVtYmVyID0gdGhpcy5nZXRQYWdlSW5kZXgobm9kZSk7XG4gICAgICAgIHRoaXMuZm9ybUVycm9yc1NlcnZpY2UuYW5ub3VuY2VFcnJvckZpZWxkKFxuICAgICAgICAgIHBhZ2VJbmRleCArICcsJyArIGVycm9yTm9kZS5xdWVzdGlvbi5rZXlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFBhZ2VJbmRleChub2RlOiBOb2RlQmFzZSkge1xuICAgIGNvbnN0IHF1ZXN0aW9uR3JvdXA6IFF1ZXN0aW9uR3JvdXAgPSB0aGlzLm5vZGUuZm9ybS5yb290Tm9kZVxuICAgICAgLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uR3JvdXA7XG4gICAgcmV0dXJuIHF1ZXN0aW9uR3JvdXAucXVlc3Rpb25zLmluZGV4T2Yobm9kZS5xdWVzdGlvbik7XG4gIH1cbn1cbiIsIjwhLS1DT05UQUlORVJTLS0+XG48ZGl2ICpuZ0lmPVwibm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlID09PSAnZm9ybSdcIj5cbiAgPG9mZS10YWItc2V0ICh0YWJTZWxlY3QpPVwidGFiU2VsZWN0ZWQoJGV2ZW50KVwiIFtzZWxlY3RlZEluZGV4XT1cImFjdGl2ZVRhYlwiPlxuICAgIDxvZmUtdGFiXG4gICAgICBbdGFiVGl0bGVdPVwicXVlc3Rpb24ubGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIG5vZGUucXVlc3Rpb24ucXVlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICA+XG4gICAgICA8b2ZlLWZvcm0tcmVuZGVyZXJcbiAgICAgICAgW25vZGVdPVwibm9kZS5jaGlsZHJlbltxdWVzdGlvbi5rZXldIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3BhcmVudENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgW3BhcmVudEdyb3VwXT1cIm5vZGUuY29udHJvbFwiXG4gICAgICAgIFtsYWJlbE1hcF09XCJsYWJlbE1hcFwiXG4gICAgICA+XG4gICAgICA8L29mZS1mb3JtLXJlbmRlcmVyPlxuICAgIDwvb2ZlLXRhYj5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0Vycm9ycygpXCIgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS1ub3RpZmljYXRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IGVycm9yTm9kZSBvZiBlcnJvck5vZGVzXCJcbiAgICAgICAgY2xhc3M9XCJjZHMtLWlubGluZS1ub3RpZmljYXRpb24gY2RzLS1pbmxpbmUtbm90aWZpY2F0aW9uLS1lcnJvciBjZHMtLWlubGluZS1ub3RpZmljYXRpb24tLWxvdy1jb250cmFzdCBwb2ludGVyXCJcbiAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgKGNsaWNrKT1cImFubm91bmNlRXJyb3JGaWVsZChlcnJvck5vZGUpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNkcy0taW5saW5lLW5vdGlmaWNhdGlvbl9fZGV0YWlsc1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZHMtLWlubGluZS1ub3RpZmljYXRpb25fX3RleHQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjZHMtLWlubGluZS1ub3RpZmljYXRpb25fX3RpdGxlXCI+XG4gICAgICAgICAgICAgIHt7IGVycm9yTm9kZS5xdWVzdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjZHMtLWlubGluZS1ub3RpZmljYXRpb25fX3N1YnRpdGxlXCI+XG4gICAgICAgICAgICAgIHt7IGdldENvbnRyb2xFcnJvcihlcnJvck5vZGUgfCB0cmFuc2xhdGUpIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICBjbGFzcz1cImNkcy0taW5saW5lLW5vdGlmaWNhdGlvbl9fYWN0aW9uLWJ1dHRvbiBjZHMtLWJ0biBjZHMtLWJ0bi0tc20gY2RzLS1idG4tLWdob3N0XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdmaXgnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBtZWV0XCJcbiAgICAgICAgICBzdHlsZT1cIndpbGwtY2hhbmdlOiB0cmFuc2Zvcm1cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIGNsYXNzPVwiY2RzLS1pbmxpbmUtbm90aWZpY2F0aW9uX19pY29uXCJcbiAgICAgICAgICB3aWR0aD1cIjIwXCJcbiAgICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTEwLDFjLTUsMC05LDQtOSw5czQsOSw5LDlzOS00LDktOVMxNSwxLDEwLDF6IE0xMy41LDE0LjVsLTgtOGwxLTFsOCw4TDEzLjUsMTQuNXpcIlxuICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNMTMuNSwxNC41bC04LThsMS0xbDgsOEwxMy41LDE0LjV6XCJcbiAgICAgICAgICAgIGRhdGEtaWNvbi1wYXRoPVwiaW5uZXItcGF0aFwiXG4gICAgICAgICAgICBvcGFjaXR5PVwiMFwiXG4gICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9vZmUtdGFiLXNldD5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIm5vZGUucXVlc3Rpb24ucmVuZGVyaW5nVHlwZSA9PT0gJ3BhZ2UnXCI+XG4gIDwhLS1QYWdlIENvbXBvbmVudHMtLT5cbiAgPG9mZS1jdXN0b20tY29tcG9uZW50LXdyYXBwZXJcbiAgICBbZGFya109XCJ0aGVtZSA9PT0gJ2xpZ2h0J1wiXG4gICAgW2NvbXBvbmVudENvbmZpZ3NdPVwibm9kZS5xdWVzdGlvbi5jb21wb25lbnRDb25maWdzXCJcbiAgPlxuICA8L29mZS1jdXN0b20tY29tcG9uZW50LXdyYXBwZXI+XG4gIDxvZmUtZm9ybS1yZW5kZXJlclxuICAgICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBub2RlLnF1ZXN0aW9uLnF1ZXN0aW9uc1wiXG4gICAgW3BhcmVudENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICBbbm9kZV09XCJub2RlLmNoaWxkcmVuW3F1ZXN0aW9uLmtleV1cIlxuICAgIFtwYXJlbnRHcm91cF09XCJwYXJlbnRHcm91cFwiXG4gICAgW2xhYmVsTWFwXT1cImxhYmVsTWFwXCJcbiAgPjwvb2ZlLWZvcm0tcmVuZGVyZXI+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUgPT09ICdzZWN0aW9uJyAmJiBjaGVja1NlY3Rpb24obm9kZSlcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY2RzLS1hY2NvcmRpb25fX2l0ZW1cIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2Nkcy0tYWNjb3JkaW9uX19pdGVtLS1hY3RpdmUnOiAhaXNDb2xsYXBzZWQgfVwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImNkcy0tYWNjb3JkaW9uX19oZWFkaW5nXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0NvbGxhcHNlZCA/ICdmYWxzZScgOiAndHJ1ZSdcIlxuICAgICAgYXJpYS1jb250cm9scz1cImFjY29yZGlvbi1pdGVtLTBcIlxuICAgICAgKGNsaWNrKT1cImlzQ29sbGFwc2VkID0gIWlzQ29sbGFwc2VkXCJcbiAgICA+XG4gICAgICA8c3ZnXG4gICAgICAgIGNsYXNzPVwiY2RzLS1hY2NvcmRpb25fX2Fycm93XCJcbiAgICAgICAgaWJtSWNvbj1cImNoZXZyb24tLXJpZ2h0XCJcbiAgICAgICAgc2l6ZT1cIjE2XCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz1cInhNaWRZTWlkIG1lZXRcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICB3aWR0aD1cIjE2XCJcbiAgICAgICAgaGVpZ2h0PVwiMTZcIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgID5cbiAgICAgICAgPHBhdGggZD1cIk0xMSA4TDYgMTMgNS4zIDEyLjMgOS42IDggNS4zIDMuNyA2IDN6XCI+PC9wYXRoPlxuICAgICAgPC9zdmc+XG4gICAgICA8cCBjbGFzcz1cImNkcy0tYWNjb3JkaW9uX190aXRsZVwiPlxuICAgICAgICB7eyBub2RlLnF1ZXN0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3A+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBvZmVDb2xsYXBzZT1cImlzQ29sbGFwc2VkXCI+XG4gICAgICA8IS0tU2VjdGlvbiBDb21wb25lbnRzLS0+XG4gICAgICA8b2ZlLWN1c3RvbS1jb21wb25lbnQtd3JhcHBlclxuICAgICAgICBbZGFya109XCJ0aGVtZSA9PT0gJ2xpZ2h0J1wiXG4gICAgICAgIFtjb21wb25lbnRDb25maWdzXT1cIm5vZGUucXVlc3Rpb24uY29tcG9uZW50Q29uZmlnc1wiXG4gICAgICA+XG4gICAgICA8L29mZS1jdXN0b20tY29tcG9uZW50LXdyYXBwZXI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY2RzLS1hY2NvcmRpb25fX2NvbnRlbnQgYWNjb3JkaW9uLWNvbnRlbnQtb3ZlcnJpZGVcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2FjY29yZGlvbi1jb250ZW50LWRhcmsnOiB0aGVtZSA9PT0gJ2xpZ2h0J1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPG9mZS1mb3JtLXJlbmRlcmVyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIG5vZGUucXVlc3Rpb24ucXVlc3Rpb25zXCJcbiAgICAgICAgICBbcGFyZW50Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgIFtub2RlXT1cIm5vZGUuY2hpbGRyZW5bcXVlc3Rpb24ua2V5XVwiXG4gICAgICAgICAgW3BhcmVudEdyb3VwXT1cInBhcmVudEdyb3VwXCJcbiAgICAgICAgICBbbGFiZWxNYXBdPVwibGFiZWxNYXBcIlxuICAgICAgICA+PC9vZmUtZm9ybS1yZW5kZXJlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIE1FU1NBR0VTIC0tPlxuPGRpdlxuICAqbmdJZj1cIm5vZGUuY29udHJvbCAmJiBub2RlLmNvbnRyb2wuYWxlcnQgJiYgbm9kZS5jb250cm9sLmFsZXJ0ICE9PSAnJ1wiXG4gIGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXG4+XG4gIDxhIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJhbGVydFwiPiZ0aW1lczs8L2E+IHt7IG5vZGUuY29udHJvbC5hbGVydCB9fVxuPC9kaXY+XG5cbjwhLS1DT05UUk9MUy0tPlxuXG48ZGl2XG4gICpuZ0lmPVwibm9kZS5xdWVzdGlvbi5jb250cm9sVHlwZSA9PT0gMFwiXG4gIFtmb3JtR3JvdXBdPVwicGFyZW50R3JvdXBcIlxuICBbaGlkZGVuXT1cIm5vZGUuY29udHJvbC5oaWRkZW5cIlxuICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBub2RlLmNvbnRyb2wuZGlzYWJsZWQgfVwiXG4+XG4gIDxvZmUtY3VzdG9tLWNvbXBvbmVudC13cmFwcGVyXG4gICAgW2RhcmtdPVwiISh0aGVtZSA9PT0gJ2xpZ2h0JylcIlxuICAgIFtjb21wb25lbnRDb25maWdzXT1cIm5vZGUucXVlc3Rpb24uY29tcG9uZW50Q29uZmlnc1wiXG4gID5cbiAgPC9vZmUtY3VzdG9tLWNvbXBvbmVudC13cmFwcGVyPlxuICA8ZGl2IGNsYXNzPVwiY2RzLS1mb3JtLWl0ZW1cIj5cbiAgICA8IS0tTEVBRiBDT05UUk9MLS0+XG4gICAgPGRpdiBjbGFzcz1cInF1ZXN0aW9uLWFyZWFcIj5cbiAgICAgIDxhXG4gICAgICAgIGNsYXNzPVwiZm9ybS10b29sdGlwIHB1bGwtcmlnaHRcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlSW5mb3JtYXRpb24obm9kZS5xdWVzdGlvbi5leHRyYXMuaWQpXCJcbiAgICAgICAgZGF0YS1wbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgbm9kZS5xdWVzdGlvbiAmJlxuICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uSW5mbyAmJlxuICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uSW5mbyAhPT0gJycgJiZcbiAgICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbkluZm8gIT09ICcgJ1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cImdseXBoaWNvbiBnbHlwaGljb24tcXVlc3Rpb24tc2lnblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgIDwvYT5cblxuICAgICAgPGxhYmVsXG4gICAgICAgICpuZ0lmPVwibm9kZS5xdWVzdGlvbi5sYWJlbFwiXG4gICAgICAgIFtzdHlsZS5jb2xvcl09XCJoYXNFcnJvcnMoKSA/ICdyZWQnIDogJydcIlxuICAgICAgICBjbGFzcz1cImNkcy0tbGFiZWxcIlxuICAgICAgICBbYXR0ci5mb3JdPVwibm9kZS5xdWVzdGlvbi5rZXkgfCB0cmFuc2xhdGVcIlxuICAgICAgPlxuICAgICAgICB7eyBub2RlLnF1ZXN0aW9uLnJlcXVpcmVkID8gJyonIDogJycgfX1cbiAgICAgICAge3sgbm9kZS5xdWVzdGlvbi5wcmVmaXggPyBub2RlLnF1ZXN0aW9uLnByZWZpeCArICcgJyA6ICcnIH19XG4gICAgICAgIHt7IG5vZGUucXVlc3Rpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbGFiZWw+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMuY3VzdG9tQ29udHJvbDtcbiAgICAgICAgICBlbHNlIG5hdGl2ZUNvbnRyb2xzXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxvZmUtY3VzdG9tLWNvbnRyb2wtd3JhcHBlclxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibm9kZS5xdWVzdGlvbi5rZXlcIlxuICAgICAgICAgIFtpZF09XCJub2RlLnF1ZXN0aW9uLmtleSArICdpZCdcIlxuICAgICAgICAgIFtxdWVzdGlvbl09XCJub2RlLnF1ZXN0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICA8L29mZS1jdXN0b20tY29udHJvbC13cmFwcGVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbmF0aXZlQ29udHJvbHM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZmUtY29udHJvbFwiIFtuZ1N3aXRjaF09XCJub2RlLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGVcIj5cbiAgICAgICAgICA8b2ZlLXNlbGVjdFxuICAgICAgICAgICAgW3RoZW1lXT1cInRoZW1lXCJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5vZGUucXVlc3Rpb24ua2V5XCJcbiAgICAgICAgICAgIFtpZF09XCJub2RlLnF1ZXN0aW9uLmtleSArICdpZCdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBub2RlLnF1ZXN0aW9uLm9wdGlvbnNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L29mZS1zZWxlY3Q+XG5cbiAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZmlsZSdcIj5cbiAgICAgICAgICAgIDxvZmUtZmlsZS11cGxvYWRcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibm9kZS5xdWVzdGlvbi5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwibm9kZS5xdWVzdGlvbi5rZXkgKyAnaWQnXCJcbiAgICAgICAgICAgICAgKGZpbGVDaGFuZ2VkKT1cInVwbG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvb2ZlLWZpbGUtdXBsb2FkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBbdGhlbWVdPVwidGhlbWVcIlxuICAgICAgICAgICAgb2ZlVGV4dEFyZWFJbnB1dFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnY2RzLS10ZXh0LWFyZWEtLWxpZ2h0JzogdGhlbWUgPT09ICdsaWdodCcsXG4gICAgICAgICAgICAgICdjZHMtLXRleHQtYXJlYS0taW52YWxpZCc6ICFub2RlLmNvbnRyb2wudmFsaWRcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm5vZGUucXVlc3Rpb24ucGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3Jvd3NdPVwibm9kZS5xdWVzdGlvbi5yb3dzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2RzLS10ZXh0LWFyZWFcIlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0YXJlYSdcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJub2RlLnF1ZXN0aW9uLmtleVwiXG4gICAgICAgICAgICBbaWRdPVwibm9kZS5xdWVzdGlvbi5rZXkgKyAnaWQnXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCJub2RlLnF1ZXN0aW9uLmV4dHJhcy5yZWFkT25seVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvdGV4dGFyZWE+XG5cbiAgICAgICAgICA8b2ZlLXJlbW90ZS1zZWxlY3RcbiAgICAgICAgICAgIFt0aGVtZV09XCJ0aGVtZVwiXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3JlbW90ZS1zZWxlY3QnXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJub2RlLnF1ZXN0aW9uLnBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgICAgICAgICAgIFtjb21wb25lbnRJRF09XCJub2RlLnF1ZXN0aW9uLmtleSArICdpZCdcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJub2RlLnF1ZXN0aW9uLmtleVwiXG4gICAgICAgICAgICBbaWRdPVwibm9kZS5xdWVzdGlvbi5rZXkgKyAnaWQnXCJcbiAgICAgICAgICA+PC9vZmUtcmVtb3RlLXNlbGVjdD5cblxuICAgICAgICAgIDxvZmUtbmd4LWRhdGUtdGltZS1waWNrZXJcbiAgICAgICAgICAgIFt3ZWVrc109XCJub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMud2Vla3NMaXN0XCJcbiAgICAgICAgICAgIFtzaG93V2Vla3NdPVwibm9kZS5xdWVzdGlvbi5zaG93V2Vla3NBZGRlclwiXG4gICAgICAgICAgICBbdGhlbWVdPVwidGhlbWVcIlxuICAgICAgICAgICAgW2lkXT1cIm5vZGUucXVlc3Rpb24ua2V5ICsgJ2lkJ1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5vZGUucXVlc3Rpb24ua2V5XCJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIlxuICAgICAgICAgICAgW2RhdGVQaWNrZXJGb3JtYXRdPVwibm9kZS5xdWVzdGlvbi5kYXRlUGlja2VyRm9ybWF0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9vZmUtbmd4LWRhdGUtdGltZS1waWNrZXI+XG4gICAgICAgICAgPG5nLXNlbGVjdFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYWZlLWN1c3RvbSc6IHRoZW1lID09PSAnbGlnaHQnIH1cIlxuICAgICAgICAgICAgW2lkXT1cIm5vZGUucXVlc3Rpb24ua2V5ICsgJ2lkJ1wiXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXNlbGVjdCdcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidmb3JtJ1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICAgICAgICBjbGVhckFsbFRleHQ9XCJDbGVhclwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5vZGUucXVlc3Rpb24ua2V5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctb3B0aW9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygbm9kZS5xdWVzdGlvbi5vcHRpb25zXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9uZy1vcHRpb24+XG4gICAgICAgICAgPC9uZy1zZWxlY3Q+XG5cbiAgICAgICAgICA8bmctc2VsZWN0XG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhZmUtY3VzdG9tJzogdGhlbWUgPT09ICdsaWdodCcgfVwiXG4gICAgICAgICAgICBbaWRdPVwibm9kZS5xdWVzdGlvbi5rZXkgKyAnaWQnXCJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInc2luZ2xlLXNlbGVjdCdcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgICAgY2xlYXJBbGxUZXh0PVwiQ2xlYXJcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJub2RlLnF1ZXN0aW9uLmtleVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLW9wdGlvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG5vZGUucXVlc3Rpb24ub3B0aW9uc1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbmctb3B0aW9uPlxuICAgICAgICAgIDwvbmctc2VsZWN0PlxuXG4gICAgICAgICAgPG9mZS1udW1iZXItaW5wdXRcbiAgICAgICAgICAgIFt0aGVtZV09XCJ0aGVtZVwiXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgW2lkXT1cIm5vZGUucXVlc3Rpb24ua2V5ICsgJ2lkJ1wiXG4gICAgICAgICAgICBbbWluXT1cIm5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5taW5cIlxuICAgICAgICAgICAgW21heF09XCJub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbk9wdGlvbnMubWF4XCJcbiAgICAgICAgICAgIFttYXhsZW5ndGhdPVwibm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLm1heExlbmd0aFwiXG4gICAgICAgICAgICBbbWlubGVuZ3RoXT1cIm5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5taW5MZW5ndGhcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJub2RlLnF1ZXN0aW9uLmtleVwiXG4gICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJub2RlLnF1ZXN0aW9uLnBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9vZmUtbnVtYmVyLWlucHV0PlxuXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbdGhlbWVdPVwidGhlbWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJjZHMtLXRleHQtaW5wdXRcIlxuICAgICAgICAgICAgb2ZlVGV4dElucHV0XG4gICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5vZGUucXVlc3Rpb24ua2V5XCJcbiAgICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cIm5vZGUucXVlc3Rpb24ucGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3R5cGVdPVwibm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlXCJcbiAgICAgICAgICAgIFtpZF09XCJub2RlLnF1ZXN0aW9uLmtleSArICdpZCdcIlxuICAgICAgICAgICAgW3JlYWRPbmx5XT1cIm5vZGUucXVlc3Rpb24uZXh0cmFzLnJlYWRPbmx5XCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiPlxuICAgICAgICAgICAgPG9mZS1yYWRpby1idXR0b25cbiAgICAgICAgICAgICAgW2lkXT1cIm5vZGUucXVlc3Rpb24ua2V5ICsgJ2lkJ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibm9kZS5xdWVzdGlvbi5rZXlcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJub2RlLnF1ZXN0aW9uLm9wdGlvbnNcIlxuICAgICAgICAgICAgICBbYWxsb3dVbnNlbGVjdF09XCJub2RlLnF1ZXN0aW9uLmFsbG93VW5zZWxlY3RcIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwibm9kZS5jb250cm9sLnZhbHVlXCJcbiAgICAgICAgICAgICAgW29yaWVudGF0aW9uXT1cIm5vZGUucXVlc3Rpb24ub3JpZW50YXRpb25cIlxuICAgICAgICAgICAgPjwvb2ZlLXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cbiAgICAgICAgICAgIDxvZmUtY2hlY2tib3hcbiAgICAgICAgICAgICAgW2lkXT1cIm5vZGUucXVlc3Rpb24ua2V5ICsgJ2lkJyArIGNvbnRyb2xJZFwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibm9kZS5xdWVzdGlvbi5rZXlcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJub2RlLnF1ZXN0aW9uLm9wdGlvbnNcIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwibm9kZS5jb250cm9sLnZhbHVlXCJcbiAgICAgICAgICAgID48L29mZS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIG5vZGUucXVlc3Rpb24uZW5hYmxlSGlzdG9yaWNhbFZhbHVlICYmXG4gICAgICAgICAgICAgIG5vZGUucXVlc3Rpb24uaGlzdG9yaWNhbERpc3BsYXlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDJweFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy05XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtd2FybmluZ1wiXG4gICAgICAgICAgICAgICAgICAgID57eyAncHJldmlvdXNWYWx1ZScgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IG5vZGUucXVlc3Rpb24uaGlzdG9yaWNhbERpc3BsYXk/LnRleHQgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibm9kZS5xdWVzdGlvbi5zaG93SGlzdG9yaWNhbFZhbHVlRGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4gfCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgID57eyBub2RlLnF1ZXN0aW9uLmhpc3RvcmljYWxEaXNwbGF5Py5fZGF0ZSB8IGRhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnF1ZXN0aW9uLmhpc3RvcmljYWxEaXNwbGF5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnF1ZXN0aW9uLmhpc3RvcmljYWxEaXNwbGF5Ll9kYXRlXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICh7e1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5xdWVzdGlvbi5oaXN0b3JpY2FsRGlzcGxheS5fZGF0ZSB8IHRpbWVBZ29cbiAgICAgICAgICAgICAgICAgICAgICB9fSk8L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ2hpc3RvcnlWYWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZHMtLWJ0biBjZHMtLWJ0bi0tcHJpbWFyeSBjZHMtLWJ0bi0tc20gY29sLXhzLTNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7ICd1c2VWYWx1ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8b2ZlLWFwcG9pbnRtZW50cy1vdmVydmlldyBbbm9kZV09XCJub2RlXCI+PC9vZmUtYXBwb2ludG1lbnRzLW92ZXJ2aWV3PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNFcnJvcnMoKVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZSBvZiBlcnJvcnMoKVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+e3sgZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJxdWVzdGlvbi1pbmZvIGNvbC1tZC0xMiBjb2wtbGctMTIgY29sLXNtLTEyXCJcbiAgICAgICAgaWQ9XCJ7eyBub2RlLnF1ZXN0aW9uLmV4dHJhcy5pZCB9fVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgbm9kZS5xdWVzdGlvbiAmJlxuICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uSW5mbyAmJlxuICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uSW5mbyAhPT0gJycgJiZcbiAgICAgICAgICBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbkluZm8gIT09ICcgJ1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICB7eyBub2RlLnF1ZXN0aW9uLmV4dHJhcy5xdWVzdGlvbkluZm8gfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdlxuICAqbmdJZj1cIm5vZGUucXVlc3Rpb24uY29udHJvbFR5cGUgPT09IDFcIlxuICBbaGlkZGVuXT1cIm5vZGUuY29udHJvbC5oaWRkZW5cIlxuICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBub2RlLmNvbnRyb2wuZGlzYWJsZWQgfVwiXG4+XG4gIDwhLS1BUlJBWSBDT05UUk9MLS0+XG4gIDxkaXYgW25nU3dpdGNoXT1cIm5vZGUucXVlc3Rpb24ucmVuZGVyaW5nVHlwZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3ZWxsXCIgc3R5bGU9XCJwYWRkaW5nOiAycHhcIiAqbmdTd2l0Y2hDYXNlPVwiJ3JlcGVhdGluZydcIj5cbiAgICAgIDxoNCBzdHlsZT1cIm1hcmdpbjogMnB4OyBmb250LXdlaWdodDogYm9sZFwiPlxuICAgICAgICB7eyBub2RlLnF1ZXN0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2g0PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgY2xhc3M9XCJjZHMtLWxhYmVsXCJcbiAgICAgICAgICAqbmdJZj1cIm5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5taW5cIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAycHhcIlxuICAgICAgICAgID5taW46IHt7IG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5taW4gfX08L2xhYmVsXG4gICAgICAgID5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgY2xhc3M9XCJjZHMtLWxhYmVsXCJcbiAgICAgICAgICAqbmdJZj1cIm5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5tYXhcIlxuICAgICAgICAgID5tYXg6IHt7IG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5tYXggfX08L2xhYmVsXG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgICAgPGhyXG4gICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IC0ycHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMnB4O1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgICAgYm9yZGVyLXdpZHRoOiAycHg7XG4gICAgICAgIFwiXG4gICAgICAvPlxuICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwibm9kZS5xdWVzdGlvbi5leHRyYXMudHlwZVwiPlxuICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIndGVzdE9yZGVyJ1wiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW47IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxvZmUtZm9ybS1yZW5kZXJlclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgY2hpbGQucXVlc3Rpb24ucXVlc3Rpb25zXCJcbiAgICAgICAgICAgICAgW3BhcmVudENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgW25vZGVdPVwiY2hpbGQuY2hpbGRyZW5bcXVlc3Rpb24ua2V5XVwiXG4gICAgICAgICAgICAgIFtwYXJlbnRHcm91cF09XCJjaGlsZC5jb250cm9sXCJcbiAgICAgICAgICAgICAgW2xhYmVsTWFwXT1cImxhYmVsTWFwXCJcbiAgICAgICAgICAgID48L29mZS1mb3JtLXJlbmRlcmVyPlxuICAgICAgICAgICAgPGRpdj57eyBjaGlsZC5vcmRlck51bWJlciB9fTwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2RzLS1idG4gY2RzLS1idG4tLWRhbmdlciBjZHMtLWJ0bi0tc21cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibm9kZS5yZW1vdmVBdChpKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdyZW1vdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgPGhyXG4gICAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0ycHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMnB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZGlhZ25vc2lzJ1wiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW47IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxvZmUtZm9ybS1yZW5kZXJlclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgY2hpbGQucXVlc3Rpb24ucXVlc3Rpb25zXCJcbiAgICAgICAgICAgICAgW3BhcmVudENvbXBvbmVudF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgW25vZGVdPVwiY2hpbGQuY2hpbGRyZW5bcXVlc3Rpb24ua2V5XVwiXG4gICAgICAgICAgICAgIFtwYXJlbnRHcm91cF09XCJjaGlsZC5jb250cm9sXCJcbiAgICAgICAgICAgICAgW2xhYmVsTWFwXT1cImxhYmVsTWFwXCJcbiAgICAgICAgICAgID48L29mZS1mb3JtLXJlbmRlcmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2RzLS1idG4gY2RzLS1idG4tLWRhbmdlciBjZHMtLWJ0bi0tc21cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibm9kZS5yZW1vdmVBdChpKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdyZW1vdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgPGhyXG4gICAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0ycHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMnB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInb2JzR3JvdXAnXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAyMHB4XCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbjsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPG9mZS1mb3JtLXJlbmRlcmVyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBjaGlsZC5xdWVzdGlvbi5xdWVzdGlvbnNcIlxuICAgICAgICAgICAgICBbcGFyZW50Q29tcG9uZW50XT1cInRoaXNcIlxuICAgICAgICAgICAgICBbbm9kZV09XCJjaGlsZC5jaGlsZHJlbltxdWVzdGlvbi5rZXldXCJcbiAgICAgICAgICAgICAgW3BhcmVudEdyb3VwXT1cImNoaWxkLmNvbnRyb2xcIlxuICAgICAgICAgICAgICBbbGFiZWxNYXBdPVwibGFiZWxNYXBcIlxuICAgICAgICAgICAgICBbY29udHJvbElkXT1cImlcIlxuICAgICAgICAgICAgPjwvb2ZlLWZvcm0tcmVuZGVyZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDBweFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2RzLS1idG4gY2RzLS1idG4tLWRhbmdlciBjZHMtLWJ0bi0tc21cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibm9kZS5yZW1vdmVBdChpKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdyZW1vdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgPGhyXG4gICAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0ycHg7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMnB4O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjZHMtLWJ0biBjZHMtLWJ0bi0tcHJpbWFyeSBjZHMtLWJ0bi0tc21cIlxuICAgICAgICAoY2xpY2spPVwibm9kZS5jcmVhdGVDaGlsZE5vZGUoKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID49IG5vZGUucXVlc3Rpb24uZXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5tYXhcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdhZGQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXZcbiAgKm5nSWY9XCJub2RlLnF1ZXN0aW9uLmNvbnRyb2xUeXBlID09PSAyXCJcbiAgW2hpZGRlbl09XCJub2RlLmNvbnRyb2wuaGlkZGVuXCJcbiAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogbm9kZS5jb250cm9sLmRpc2FibGVkIH1cIlxuPlxuICA8IS0tR1JPVVAtLT5cbiAgPGRpdiBbbmdTd2l0Y2hdPVwibm9kZS5xdWVzdGlvbi5yZW5kZXJpbmdUeXBlXCI+XG4gICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2dyb3VwJ1wiPlxuICAgICAgPG9mZS1mb3JtLXJlbmRlcmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBub2RlLnF1ZXN0aW9uLnF1ZXN0aW9uc1wiXG4gICAgICAgIFtwYXJlbnRDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgIFtub2RlXT1cIm5vZGUuY2hpbGRyZW5bcXVlc3Rpb24ua2V5XVwiXG4gICAgICAgIFtwYXJlbnRHcm91cF09XCJub2RlLmNvbnRyb2xcIlxuICAgICAgICBbbGFiZWxNYXBdPVwibGFiZWxNYXBcIlxuICAgICAgPjwvb2ZlLWZvcm0tcmVuZGVyZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIidmaWVsZC1zZXQnXCJcbiAgICAgIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI2VlZWVlZTsgcGFkZGluZzogMnB4OyBtYXJnaW46IDJweFwiXG4gICAgPlxuICAgICAgPG9mZS1mb3JtLXJlbmRlcmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBub2RlLnF1ZXN0aW9uLnF1ZXN0aW9uc1wiXG4gICAgICAgIFtwYXJlbnRDb21wb25lbnRdPVwidGhpc1wiXG4gICAgICAgIFtub2RlXT1cIm5vZGUuY2hpbGRyZW5bcXVlc3Rpb24ua2V5XVwiXG4gICAgICAgIFtwYXJlbnRHcm91cF09XCJub2RlLmNvbnRyb2xcIlxuICAgICAgICBbbGFiZWxNYXBdPVwibGFiZWxNYXBcIlxuICAgICAgPjwvb2ZlLWZvcm0tcmVuZGVyZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class DiagnosisValueAdapter {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.formDiagnosisNodes = [];
|
|
6
|
-
}
|
|
7
|
-
generateFormPayload(form) {
|
|
8
|
-
this.formDiagnosisNodes = [];
|
|
9
|
-
this._findDiagnosisQuestionNodes(form.rootNode);
|
|
10
|
-
return this._createDiagnosesPayload(this.formDiagnosisNodes, form.existingDiagnoses);
|
|
11
|
-
}
|
|
12
|
-
populateForm(form, diagnoses) {
|
|
13
|
-
form.existingDiagnoses = diagnoses === null || diagnoses === void 0 ? void 0 : diagnoses.filter((d) => {
|
|
14
|
-
return !d.voided;
|
|
15
|
-
});
|
|
16
|
-
this.formDiagnosisNodes = [];
|
|
17
|
-
this._findDiagnosisQuestionNodes(form.rootNode);
|
|
18
|
-
this._setDiagnosesValues(this.formDiagnosisNodes, form.existingDiagnoses, 1);
|
|
19
|
-
this._setDiagnosesValues(this.formDiagnosisNodes, form.existingDiagnoses, 2);
|
|
20
|
-
}
|
|
21
|
-
_createDiagnosesPayload(diagnosisNodes, existingDiagnoses) {
|
|
22
|
-
const payload = [];
|
|
23
|
-
let deletedDiagnoses = [];
|
|
24
|
-
diagnosisNodes === null || diagnosisNodes === void 0 ? void 0 : diagnosisNodes.forEach((node) => {
|
|
25
|
-
node.control.value
|
|
26
|
-
.filter((v) => v[node.question.key])
|
|
27
|
-
.forEach((value) => {
|
|
28
|
-
// Create Payload
|
|
29
|
-
const payloadDiagnosis = this._createPayloadDiagnosis(value[node.question.key], node.question.extras);
|
|
30
|
-
// Validate if is new value
|
|
31
|
-
payload.push(payloadDiagnosis);
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
this._updatedOldDiagnoses(payload, existingDiagnoses);
|
|
35
|
-
deletedDiagnoses = this._getDeletedDiagnoses(payload, existingDiagnoses);
|
|
36
|
-
return payload.concat(deletedDiagnoses);
|
|
37
|
-
}
|
|
38
|
-
_createPayloadDiagnosis(codedUuid, questionExtras) {
|
|
39
|
-
const diagnosis = {
|
|
40
|
-
diagnosis: {
|
|
41
|
-
coded: codedUuid
|
|
42
|
-
},
|
|
43
|
-
certainty: 'CONFIRMED',
|
|
44
|
-
rank: questionExtras.questionOptions.rank,
|
|
45
|
-
voided: false
|
|
46
|
-
};
|
|
47
|
-
return diagnosis;
|
|
48
|
-
}
|
|
49
|
-
_getDeletedDiagnoses(payloadDiagnoses, existingDiagnoses) {
|
|
50
|
-
return existingDiagnoses === null || existingDiagnoses === void 0 ? void 0 : existingDiagnoses.filter((e) => {
|
|
51
|
-
return !payloadDiagnoses.find((p) => {
|
|
52
|
-
let isSame = !e.voided && p.diagnosis.coded === e.diagnosis.coded.uuid;
|
|
53
|
-
return isSame;
|
|
54
|
-
});
|
|
55
|
-
}).map((d) => {
|
|
56
|
-
let diagnosisPayload = this._convert(d);
|
|
57
|
-
diagnosisPayload.voided = true;
|
|
58
|
-
return diagnosisPayload;
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
_updatedOldDiagnoses(payloadDiagnoses, existingDiagnoses) {
|
|
62
|
-
payloadDiagnoses.forEach((p) => {
|
|
63
|
-
existingDiagnoses === null || existingDiagnoses === void 0 ? void 0 : existingDiagnoses.forEach((e) => {
|
|
64
|
-
let isSame = !e.voided && p.diagnosis.coded === e.diagnosis.coded.uuid;
|
|
65
|
-
p.uuid = isSame ? e.uuid : null;
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
_setDiagnosesValues(formDiagnosisNodes, existingDiagnoses, rank) {
|
|
70
|
-
formDiagnosisNodes === null || formDiagnosisNodes === void 0 ? void 0 : formDiagnosisNodes.filter((node) => node.question.extras.questionOptions.rank == rank).forEach((node) => {
|
|
71
|
-
node['initialValue'] = existingDiagnoses;
|
|
72
|
-
existingDiagnoses
|
|
73
|
-
.filter((d) => d.rank == rank)
|
|
74
|
-
.forEach((diagnosis, index) => {
|
|
75
|
-
node.createChildNode();
|
|
76
|
-
const value = {};
|
|
77
|
-
value[node.question.key] = diagnosis.diagnosis.coded.uuid;
|
|
78
|
-
const childNode = node.children[index];
|
|
79
|
-
childNode.control.setValue(value);
|
|
80
|
-
childNode['initialValue'] = value;
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
_findDiagnosisQuestionNodes(formNode) {
|
|
85
|
-
if (formNode.children) {
|
|
86
|
-
if (formNode.children instanceof Object) {
|
|
87
|
-
for (const key in formNode.children) {
|
|
88
|
-
if (formNode.children.hasOwnProperty(key)) {
|
|
89
|
-
switch (formNode.children[key].question.renderingType) {
|
|
90
|
-
case 'page':
|
|
91
|
-
this._findDiagnosisQuestionNodes(formNode.children[key]);
|
|
92
|
-
break;
|
|
93
|
-
case 'section':
|
|
94
|
-
this._findDiagnosisQuestionNodes(formNode.children[key]);
|
|
95
|
-
break;
|
|
96
|
-
case 'group':
|
|
97
|
-
this._findDiagnosisQuestionNodes(formNode.children[key]);
|
|
98
|
-
break;
|
|
99
|
-
case 'repeating':
|
|
100
|
-
if (formNode.children) {
|
|
101
|
-
for (const node in formNode.children) {
|
|
102
|
-
const question = formNode.children[node].question;
|
|
103
|
-
const index = formNode.children[node].nodeIndex;
|
|
104
|
-
if (question.extras &&
|
|
105
|
-
question.extras.type === 'diagnosis' &&
|
|
106
|
-
!this.formDiagnosisNodes.some((x) => index === x.nodeIndex)) {
|
|
107
|
-
this.formDiagnosisNodes.push(formNode.children[node]);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
break;
|
|
112
|
-
default:
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
_convert(diagnosis) {
|
|
121
|
-
return {
|
|
122
|
-
uuid: diagnosis.uuid,
|
|
123
|
-
encounter: diagnosis.encounter,
|
|
124
|
-
patient: diagnosis.patient,
|
|
125
|
-
diagnosis: {
|
|
126
|
-
coded: diagnosis.diagnosis.coded.uuid,
|
|
127
|
-
nonCoded: diagnosis.diagnosis.nonCoded
|
|
128
|
-
},
|
|
129
|
-
certainty: diagnosis.certainty,
|
|
130
|
-
rank: diagnosis.rank,
|
|
131
|
-
voided: diagnosis.voided
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
DiagnosisValueAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DiagnosisValueAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
136
|
-
DiagnosisValueAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DiagnosisValueAdapter });
|
|
137
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DiagnosisValueAdapter, decorators: [{
|
|
138
|
-
type: Injectable
|
|
139
|
-
}] });
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc2lzLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9mb3JtLWVudHJ5L3ZhbHVlLWFkYXB0ZXJzL2RpYWdub3Npcy5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxxQkFBcUI7SUFEbEM7UUFFRSx1QkFBa0IsR0FBRyxFQUFFLENBQUM7S0E2S3pCO0lBM0tDLG1CQUFtQixDQUFDLElBQVU7UUFDNUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUNqQyxJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBVSxFQUFFLFNBQTJCO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsQ0FBQyxDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxrQkFBa0Is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SSxDQUMzQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQzdCLEVBQ0Q7NENBQ0EsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7eUNBQ3ZEO3FDQUNGO2lDQUNGO2dDQUNELE1BQU07NEJBQ1I7Z0NBQ0UsTUFBTTt5QkFDVDtxQkFDRjtpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sUUFBUSxDQUFDLFNBQW9CO1FBQ25DLE9BQU87WUFDTCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7WUFDcEIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO1lBQzlCLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztZQUMxQixTQUFTLEVBQUU7Z0JBQ1QsS0FBSyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUk7Z0JBQ3JDLFFBQVEsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVE7YUFDdkM7WUFDRCxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7WUFDOUIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtTQUN6QixDQUFDO0lBQ0osQ0FBQzs7bUhBN0tVLHFCQUFxQjt1SEFBckIscUJBQXFCOzRGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi4vZm9ybS1mYWN0b3J5L2Zvcm0nO1xuaW1wb3J0IHsgVmFsdWVBZGFwdGVyIH0gZnJvbSAnLi92YWx1ZS5hZGFwdGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERpYWdub3Npc1ZhbHVlQWRhcHRlciBpbXBsZW1lbnRzIFZhbHVlQWRhcHRlciB7XG4gIGZvcm1EaWFnbm9zaXNOb2RlcyA9IFtdO1xuXG4gIGdlbmVyYXRlRm9ybVBheWxvYWQoZm9ybTogRm9ybSkge1xuICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzID0gW107XG4gICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybS5yb290Tm9kZSk7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURpYWdub3Nlc1BheWxvYWQoXG4gICAgICB0aGlzLmZvcm1EaWFnbm9zaXNOb2RlcyxcbiAgICAgIGZvcm0uZXhpc3RpbmdEaWFnbm9zZXNcbiAgICApO1xuICB9XG5cbiAgcG9wdWxhdGVGb3JtKGZvcm06IEZvcm0sIGRpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzPikge1xuICAgIGZvcm0uZXhpc3RpbmdEaWFnbm9zZXMgPSBkaWFnbm9zZXM/LmZpbHRlcigoZCkgPT4ge1xuICAgICAgcmV0dXJuICFkLnZvaWRlZDtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm1EaWFnbm9zaXNOb2RlcyA9IFtdO1xuICAgIHRoaXMuX2ZpbmREaWFnbm9zaXNRdWVzdGlvbk5vZGVzKGZvcm0ucm9vdE5vZGUpO1xuICAgIHRoaXMuX3NldERpYWdub3Nlc1ZhbHVlcyhcbiAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLFxuICAgICAgZm9ybS5leGlzdGluZ0RpYWdub3NlcyxcbiAgICAgIDFcbiAgICApO1xuICAgIHRoaXMuX3NldERpYWdub3Nlc1ZhbHVlcyhcbiAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLFxuICAgICAgZm9ybS5leGlzdGluZ0RpYWdub3NlcyxcbiAgICAgIDJcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRGlhZ25vc2VzUGF5bG9hZChkaWFnbm9zaXNOb2RlcywgZXhpc3RpbmdEaWFnbm9zZXMpIHtcbiAgICBjb25zdCBwYXlsb2FkOiBBcnJheTxEaWFnbm9zaXNQYXlsb2FkPiA9IFtdO1xuICAgIGxldCBkZWxldGVkRGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXNQYXlsb2FkPiA9IFtdO1xuXG4gICAgZGlhZ25vc2lzTm9kZXM/LmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIG5vZGUuY29udHJvbC52YWx1ZVxuICAgICAgICAuZmlsdGVyKCh2KSA9PiB2W25vZGUucXVlc3Rpb24ua2V5XSlcbiAgICAgICAgLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgLy8gQ3JlYXRlIFBheWxvYWRcbiAgICAgICAgICBjb25zdCBwYXlsb2FkRGlhZ25vc2lzID0gdGhpcy5fY3JlYXRlUGF5bG9hZERpYWdub3NpcyhcbiAgICAgICAgICAgIHZhbHVlW25vZGUucXVlc3Rpb24ua2V5XSxcbiAgICAgICAgICAgIG5vZGUucXVlc3Rpb24uZXh0cmFzXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvLyBWYWxpZGF0ZSBpZiBpcyBuZXcgdmFsdWVcbiAgICAgICAgICBwYXlsb2FkLnB1c2gocGF5bG9hZERpYWdub3Npcyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdXBkYXRlZE9sZERpYWdub3NlcyhwYXlsb2FkLCBleGlzdGluZ0RpYWdub3Nlcyk7XG4gICAgZGVsZXRlZERpYWdub3NlcyA9IHRoaXMuX2dldERlbGV0ZWREaWFnbm9zZXMocGF5bG9hZCwgZXhpc3RpbmdEaWFnbm9zZXMpO1xuICAgIHJldHVybiBwYXlsb2FkLmNvbmNhdChkZWxldGVkRGlhZ25vc2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZVBheWxvYWREaWFnbm9zaXMoY29kZWRVdWlkLCBxdWVzdGlvbkV4dHJhcyk6IERpYWdub3Npc1BheWxvYWQge1xuICAgIGNvbnN0IGRpYWdub3NpczogRGlhZ25vc2lzUGF5bG9hZCA9IHtcbiAgICAgIGRpYWdub3Npczoge1xuICAgICAgICBjb2RlZDogY29kZWRVdWlkXG4gICAgICB9LFxuICAgICAgY2VydGFpbnR5OiAnQ09ORklSTUVEJyxcbiAgICAgIHJhbms6IHF1ZXN0aW9uRXh0cmFzLnF1ZXN0aW9uT3B0aW9ucy5yYW5rLFxuICAgICAgdm9pZGVkOiBmYWxzZVxuICAgIH07XG5cbiAgICByZXR1cm4gZGlhZ25vc2lzO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RGVsZXRlZERpYWdub3NlcyhcbiAgICBwYXlsb2FkRGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXNQYXlsb2FkPixcbiAgICBleGlzdGluZ0RpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzPlxuICApOiBBcnJheTxEaWFnbm9zaXNQYXlsb2FkPiB7XG4gICAgcmV0dXJuIGV4aXN0aW5nRGlhZ25vc2VzXG4gICAgICA/LmZpbHRlcigoZSkgPT4ge1xuICAgICAgICByZXR1cm4gIXBheWxvYWREaWFnbm9zZXMuZmluZCgocCkgPT4ge1xuICAgICAgICAgIGxldCBpc1NhbWUgPVxuICAgICAgICAgICAgIWUudm9pZGVkICYmIHAuZGlhZ25vc2lzLmNvZGVkID09PSBlLmRpYWdub3Npcy5jb2RlZC51dWlkO1xuICAgICAgICAgIHJldHVybiBpc1NhbWU7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGQpID0+IHtcbiAgICAgICAgbGV0IGRpYWdub3Npc1BheWxvYWQgPSB0aGlzLl9jb252ZXJ0KGQpO1xuICAgICAgICBkaWFnbm9zaXNQYXlsb2FkLnZvaWRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBkaWFnbm9zaXNQYXlsb2FkO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVkT2xkRGlhZ25vc2VzKFxuICAgIHBheWxvYWREaWFnbm9zZXM6IEFycmF5PERpYWdub3Npc1BheWxvYWQ+LFxuICAgIGV4aXN0aW5nRGlhZ25vc2VzOiBBcnJheTxEaWFnbm9zaXM+XG4gICkge1xuICAgIHBheWxvYWREaWFnbm9zZXMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgZXhpc3RpbmdEaWFnbm9zZXM/LmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgbGV0IGlzU2FtZSA9ICFlLnZvaWRlZCAmJiBwLmRpYWdub3Npcy5jb2RlZCA9PT0gZS5kaWFnbm9zaXMuY29kZWQudXVpZDtcbiAgICAgICAgcC51dWlkID0gaXNTYW1lID8gZS51dWlkIDogbnVsbDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RGlhZ25vc2VzVmFsdWVzKFxuICAgIGZvcm1EaWFnbm9zaXNOb2RlcyxcbiAgICBleGlzdGluZ0RpYWdub3NlczogQXJyYXk8RGlhZ25vc2lzPixcbiAgICByYW5rOiBudW1iZXJcbiAgKSB7XG4gICAgZm9ybURpYWdub3Npc05vZGVzXG4gICAgICA/LmZpbHRlcigobm9kZSkgPT4gbm9kZS5xdWVzdGlvbi5leHRyYXMucXVlc3Rpb25PcHRpb25zLnJhbmsgPT0gcmFuaylcbiAgICAgIC5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIG5vZGVbJ2luaXRpYWxWYWx1ZSddID0gZXhpc3RpbmdEaWFnbm9zZXM7XG4gICAgICAgIGV4aXN0aW5nRGlhZ25vc2VzXG4gICAgICAgICAgLmZpbHRlcigoZCkgPT4gZC5yYW5rID09IHJhbmspXG4gICAgICAgICAgLmZvckVhY2goKGRpYWdub3NpcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIG5vZGUuY3JlYXRlQ2hpbGROb2RlKCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgdmFsdWVbbm9kZS5xdWVzdGlvbi5rZXldID0gZGlhZ25vc2lzLmRpYWdub3Npcy5jb2RlZC51dWlkO1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbm9kZS5jaGlsZHJlbltpbmRleF07XG4gICAgICAgICAgICBjaGlsZE5vZGUuY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICBjaGlsZE5vZGVbJ2luaXRpYWxWYWx1ZSddID0gdmFsdWU7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmREaWFnbm9zaXNRdWVzdGlvbk5vZGVzKGZvcm1Ob2RlKSB7XG4gICAgaWYgKGZvcm1Ob2RlLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoZm9ybU5vZGUuY2hpbGRyZW4gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybU5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoZm9ybU5vZGUuY2hpbGRyZW4uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgc3dpdGNoIChmb3JtTm9kZS5jaGlsZHJlbltrZXldLnF1ZXN0aW9uLnJlbmRlcmluZ1R5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAncGFnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybU5vZGUuY2hpbGRyZW5ba2V5XSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmREaWFnbm9zaXNRdWVzdGlvbk5vZGVzKGZvcm1Ob2RlLmNoaWxkcmVuW2tleV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdncm91cCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluZERpYWdub3Npc1F1ZXN0aW9uTm9kZXMoZm9ybU5vZGUuY2hpbGRyZW5ba2V5XSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3JlcGVhdGluZyc6XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Ob2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgaW4gZm9ybU5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBmb3JtTm9kZS5jaGlsZHJlbltub2RlXS5xdWVzdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBmb3JtTm9kZS5jaGlsZHJlbltub2RlXS5ub2RlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5leHRyYXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5leHRyYXMudHlwZSA9PT0gJ2RpYWdub3NpcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5mb3JtRGlhZ25vc2lzTm9kZXMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgICh4KSA9PiBpbmRleCA9PT0geC5ub2RlSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybURpYWdub3Npc05vZGVzLnB1c2goZm9ybU5vZGUuY2hpbGRyZW5bbm9kZV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NvbnZlcnQoZGlhZ25vc2lzOiBEaWFnbm9zaXMpOiBEaWFnbm9zaXNQYXlsb2FkIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXVpZDogZGlhZ25vc2lzLnV1aWQsXG4gICAgICBlbmNvdW50ZXI6IGRpYWdub3Npcy5lbmNvdW50ZXIsXG4gICAgICBwYXRpZW50OiBkaWFnbm9zaXMucGF0aWVudCxcbiAgICAgIGRpYWdub3Npczoge1xuICAgICAgICBjb2RlZDogZGlhZ25vc2lzLmRpYWdub3Npcy5jb2RlZC51dWlkLFxuICAgICAgICBub25Db2RlZDogZGlhZ25vc2lzLmRpYWdub3Npcy5ub25Db2RlZFxuICAgICAgfSxcbiAgICAgIGNlcnRhaW50eTogZGlhZ25vc2lzLmNlcnRhaW50eSxcbiAgICAgIHJhbms6IGRpYWdub3Npcy5yYW5rLFxuICAgICAgdm9pZGVkOiBkaWFnbm9zaXMudm9pZGVkXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpYWdub3NpcyB7XG4gIHV1aWQ/OiBzdHJpbmc7XG4gIGRpc3BsYXk/OiBzdHJpbmc7XG4gIGVuY291bnRlcj86IHN0cmluZztcbiAgcGF0aWVudD86IHN0cmluZztcbiAgZGlhZ25vc2lzOiB7XG4gICAgY29kZWQ/OiB7XG4gICAgICB1dWlkOiBzdHJpbmc7XG4gICAgICBkaXNwbGF5Pzogc3RyaW5nO1xuICAgIH07XG4gICAgbm9uQ29kZWQ/OiBzdHJpbmc7XG4gIH07XG4gIGNlcnRhaW50eTogJ0NPTkZJUk1FRCcgfCAnUFJPVklTSU9OQUwnO1xuICByYW5rOiBudW1iZXI7XG4gIHZvaWRlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ25vc2lzUGF5bG9hZCB7XG4gIHV1aWQ/OiBzdHJpbmc7XG4gIGVuY291bnRlcj86IHN0cmluZztcbiAgcGF0aWVudD86IHN0cmluZztcbiAgZGlhZ25vc2lzOiB7XG4gICAgY29kZWQ/OiBzdHJpbmc7XG4gICAgbm9uQ29kZWQ/OiBzdHJpbmc7XG4gIH07XG4gIGNlcnRhaW50eTogJ0NPTkZJUk1FRCcgfCAnUFJPVklTSU9OQUwnO1xuICByYW5rOiBudW1iZXI7XG4gIHZvaWRlZD86IGJvb2xlYW47XG59XG4iXX0=
|