@sumaris-net/ngx-components 2.7.3-rc9 → 2.7.3
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/esm2022/src/app/admin/admin-routing.module.mjs +4 -4
- package/esm2022/src/app/admin/admin.module.mjs +4 -4
- package/esm2022/src/app/admin/services/person.service.mjs +3 -3
- package/esm2022/src/app/admin/services/validator/person.validator.mjs +3 -3
- package/esm2022/src/app/admin/users/users.mjs +4 -4
- package/esm2022/src/app/admin/users/users.module.mjs +4 -4
- package/esm2022/src/app/core/about/about.modal.mjs +3 -3
- package/esm2022/src/app/core/about/about.module.mjs +4 -4
- package/esm2022/src/app/core/account/account.module.mjs +4 -4
- package/esm2022/src/app/core/account/account.page.mjs +3 -3
- package/esm2022/src/app/core/account/new-token.modal.mjs +3 -3
- package/esm2022/src/app/core/account/token.table.mjs +3 -3
- package/esm2022/src/app/core/auth/auth.form.mjs +3 -3
- package/esm2022/src/app/core/auth/auth.modal.mjs +3 -3
- package/esm2022/src/app/core/auth/auth.module.mjs +4 -4
- package/esm2022/src/app/core/core.module.mjs +4 -4
- package/esm2022/src/app/core/core.testing.module.mjs +4 -4
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +3 -3
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +4 -4
- package/esm2022/src/app/core/form/entity/editor.class.mjs +6 -6
- package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +3 -3
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +3 -3
- package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +3 -3
- package/esm2022/src/app/core/form/entity/entity.module.mjs +4 -4
- package/esm2022/src/app/core/form/form.class.mjs +3 -3
- package/esm2022/src/app/core/form/form.module.mjs +4 -4
- package/esm2022/src/app/core/form/list/list.form.mjs +3 -3
- package/esm2022/src/app/core/form/list/list.module.mjs +4 -4
- package/esm2022/src/app/core/form/properties/properties.form.mjs +3 -3
- package/esm2022/src/app/core/form/properties/properties.module.mjs +4 -4
- package/esm2022/src/app/core/form/properties/properties.table.mjs +6 -6
- package/esm2022/src/app/core/form/properties/property.validator.mjs +3 -3
- package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +3 -3
- package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +4 -4
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +3 -3
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +4 -4
- package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +3 -3
- package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +4 -4
- package/esm2022/src/app/core/graphql/graphql.module.mjs +4 -4
- package/esm2022/src/app/core/graphql/graphql.service.mjs +3 -3
- package/esm2022/src/app/core/home/home.mjs +5 -5
- package/esm2022/src/app/core/home/home.module.mjs +4 -4
- package/esm2022/src/app/core/icon/icon.component.mjs +3 -3
- package/esm2022/src/app/core/icon/icon.module.mjs +4 -4
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +3 -3
- package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +4 -4
- package/esm2022/src/app/core/menu/menu.component.mjs +5 -5
- package/esm2022/src/app/core/menu/menu.module.mjs +4 -4
- package/esm2022/src/app/core/menu/menu.service.mjs +3 -3
- package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +3 -3
- package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +7 -6
- package/esm2022/src/app/core/menu/testing/menu.testing.mjs +42 -7
- package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +4 -4
- package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +3 -3
- package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +4 -4
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +3 -3
- package/esm2022/src/app/core/peer/select-peer.module.mjs +4 -4
- package/esm2022/src/app/core/register/register-confirm.page.mjs +3 -3
- package/esm2022/src/app/core/register/register.form.mjs +3 -3
- package/esm2022/src/app/core/register/register.modal.mjs +3 -3
- package/esm2022/src/app/core/register/register.module.mjs +4 -4
- package/esm2022/src/app/core/services/account.service.mjs +3 -3
- package/esm2022/src/app/core/services/auth-guard.service.mjs +3 -3
- package/esm2022/src/app/core/services/base-entity-service.class.mjs +3 -3
- package/esm2022/src/app/core/services/base-graphql-service.class.mjs +3 -3
- package/esm2022/src/app/core/services/config/core.config.mjs +7 -1
- package/esm2022/src/app/core/services/config.service.mjs +3 -3
- package/esm2022/src/app/core/services/crypto.service.mjs +3 -3
- package/esm2022/src/app/core/services/local-settings.service.mjs +17 -4
- package/esm2022/src/app/core/services/model/settings.model.mjs +1 -1
- package/esm2022/src/app/core/services/network.service.mjs +3 -3
- package/esm2022/src/app/core/services/pipes/account.pipes.mjs +8 -8
- package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +4 -4
- package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +4 -4
- package/esm2022/src/app/core/services/pipes/pipes.module.mjs +4 -4
- package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +3 -3
- package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +8 -8
- package/esm2022/src/app/core/services/platform.service.mjs +3 -3
- package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +3 -3
- package/esm2022/src/app/core/services/testing/referential.validator.mjs +3 -3
- package/esm2022/src/app/core/services/validator/account.validator.mjs +3 -3
- package/esm2022/src/app/core/services/validator/base.validator.class.mjs +3 -3
- package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +12 -10
- package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +3 -3
- package/esm2022/src/app/core/services/validator/user-token.validator.mjs +3 -3
- package/esm2022/src/app/core/settings/settings.module.mjs +4 -4
- package/esm2022/src/app/core/settings/settings.page.mjs +13 -5
- package/esm2022/src/app/core/table/actions-column.component.mjs +3 -3
- package/esm2022/src/app/core/table/async-table.class.mjs +3 -3
- package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +3 -3
- package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +3 -3
- package/esm2022/src/app/core/table/memory-table.class.mjs +3 -3
- package/esm2022/src/app/core/table/table-select-columns.component.mjs +3 -3
- package/esm2022/src/app/core/table/table.class.mjs +3 -3
- package/esm2022/src/app/core/table/table.module.mjs +4 -4
- package/esm2022/src/app/core/table/testing/table-validator.service.mjs +7 -4
- package/esm2022/src/app/core/table/testing/table.testing.mjs +42 -23
- package/esm2022/src/app/core/table/testing/table.testing.module.mjs +4 -4
- package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +3 -3
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +4 -4
- package/esm2022/src/app/shared/audio/audio.mjs +3 -3
- package/esm2022/src/app/shared/audio/audio.testing.mjs +3 -3
- package/esm2022/src/app/shared/audio/audio.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/capacitor/keyboard.mjs +3 -3
- package/esm2022/src/app/shared/debug/debug.component.mjs +3 -3
- package/esm2022/src/app/shared/debug/debug.module.mjs +4 -4
- package/esm2022/src/app/shared/directives/autofocus.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/autotitle.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/directives.module.mjs +4 -4
- package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/ng-var.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +3 -3
- package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
- package/esm2022/src/app/shared/file/file.service.mjs +3 -3
- package/esm2022/src/app/shared/form/field.component.mjs +12 -9
- package/esm2022/src/app/shared/form/loading-spinner.mjs +3 -3
- package/esm2022/src/app/shared/gesture/gesture-config.mjs +3 -3
- package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +3 -3
- package/esm2022/src/app/shared/help/help.modal.mjs +3 -3
- package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +3 -3
- package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +3 -3
- package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +4 -4
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +3 -3
- package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +4 -4
- package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +3 -3
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +3 -3
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/image/image.module.mjs +4 -4
- package/esm2022/src/app/shared/image/image.service.mjs +3 -3
- package/esm2022/src/app/shared/logging/logging-service.class.mjs +3 -3
- package/esm2022/src/app/shared/logging/logging-service.module.mjs +4 -4
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +11 -8
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +4 -4
- package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +25 -21
- package/esm2022/src/app/shared/material/badge/badge.directive.mjs +3 -3
- package/esm2022/src/app/shared/material/badge/badge.module.mjs +4 -4
- package/esm2022/src/app/shared/material/badge/badge.test.mjs +3 -3
- package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +4 -4
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +5 -5
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +8 -5
- package/esm2022/src/app/shared/material/chips/chips.module.mjs +4 -4
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +6 -6
- package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +6 -5
- package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +4 -4
- package/esm2022/src/app/shared/material/datetime/material.date.mjs +14 -6
- package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +5 -5
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +72 -43
- package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +18 -17
- package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +14 -13
- package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +11 -12
- package/esm2022/src/app/shared/material/duration/duration.module.mjs +4 -4
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +11 -12
- package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +10 -11
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +18 -13
- package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +4 -4
- package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +9 -5
- package/esm2022/src/app/shared/material/material.config.mjs +2 -1
- package/esm2022/src/app/shared/material/material.module.mjs +4 -4
- package/esm2022/src/app/shared/material/material.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +3 -3
- package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +3 -3
- package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +12 -12
- package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +4 -4
- package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +3 -3
- package/esm2022/src/app/shared/material/testing/common.test.mjs +18 -14
- package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +7 -6
- package/esm2022/src/app/shared/material/text/text-form.component.mjs +10 -6
- package/esm2022/src/app/shared/material/text/text-form.module.mjs +4 -4
- package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +3 -3
- package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +4 -4
- package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +3 -3
- package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +24 -24
- package/esm2022/src/app/shared/pipes/colors.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +6 -6
- package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/duration.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/form.pipes.mjs +18 -18
- package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +9 -9
- package/esm2022/src/app/shared/pipes/maps.pipe.mjs +12 -12
- package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +40 -19
- package/esm2022/src/app/shared/pipes/math.pipes.mjs +12 -12
- package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +3 -3
- package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +4 -4
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +4 -4
- package/esm2022/src/app/shared/pipes/property.pipes.mjs +7 -7
- package/esm2022/src/app/shared/pipes/string.pipes.mjs +34 -32
- package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +8 -8
- package/esm2022/src/app/shared/pipes/types.pipes.mjs +12 -12
- package/esm2022/src/app/shared/rx-state.module.mjs +4 -4
- package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +3 -3
- package/esm2022/src/app/shared/services/progress-bar.service.mjs +3 -3
- package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +3 -3
- package/esm2022/src/app/shared/services/startable-service.class.mjs +3 -3
- package/esm2022/src/app/shared/services/translate-context.service.mjs +3 -3
- package/esm2022/src/app/shared/shared-routing.module.mjs +7 -7
- package/esm2022/src/app/shared/shared.module.mjs +4 -4
- package/esm2022/src/app/shared/shared.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +3 -3
- package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage.service.mjs +3 -3
- package/esm2022/src/app/shared/testing/observable.test.mjs +3 -3
- package/esm2022/src/app/shared/testing/tests.page.mjs +3 -3
- package/esm2022/src/app/shared/toast/toast.testing.mjs +3 -3
- package/esm2022/src/app/shared/toast/toast.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +3 -3
- package/esm2022/src/app/shared/toolbar/toolbar.mjs +3 -3
- package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +4 -4
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +3 -3
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +4 -4
- package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +3 -3
- package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +3 -3
- package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +3 -3
- package/esm2022/src/app/social/job/job.module.mjs +4 -4
- package/esm2022/src/app/social/job/progression/job-progression.component.mjs +3 -3
- package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +8 -4
- package/esm2022/src/app/social/job/progression/job-progression.list.mjs +3 -3
- package/esm2022/src/app/social/job/progression/job-progression.service.mjs +11 -7
- package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +3 -3
- package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +3 -3
- package/esm2022/src/app/social/job/testing/job.testing.module.mjs +4 -4
- package/esm2022/src/app/social/message/message.form.mjs +3 -3
- package/esm2022/src/app/social/message/message.modal.mjs +3 -3
- package/esm2022/src/app/social/message/message.module.mjs +4 -4
- package/esm2022/src/app/social/message/message.service.mjs +3 -3
- package/esm2022/src/app/social/social.module.mjs +4 -4
- package/esm2022/src/app/social/social.testing.module.mjs +4 -4
- package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +14 -12
- package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +3 -3
- package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +3 -3
- package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +4 -4
- package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +3 -3
- package/esm2022/src/app/social/user-event/user-event.module.mjs +4 -4
- package/esm2022/src/app/social/user-event/user-event.service.mjs +8 -6
- package/esm2022/src/environments/environment.class.mjs +4 -2
- package/esm2022/src/environments/environment.loader.mjs +3 -3
- package/esm2022/src/environments/environment.mjs +3 -1
- package/fesm2022/sumaris-net.ngx-components.mjs +1367 -1174
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +11 -11
- package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
- package/src/app/core/menu/testing/menu.testing.d.ts +10 -2
- package/src/app/core/services/config/core.config.d.ts +1 -0
- package/src/app/core/services/local-settings.service.d.ts +2 -0
- package/src/app/core/services/model/settings.model.d.ts +1 -0
- package/src/app/core/settings/settings.page.d.ts +2 -0
- package/src/app/shared/form/field.component.d.ts +5 -3
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -0
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +3 -2
- package/src/app/shared/material/datetime/material.date.d.ts +3 -2
- package/src/app/shared/material/datetime/material.dateshort.d.ts +1 -1
- package/src/app/shared/material/datetime/material.datetime.d.ts +25 -22
- package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +2 -2
- package/src/app/shared/material/duration/material.duration.d.ts +1 -1
- package/src/app/shared/material/latlong/material.latlong.d.ts +5 -3
- package/src/app/shared/material/latlong/testing/latlong.test.d.ts +4 -0
- package/src/app/shared/material/material.config.d.ts +2 -1
- package/src/app/shared/material/text/text-form.component.d.ts +3 -1
- package/src/app/shared/pipes/string.pipes.d.ts +2 -1
- package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -4
- package/src/assets/i18n/en-US.json +1 -0
- package/src/assets/i18n/en.json +1 -0
- package/src/assets/i18n/fr.json +1 -0
- package/src/assets/manifest.json +1 -1
- package/src/environments/environment.class.d.ts +2 -1
- package/src/theme/_ionic.globals.scss +4 -1
- package/src/theme/_material.globals.scss +1 -36
- package/src/theme/_material.scss +30 -8
- package/src/theme/_mixins.scss +20 -5
- package/src/theme/_ngx-components.forms.scss +203 -0
- package/src/theme/_ngx-components.globals.scss +10 -7
- package/src/theme/_ngx-components.scss +6 -198
- package/src/theme/_ngx-components.table.scss +137 -143
- package/src/theme/_ngx-components.tabs.scss +16 -1
- package/src/theme/_theme.scss +1 -0
- package/src/theme/_theme.variables.scss +170 -0
|
@@ -216,7 +216,8 @@ export class MatDate {
|
|
|
216
216
|
}
|
|
217
217
|
});
|
|
218
218
|
}
|
|
219
|
-
clear() {
|
|
219
|
+
clear(event) {
|
|
220
|
+
event?.preventDefault();
|
|
220
221
|
this.textControl.patchValue(null, { emitEvent: false });
|
|
221
222
|
this.formControl.setValue(null, { emitEvent: false });
|
|
222
223
|
this._onChangeCallback(null);
|
|
@@ -261,6 +262,13 @@ export class MatDate {
|
|
|
261
262
|
// Open the picker
|
|
262
263
|
this.openDatePicker();
|
|
263
264
|
}
|
|
265
|
+
_onBlur() {
|
|
266
|
+
if (this.textControl.touched) {
|
|
267
|
+
// Auto fill data in case of partial input
|
|
268
|
+
this.writeValue(this.formControl.value);
|
|
269
|
+
}
|
|
270
|
+
this._checkIfTouched();
|
|
271
|
+
}
|
|
264
272
|
_checkIfTouched(opts) {
|
|
265
273
|
if (this.textControl.touched) {
|
|
266
274
|
this._onTouchedCallback();
|
|
@@ -377,12 +385,12 @@ export class MatDate {
|
|
|
377
385
|
this.markForCheck();
|
|
378
386
|
}
|
|
379
387
|
}
|
|
380
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
381
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: MatDate, selector: "mat-date-field", inputs: { mobile: "mobile", formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", appearance: "appearance", required: "required", compact: "compact", autofocus: "autofocus", startDate: "startDate", clearable: "clearable", timezone: "timezone", datePickerFilter: "datePickerFilter", readonly: "readonly", tabindex: "tabindex" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "_matInput", first: true, predicate: ["matInput"], descendants: true }], ngImport: i0, template: "<!-- readonly -->\n<mat-form-field\n *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\"\n>\n <mat-label *ngIf=\"floatLabel !== 'never' && !!placeholder\">{{ placeholder }}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ formControl.value | dateFormat: { pattern: datePattern } }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n (focus)=\"_openDatePickerIfMobile($event)\"\n (click)=\"_openDatePickerIfMobile($event)\"\n [appearance]=\"appearance\"\n >\n <mat-label *ngIf=\"floatLabel !== 'never' && !!placeholder\">{{ placeholder }}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Desktop -->\n <input\n matInput\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n *ngIf=\"!mobile\"\n [maskito]=\"maskitoOptions\"\n [formControl]=\"textControl\"\n (blur)=\"_checkIfTouched()\"\n (keyup.arrowDown)=\"openDatePicker()\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n <input\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n *ngIf=\"!mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n\n <!-- Mobile -->\n <input\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n class=\"mat-mdc-form-field-input-control mdc-text-field__input\"\n *ngIf=\"mobile\"\n [formControl]=\"textControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly\n />\n <input\n matInput\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n *ngIf=\"mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n\n <button matSuffix type=\"button\" mat-icon-button tabindex=\"-1\" (click)=\"openDatePicker()\" [disabled]=\"disabled\">\n <mat-icon>{{ mobile ? 'date_range' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n\n <mat-datepicker #datePicker [touchUi]=\"mobile\" [disabled]=\"disabled\" [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n <mat-datepicker-actions *ngIf=\"mobile\">\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </mat-datepicker-actions>\n </mat-datepicker>\n\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n <!-- errors -->\n <mat-error\n *ngIf=\"formControl.touched && formControl.errors | mapKeys | arrayFirst; let errorKey\"\n [ngSwitch]=\"errorKey\"\n >\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE</span>\n <span *ngSwitchCase=\"'dateIsAfter'\">\n {{ 'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}\n </span>\n <span *ngSwitchCase=\"'dateIsBefore'\">\n {{ 'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}\n </span>\n <span *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n <span *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n <span *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n <span *ngSwitchCase=\"'msg'\">\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\">\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative}mat-form-field input[readonly]{-webkit-user-select:none!important;user-select:none!important}mat-form-field .datetime-md{padding:0!important}mat-form-field button[hidden]{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i5.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i6.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i10.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i10.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i10.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "directive", type: i10.MatDatepickerCancel, selector: "[matDatepickerCancel], [matDateRangePickerCancel]" }, { kind: "directive", type: i10.MatDatepickerApply, selector: "[matDatepickerApply], [matDateRangePickerApply]" }, { kind: "directive", type: i11.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i12.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i13.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i14.ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: i15.MapKeysPipe, name: "mapKeys" }, { kind: "pipe", type: i16.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
388
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MatDate, deps: [{ token: i1.MomentDateAdapter }, { token: i2.TranslateService }, { token: i3.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i3.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
389
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: MatDate, selector: "mat-date-field", inputs: { mobile: "mobile", formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", appearance: "appearance", required: "required", compact: "compact", autofocus: "autofocus", startDate: "startDate", clearable: "clearable", timezone: "timezone", datePickerFilter: "datePickerFilter", readonly: "readonly", tabindex: "tabindex" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "_matInput", first: true, predicate: ["matInput"], descendants: true }], ngImport: i0, template: "<!-- readonly -->\n@if (readonly) {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ formControl.value | dateFormat: { pattern: datePattern } }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n} @else {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n (focus)=\"_openDatePickerIfMobile($event)\"\n (click)=\"_openDatePickerIfMobile($event)\"\n [appearance]=\"appearance\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <!-- Desktop -->\n @if (!mobile) {\n <input\n matInput\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n [maskito]=\"maskitoOptions\"\n [formControl]=\"textControl\"\n (blur)=\"_onBlur()\"\n (keyup.arrowDown)=\"openDatePicker()\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n }\n @if (!mobile) {\n <input\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n <!-- Mobile -->\n @if (mobile) {\n <input\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n class=\"mat-mdc-form-field-input-control mdc-text-field__input\"\n [formControl]=\"textControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly\n />\n }\n @if (mobile) {\n <input\n matInput\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n <button matSuffix type=\"button\" mat-icon-button tabindex=\"-1\" (click)=\"openDatePicker()\" [disabled]=\"disabled\">\n <mat-icon>{{ mobile ? 'date_range' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n <mat-datepicker #datePicker [touchUi]=\"mobile\" [disabled]=\"disabled\" [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n @if (mobile) {\n <mat-datepicker-actions>\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </mat-datepicker-actions>\n }\n </mat-datepicker>\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clear($event)\"\n [hidden]=\"formControl.disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n <!-- errors -->\n @if (formControl.touched && formControl.errors | mapKeys | arrayFirst; as errorKey) {\n <mat-error\n >\n @switch (errorKey) {\n @case ('required') {\n <span translate>ERROR.FIELD_REQUIRED</span>\n }\n @case ('validDate') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE</span>\n }\n @case ('dateIsAfter') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}\n </span>\n }\n @case ('dateIsBefore') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}\n </span>\n }\n @case ('dateRange') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n }\n @case ('dateMaxDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n }\n @case ('dateMinDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n }\n @case ('msg') {\n <span>\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n }\n }\n </mat-error>\n }\n <ng-content select=\"mat-error\"></ng-content>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n <!-- mat hint -->\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\">\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n}\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n (focus)=\"_openDatePickerIfMobile($event)\"\n (click)=\"_openDatePickerIfMobile($event)\"\n [appearance]=\"appearance\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Desktop -->\n @if (!mobile) {\n <input\n matInput\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n [maskito]=\"maskitoOptions\"\n [formControl]=\"textControl\"\n (blur)=\"_onBlur()\"\n (keyup.arrowDown)=\"openDatePicker()\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n }\n @if (!mobile) {\n <input\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n\n <!-- Mobile -->\n @if (mobile) {\n <input\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n class=\"mat-mdc-form-field-input-control mdc-text-field__input\"\n [formControl]=\"textControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly\n />\n }\n @if (mobile) {\n <input\n matInput\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n\n <button matSuffix type=\"button\" mat-icon-button tabindex=\"-1\" (click)=\"openDatePicker()\" [disabled]=\"disabled\">\n <mat-icon>{{ mobile ? 'date_range' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n\n <mat-datepicker #datePicker [touchUi]=\"mobile\" [disabled]=\"disabled\" [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n @if (mobile) {\n <mat-datepicker-actions>\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </mat-datepicker-actions>\n }\n </mat-datepicker>\n\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clear($event)\"\n [hidden]=\"formControl.disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <!-- errors -->\n @if (formControl.touched && formControl.errors | mapKeys | arrayFirst; as errorKey) {\n <mat-error\n >\n @switch (errorKey) {\n @case ('required') {\n <span translate>ERROR.FIELD_REQUIRED</span>\n }\n @case ('validDate') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE</span>\n }\n @case ('dateIsAfter') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}\n </span>\n }\n @case ('dateIsBefore') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}\n </span>\n }\n @case ('dateRange') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n }\n @case ('dateMaxDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n }\n @case ('dateMinDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n }\n @case ('msg') {\n <span>\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n }\n }\n </mat-error>\n }\n <ng-content select=\"mat-error\"></ng-content>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\">\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative}mat-form-field input[readonly]{-webkit-user-select:none!important;user-select:none!important}mat-form-field .datetime-md{padding:0!important}mat-form-field button[hidden]{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i6.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i10.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i10.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i10.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "directive", type: i10.MatDatepickerCancel, selector: "[matDatepickerCancel], [matDateRangePickerCancel]" }, { kind: "directive", type: i10.MatDatepickerApply, selector: "[matDatepickerApply], [matDateRangePickerApply]" }, { kind: "directive", type: i11.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i12.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i13.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i14.ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: i15.MapKeysPipe, name: "mapKeys" }, { kind: "pipe", type: i16.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
382
390
|
}
|
|
383
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
391
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MatDate, decorators: [{
|
|
384
392
|
type: Component,
|
|
385
|
-
args: [{ selector: 'mat-date-field', providers: [DEFAULT_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- readonly -->\n<mat-form-field\n *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\"\n>\n <mat-label *ngIf=\"floatLabel !== 'never' && !!placeholder\">{{ placeholder }}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ formControl.value | dateFormat: { pattern: datePattern } }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n (focus)=\"_openDatePickerIfMobile($event)\"\n (click)=\"_openDatePickerIfMobile($event)\"\n [appearance]=\"appearance\"\n >\n <mat-label *ngIf=\"floatLabel !== 'never' && !!placeholder\">{{ placeholder }}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Desktop -->\n <input\n matInput\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n *ngIf=\"!mobile\"\n [maskito]=\"maskitoOptions\"\n [formControl]=\"textControl\"\n (blur)=\"_checkIfTouched()\"\n (keyup.arrowDown)=\"openDatePicker()\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n <input\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n *ngIf=\"!mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n\n <!-- Mobile -->\n <input\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n class=\"mat-mdc-form-field-input-control mdc-text-field__input\"\n *ngIf=\"mobile\"\n [formControl]=\"textControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly\n />\n <input\n matInput\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n *ngIf=\"mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n\n <button matSuffix type=\"button\" mat-icon-button tabindex=\"-1\" (click)=\"openDatePicker()\" [disabled]=\"disabled\">\n <mat-icon>{{ mobile ? 'date_range' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n\n <mat-datepicker #datePicker [touchUi]=\"mobile\" [disabled]=\"disabled\" [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n <mat-datepicker-actions *ngIf=\"mobile\">\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </mat-datepicker-actions>\n </mat-datepicker>\n\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n\n <!-- errors -->\n <mat-error\n *ngIf=\"formControl.touched && formControl.errors | mapKeys | arrayFirst; let errorKey\"\n [ngSwitch]=\"errorKey\"\n >\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE</span>\n <span *ngSwitchCase=\"'dateIsAfter'\">\n {{ 'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}\n </span>\n <span *ngSwitchCase=\"'dateIsBefore'\">\n {{ 'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}\n </span>\n <span *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n <span *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n <span *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n <span *ngSwitchCase=\"'msg'\">\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n </mat-error>\n <ng-content select=\"mat-error\"></ng-content>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\">\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative}mat-form-field input[readonly]{-webkit-user-select:none!important;user-select:none!important}mat-form-field .datetime-md{padding:0!important}mat-form-field button[hidden]{display:none}\n"] }]
|
|
393
|
+
args: [{ selector: 'mat-date-field', providers: [DEFAULT_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- readonly -->\n@if (readonly) {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ formControl.value | dateFormat: { pattern: datePattern } }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n} @else {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n (focus)=\"_openDatePickerIfMobile($event)\"\n (click)=\"_openDatePickerIfMobile($event)\"\n [appearance]=\"appearance\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <!-- Desktop -->\n @if (!mobile) {\n <input\n matInput\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n [maskito]=\"maskitoOptions\"\n [formControl]=\"textControl\"\n (blur)=\"_onBlur()\"\n (keyup.arrowDown)=\"openDatePicker()\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n }\n @if (!mobile) {\n <input\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n <!-- Mobile -->\n @if (mobile) {\n <input\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n class=\"mat-mdc-form-field-input-control mdc-text-field__input\"\n [formControl]=\"textControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly\n />\n }\n @if (mobile) {\n <input\n matInput\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n <button matSuffix type=\"button\" mat-icon-button tabindex=\"-1\" (click)=\"openDatePicker()\" [disabled]=\"disabled\">\n <mat-icon>{{ mobile ? 'date_range' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n <mat-datepicker #datePicker [touchUi]=\"mobile\" [disabled]=\"disabled\" [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n @if (mobile) {\n <mat-datepicker-actions>\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </mat-datepicker-actions>\n }\n </mat-datepicker>\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clear($event)\"\n [hidden]=\"formControl.disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n <!-- errors -->\n @if (formControl.touched && formControl.errors | mapKeys | arrayFirst; as errorKey) {\n <mat-error\n >\n @switch (errorKey) {\n @case ('required') {\n <span translate>ERROR.FIELD_REQUIRED</span>\n }\n @case ('validDate') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE</span>\n }\n @case ('dateIsAfter') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}\n </span>\n }\n @case ('dateIsBefore') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}\n </span>\n }\n @case ('dateRange') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n }\n @case ('dateMaxDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n }\n @case ('dateMinDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n }\n @case ('msg') {\n <span>\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n }\n }\n </mat-error>\n }\n <ng-content select=\"mat-error\"></ng-content>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n <!-- mat hint -->\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\">\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n}\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n (focus)=\"_openDatePickerIfMobile($event)\"\n (click)=\"_openDatePickerIfMobile($event)\"\n [appearance]=\"appearance\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Desktop -->\n @if (!mobile) {\n <input\n matInput\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n [maskito]=\"maskitoOptions\"\n [formControl]=\"textControl\"\n (blur)=\"_onBlur()\"\n (keyup.arrowDown)=\"openDatePicker()\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n }\n @if (!mobile) {\n <input\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n\n <!-- Mobile -->\n @if (mobile) {\n <input\n #matInput\n autocomplete=\"off\"\n type=\"text\"\n class=\"mat-mdc-form-field-input-control mdc-text-field__input\"\n [formControl]=\"textControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly\n />\n }\n @if (mobile) {\n <input\n matInput\n type=\"text\"\n [formControl]=\"formControl\"\n hidden\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly\n />\n }\n\n <button matSuffix type=\"button\" mat-icon-button tabindex=\"-1\" (click)=\"openDatePicker()\" [disabled]=\"disabled\">\n <mat-icon>{{ mobile ? 'date_range' : 'keyboard_arrow_down' }}</mat-icon>\n </button>\n\n <mat-datepicker #datePicker [touchUi]=\"mobile\" [disabled]=\"disabled\" [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n @if (mobile) {\n <mat-datepicker-actions>\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </mat-datepicker-actions>\n }\n </mat-datepicker>\n\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clear($event)\"\n [hidden]=\"formControl.disabled || !formControl.value\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <!-- errors -->\n @if (formControl.touched && formControl.errors | mapKeys | arrayFirst; as errorKey) {\n <mat-error\n >\n @switch (errorKey) {\n @case ('required') {\n <span translate>ERROR.FIELD_REQUIRED</span>\n }\n @case ('validDate') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE</span>\n }\n @case ('dateIsAfter') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}\n </span>\n }\n @case ('dateIsBefore') {\n <span>\n {{ 'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}\n </span>\n }\n @case ('dateRange') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</span>\n }\n @case ('dateMaxDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</span>\n }\n @case ('dateMinDuration') {\n <span translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</span>\n }\n @case ('msg') {\n <span>\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n }\n }\n </mat-error>\n }\n <ng-content select=\"mat-error\"></ng-content>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\">\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative}mat-form-field input[readonly]{-webkit-user-select:none!important;user-select:none!important}mat-form-field .datetime-md{padding:0!important}mat-form-field button[hidden]{display:none}\n"] }]
|
|
386
394
|
}], ctorParameters: () => [{ type: i1.MomentDateAdapter }, { type: i2.TranslateService }, { type: i3.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i3.FormGroupDirective, decorators: [{
|
|
387
395
|
type: Optional
|
|
388
396
|
}] }], propDecorators: { mobile: [{
|
|
@@ -422,4 +430,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
422
430
|
type: ViewChild,
|
|
423
431
|
args: ['matInput', { static: false }]
|
|
424
432
|
}] } });
|
|
425
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2RhdGV0aW1lL21hdGVyaWFsLmRhdGUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsVUFBVSxFQUNWLEtBQUssRUFHTCxRQUFRLEVBRVIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBNEMsaUJBQWlCLEVBQTBDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpKLE9BQU8sRUFBRSxRQUFRLEVBQVUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBZ0IsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSTNDLE9BQU8sRUFBbUIsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7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bnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFByb3ZpZGVyLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgaXNNb21lbnQsIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTaGFyZWRWYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgaXNCbGFua1N0cmluZywgaXNOaWwsIGlzTm90TmlsLCBpc05vdE5pbEJvb2xlYW4sIGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHNraXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJbnB1dEVsZW1lbnQsIHNldFRhYkluZGV4IH0gZnJvbSAnLi4vLi4vaW5wdXRzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgRGF0ZUZpbHRlckZuLCBNYXREYXRlcGlja2VyLCBNYXREYXRlcGlja2VySW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgaXNGb2N1c2FibGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vZm9jdXNhYmxlJztcbmltcG9ydCB7IERhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmcsIHRvRGF0ZUlTT1N0cmluZyB9IGZyb20gJy4uLy4uL2RhdGVzJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vcGxhdGZvcm1zJztcbmltcG9ydCB7IE1vbWVudERhdGVBZGFwdGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuaW1wb3J0IHsgQXBwRmxvYXRMYWJlbFR5cGUgfSBmcm9tICcuLi8uLi9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IE1hc2tpdG9PcHRpb25zIH0gZnJvbSAnQG1hc2tpdG8vY29yZSc7XG5pbXBvcnQgeyBNYXNraXRvRGF0ZU1vZGUsIG1hc2tpdG9EYXRlT3B0aW9uc0dlbmVyYXRvciwgbWFza2l0b1dpdGhQbGFjZWhvbGRlciB9IGZyb20gJ0BtYXNraXRvL2tpdCc7XG5cbmNvbnN0IERFRkFVTFRfVkFMVUVfQUNDRVNTT1I6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0RGF0ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtZGF0ZS1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5kYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC5kYXRlLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbREVGQVVMVF9WQUxVRV9BQ0NFU1NPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXREYXRlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBJbnB1dEVsZW1lbnQge1xuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX3dyaXRpbmcgPSB0cnVlO1xuICBwcml2YXRlIF9kaXNhYmxpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdGFiaW5kZXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcmVhZG9ubHkgPSBmYWxzZTtcblxuICB0ZXh0Q29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICBkYXRlUGF0dGVybjogc3RyaW5nO1xuICBsb2NhbGU6IHN0cmluZztcbiAgbWFza2l0b09wdGlvbnM6IE1hc2tpdG9PcHRpb25zO1xuICBkYXRlUGxhY2Vob2xkZXI6IHN0cmluZztcblxuICBASW5wdXQoKSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdmaWxsJztcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbXBhY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b2ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0YXJ0RGF0ZTogTW9tZW50IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSB0aW1lem9uZTogc3RyaW5nID0gbnVsbDtcbiAgQElucHV0KCkgZGF0ZVBpY2tlckZpbHRlcjogRGF0ZUZpbHRlckZuPE1vbWVudD47XG5cbiAgQElucHV0KCkgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVhZG9ubHkgPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHJlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkb25seTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCB0YWJpbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuX3RhYmluZGV4ICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFiaW5kZXggPSB2YWx1ZTtcbiAgICAgIGlmICghdGhpcy5fd3JpdGluZykgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLmRpc2FibGVkO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicpIGRhdGVQaWNrZXIhOiBNYXREYXRlcGlja2VyPE1vbWVudD47XG4gIEBWaWV3Q2hpbGQoJ21hdElucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIF9tYXRJbnB1dDogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGVBZGFwdGVyOiBNb21lbnREYXRlQWRhcHRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHtcbiAgICB0aGlzLmxvY2FsZSA9ICh0cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdHJhbnNsYXRlLmRlZmF1bHRMYW5nKS5zdWJzdHJpbmcoMCwgMik7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sID1cbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgfHwgKHRoaXMuZm9ybUNvbnRyb2xOYW1lICYmIHRoaXMuZm9ybUdyb3VwRGlyICYmICh0aGlzLmZvcm1Hcm91cERpci5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgYXMgVW50eXBlZEZvcm1Db250cm9sKSk7XG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgJ2Zvcm1Db250cm9sJyBvciAnZm9ybUNvbnRyb2xOYW1lJyBpbiA8bWF0LWRhdGUtZmllbGQ+LlwiKTtcblxuICAgIHRoaXMubW9iaWxlID0gaXNOb3ROaWwodGhpcy5tb2JpbGUpID8gdGhpcy5tb2JpbGUgOiBpc01vYmlsZSh3aW5kb3cpO1xuICAgIHRoaXMucmVxdWlyZWQgPSBpc05vdE5pbEJvb2xlYW4odGhpcy5yZXF1aXJlZClcbiAgICAgID8gdGhpcy5yZXF1aXJlZFxuICAgICAgOiB0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciA9PT0gVmFsaWRhdG9ycy5yZXF1aXJlZCB8fCBpc0JsYW5rU3RyaW5nKHRoaXMucmVxdWlyZWQpO1xuXG4gICAgLy8gQWRkICd2YWxpZERhdGUnIHZhbGlkYXRvciAod2hlbiBleGlzdGluZyB2YWxpZGF0b3IgYXJlIG51bGwgb3IgcmVxdWlyZWQsIHRvIGJlIHN1cmUgdG8ga2VlcCBpdClcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yIHx8IHRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5yZXF1aXJlZCA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZV0gOiBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhcbiAgICAgICAgdGhpcy5yZXF1aXJlZFxuICAgICAgICAgID8gW3RoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yLCBWYWxpZGF0b3JzLnJlcXVpcmVkLCBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZV1cbiAgICAgICAgICA6IFt0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciwgU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGVdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgdGV4dCBjb250cm9sXG4gICAgdGhpcy50ZXh0Q29udHJvbCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgIG51bGwsXG4gICAgICAvLyBJbXBvcnRhbnQ6IHNob3VsZCBjb3B5IGVycm9ycyBmcm9tIHRoZSBtb2RlbCBmb3JtQ29udHJvbFxuICAgICAgKCkgPT4gdGhpcy5mb3JtQ29udHJvbC5lcnJvcnNcbiAgICApO1xuXG4gICAgLy8gR2V0IHBhdHRlcm5zIHRvIGRpc3BsYXkgZGF0ZVxuICAgIHRoaXMudXBkYXRlUGF0dGVybih0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uREFURV9QQVRURVJOJykpO1xuICAgIHRoaXMudXBkYXRlTWFza09wdGlvbnModGhpcy50cmFuc2xhdGUuaW5zdGFudCgnQ09NTU9OLkRBVEVfUExBQ0VIT0xERVInKSk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMudHJhbnNsYXRlXG4gICAgICAgIC5nZXQoWydDT01NT04uREFURV9QQVRURVJOJywgJ0NPTU1PTi5EQVRFX1BMQUNFSE9MREVSJ10pXG4gICAgICAgIC5waXBlKHNraXAoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHRyYW5zbGF0ZSkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlUGF0dGVybih0cmFuc2xhdGVbJ0NPTU1PTi5EQVRFX1BBVFRFUk4nXSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVNYXNrT3B0aW9ucyh0cmFuc2xhdGVbJ0NPTU1PTi5EQVRFX1BMQUNFSE9MREVSJ10pO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMudGV4dENvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMub25Gb3JtQ2hhbmdlKHZhbHVlKSkpO1xuXG4gICAgLy8gTGlzdGVuIHN0YXR1cyBjaGFuZ2VzICh3aGVuIGRvbmUgb3V0c2lkZSB0aGUgY29tcG9uZW50ICAtIGUuZy4gd2hlbiBzZXRFcnJvcnMoKSBpcyBjYWxsaW5nIG9uIHRoZSBmb3JtQ29udHJvbClcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoXykgPT4gIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMuX3dyaXRpbmcgJiYgIXRoaXMuX2Rpc2FibGluZykgLy8gU2tpcFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudGV4dENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudG91Y2hlZCAmJiAhdGhpcy50ZXh0Q29udHJvbC50b3VjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcFxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbbWF0LWRhdGVdIHdyaXRlVmFsdWUoKSB3aXRoOlwiLCB2YWx1ZSk7XG5cbiAgICAvLyBDb252ZXJ0IGludG8gZGF0ZVxuICAgIC8vIEltcG9ydGFudDogY2xvbmUsIGJlY2F1c2Ugc3RhcnRPZiB3aWxsIHVwZGF0ZSB0aGUgZXhpc3RpbmcgZGF0ZVxuICAgIGNvbnN0IGRhdGUgPSBpc01vbWVudCh2YWx1ZSkgPyB2YWx1ZS5jbG9uZSgpIDogZnJvbURhdGVJU09TdHJpbmcodmFsdWUpO1xuXG4gICAgaWYgKCFkYXRlIHx8ICFkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy50ZXh0Q29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sobnVsbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1vdmUgdG8gdGhlIGV4cGVjdGVkIFRaIChrZWVwaW5nIGxvY2FsIGhvdXIgLSBlLmcuIG1pZG5pZ2h0KVxuICAgICAgY29uc3QgZGF5ID0gKCh0aGlzLnRpbWV6b25lICYmIGRhdGUudHoodGhpcy50aW1lem9uZSkpIHx8IGRhdGUpXG4gICAgICAgIC8vIFJlc2V0IGhvdXJcbiAgICAgICAgLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgY29uc3QgZGF5U3RyID0gdGhpcy5kYXRlQWRhcHRlci5mb3JtYXQoZGF5LCB0aGlzLmRhdGVQYXR0ZXJuKTtcblxuICAgICAgaWYgKHRoaXMudGV4dENvbnRyb2wudmFsdWUgIT09IGRheVN0cikge1xuICAgICAgICAvLyBVcGRhdGUgdGV4dCBjb250cm9sXG4gICAgICAgIHRoaXMudGV4dENvbnRyb2wucGF0Y2hWYWx1ZShkYXlTdHIsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5fZGlzYWJsaW5nID0gdHJ1ZTtcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy50ZXh0Q29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXh0Q29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgICB0aGlzLl9kaXNhYmxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvcGVuRGF0ZVBpY2tlcigpIHtcbiAgICBpZiAoIXRoaXMuZGF0ZVBpY2tlcikgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLmRhdGVQaWNrZXIub3BlbmVkKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdbbWF0LWRhdGVdIE9wZW5pbmcgZGF0ZSBwaWNrZXIuLi4nKTtcblxuICAgICAgdGhpcy5kYXRlUGlja2VyLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBpZiAoIXRoaXMuX21hdElucHV0KSByZXR1cm47XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChpc0ZvY3VzYWJsZUVsZW1lbnQodGhpcy5fbWF0SW5wdXQubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgdGhpcy5fbWF0SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy50ZXh0Q29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKG51bGwpO1xuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIF9vbkRhdGVQaWNrZXJDaGFuZ2UoZXZlbnQ6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PE1vbWVudD4pOiB2b2lkIHtcbiAgICAvLyBNYWtlIHN1cmUgZXZlbnQgaXMgdmFsaWRcbiAgICBpZiAoIWV2ZW50IHx8IChldmVudC52YWx1ZSAhPT0gbnVsbCAmJiAhaXNNb21lbnQoZXZlbnQudmFsdWUpKSkge1xuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIE1hdERhdGVwaWNrZXIgZXZlbnQuIFNraXBwaW5nJywgZXZlbnQpO1xuICAgICAgcmV0dXJuOyAvLyBTa2lwXG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gZXZlbnQudmFsdWU7XG5cbiAgICAvLyBObyB2YWx1ZSwgYnV0IG1vYmlsZSBtb2RlOiB1c2UgdGhlIGN1cnJlbnQgZGF0ZVxuICAgIGlmICghdmFsdWUgJiYgdGhpcy5tb2JpbGUpIHtcbiAgICAgIHZhbHVlID0gRGF0ZVV0aWxzLnJlc2V0VGltZShEYXRlVXRpbHMubW9tZW50KCkubG9jYWxlKHRoaXMubG9jYWxlKSwgdGhpcy50aW1lem9uZSk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRvRGF0ZUlTT1N0cmluZyh2YWx1ZSksIHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSwgLy8gV2lsbCBjYWxsIHdyaXRlVmFsdWUoKVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZSA9IHZhbHVlXG4gICAgICA/LmNsb25lKClcbiAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUpIC8vIHNldCBhcyB0aW1lIGFzIGxvY2FsZSB0aW1lXG4gICAgICAuc3RhcnRPZignZGF5JykgLy8gcmVzZXQgaG91clxuICAgICAgLnV0Yyh0cnVlKTtcbiAgICBjb25zdCBkYXRlU3RyID0gKGRhdGUgJiYgdGhpcy5kYXRlQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5kYXRlUGF0dGVybikpIHx8IG51bGw7XG5cbiAgICBpZiAodGhpcy50ZXh0Q29udHJvbC52YWx1ZSAhPT0gZGF0ZVN0cikge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttYXQtZGF0ZV0gb25EYXRlUGlja2VyQ2hhbmdlKCkgbmV3IHZhbHVlOlwiLCBkYXRlU3RyKTtcblxuICAgICAgdGhpcy50ZXh0Q29udHJvbC5zZXRWYWx1ZShkYXRlU3RyLCB7XG4gICAgICAgIGVtaXRFdmVudDogdHJ1ZSwgLy8gV2lsbCBjYWxsIG9uRm9ybUNoYW5nZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9vcGVuRGF0ZVBpY2tlcklmTW9iaWxlKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICghdGhpcy5tb2JpbGUgfHwgZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQgfHwgdGhpcy5kYXRlUGlja2VyPy5vcGVuZWQgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbbWF0LWRhdGVdIFByZXBhcmluZyB0byBvcGVuIGRhdGUgcGlja2VyLi4uICcpO1xuXG4gICAgdGhpcy5fcHJldmVudEV2ZW50KGV2ZW50KTtcblxuICAgIC8vIE9wZW4gdGhlIHBpY2tlclxuICAgIHRoaXMub3BlbkRhdGVQaWNrZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfY2hlY2tJZlRvdWNoZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMudGV4dENvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcblxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfcHJldmVudEV2ZW50KGV2ZW50OiBFdmVudCkge1xuICAgIGlmICghZXZlbnQpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2RzIC0tICovXG5cbiAgcHJpdmF0ZSB1cGRhdGVQYXR0ZXJuKHBhdHRlcm46IHN0cmluZykge1xuICAgIHBhdHRlcm4gPSBwYXR0ZXJuICE9PSAnQ09NTU9OLkRBVEVfUEFUVEVSTicgPyBwYXR0ZXJuIDogJ0wnO1xuICAgIGlmICh0aGlzLmRhdGVQYXR0ZXJuICE9PSBwYXR0ZXJuKSB7XG4gICAgICB0aGlzLmRhdGVQYXR0ZXJuID0gcGF0dGVybjtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkZvcm1DaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXAgaWYgY2FsbCBieSBzZWxmXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG5cbiAgICBpZiAodmFsdWUgPT09IHRoaXMuZGF0ZVBsYWNlaG9sZGVyKSB7XG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIC8vIEZvcmNlICcwJyBmb3IgZW1wdHkgbW9udGggKG90aGVyd2lzZSBtb21lbnQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgbW9udGgpXG4gICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgIC5yZXBsYWNlKCcvLycsICcvMC8nKVxuICAgICAgICAvLyBGb3JjZSAnMCcgZm9yIGVtcHR5IHllYXIgKG90aGVyd2lzZSBtb21lbnQgd2lsbCB1c2UgdGhlIGN1cnJlbnQgeWVhcilcbiAgICAgICAgLnJlcGxhY2UoL1xcLyQvLCAnLzAnKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBkYXRlIChzdHJpY3QgPSBmYWxzZSlcbiAgICBsZXQgZGF0ZTogTW9tZW50ID0gKGlzTm90TmlsT3JCbGFuayh2YWx1ZSkgJiYgdGhpcy5kYXRlQWRhcHRlci5wYXJzZSh2YWx1ZSwgdGhpcy5kYXRlUGF0dGVybikpIHx8IG51bGw7XG5cbiAgICAvLyBNb3ZlIHRvIHRoZSBleHBlY3RlZCBUWiwgYW5kIGtlZXAgdGhlIGxvY2FsIGhvdXIgKD0gbWlkbmlnaHQpIHRvIGhhdmUgbWlkbmlnaHQgYXQgbG9jYWwgdGltZVxuICAgIGRhdGUgPSAoZGF0ZSAmJiAodGhpcy50aW1lem9uZSA/IGRhdGUudHoodGhpcy50aW1lem9uZSwgdHJ1ZSkgOiBkYXRlKSkgfHwgbnVsbDtcblxuICAgIGRhdGUgPVxuICAgICAgKGRhdGUgJiZcbiAgICAgICAgZGF0ZVxuICAgICAgICAgIC5zdGFydE9mKCdkYXknKSAvLyBSZXNldCBob3VyXG4gICAgICAgICAgLnV0YygpKSB8fCAvLyBDb252ZXJ0IHRvIFVUQyAoYXZvaWQgVFogb2Zmc2V0IGluIGZpbmFsIHN0cmluZylcbiAgICAgIG51bGw7XG5cbiAgICAvLyBDb252ZXJ0IHRvIG1vZGVsIHZhbHVlIChJU08gZGF0ZSBzdHJpbmcpXG4gICAgLy8gSU1QT1JUQU5UOiBJZiBkYXRlIGlzIGludmFsaWQsIHRoZW4ga2VlcCB0aGUgaW52YWxpZCBzdHJpbmcgdmFsdWVcbiAgICAvLyB0byBhbGxvdyBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZSgpIHRvIHJhaXNlIGFuIGVycm9yXG4gICAgY29uc3QgZm9ybUNvbnRyb2xWYWx1ZSA9IGRhdGUgJiYgZGF0ZS5pc1ZhbGlkKCkgPyB0b0RhdGVJU09TdHJpbmcoZGF0ZSkgOiB2YWx1ZSB8fCBudWxsO1xuXG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgIT09IGZvcm1Db250cm9sVmFsdWUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ1ttYXQtZGF0ZV0gRW1pdCBuZXcgdmFsdWU6ICcgKyBkYXRlU3RyKTtcblxuICAgICAgLy8gQXBwbHkgdG8gZm9ybSBjb250cm9sLiA9PiBXaWxsIGNhbGwgd3JpdGVWYWx1ZSgpXG4gICAgICAvLyBOT1QgTkVFRCwgYmVjYXVzZSBhIGZvcm1Db250cm9sIHNob3VsZCBOT1QgYmUgdXNlZCBieSBtdWx0aXBsZSBmaWVsZHNcbiAgICAgIC8vdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShkYXRlU3RyLCB7ZW1pdEV2ZW50OiBmYWxzZX0pXG5cbiAgICAgIC8vIENoYW5nZXMgY29tZXMgZnJvbSBpbnNpZGUgZnVuY3Rpb246IHVzZSB0aGUgY2FsbGJhY2tcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soZm9ybUNvbnRyb2xWYWx1ZSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIG5lZWQgdG8gdXBkYXRlIGNvbnRyb2xzXG4gICAgICB0aGlzLl9jaGVja0lmVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIHRoZSBkYXkgY29udHJvbCB0byB1cGRhdGUgaXRzIHZhbGlkaXR5IChzYW1lIGVycm9ycyBhcyBmb3JtQ29udHJvbCAtIHNlZSBuZ09uSW5pdCgpKVxuICAgIHRoaXMudGV4dENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuXG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUYWJJbmRleCgpIHtcbiAgICBpZiAoaXNOaWwodGhpcy5fdGFiaW5kZXgpIHx8IHRoaXMuX3RhYmluZGV4ID09PSAtMSkgcmV0dXJuOyAvLyBza2lwXG5cbiAgICAvLyBGb2N1cyB0byBpbnB1dFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0VGFiSW5kZXgodGhpcy5fbWF0SW5wdXQsIHRoaXMuX3RhYmluZGV4KTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtBc1RvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuIH0pIHtcbiAgICB0aGlzLnRleHRDb250cm9sLm1hcmtBc1RvdWNoZWQob3B0cyk7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNEaXJ0eShvcHRzPzogYW55KSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1hc2tPcHRpb25zKGRhdGVQbGFjZWhvbGRlcjogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuZGF0ZVBsYWNlaG9sZGVyICE9IGRhdGVQbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5kYXRlUGxhY2Vob2xkZXIgPSBkYXRlUGxhY2Vob2xkZXI7XG5cbiAgICAgIGNvbnN0IGRhdGVPcHRpb25zID0gbWFza2l0b0RhdGVPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgICAgbW9kZTogdGhpcy5kYXRlUGF0dGVybi50b0xvd2VyQ2FzZSgpIGFzIE1hc2tpdG9EYXRlTW9kZSxcbiAgICAgICAgc2VwYXJhdG9yOiAnLycsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qge1xuICAgICAgICBwbHVnaW5zLCAvLyBwbHVnaW5zIGtlZXBzIGNhcmV0IGluc2lkZSBhY3R1YWwgdmFsdWUgYW5kIHJlbW92ZSBwbGFjZWhvbGRlciBvbiBibHVyXG4gICAgICAgIC4uLnBsYWNlaG9sZGVyT3B0aW9uc1xuICAgICAgICAvLyBwYXNzICd0cnVlJyBhcyBzZWNvbmQgYXJndW1lbnQgdG8gYWRkIHBsdWdpbiB0byBoaWRlIHBsYWNlaG9sZGVyIHdoZW4gaW5wdXQgaXMgbm90IGZvY3VzZWRcbiAgICAgIH0gPSBtYXNraXRvV2l0aFBsYWNlaG9sZGVyKHRoaXMuZGF0ZVBsYWNlaG9sZGVyLCB0cnVlKTtcblxuICAgICAgdGhpcy5tYXNraXRvT3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZGF0ZU9wdGlvbnMsXG4gICAgICAgIHBsdWdpbnM6IHBsdWdpbnMuY29uY2F0KGRhdGVPcHRpb25zLnBsdWdpbnMgfHwgW10pLFxuICAgICAgICBwcmVwcm9jZXNzb3JzOiBbXG4gICAgICAgICAgLy8gQWx3YXlzIHB1dCBpdCBCRUZPUkUgYWxsIG90aGVyIHByZXByb2Nlc3NvcnNcbiAgICAgICAgICAuLi5wbGFjZWhvbGRlck9wdGlvbnMucHJlcHJvY2Vzc29ycyxcbiAgICAgICAgICAuLi5kYXRlT3B0aW9ucy5wcmVwcm9jZXNzb3JzLFxuICAgICAgICBdLFxuICAgICAgICBwb3N0cHJvY2Vzc29yczogW1xuICAgICAgICAgIC4uLmRhdGVPcHRpb25zLnBvc3Rwcm9jZXNzb3JzLFxuICAgICAgICAgIC8vIEFsd2F5cyBwdXQgaXQgQUZURVIgYWxsIG90aGVyIHBvc3Rwcm9jZXNzb3JzXG4gICAgICAgICAgLi4ucGxhY2Vob2xkZXJPcHRpb25zLnBvc3Rwcm9jZXNzb3JzLFxuICAgICAgICBdLFxuICAgICAgfSBhcyBSZXF1aXJlZDxNYXNraXRvT3B0aW9ucz47XG5cbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tIHJlYWRvbmx5IC0tPlxuPG1hdC1mb3JtLWZpZWxkXG4gICpuZ0lmPVwicmVhZG9ubHk7IGVsc2Ugd3JpdGFibGVcIlxuICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXCJcbj5cbiAgPG1hdC1sYWJlbCAqbmdJZj1cImZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlclwiPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG5cbiAgPGRpdiBtYXRQcmVmaXg+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxpbnB1dCBtYXRJbnB1dCBoaWRkZW4gdHlwZT1cInRleHRcIiByZWFkb25seSBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiAvPlxuICA8aW9uLXRleHQ+e3sgZm9ybUNvbnRyb2wudmFsdWUgfCBkYXRlRm9ybWF0OiB7IHBhdHRlcm46IGRhdGVQYXR0ZXJuIH0gfX08L2lvbi10ZXh0PlxuXG4gIDxkaXYgbWF0U3VmZml4PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbjwhLS0gd3JpdGFibGUgLS0+XG48bmctdGVtcGxhdGUgI3dyaXRhYmxlPlxuICA8bWF0LWZvcm0tZmllbGRcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgKGZvY3VzKT1cIl9vcGVuRGF0ZVBpY2tlcklmTW9iaWxlKCRldmVudClcIlxuICAgIChjbGljayk9XCJfb3BlbkRhdGVQaWNrZXJJZk1vYmlsZSgkZXZlbnQpXCJcbiAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgPlxuICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXJcIj57eyBwbGFjZWhvbGRlciB9fTwvbWF0LWxhYmVsPlxuXG4gICAgPGRpdiBtYXRQcmVmaXg+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRGVza3RvcCAtLT5cbiAgICA8aW5wdXRcbiAgICAgIG1hdElucHV0XG4gICAgICAjbWF0SW5wdXRcbiAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAqbmdJZj1cIiFtb2JpbGVcIlxuICAgICAgW21hc2tpdG9dPVwibWFza2l0b09wdGlvbnNcIlxuICAgICAgW2Zvcm1Db250cm9sXT1cInRleHRDb250cm9sXCJcbiAgICAgIChibHVyKT1cIl9jaGVja0lmVG91Y2hlZCgpXCJcbiAgICAgIChrZXl1cC5hcnJvd0Rvd24pPVwib3BlbkRhdGVQaWNrZXIoKVwiXG4gICAgICAoa2V5dXAuZXNjYXBlKT1cIl9wcmV2ZW50RXZlbnQoJGV2ZW50KVwiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgIFthcHBBdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAvPlxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgIGhpZGRlblxuICAgICAgKm5nSWY9XCIhbW9iaWxlXCJcbiAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZGF0ZVBpY2tlckZpbHRlclwiXG4gICAgICAoZGF0ZUNoYW5nZSk9XCJfb25EYXRlUGlja2VyQ2hhbmdlKCRldmVudClcIlxuICAgICAgcmVhZG9ubHlcbiAgICAvPlxuXG4gICAgPCEtLSBNb2JpbGUgLS0+XG4gICAgPGlucHV0XG4gICAgICAjbWF0SW5wdXRcbiAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sIG1kYy10ZXh0LWZpZWxkX19pbnB1dFwiXG4gICAgICAqbmdJZj1cIm1vYmlsZVwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dENvbnRyb2xcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICByZWFkb25seVxuICAgIC8+XG4gICAgPGlucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgIGhpZGRlblxuICAgICAgKm5nSWY9XCJtb2JpbGVcIlxuICAgICAgW21hdERhdGVwaWNrZXJdPVwiZGF0ZVBpY2tlclwiXG4gICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlUGlja2VyRmlsdGVyXCJcbiAgICAgIChkYXRlQ2hhbmdlKT1cIl9vbkRhdGVQaWNrZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICByZWFkb25seVxuICAgIC8+XG5cbiAgICA8YnV0dG9uIG1hdFN1ZmZpeCB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwib3BlbkRhdGVQaWNrZXIoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgPG1hdC1pY29uPnt7IG1vYmlsZSA/ICdkYXRlX3JhbmdlJyA6ICdrZXlib2FyZF9hcnJvd19kb3duJyB9fTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8bWF0LWRhdGVwaWNrZXIgI2RhdGVQaWNrZXIgW3RvdWNoVWldPVwibW9iaWxlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3N0YXJ0QXRdPVwic3RhcnREYXRlXCI+XG4gICAgICA8IS0tIERhdGUgcGlja2VyIGJ1dHRvbnMgLS0+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItYWN0aW9ucyAqbmdJZj1cIm1vYmlsZVwiPlxuICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiBtYXREYXRlcGlja2VyQ2FuY2VsPlxuICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fQ0FOQ0VMPC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIG1hdERhdGVwaWNrZXJBcHBseT5cbiAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX1ZBTElEQVRFPC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvbWF0LWRhdGVwaWNrZXItYWN0aW9ucz5cbiAgICA8L21hdC1kYXRlcGlja2VyPlxuXG4gICAgPGJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAqbmdJZj1cImNsZWFyYWJsZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXIoKVwiXG4gICAgICBbaGlkZGVuXT1cImZvcm1Db250cm9sLmRpc2FibGVkIHx8ICFmb3JtQ29udHJvbC52YWx1ZVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDwhLS0gZXJyb3JzIC0tPlxuICAgIDxtYXQtZXJyb3JcbiAgICAgICpuZ0lmPVwiZm9ybUNvbnRyb2wudG91Y2hlZCAmJiBmb3JtQ29udHJvbC5lcnJvcnMgfCBtYXBLZXlzIHwgYXJyYXlGaXJzdDsgbGV0IGVycm9yS2V5XCJcbiAgICAgIFtuZ1N3aXRjaF09XCJlcnJvcktleVwiXG4gICAgPlxuICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidyZXF1aXJlZCdcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3ZhbGlkRGF0ZSdcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEU8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGVJc0FmdGVyJ1wiPlxuICAgICAgICB7eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQUZURVInIHwgdHJhbnNsYXRlOiBmb3JtQ29udHJvbC5lcnJvcnMuZGF0ZUlzQWZ0ZXIgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZUlzQmVmb3JlJ1wiPlxuICAgICAgICB7eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQkVGT1JFJyB8IHRyYW5zbGF0ZTogZm9ybUNvbnRyb2wuZXJyb3JzLmRhdGVJc0JlZm9yZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlUmFuZ2UnXCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX1JBTkdFPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlTWF4RHVyYXRpb24nXCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX01BWF9EVVJBVElPTjwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZU1pbkR1cmF0aW9uJ1wiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9NSU5fRFVSQVRJT048L3NwYW4+XG4gICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ21zZydcIj5cbiAgICAgICAge3sgZm9ybUNvbnRyb2wuZXJyb3JzLm1zZz8ua2V5IHx8IGZvcm1Db250cm9sLmVycm9ycy5tc2cgfCB0cmFuc2xhdGU6IGZvcm1Db250cm9sLmVycm9ycy5tc2c/LnBhcmFtcyB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1lcnJvclwiPjwvbmctY29udGVudD5cblxuICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPCEtLSBtYXQgaGludCAtLT5cbiAgPGRpdiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdCBtYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJcIiBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJmb3JtQ29udHJvbC5pbnZhbGlkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXJcIj48L2Rpdj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1oaW50XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0UHJlZml4VGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRTdWZmaXhUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
433
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2RhdGV0aW1lL21hdGVyaWFsLmRhdGUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS9tYXRlcmlhbC5kYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsVUFBVSxFQUNWLEtBQUssRUFHTCxRQUFRLEVBRVIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBNEMsaUJBQWlCLEVBQTBDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpKLE9BQU8sRUFBRSxRQUFRLEVBQVUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBZ0IsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSTNDLE9BQU8sRUFBbUIsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7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UztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFTyxRQUFRO3NCQUFwQixLQUFLO2dCQVNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBbUJtQixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ21CLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBQcm92aWRlcixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGlzTW9tZW50LCBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgU2hhcmVkVmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmltcG9ydCB7IGlzQmxhbmtTdHJpbmcsIGlzTmlsLCBpc05vdE5pbCwgaXNOb3ROaWxCb29sZWFuLCBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgZmlsdGVyLCBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW5wdXRFbGVtZW50LCBzZXRUYWJJbmRleCB9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IERhdGVGaWx0ZXJGbiwgTWF0RGF0ZXBpY2tlciwgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IGlzRm9jdXNhYmxlRWxlbWVudCB9IGZyb20gJy4uLy4uL2ZvY3VzYWJsZSc7XG5pbXBvcnQgeyBEYXRlVXRpbHMsIGZyb21EYXRlSVNPU3RyaW5nLCB0b0RhdGVJU09TdHJpbmcgfSBmcm9tICcuLi8uLi9kYXRlcyc7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJy4uLy4uL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBNb21lbnREYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcbmltcG9ydCB7IEFwcEZsb2F0TGFiZWxUeXBlIH0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNYXNraXRvT3B0aW9ucyB9IGZyb20gJ0BtYXNraXRvL2NvcmUnO1xuaW1wb3J0IHsgTWFza2l0b0RhdGVNb2RlLCBtYXNraXRvRGF0ZU9wdGlvbnNHZW5lcmF0b3IsIG1hc2tpdG9XaXRoUGxhY2Vob2xkZXIgfSBmcm9tICdAbWFza2l0by9raXQnO1xuXG5jb25zdCBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdERhdGUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWRhdGUtZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuZGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuZGF0ZS5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0RFRkFVTFRfVkFMVUVfQUNDRVNTT1JdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0RGF0ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgSW5wdXRFbGVtZW50IHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF93cml0aW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZGlzYWJsaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX3RhYmluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgX3JlYWRvbmx5ID0gZmFsc2U7XG5cbiAgdGV4dENvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgZGF0ZVBhdHRlcm46IHN0cmluZztcbiAgbG9jYWxlOiBzdHJpbmc7XG4gIG1hc2tpdG9PcHRpb25zOiBNYXNraXRvT3B0aW9ucztcbiAgZGF0ZVBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgbW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogQXBwRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnZmlsbCc7XG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuICBASW5wdXQoKSBjb21wYWN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9mb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGFydERhdGU6IE1vbWVudCB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgdGltZXpvbmU6IHN0cmluZyA9IG51bGw7XG4gIEBJbnB1dCgpIGRhdGVQaWNrZXJGaWx0ZXI6IERhdGVGaWx0ZXJGbjxNb21lbnQ+O1xuXG4gIEBJbnB1dCgpIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl90YWJpbmRleCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRpbmcpIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGFiaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiaW5kZXg7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZDtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyITogTWF0RGF0ZXBpY2tlcjxNb21lbnQ+O1xuICBAVmlld0NoaWxkKCdtYXRJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBfbWF0SW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogTW9tZW50RGF0ZUFkYXB0ZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwRGlyOiBGb3JtR3JvdXBEaXJlY3RpdmVcbiAgKSB7XG4gICAgdGhpcy5sb2NhbGUgPSAodHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRyYW5zbGF0ZS5kZWZhdWx0TGFuZykuc3Vic3RyaW5nKDAsIDIpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9XG4gICAgICB0aGlzLmZvcm1Db250cm9sIHx8ICh0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmZvcm1Hcm91cERpciAmJiAodGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIFVudHlwZWRGb3JtQ29udHJvbCkpO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBtYW5kYXRvcnkgYXR0cmlidXRlICdmb3JtQ29udHJvbCcgb3IgJ2Zvcm1Db250cm9sTmFtZScgaW4gPG1hdC1kYXRlLWZpZWxkPi5cIik7XG5cbiAgICB0aGlzLm1vYmlsZSA9IGlzTm90TmlsKHRoaXMubW9iaWxlKSA/IHRoaXMubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgICB0aGlzLnJlcXVpcmVkID0gaXNOb3ROaWxCb29sZWFuKHRoaXMucmVxdWlyZWQpXG4gICAgICA/IHRoaXMucmVxdWlyZWRcbiAgICAgIDogdGhpcy5mb3JtQ29udHJvbC52YWxpZGF0b3IgPT09IFZhbGlkYXRvcnMucmVxdWlyZWQgfHwgaXNCbGFua1N0cmluZyh0aGlzLnJlcXVpcmVkKTtcblxuICAgIC8vIEFkZCAndmFsaWREYXRlJyB2YWxpZGF0b3IgKHdoZW4gZXhpc3RpbmcgdmFsaWRhdG9yIGFyZSBudWxsIG9yIHJlcXVpcmVkLCB0byBiZSBzdXJlIHRvIGtlZXAgaXQpXG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciB8fCB0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciA9PT0gVmFsaWRhdG9ycy5yZXF1aXJlZCkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMucmVxdWlyZWQgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGVdIDogU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoXG4gICAgICAgIHRoaXMucmVxdWlyZWRcbiAgICAgICAgICA/IFt0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciwgVmFsaWRhdG9ycy5yZXF1aXJlZCwgU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGVdXG4gICAgICAgICAgOiBbdGhpcy5mb3JtQ29udHJvbC52YWxpZGF0b3IsIFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHRleHQgY29udHJvbFxuICAgIHRoaXMudGV4dENvbnRyb2wgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXG4gICAgICBudWxsLFxuICAgICAgLy8gSW1wb3J0YW50OiBzaG91bGQgY29weSBlcnJvcnMgZnJvbSB0aGUgbW9kZWwgZm9ybUNvbnRyb2xcbiAgICAgICgpID0+IHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzXG4gICAgKTtcblxuICAgIC8vIEdldCBwYXR0ZXJucyB0byBkaXNwbGF5IGRhdGVcbiAgICB0aGlzLnVwZGF0ZVBhdHRlcm4odGhpcy50cmFuc2xhdGUuaW5zdGFudCgnQ09NTU9OLkRBVEVfUEFUVEVSTicpKTtcbiAgICB0aGlzLnVwZGF0ZU1hc2tPcHRpb25zKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0NPTU1PTi5EQVRFX1BMQUNFSE9MREVSJykpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLnRyYW5zbGF0ZVxuICAgICAgICAuZ2V0KFsnQ09NTU9OLkRBVEVfUEFUVEVSTicsICdDT01NT04uREFURV9QTEFDRUhPTERFUiddKVxuICAgICAgICAucGlwZShza2lwKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKCh0cmFuc2xhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBhdHRlcm4odHJhbnNsYXRlWydDT01NT04uREFURV9QQVRURVJOJ10pO1xuICAgICAgICAgIHRoaXMudXBkYXRlTWFza09wdGlvbnModHJhbnNsYXRlWydDT01NT04uREFURV9QTEFDRUhPTERFUiddKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnRleHRDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRm9ybUNoYW5nZSh2YWx1ZSkpKTtcblxuICAgIC8vIExpc3RlbiBzdGF0dXMgY2hhbmdlcyAod2hlbiBkb25lIG91dHNpZGUgdGhlIGNvbXBvbmVudCAgLSBlLmcuIHdoZW4gc2V0RXJyb3JzKCkgaXMgY2FsbGluZyBvbiB0aGUgZm9ybUNvbnRyb2wpXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLl93cml0aW5nICYmICF0aGlzLl9kaXNhYmxpbmcpIC8vIFNraXBcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnRleHRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQgJiYgIXRoaXMudGV4dENvbnRyb2wudG91Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXBcbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlXSB3cml0ZVZhbHVlKCkgd2l0aDpcIiwgdmFsdWUpO1xuXG4gICAgLy8gQ29udmVydCBpbnRvIGRhdGVcbiAgICAvLyBJbXBvcnRhbnQ6IGNsb25lLCBiZWNhdXNlIHN0YXJ0T2Ygd2lsbCB1cGRhdGUgdGhlIGV4aXN0aW5nIGRhdGVcbiAgICBjb25zdCBkYXRlID0gaXNNb21lbnQodmFsdWUpID8gdmFsdWUuY2xvbmUoKSA6IGZyb21EYXRlSVNPU3RyaW5nKHZhbHVlKTtcblxuICAgIGlmICghZGF0ZSB8fCAhZGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMudGV4dENvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKG51bGwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNb3ZlIHRvIHRoZSBleHBlY3RlZCBUWiAoa2VlcGluZyBsb2NhbCBob3VyIC0gZS5nLiBtaWRuaWdodClcbiAgICAgIGNvbnN0IGRheSA9ICgodGhpcy50aW1lem9uZSAmJiBkYXRlLnR6KHRoaXMudGltZXpvbmUpKSB8fCBkYXRlKVxuICAgICAgICAvLyBSZXNldCBob3VyXG4gICAgICAgIC5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IGRheVN0ciA9IHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0KGRheSwgdGhpcy5kYXRlUGF0dGVybik7XG5cbiAgICAgIGlmICh0aGlzLnRleHRDb250cm9sLnZhbHVlICE9PSBkYXlTdHIpIHtcbiAgICAgICAgLy8gVXBkYXRlIHRleHQgY29udHJvbFxuICAgICAgICB0aGlzLnRleHRDb250cm9sLnBhdGNoVmFsdWUoZGF5U3RyLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNhYmxpbmcpIHJldHVybjtcblxuICAgIHRoaXMuX2Rpc2FibGluZyA9IHRydWU7XG4gICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudGV4dENvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGV4dENvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gICAgdGhpcy5fZGlzYWJsaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb3BlbkRhdGVQaWNrZXIoKSB7XG4gICAgaWYgKCF0aGlzLmRhdGVQaWNrZXIpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5kYXRlUGlja2VyLm9wZW5lZCkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnW21hdC1kYXRlXSBPcGVuaW5nIGRhdGUgcGlja2VyLi4uJyk7XG5cbiAgICAgIHRoaXMuZGF0ZVBpY2tlci5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgaWYgKCF0aGlzLl9tYXRJbnB1dCkgcmV0dXJuO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoaXNGb2N1c2FibGVFbGVtZW50KHRoaXMuX21hdElucHV0Lm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuX21hdElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy50ZXh0Q29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKG51bGwpO1xuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIF9vbkRhdGVQaWNrZXJDaGFuZ2UoZXZlbnQ6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PE1vbWVudD4pOiB2b2lkIHtcbiAgICAvLyBNYWtlIHN1cmUgZXZlbnQgaXMgdmFsaWRcbiAgICBpZiAoIWV2ZW50IHx8IChldmVudC52YWx1ZSAhPT0gbnVsbCAmJiAhaXNNb21lbnQoZXZlbnQudmFsdWUpKSkge1xuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIE1hdERhdGVwaWNrZXIgZXZlbnQuIFNraXBwaW5nJywgZXZlbnQpO1xuICAgICAgcmV0dXJuOyAvLyBTa2lwXG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gZXZlbnQudmFsdWU7XG5cbiAgICAvLyBObyB2YWx1ZSwgYnV0IG1vYmlsZSBtb2RlOiB1c2UgdGhlIGN1cnJlbnQgZGF0ZVxuICAgIGlmICghdmFsdWUgJiYgdGhpcy5tb2JpbGUpIHtcbiAgICAgIHZhbHVlID0gRGF0ZVV0aWxzLnJlc2V0VGltZShEYXRlVXRpbHMubW9tZW50KCkubG9jYWxlKHRoaXMubG9jYWxlKSwgdGhpcy50aW1lem9uZSk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRvRGF0ZUlTT1N0cmluZyh2YWx1ZSksIHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSwgLy8gV2lsbCBjYWxsIHdyaXRlVmFsdWUoKVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZSA9IHZhbHVlXG4gICAgICA/LmNsb25lKClcbiAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUpIC8vIHNldCBhcyB0aW1lIGFzIGxvY2FsZSB0aW1lXG4gICAgICAuc3RhcnRPZignZGF5JykgLy8gcmVzZXQgaG91clxuICAgICAgLnV0Yyh0cnVlKTtcbiAgICBjb25zdCBkYXRlU3RyID0gKGRhdGUgJiYgdGhpcy5kYXRlQWRhcHRlci5mb3JtYXQoZGF0ZSwgdGhpcy5kYXRlUGF0dGVybikpIHx8IG51bGw7XG5cbiAgICBpZiAodGhpcy50ZXh0Q29udHJvbC52YWx1ZSAhPT0gZGF0ZVN0cikge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttYXQtZGF0ZV0gb25EYXRlUGlja2VyQ2hhbmdlKCkgbmV3IHZhbHVlOlwiLCBkYXRlU3RyKTtcblxuICAgICAgdGhpcy50ZXh0Q29udHJvbC5zZXRWYWx1ZShkYXRlU3RyLCB7XG4gICAgICAgIGVtaXRFdmVudDogdHJ1ZSwgLy8gV2lsbCBjYWxsIG9uRm9ybUNoYW5nZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9vcGVuRGF0ZVBpY2tlcklmTW9iaWxlKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICghdGhpcy5tb2JpbGUgfHwgZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQgfHwgdGhpcy5kYXRlUGlja2VyPy5vcGVuZWQgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbbWF0LWRhdGVdIFByZXBhcmluZyB0byBvcGVuIGRhdGUgcGlja2VyLi4uICcpO1xuXG4gICAgdGhpcy5fcHJldmVudEV2ZW50KGV2ZW50KTtcblxuICAgIC8vIE9wZW4gdGhlIHBpY2tlclxuICAgIHRoaXMub3BlbkRhdGVQaWNrZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfb25CbHVyKCkge1xuICAgIGlmICh0aGlzLnRleHRDb250cm9sLnRvdWNoZWQpIHtcbiAgICAgIC8vIEF1dG8gZmlsbCBkYXRhIGluIGNhc2Ugb2YgcGFydGlhbCBpbnB1dFxuICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX2NoZWNrSWZUb3VjaGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2NoZWNrSWZUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnRleHRDb250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG5cbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3ByZXZlbnRFdmVudChldmVudDogRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kcyAtLSAqL1xuXG4gIHByaXZhdGUgdXBkYXRlUGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICBwYXR0ZXJuID0gcGF0dGVybiAhPT0gJ0NPTU1PTi5EQVRFX1BBVFRFUk4nID8gcGF0dGVybiA6ICdMJztcbiAgICBpZiAodGhpcy5kYXRlUGF0dGVybiAhPT0gcGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybiA9IHBhdHRlcm47XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25Gb3JtQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuOyAvLyBTa2lwIGlmIGNhbGwgYnkgc2VsZlxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuXG4gICAgaWYgKHZhbHVlID09PSB0aGlzLmRhdGVQbGFjZWhvbGRlcikge1xuICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICAvLyBGb3JjZSAnMCcgZm9yIGVtcHR5IG1vbnRoIChvdGhlcndpc2UgbW9tZW50IHdpbGwgdXNlIHRoZSBjdXJyZW50IG1vbnRoKVxuICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAucmVwbGFjZSgnLy8nLCAnLzAvJylcbiAgICAgICAgLy8gRm9yY2UgJzAnIGZvciBlbXB0eSB5ZWFyIChvdGhlcndpc2UgbW9tZW50IHdpbGwgdXNlIHRoZSBjdXJyZW50IHllYXIpXG4gICAgICAgIC5yZXBsYWNlKC9cXC8kLywgJy8wJyk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgZGF0ZSAoc3RyaWN0ID0gZmFsc2UpXG4gICAgbGV0IGRhdGU6IE1vbWVudCA9IChpc05vdE5pbE9yQmxhbmsodmFsdWUpICYmIHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UodmFsdWUsIHRoaXMuZGF0ZVBhdHRlcm4pKSB8fCBudWxsO1xuXG4gICAgLy8gTW92ZSB0byB0aGUgZXhwZWN0ZWQgVFosIGFuZCBrZWVwIHRoZSBsb2NhbCBob3VyICg9IG1pZG5pZ2h0KSB0byBoYXZlIG1pZG5pZ2h0IGF0IGxvY2FsIHRpbWVcbiAgICBkYXRlID0gKGRhdGUgJiYgKHRoaXMudGltZXpvbmUgPyBkYXRlLnR6KHRoaXMudGltZXpvbmUsIHRydWUpIDogZGF0ZSkpIHx8IG51bGw7XG5cbiAgICBkYXRlID1cbiAgICAgIChkYXRlICYmXG4gICAgICAgIGRhdGVcbiAgICAgICAgICAuc3RhcnRPZignZGF5JykgLy8gUmVzZXQgaG91clxuICAgICAgICAgIC51dGMoKSkgfHwgLy8gQ29udmVydCB0byBVVEMgKGF2b2lkIFRaIG9mZnNldCBpbiBmaW5hbCBzdHJpbmcpXG4gICAgICBudWxsO1xuXG4gICAgLy8gQ29udmVydCB0byBtb2RlbCB2YWx1ZSAoSVNPIGRhdGUgc3RyaW5nKVxuICAgIC8vIElNUE9SVEFOVDogSWYgZGF0ZSBpcyBpbnZhbGlkLCB0aGVuIGtlZXAgdGhlIGludmFsaWQgc3RyaW5nIHZhbHVlXG4gICAgLy8gdG8gYWxsb3cgU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGUoKSB0byByYWlzZSBhbiBlcnJvclxuICAgIGNvbnN0IGZvcm1Db250cm9sVmFsdWUgPSBkYXRlICYmIGRhdGUuaXNWYWxpZCgpID8gdG9EYXRlSVNPU3RyaW5nKGRhdGUpIDogdmFsdWUgfHwgbnVsbDtcblxuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSBmb3JtQ29udHJvbFZhbHVlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdbbWF0LWRhdGVdIEVtaXQgbmV3IHZhbHVlOiAnICsgZGF0ZVN0cik7XG5cbiAgICAgIC8vIEFwcGx5IHRvIGZvcm0gY29udHJvbC4gPT4gV2lsbCBjYWxsIHdyaXRlVmFsdWUoKVxuICAgICAgLy8gTk9UIE5FRUQsIGJlY2F1c2UgYSBmb3JtQ29udHJvbCBzaG91bGQgTk9UIGJlIHVzZWQgYnkgbXVsdGlwbGUgZmllbGRzXG4gICAgICAvL3RoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZGF0ZVN0ciwge2VtaXRFdmVudDogZmFsc2V9KVxuXG4gICAgICAvLyBDaGFuZ2VzIGNvbWVzIGZyb20gaW5zaWRlIGZ1bmN0aW9uOiB1c2UgdGhlIGNhbGxiYWNrXG4gICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGZvcm1Db250cm9sVmFsdWUpO1xuXG4gICAgICAvLyBDaGVjayBpZiBuZWVkIHRvIHVwZGF0ZSBjb250cm9sc1xuICAgICAgdGhpcy5fY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB9XG5cbiAgICAvLyBGb3JjZSB0aGUgZGF5IGNvbnRyb2wgdG8gdXBkYXRlIGl0cyB2YWxpZGl0eSAoc2FtZSBlcnJvcnMgYXMgZm9ybUNvbnRyb2wgLSBzZWUgbmdPbkluaXQoKSlcbiAgICB0aGlzLnRleHRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblxuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFiSW5kZXgoKSB7XG4gICAgaWYgKGlzTmlsKHRoaXMuX3RhYmluZGV4KSB8fCB0aGlzLl90YWJpbmRleCA9PT0gLTEpIHJldHVybjsgLy8gc2tpcFxuXG4gICAgLy8gRm9jdXMgdG8gaW5wdXRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldFRhYkluZGV4KHRoaXMuX21hdElucHV0LCB0aGlzLl90YWJpbmRleCk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy50ZXh0Q29udHJvbC5tYXJrQXNUb3VjaGVkKG9wdHMpO1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0FzRGlydHkob3B0cz86IGFueSkge1xuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkob3B0cyk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXNrT3B0aW9ucyhkYXRlUGxhY2Vob2xkZXI6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmRhdGVQbGFjZWhvbGRlciAhPSBkYXRlUGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuZGF0ZVBsYWNlaG9sZGVyID0gZGF0ZVBsYWNlaG9sZGVyO1xuXG4gICAgICBjb25zdCBkYXRlT3B0aW9ucyA9IG1hc2tpdG9EYXRlT3B0aW9uc0dlbmVyYXRvcih7XG4gICAgICAgIG1vZGU6IHRoaXMuZGF0ZVBhdHRlcm4udG9Mb3dlckNhc2UoKSBhcyBNYXNraXRvRGF0ZU1vZGUsXG4gICAgICAgIHNlcGFyYXRvcjogJy8nLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGx1Z2lucywgLy8gcGx1Z2lucyBrZWVwcyBjYXJldCBpbnNpZGUgYWN0dWFsIHZhbHVlIGFuZCByZW1vdmUgcGxhY2Vob2xkZXIgb24gYmx1clxuICAgICAgICAuLi5wbGFjZWhvbGRlck9wdGlvbnNcbiAgICAgICAgLy8gcGFzcyAndHJ1ZScgYXMgc2Vjb25kIGFyZ3VtZW50IHRvIGFkZCBwbHVnaW4gdG8gaGlkZSBwbGFjZWhvbGRlciB3aGVuIGlucHV0IGlzIG5vdCBmb2N1c2VkXG4gICAgICB9ID0gbWFza2l0b1dpdGhQbGFjZWhvbGRlcih0aGlzLmRhdGVQbGFjZWhvbGRlciwgdHJ1ZSk7XG5cbiAgICAgIHRoaXMubWFza2l0b09wdGlvbnMgPSB7XG4gICAgICAgIC4uLmRhdGVPcHRpb25zLFxuICAgICAgICBwbHVnaW5zOiBwbHVnaW5zLmNvbmNhdChkYXRlT3B0aW9ucy5wbHVnaW5zIHx8IFtdKSxcbiAgICAgICAgcHJlcHJvY2Vzc29yczogW1xuICAgICAgICAgIC8vIEFsd2F5cyBwdXQgaXQgQkVGT1JFIGFsbCBvdGhlciBwcmVwcm9jZXNzb3JzXG4gICAgICAgICAgLi4ucGxhY2Vob2xkZXJPcHRpb25zLnByZXByb2Nlc3NvcnMsXG4gICAgICAgICAgLi4uZGF0ZU9wdGlvbnMucHJlcHJvY2Vzc29ycyxcbiAgICAgICAgXSxcbiAgICAgICAgcG9zdHByb2Nlc3NvcnM6IFtcbiAgICAgICAgICAuLi5kYXRlT3B0aW9ucy5wb3N0cHJvY2Vzc29ycyxcbiAgICAgICAgICAvLyBBbHdheXMgcHV0IGl0IEFGVEVSIGFsbCBvdGhlciBwb3N0cHJvY2Vzc29yc1xuICAgICAgICAgIC4uLnBsYWNlaG9sZGVyT3B0aW9ucy5wb3N0cHJvY2Vzc29ycyxcbiAgICAgICAgXSxcbiAgICAgIH0gYXMgUmVxdWlyZWQ8TWFza2l0b09wdGlvbnM+O1xuXG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxufVxuIiwiPCEtLSByZWFkb25seSAtLT5cbkBpZiAocmVhZG9ubHkpIHtcbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtZGlzYWJsZWRcIlxuICAgID5cbiAgICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgICAgPG1hdC1sYWJlbD57eyBwbGFjZWhvbGRlciB9fTwvbWF0LWxhYmVsPlxuICAgIH1cbiAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxpbnB1dCBtYXRJbnB1dCBoaWRkZW4gdHlwZT1cInRleHRcIiByZWFkb25seSBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiAvPlxuICAgIDxpb24tdGV4dD57eyBmb3JtQ29udHJvbC52YWx1ZSB8IGRhdGVGb3JtYXQ6IHsgcGF0dGVybjogZGF0ZVBhdHRlcm4gfSB9fTwvaW9uLXRleHQ+XG4gICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0U3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbn0gQGVsc2Uge1xuICA8bWF0LWZvcm0tZmllbGRcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgKGZvY3VzKT1cIl9vcGVuRGF0ZVBpY2tlcklmTW9iaWxlKCRldmVudClcIlxuICAgIChjbGljayk9XCJfb3BlbkRhdGVQaWNrZXJJZk1vYmlsZSgkZXZlbnQpXCJcbiAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICA+XG4gICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgIDxtYXQtbGFiZWw+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cbiAgICB9XG4gICAgPGRpdiBtYXRQcmVmaXg+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIERlc2t0b3AgLS0+XG4gICAgQGlmICghbW9iaWxlKSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgI21hdElucHV0XG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW21hc2tpdG9dPVwibWFza2l0b09wdGlvbnNcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dENvbnRyb2xcIlxuICAgICAgICAoYmx1cik9XCJfb25CbHVyKClcIlxuICAgICAgICAoa2V5dXAuYXJyb3dEb3duKT1cIm9wZW5EYXRlUGlja2VyKClcIlxuICAgICAgICAoa2V5dXAuZXNjYXBlKT1cIl9wcmV2ZW50RXZlbnQoJGV2ZW50KVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgIFthcHBBdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgLz5cbiAgICB9XG4gICAgQGlmICghbW9iaWxlKSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICBoaWRkZW5cbiAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZGF0ZVBpY2tlclwiXG4gICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImRhdGVQaWNrZXJGaWx0ZXJcIlxuICAgICAgICAoZGF0ZUNoYW5nZSk9XCJfb25EYXRlUGlja2VyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICByZWFkb25seVxuICAgICAgICAvPlxuICAgIH1cbiAgICA8IS0tIE1vYmlsZSAtLT5cbiAgICBAaWYgKG1vYmlsZSkge1xuICAgICAgPGlucHV0XG4gICAgICAgICNtYXRJbnB1dFxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2wgbWRjLXRleHQtZmllbGRfX2lucHV0XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInRleHRDb250cm9sXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgLz5cbiAgICB9XG4gICAgQGlmIChtb2JpbGUpIHtcbiAgICAgIDxpbnB1dFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgIGhpZGRlblxuICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJkYXRlUGlja2VyXCJcbiAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZGF0ZVBpY2tlckZpbHRlclwiXG4gICAgICAgIChkYXRlQ2hhbmdlKT1cIl9vbkRhdGVQaWNrZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIHJlYWRvbmx5XG4gICAgICAgIC8+XG4gICAgfVxuICAgIDxidXR0b24gbWF0U3VmZml4IHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJvcGVuRGF0ZVBpY2tlcigpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICA8bWF0LWljb24+e3sgbW9iaWxlID8gJ2RhdGVfcmFuZ2UnIDogJ2tleWJvYXJkX2Fycm93X2Rvd24nIH19PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LWRhdGVwaWNrZXIgI2RhdGVQaWNrZXIgW3RvdWNoVWldPVwibW9iaWxlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3N0YXJ0QXRdPVwic3RhcnREYXRlXCI+XG4gICAgICA8IS0tIERhdGUgcGlja2VyIGJ1dHRvbnMgLS0+XG4gICAgICBAaWYgKG1vYmlsZSkge1xuICAgICAgICA8bWF0LWRhdGVwaWNrZXItYWN0aW9ucz5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiBtYXREYXRlcGlja2VyQ2FuY2VsPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9DQU5DRUw8L2lvbi1sYWJlbD5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIG1hdERhdGVwaWNrZXJBcHBseT5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fVkFMSURBVEU8L2lvbi1sYWJlbD5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvbWF0LWRhdGVwaWNrZXItYWN0aW9ucz5cbiAgICAgIH1cbiAgICA8L21hdC1kYXRlcGlja2VyPlxuICAgIEBpZiAoY2xlYXJhYmxlKSB7XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiXG4gICAgICAgIFtoaWRkZW5dPVwiZm9ybUNvbnRyb2wuZGlzYWJsZWQgfHwgIWZvcm1Db250cm9sLnZhbHVlXCJcbiAgICAgICAgPlxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIDwhLS0gZXJyb3JzIC0tPlxuICAgIEBpZiAoZm9ybUNvbnRyb2wudG91Y2hlZCAmJiBmb3JtQ29udHJvbC5lcnJvcnMgfCBtYXBLZXlzIHwgYXJyYXlGaXJzdDsgYXMgZXJyb3JLZXkpIHtcbiAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgPlxuICAgICAgICBAc3dpdGNoIChlcnJvcktleSkge1xuICAgICAgICAgIEBjYXNlICgncmVxdWlyZWQnKSB7XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBjYXNlICgndmFsaWREYXRlJykge1xuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ2RhdGVJc0FmdGVyJykge1xuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIHt7ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9BRlRFUicgfCB0cmFuc2xhdGU6IGZvcm1Db250cm9sLmVycm9ycy5kYXRlSXNBZnRlciB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ2RhdGVJc0JlZm9yZScpIHtcbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQkVGT1JFJyB8IHRyYW5zbGF0ZTogZm9ybUNvbnRyb2wuZXJyb3JzLmRhdGVJc0JlZm9yZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ2RhdGVSYW5nZScpIHtcbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9SQU5HRTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGNhc2UgKCdkYXRlTWF4RHVyYXRpb24nKSB7XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUFYX0RVUkFUSU9OPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ2RhdGVNaW5EdXJhdGlvbicpIHtcbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9NSU5fRFVSQVRJT048L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBjYXNlICgnbXNnJykge1xuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIHt7IGZvcm1Db250cm9sLmVycm9ycy5tc2c/LmtleSB8fCBmb3JtQ29udHJvbC5lcnJvcnMubXNnIHwgdHJhbnNsYXRlOiBmb3JtQ29udHJvbC5lcnJvcnMubXNnPy5wYXJhbXMgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIH1cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtZXJyb3JcIj48L25nLWNvbnRlbnQ+XG4gICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0U3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPCEtLSBtYXQgaGludCAtLT5cbiAgPGRpdiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdCBtYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJcIiBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJmb3JtQ29udHJvbC5pbnZhbGlkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXJcIj48L2Rpdj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1oaW50XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbn1cblxuPCEtLSB3cml0YWJsZSAtLT5cbjxuZy10ZW1wbGF0ZSAjd3JpdGFibGU+XG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICAoZm9jdXMpPVwiX29wZW5EYXRlUGlja2VySWZNb2JpbGUoJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cIl9vcGVuRGF0ZVBpY2tlcklmTW9iaWxlKCRldmVudClcIlxuICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgID5cbiAgICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgICAgPG1hdC1sYWJlbD57eyBwbGFjZWhvbGRlciB9fTwvbWF0LWxhYmVsPlxuICAgIH1cblxuICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIERlc2t0b3AgLS0+XG4gICAgQGlmICghbW9iaWxlKSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgI21hdElucHV0XG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW21hc2tpdG9dPVwibWFza2l0b09wdGlvbnNcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dENvbnRyb2xcIlxuICAgICAgICAoYmx1cik9XCJfb25CbHVyKClcIlxuICAgICAgICAoa2V5dXAuYXJyb3dEb3duKT1cIm9wZW5EYXRlUGlja2VyKClcIlxuICAgICAgICAoa2V5dXAuZXNjYXBlKT1cIl9wcmV2ZW50RXZlbnQoJGV2ZW50KVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgIFthcHBBdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgLz5cbiAgICB9XG4gICAgQGlmICghbW9iaWxlKSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICBoaWRkZW5cbiAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZGF0ZVBpY2tlclwiXG4gICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImRhdGVQaWNrZXJGaWx0ZXJcIlxuICAgICAgICAoZGF0ZUNoYW5nZSk9XCJfb25EYXRlUGlja2VyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICByZWFkb25seVxuICAgICAgICAvPlxuICAgIH1cblxuICAgIDwhLS0gTW9iaWxlIC0tPlxuICAgIEBpZiAobW9iaWxlKSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgI21hdElucHV0XG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbCBtZGMtdGV4dC1maWVsZF9faW5wdXRcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dENvbnRyb2xcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICByZWFkb25seVxuICAgICAgICAvPlxuICAgIH1cbiAgICBAaWYgKG1vYmlsZSkge1xuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgaGlkZGVuXG4gICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlUGlja2VyRmlsdGVyXCJcbiAgICAgICAgKGRhdGVDaGFuZ2UpPVwiX29uRGF0ZVBpY2tlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgLz5cbiAgICB9XG5cbiAgICA8YnV0dG9uIG1hdFN1ZmZpeCB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwib3BlbkRhdGVQaWNrZXIoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgPG1hdC1pY29uPnt7IG1vYmlsZSA/ICdkYXRlX3JhbmdlJyA6ICdrZXlib2FyZF9hcnJvd19kb3duJyB9fTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8bWF0LWRhdGVwaWNrZXIgI2RhdGVQaWNrZXIgW3RvdWNoVWldPVwibW9iaWxlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3N0YXJ0QXRdPVwic3RhcnREYXRlXCI+XG4gICAgICA8IS0tIERhdGUgcGlja2VyIGJ1dHRvbnMgLS0+XG4gICAgICBAaWYgKG1vYmlsZSkge1xuICAgICAgICA8bWF0LWRhdGVwaWNrZXItYWN0aW9ucz5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiBtYXREYXRlcGlja2VyQ2FuY2VsPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9DQU5DRUw8L2lvbi1sYWJlbD5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIG1hdERhdGVwaWNrZXJBcHBseT5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fVkFMSURBVEU8L2lvbi1sYWJlbD5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvbWF0LWRhdGVwaWNrZXItYWN0aW9ucz5cbiAgICAgIH1cbiAgICA8L21hdC1kYXRlcGlja2VyPlxuXG4gICAgQGlmIChjbGVhcmFibGUpIHtcbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0U3VmZml4XG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCJcbiAgICAgICAgW2hpZGRlbl09XCJmb3JtQ29udHJvbC5kaXNhYmxlZCB8fCAhZm9ybUNvbnRyb2wudmFsdWVcIlxuICAgICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG5cbiAgICA8IS0tIGVycm9ycyAtLT5cbiAgICBAaWYgKGZvcm1Db250cm9sLnRvdWNoZWQgJiYgZm9ybUNvbnRyb2wuZXJyb3JzIHwgbWFwS2V5cyB8IGFycmF5Rmlyc3Q7IGFzIGVycm9yS2V5KSB7XG4gICAgICA8bWF0LWVycm9yXG4gICAgICAgID5cbiAgICAgICAgQHN3aXRjaCAoZXJyb3JLZXkpIHtcbiAgICAgICAgICBAY2FzZSAoJ3JlcXVpcmVkJykge1xuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ3ZhbGlkRGF0ZScpIHtcbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGNhc2UgKCdkYXRlSXNBZnRlcicpIHtcbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7eyAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQUZURVInIHwgdHJhbnNsYXRlOiBmb3JtQ29udHJvbC5lcnJvcnMuZGF0ZUlzQWZ0ZXIgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGNhc2UgKCdkYXRlSXNCZWZvcmUnKSB7XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAge3sgJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX0JFRk9SRScgfCB0cmFuc2xhdGU6IGZvcm1Db250cm9sLmVycm9ycy5kYXRlSXNCZWZvcmUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGNhc2UgKCdkYXRlUmFuZ2UnKSB7XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfUkFOR0U8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBjYXNlICgnZGF0ZU1heER1cmF0aW9uJykge1xuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX01BWF9EVVJBVElPTjwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGNhc2UgKCdkYXRlTWluRHVyYXRpb24nKSB7XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+RVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUlOX0RVUkFUSU9OPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ21zZycpIHtcbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICB7eyBmb3JtQ29udHJvbC5lcnJvcnMubXNnPy5rZXkgfHwgZm9ybUNvbnRyb2wuZXJyb3JzLm1zZyB8IHRyYW5zbGF0ZTogZm9ybUNvbnRyb2wuZXJyb3JzLm1zZz8ucGFyYW1zIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L21hdC1lcnJvcj5cbiAgICB9XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWVycm9yXCI+PC9uZy1jb250ZW50PlxuXG4gICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0U3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8IS0tIG1hdCBoaW50IC0tPlxuICA8ZGl2IGNsYXNzPVwibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0IG1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlclwiIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cImZvcm1Db250cm9sLmludmFsaWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlclwiPjwvZGl2PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRQcmVmaXhUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdFN1ZmZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|