@naniteninja/dashboard-components-lib 1.0.3 → 1.0.4
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/lib/components/auto-delegation/animations.mjs +20 -0
- package/esm2022/lib/components/auto-delegation/auto-delegation-modal.component.mjs +106 -0
- package/esm2022/lib/components/auto-delegation/enums/auto-delegation.event-type.enum.mjs +6 -0
- package/esm2022/lib/components/auto-delegation/enums/auto-delegation.event-value.enum.mjs +7 -0
- package/esm2022/lib/components/auto-delegation/interface/auto-delegation-data.interface.mjs +2 -0
- package/esm2022/lib/components/auto-delegation/interface/auto-delegation.event.interface.mjs +2 -0
- package/esm2022/lib/components/auto-delegation/interface/auto-delegation.modal-data.interface.mjs +2 -0
- package/esm2022/lib/components/auto-delegation/interface/preferences.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/agenda/agenda-day-card/agenda-day-card.component.mjs +37 -0
- package/esm2022/lib/components/calendar/agenda/agenda.component.mjs +120 -0
- package/esm2022/lib/components/calendar/agenda/agenda.module.mjs +23 -0
- package/esm2022/lib/components/calendar/agenda/enums/agenda-item-type.enum.mjs +6 -0
- package/esm2022/lib/components/calendar/agenda/interfaces/agenda.day.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/agenda/interfaces/agenda.event.inetrface.mjs +2 -0
- package/esm2022/lib/components/calendar/agenda/types/agenda-item.type.mjs +2 -0
- package/esm2022/lib/components/calendar/components/edit-recurring-event/edit-recurring-event.component.mjs +40 -0
- package/esm2022/lib/components/calendar/components/event-form/event-form.component.mjs +275 -0
- package/esm2022/lib/components/calendar/components/event-form/event-form.module.mjs +89 -0
- package/esm2022/lib/components/calendar/components/event-info/event-info.component.mjs +40 -0
- package/esm2022/lib/components/calendar/enums/calendar.account.enum.mjs +6 -0
- package/esm2022/lib/components/calendar/enums/calendar.account.icons.enum.mjs +6 -0
- package/esm2022/lib/components/calendar/enums/event-type.enum.mjs +10 -0
- package/esm2022/lib/components/calendar/enums/recurring.edit.options.enum.mjs +7 -0
- package/esm2022/lib/components/calendar/enums/recurring.type.enum.mjs +8 -0
- package/esm2022/lib/components/calendar/interfaces/calendar.account.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/interfaces/calendar.account.theme.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/interfaces/event.form.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/interfaces/event.form.output.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/interfaces/event.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/interfaces/event.time.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/interfaces/recurring.event.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/interfaces/recurring.exception.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/interfaces/recurring.pattern.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/lookups/recurring.options.lookup.mjs +30 -0
- package/esm2022/lib/components/calendar/scheduler/enums/schedule-date-status.enum.mjs +7 -0
- package/esm2022/lib/components/calendar/scheduler/interfaces/scheduler.action.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/scheduler/interfaces/scheduler.event.day.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/scheduler/interfaces/scheduler.event.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/scheduler/interfaces/scheduler.event.suggestion.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/scheduler/interfaces/scheduler.slots.interface.mjs +2 -0
- package/esm2022/lib/components/calendar/scheduler/mock-schedule.mjs +80 -0
- package/esm2022/lib/components/calendar/scheduler/scheduler.component.mjs +144 -0
- package/esm2022/lib/components/calendar/services/calendar-utils.service.mjs +211 -0
- package/esm2022/lib/components/chat/chat.component.mjs +308 -0
- package/esm2022/lib/components/chat/chat.component.module.mjs +85 -0
- package/esm2022/lib/components/chat/chat.service.mjs +63 -0
- package/esm2022/lib/components/chat/enums/sender-types.enum.mjs +6 -0
- package/esm2022/lib/components/chat/gif-selector/gif-selector.component.mjs +77 -0
- package/esm2022/lib/components/chat/gif-selector/gif-selector.service.mjs +41 -0
- package/esm2022/lib/components/chat/gif-selector/tenor-media-format.interface.mjs +2 -0
- package/esm2022/lib/components/chat/gif-selector/tenor-object.interface.mjs +2 -0
- package/esm2022/lib/components/chat/gif-selector/tenor-result.interface.mjs +2 -0
- package/esm2022/lib/components/chat/interfaces/date-messages.interface.mjs +2 -0
- package/esm2022/lib/components/chat/interfaces/message-attachment.interface.mjs +2 -0
- package/esm2022/lib/components/chat/interfaces/message.interface.mjs +2 -0
- package/esm2022/lib/components/chat/interfaces/send-options-message.interface.mjs +2 -0
- package/esm2022/lib/components/chat/interfaces/type-send-message.enum.mjs +7 -0
- package/esm2022/lib/components/chat-suggestion/chat-suggestion.component.mjs +21 -0
- package/esm2022/lib/components/chat-suggestion/interfaces/chat-suggestion.interface.mjs +2 -0
- package/esm2022/lib/components/circle-progress/circle-progress.component.mjs +143 -0
- package/esm2022/lib/components/circle-progress/circle-progress.module.mjs +18 -0
- package/esm2022/lib/components/circle-progress/enums/circle-variable.enum.mjs +6 -0
- package/esm2022/lib/components/circle-progress/interfaces/circle-progress-config.interface.mjs +2 -0
- package/esm2022/lib/components/client-home/client-home.component.mjs +123 -0
- package/esm2022/lib/components/client-home/enums/client-home-component.enum.mjs +9 -0
- package/esm2022/lib/components/client-home/interfaces/chat-meta.interface.mjs +2 -0
- package/esm2022/lib/components/client-home/interfaces/home-dashboard-inputs.interface.mjs +2 -0
- package/esm2022/lib/components/client-home/interfaces/inner-partial-circle-progress-colors.interface.mjs +2 -0
- package/esm2022/lib/components/client-home/interfaces/partial-circle-progress-colors.interface.mjs +2 -0
- package/esm2022/lib/components/client-home/lookup/client-home.config.mjs +30 -0
- package/esm2022/lib/components/client-home/lookup/inner-progress-default-colors.config.mjs +6 -0
- package/esm2022/lib/components/client-home/lookup/inner-progress-pink-colors.config.mjs +6 -0
- package/esm2022/lib/components/client-home/lookup/inner-progress-purple-colors.config.mjs +6 -0
- package/esm2022/lib/components/client-home/lookup/inner-progress-teal-colors.config.mjs +6 -0
- package/esm2022/lib/components/client-home/lookup/inner-progress-white-colors.config.mjs +10 -0
- package/esm2022/lib/components/client-home/lookup/progress-default-colors.config.mjs +10 -0
- package/esm2022/lib/components/client-home/lookup/progress-white-colors.config.mjs +10 -0
- package/esm2022/lib/components/client-home/pipes/chat-meta.pipe.mjs +60 -0
- package/esm2022/lib/components/client-home/pipes/get-color-by-matcher.pipe.mjs +33 -0
- package/esm2022/lib/components/client-match-overview/client-match-overview.component.mjs +300 -0
- package/esm2022/lib/components/client-match-overview/enums/conversation-flag.enum.mjs +6 -0
- package/esm2022/lib/components/client-match-overview/enums/counter-flag-base.enum.mjs +6 -0
- package/esm2022/lib/components/client-match-overview/enums/inner-circle-state.enum.mjs +8 -0
- package/esm2022/lib/components/client-match-overview/interfaces/client-match-overview.interface.mjs +2 -0
- package/esm2022/lib/components/client-match-overview/interfaces/conversation-flag.interface.mjs +2 -0
- package/esm2022/lib/components/client-match-overview/interfaces/dashboard-match-request.interface.mjs +2 -0
- package/esm2022/lib/components/client-match-overview/interfaces/progress-decision.interface.mjs +2 -0
- package/esm2022/lib/components/client-match-overview/interfaces/progress-facts.interface.mjs +2 -0
- package/esm2022/lib/components/client-match-overview/lookups/computer-inner-state.lookup.mjs +81 -0
- package/esm2022/lib/components/client-match-overview/lookups/limit-dates-indicator.lookup.mjs +8 -0
- package/esm2022/lib/components/client-match-overview/progress-ticker/progress-gap.config.mjs +4 -0
- package/esm2022/lib/components/client-match-overview/progress-ticker/progress-ticker.config.mjs +3 -0
- package/esm2022/lib/components/client-match-overview/progress-ticker/progress-ticker.service.mjs +43 -0
- package/esm2022/lib/components/dashboard-swipeable-tabs/dashboard-swipeable-tabs.component.mjs +113 -0
- package/esm2022/lib/components/dashboard-swipeable-tabs/lookups/dashboard-main-swiper-options.mjs +11 -0
- package/esm2022/lib/components/dashboard-swipeable-tabs/lookups/dashboard-thumbs-swiper-options.mjs +27 -0
- package/esm2022/lib/components/dashboard-swipeable-tabs/lookups/main-swiper-default-options.mjs +19 -0
- package/esm2022/lib/components/dashboard-swipeable-tabs/lookups/thumbs-swiper-default-options.mjs +21 -0
- package/esm2022/lib/components/lib-client-dashboard/client-dashboard.component.mjs +173 -0
- package/esm2022/lib/components/lib-client-dashboard/enums/alert-status-fields.enum.mjs +11 -0
- package/esm2022/lib/components/lib-client-dashboard/enums/client-dashboard-component.enum.mjs +7 -0
- package/esm2022/lib/components/lib-client-dashboard/interfaces/ads.interface.mjs +2 -0
- package/esm2022/lib/components/lib-client-dashboard/interfaces/client-dashboard-inputs.interface.mjs +2 -0
- package/esm2022/lib/components/lib-client-dashboard/lookups/client-dashboard.config.mjs +15 -0
- package/esm2022/lib/components/lib-compose-matcher-dash/compose-matcher-dash.component.mjs +146 -0
- package/esm2022/lib/components/lib-compose-matcher-dash/interfaces/chart-data.interface.mjs +2 -0
- package/esm2022/lib/components/lib-compose-matcher-dash/interfaces/chat-identifier.interface.mjs +2 -0
- package/esm2022/lib/components/lib-compose-matcher-dash/interfaces/matcher-dashboard-inputs.interface.mjs +2 -0
- package/esm2022/lib/components/lib-compose-matcher-dash/interfaces/matcher-profile.interface.mjs +2 -0
- package/esm2022/lib/components/lib-compose-matcher-dash/interfaces/prospect-data.interface.mjs +2 -0
- package/esm2022/lib/components/lib-compose-matcher-dash/pipes/get-profile-with-progress.pipe.mjs +21 -0
- package/esm2022/lib/components/matcher-statuses/enums/matcher-statuses.enum.mjs +15 -0
- package/esm2022/lib/components/matcher-statuses/interfaces/status.interface.mjs +2 -0
- package/esm2022/lib/components/matcher-statuses/lookups/matcher-statuses.lookup.mjs +54 -0
- package/esm2022/lib/components/matcher-statuses/matcher-statuses.component.mjs +58 -0
- package/esm2022/lib/components/matcher-statuses/pipes/is-status-included.pipe.mjs +19 -0
- package/esm2022/lib/components/profile-card/profile-card.component.mjs +35 -0
- package/esm2022/lib/components/profile-card/profile-card.module.mjs +19 -0
- package/esm2022/lib/components/spider-chart/interfaces/chart-data-circle.interface.mjs +2 -0
- package/esm2022/lib/components/spider-chart/interfaces/chart-data-defs-f.interface.mjs +2 -0
- package/esm2022/lib/components/spider-chart/interfaces/chart-data-defs-lg.interface.mjs +2 -0
- package/esm2022/lib/components/spider-chart/interfaces/chart-data-defs-rg.interface.mjs +2 -0
- package/esm2022/lib/components/spider-chart/interfaces/config.interface.mjs +2 -0
- package/esm2022/lib/components/spider-chart/interfaces/dataset.interface.mjs +2 -0
- package/esm2022/lib/components/spider-chart/interfaces/polygon-color.interface.mjs +2 -0
- package/esm2022/lib/components/spider-chart/interfaces/spider-chart-attribute.interface.mjs +2 -0
- package/esm2022/lib/components/spider-chart/lookup/default-spider-config.mjs +67 -0
- package/esm2022/lib/components/spider-chart/lookup/demo-polygon-colors.lookup.mjs +11 -0
- package/esm2022/lib/components/spider-chart/lookup/svg-config.lookup.mjs +277 -0
- package/esm2022/lib/components/spider-chart/spider-chart.component.mjs +235 -0
- package/esm2022/lib/enums/direction.enum.mjs +6 -0
- package/esm2022/lib/enums/form-field-type.mjs +30 -0
- package/esm2022/lib/enums/local-storage-keys.enum.mjs +5 -0
- package/esm2022/lib/enums/status-types.mjs +8 -0
- package/esm2022/lib/model/select-option-template.mjs +2 -0
- package/esm2022/lib/operations/operations.mjs +19 -0
- package/esm2022/lib/pipes/array-sort/array.sort.pipe.mjs +49 -0
- package/esm2022/lib/pipes/count-non-empty-fields/count-non-empty-fields.pipe.mjs +17 -0
- package/esm2022/lib/pipes/date-localization/date-localization.pipe.mjs +31 -0
- package/esm2022/lib/pipes/fallback-translate/fallback-translate.pipe.mjs +28 -0
- package/esm2022/lib/pipes/get-display-value/get-display-value.pipe.mjs +59 -0
- package/esm2022/lib/pipes/get-multi-select-display-text/get-multi-select-display-text.pipe.mjs +22 -0
- package/esm2022/lib/pipes/initials/initials.pipe.mjs +25 -0
- package/esm2022/lib/pipes/round/round.pipe.mjs +17 -0
- package/esm2022/lib/pipes/update-llm-preference/update-llm-preference.pipe.mjs +25 -0
- package/esm2022/lib/services/abstract-cache.service.mjs +10 -0
- package/esm2022/lib/shared/shared/alert-popup/alert-popup.component.mjs +38 -0
- package/esm2022/lib/shared/shared/message-modal/message-modal.component.mjs +95 -0
- package/esm2022/lib/shared/shared/status-icon/status-icon.component.mjs +14 -0
- package/esm2022/lib/shared/shared.module.mjs +23 -0
- package/esm2022/naniteninja-dashboard-components-lib.mjs +5 -0
- package/esm2022/public-api.mjs +123 -0
- package/fesm2022/naniteninja-dashboard-components-lib.mjs +202 -178
- package/fesm2022/naniteninja-dashboard-components-lib.mjs.map +1 -1
- package/index.d.ts +3 -1669
- package/lib/components/auto-delegation/animations.d.ts +1 -0
- package/lib/components/auto-delegation/auto-delegation-modal.component.d.ts +29 -0
- package/lib/components/auto-delegation/enums/auto-delegation.event-type.enum.d.ts +4 -0
- package/lib/components/auto-delegation/enums/auto-delegation.event-value.enum.d.ts +5 -0
- package/lib/components/auto-delegation/interface/auto-delegation-data.interface.d.ts +31 -0
- package/lib/components/auto-delegation/interface/auto-delegation.event.interface.d.ts +6 -0
- package/lib/components/auto-delegation/interface/auto-delegation.modal-data.interface.d.ts +8 -0
- package/lib/components/auto-delegation/interface/preferences.interface.d.ts +17 -0
- package/lib/components/calendar/agenda/agenda-day-card/agenda-day-card.component.d.ts +12 -0
- package/lib/components/calendar/agenda/agenda.component.d.ts +27 -0
- package/lib/components/calendar/agenda/agenda.module.d.ts +12 -0
- package/lib/components/calendar/agenda/enums/agenda-item-type.enum.d.ts +4 -0
- package/lib/components/calendar/agenda/interfaces/agenda.day.interface.d.ts +7 -0
- package/lib/components/calendar/agenda/interfaces/agenda.event.inetrface.d.ts +9 -0
- package/lib/components/calendar/agenda/types/agenda-item.type.d.ts +7 -0
- package/lib/components/calendar/components/edit-recurring-event/edit-recurring-event.component.d.ts +19 -0
- package/lib/components/calendar/components/event-form/event-form.component.d.ts +67 -0
- package/lib/components/calendar/components/event-form/event-form.module.d.ts +20 -0
- package/lib/components/calendar/components/event-info/event-info.component.d.ts +24 -0
- package/lib/components/calendar/enums/calendar.account.enum.d.ts +4 -0
- package/lib/components/calendar/enums/calendar.account.icons.enum.d.ts +4 -0
- package/lib/components/calendar/enums/event-type.enum.d.ts +8 -0
- package/lib/components/calendar/enums/recurring.edit.options.enum.d.ts +5 -0
- package/lib/components/calendar/enums/recurring.type.enum.d.ts +6 -0
- package/lib/components/calendar/interfaces/calendar.account.interface.d.ts +14 -0
- package/lib/components/calendar/interfaces/calendar.account.theme.interface.d.ts +5 -0
- package/lib/components/calendar/interfaces/event.form.interface.d.ts +22 -0
- package/lib/components/calendar/interfaces/event.form.output.interface.d.ts +10 -0
- package/lib/components/calendar/interfaces/event.interface.d.ts +33 -0
- package/lib/components/calendar/interfaces/event.time.interface.d.ts +4 -0
- package/lib/components/calendar/interfaces/recurring.event.interface.d.ts +16 -0
- package/lib/components/calendar/interfaces/recurring.exception.interface.d.ts +14 -0
- package/lib/components/calendar/interfaces/recurring.pattern.interface.d.ts +16 -0
- package/lib/components/calendar/lookups/recurring.options.lookup.d.ts +2 -0
- package/lib/components/calendar/scheduler/enums/schedule-date-status.enum.d.ts +5 -0
- package/lib/components/calendar/scheduler/interfaces/scheduler.action.interface.d.ts +10 -0
- package/lib/components/calendar/scheduler/interfaces/scheduler.event.day.interface.d.ts +5 -0
- package/lib/components/calendar/scheduler/interfaces/scheduler.event.interface.d.ts +26 -0
- package/lib/components/calendar/scheduler/interfaces/scheduler.event.suggestion.interface.d.ts +13 -0
- package/lib/components/calendar/scheduler/interfaces/scheduler.slots.interface.d.ts +6 -0
- package/lib/components/calendar/scheduler/mock-schedule.d.ts +9 -0
- package/lib/components/calendar/scheduler/scheduler.component.d.ts +36 -0
- package/lib/components/calendar/services/calendar-utils.service.d.ts +39 -0
- package/lib/components/chat/chat.component.d.ts +70 -0
- package/lib/components/chat/chat.component.module.d.ts +22 -0
- package/lib/components/chat/chat.service.d.ts +15 -0
- package/lib/components/chat/enums/sender-types.enum.d.ts +4 -0
- package/lib/components/chat/gif-selector/gif-selector.component.d.ts +25 -0
- package/lib/components/chat/gif-selector/gif-selector.service.d.ts +15 -0
- package/lib/components/chat/gif-selector/tenor-media-format.interface.d.ts +7 -0
- package/lib/components/chat/gif-selector/tenor-object.interface.d.ts +5 -0
- package/lib/components/chat/gif-selector/tenor-result.interface.d.ts +16 -0
- package/lib/components/chat/interfaces/date-messages.interface.d.ts +6 -0
- package/lib/components/chat/interfaces/message-attachment.interface.d.ts +6 -0
- package/lib/components/chat/interfaces/message.interface.d.ts +11 -0
- package/lib/components/chat/interfaces/send-options-message.interface.d.ts +5 -0
- package/lib/components/chat/interfaces/type-send-message.enum.d.ts +5 -0
- package/lib/components/chat-suggestion/chat-suggestion.component.d.ts +9 -0
- package/lib/components/chat-suggestion/interfaces/chat-suggestion.interface.d.ts +4 -0
- package/lib/components/circle-progress/circle-progress.component.d.ts +31 -0
- package/lib/components/circle-progress/circle-progress.module.d.ts +8 -0
- package/lib/components/circle-progress/enums/circle-variable.enum.d.ts +4 -0
- package/lib/components/circle-progress/interfaces/circle-progress-config.interface.d.ts +29 -0
- package/lib/components/client-home/client-home.component.d.ts +44 -0
- package/lib/components/client-home/enums/client-home-component.enum.d.ts +7 -0
- package/lib/components/client-home/interfaces/chat-meta.interface.d.ts +7 -0
- package/lib/components/client-home/interfaces/home-dashboard-inputs.interface.d.ts +45 -0
- package/lib/components/client-home/interfaces/inner-partial-circle-progress-colors.interface.d.ts +5 -0
- package/lib/components/client-home/interfaces/partial-circle-progress-colors.interface.d.ts +9 -0
- package/lib/components/client-home/lookup/client-home.config.d.ts +2 -0
- package/lib/components/client-home/lookup/inner-progress-default-colors.config.d.ts +2 -0
- package/lib/components/client-home/lookup/inner-progress-pink-colors.config.d.ts +2 -0
- package/lib/components/client-home/lookup/inner-progress-purple-colors.config.d.ts +2 -0
- package/lib/components/client-home/lookup/inner-progress-teal-colors.config.d.ts +2 -0
- package/lib/components/client-home/lookup/inner-progress-white-colors.config.d.ts +2 -0
- package/lib/components/client-home/lookup/progress-default-colors.config.d.ts +2 -0
- package/lib/components/client-home/lookup/progress-white-colors.config.d.ts +2 -0
- package/lib/components/client-home/pipes/chat-meta.pipe.d.ts +10 -0
- package/lib/components/client-home/pipes/get-color-by-matcher.pipe.d.ts +10 -0
- package/lib/components/client-match-overview/client-match-overview.component.d.ts +55 -0
- package/lib/components/client-match-overview/enums/conversation-flag.enum.d.ts +4 -0
- package/lib/components/client-match-overview/enums/counter-flag-base.enum.d.ts +4 -0
- package/lib/components/client-match-overview/enums/inner-circle-state.enum.d.ts +6 -0
- package/lib/components/client-match-overview/interfaces/client-match-overview.interface.d.ts +19 -0
- package/lib/components/client-match-overview/interfaces/conversation-flag.interface.d.ts +8 -0
- package/lib/components/client-match-overview/interfaces/dashboard-match-request.interface.d.ts +7 -0
- package/lib/components/client-match-overview/interfaces/progress-decision.interface.d.ts +10 -0
- package/lib/components/client-match-overview/interfaces/progress-facts.interface.d.ts +11 -0
- package/lib/components/client-match-overview/lookups/computer-inner-state.lookup.d.ts +7 -0
- package/lib/components/client-match-overview/lookups/limit-dates-indicator.lookup.d.ts +5 -0
- package/lib/components/client-match-overview/progress-ticker/progress-gap.config.d.ts +2 -0
- package/lib/components/client-match-overview/progress-ticker/progress-ticker.config.d.ts +2 -0
- package/lib/components/client-match-overview/progress-ticker/progress-ticker.service.d.ts +11 -0
- package/lib/components/dashboard-swipeable-tabs/dashboard-swipeable-tabs.component.d.ts +29 -0
- package/lib/components/dashboard-swipeable-tabs/lookups/dashboard-main-swiper-options.d.ts +2 -0
- package/lib/components/dashboard-swipeable-tabs/lookups/dashboard-thumbs-swiper-options.d.ts +2 -0
- package/lib/components/dashboard-swipeable-tabs/lookups/main-swiper-default-options.d.ts +2 -0
- package/lib/components/dashboard-swipeable-tabs/lookups/thumbs-swiper-default-options.d.ts +2 -0
- package/lib/components/lib-client-dashboard/client-dashboard.component.d.ts +75 -0
- package/lib/components/lib-client-dashboard/enums/alert-status-fields.enum.d.ts +9 -0
- package/lib/components/lib-client-dashboard/enums/client-dashboard-component.enum.d.ts +5 -0
- package/lib/components/lib-client-dashboard/interfaces/ads.interface.d.ts +14 -0
- package/lib/components/lib-client-dashboard/interfaces/client-dashboard-inputs.interface.d.ts +29 -0
- package/lib/components/lib-client-dashboard/lookups/client-dashboard.config.d.ts +2 -0
- package/lib/components/lib-compose-matcher-dash/compose-matcher-dash.component.d.ts +48 -0
- package/lib/components/lib-compose-matcher-dash/interfaces/chart-data.interface.d.ts +5 -0
- package/lib/components/lib-compose-matcher-dash/interfaces/chat-identifier.interface.d.ts +5 -0
- package/lib/components/lib-compose-matcher-dash/interfaces/matcher-dashboard-inputs.interface.d.ts +26 -0
- package/lib/components/lib-compose-matcher-dash/interfaces/matcher-profile.interface.d.ts +8 -0
- package/lib/components/lib-compose-matcher-dash/interfaces/prospect-data.interface.d.ts +24 -0
- package/lib/components/lib-compose-matcher-dash/pipes/get-profile-with-progress.pipe.d.ts +9 -0
- package/lib/components/matcher-statuses/enums/matcher-statuses.enum.d.ts +13 -0
- package/lib/components/matcher-statuses/interfaces/status.interface.d.ts +6 -0
- package/lib/components/matcher-statuses/lookups/matcher-statuses.lookup.d.ts +2 -0
- package/lib/components/matcher-statuses/matcher-statuses.component.d.ts +23 -0
- package/lib/components/matcher-statuses/pipes/is-status-included.pipe.d.ts +8 -0
- package/lib/components/profile-card/profile-card.component.d.ts +11 -0
- package/lib/components/profile-card/profile-card.module.d.ts +9 -0
- package/lib/components/spider-chart/interfaces/chart-data-circle.interface.d.ts +10 -0
- package/lib/components/spider-chart/interfaces/chart-data-defs-f.interface.d.ts +11 -0
- package/lib/components/spider-chart/interfaces/chart-data-defs-lg.interface.d.ts +11 -0
- package/lib/components/spider-chart/interfaces/chart-data-defs-rg.interface.d.ts +10 -0
- package/lib/components/spider-chart/interfaces/config.interface.d.ts +19 -0
- package/lib/components/spider-chart/interfaces/dataset.interface.d.ts +7 -0
- package/lib/components/spider-chart/interfaces/polygon-color.interface.d.ts +4 -0
- package/lib/components/spider-chart/interfaces/spider-chart-attribute.interface.d.ts +6 -0
- package/lib/components/spider-chart/lookup/default-spider-config.d.ts +2 -0
- package/lib/components/spider-chart/lookup/demo-polygon-colors.lookup.d.ts +2 -0
- package/lib/components/spider-chart/lookup/svg-config.lookup.d.ts +8 -0
- package/lib/components/spider-chart/spider-chart.component.d.ts +52 -0
- package/lib/enums/direction.enum.d.ts +4 -0
- package/lib/enums/form-field-type.d.ts +28 -0
- package/lib/enums/local-storage-keys.enum.d.ts +3 -0
- package/lib/enums/status-types.d.ts +6 -0
- package/lib/model/select-option-template.d.ts +5 -0
- package/lib/operations/operations.d.ts +19 -0
- package/lib/pipes/array-sort/array.sort.pipe.d.ts +7 -0
- package/lib/pipes/count-non-empty-fields/count-non-empty-fields.pipe.d.ts +7 -0
- package/lib/pipes/date-localization/date-localization.pipe.d.ts +8 -0
- package/lib/pipes/fallback-translate/fallback-translate.pipe.d.ts +11 -0
- package/lib/pipes/get-display-value/get-display-value.pipe.d.ts +13 -0
- package/lib/pipes/get-multi-select-display-text/get-multi-select-display-text.pipe.d.ts +8 -0
- package/lib/pipes/initials/initials.pipe.d.ts +7 -0
- package/lib/pipes/round/round.pipe.d.ts +7 -0
- package/lib/pipes/update-llm-preference/update-llm-preference.pipe.d.ts +8 -0
- package/lib/services/abstract-cache.service.d.ts +9 -0
- package/lib/shared/shared/alert-popup/alert-popup.component.d.ts +14 -0
- package/lib/shared/shared/message-modal/message-modal.component.d.ts +29 -0
- package/lib/shared/shared/status-icon/status-icon.component.d.ts +7 -0
- package/lib/shared/shared.module.d.ts +13 -0
- package/naniteninja-dashboard-components-lib-1.0.4.tgz +0 -0
- package/package.json +29 -25
- package/public-api.d.ts +122 -0
- package/src/lib/shared-styles/common/theme.scss +3 -3
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
3
|
+
import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { FormFieldModule, InputFieldModule } from '@naniteninja/ionic-lib';
|
|
5
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
6
|
+
import { FormFieldType } from '../../../../enums/form-field-type';
|
|
7
|
+
import { FallbackTranslatePipe } from '../../../../pipes/fallback-translate/fallback-translate.pipe';
|
|
8
|
+
import { EditRecurringEventOptions } from '../../enums/recurring.edit.options.enum';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../../../../pipes/fallback-translate/fallback-translate.pipe";
|
|
11
|
+
import * as i2 from "@naniteninja/ionic-lib";
|
|
12
|
+
export class LibEditRecurringEventComponent {
|
|
13
|
+
constructor(fallbackTranslatePipe) {
|
|
14
|
+
this.fallbackTranslatePipe = fallbackTranslatePipe;
|
|
15
|
+
this.editOptionsCtrl = new FormControl(EditRecurringEventOptions.CURRENT);
|
|
16
|
+
this.radioFieldType = FormFieldType.radio;
|
|
17
|
+
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
this.initRecurringOptions();
|
|
20
|
+
}
|
|
21
|
+
initRecurringOptions() {
|
|
22
|
+
const options = [
|
|
23
|
+
{ label: this.fallbackTranslatePipe.transform('CALENDAR.EDIT_RECURRING_THIS_AND_FOLLOWING_EVENT', 'This and following events'), value: EditRecurringEventOptions.FOLLOWING },
|
|
24
|
+
{ label: this.fallbackTranslatePipe.transform('CALENDAR.EDIT_RECURRING_ALL_EVENTS', 'All events'), value: EditRecurringEventOptions.ALL },
|
|
25
|
+
];
|
|
26
|
+
this.options = this.excludeCurrentInstance ? options : [{ label: 'CALENDAR.EDIT_RECURRING_THIS_EVENT', value: EditRecurringEventOptions.CURRENT }, ...options];
|
|
27
|
+
this.editOptionsCtrl.setValue(this.excludeCurrentInstance ? EditRecurringEventOptions.FOLLOWING : EditRecurringEventOptions.CURRENT);
|
|
28
|
+
}
|
|
29
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibEditRecurringEventComponent, deps: [{ token: i1.FallbackTranslatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: LibEditRecurringEventComponent, isStandalone: true, selector: "lib-edit-recurring-event", inputs: { excludeCurrentInstance: "excludeCurrentInstance", editOptionsCtrl: "editOptionsCtrl" }, ngImport: i0, template: "@if (options) {\n <div class=\"edit-recurring-options\">\n <lib-form-field\n class=\"recurring-edit-options\"\n [formFieldControl]=\"editOptionsCtrl\"\n [radioTranslateLabels]=\"true\"\n [radioRippleEffect]=\"false\"\n [options]=\"options\"\n [type]=\"radioFieldType\"\n ></lib-form-field>\n </div>\n}\n", styles: [".edit-recurring-options{padding:20px 10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: InputFieldModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormFieldModule }, { kind: "component", type: i2.FormFieldComponent, selector: "lib-form-field", inputs: ["fieldName", "label", "placeholder", "message", "useTooltips", "descriptionText", "formFieldControl", "submitted", "required", "type", "plusIconUrl", "minusIconUrl", "maxLength", "max", "min", "pinValue", "dualKnobs", "reverseBarColor", "defaultValue", "noMargin", "options", "iconHtml", "invalidPatternMessage", "dateFormat", "currencySymbol", "hideCents", "isEditable", "rowEditConfirmationObsv", "errorInlineMode", "showLabelInRequiredErrorMessage", "decimalPosition", "hyperlinkTarget", "readOnly", "focus", "showRequiredIndicator", "maxDate", "minDate", "radioTranslateLabels", "radioDeselectable", "radioRippleEffect"], outputs: ["rowEdit", "focusOut", "valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31
|
+
}
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibEditRecurringEventComponent, decorators: [{
|
|
33
|
+
type: Component,
|
|
34
|
+
args: [{ selector: 'lib-edit-recurring-event', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FallbackTranslatePipe, TranslateModule, InputFieldModule, FormsModule, ReactiveFormsModule, FormFieldModule], template: "@if (options) {\n <div class=\"edit-recurring-options\">\n <lib-form-field\n class=\"recurring-edit-options\"\n [formFieldControl]=\"editOptionsCtrl\"\n [radioTranslateLabels]=\"true\"\n [radioRippleEffect]=\"false\"\n [options]=\"options\"\n [type]=\"radioFieldType\"\n ></lib-form-field>\n </div>\n}\n", styles: [".edit-recurring-options{padding:20px 10px}\n"] }]
|
|
35
|
+
}], ctorParameters: () => [{ type: i1.FallbackTranslatePipe }], propDecorators: { excludeCurrentInstance: [{
|
|
36
|
+
type: Input
|
|
37
|
+
}], editOptionsCtrl: [{
|
|
38
|
+
type: Input
|
|
39
|
+
}] } });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1yZWN1cnJpbmctZXZlbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGFzaGJvYXJkLWNvbXBvbmVudHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9jYWxlbmRhci9jb21wb25lbnRzL2VkaXQtcmVjdXJyaW5nLWV2ZW50L2VkaXQtcmVjdXJyaW5nLWV2ZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC1jb21wb25lbnRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY2FsZW5kYXIvY29tcG9uZW50cy9lZGl0LXJlY3VycmluZy1ldmVudC9lZGl0LXJlY3VycmluZy1ldmVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFnQixNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDckcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7QUFVcEYsTUFBTSxPQUFPLDhCQUE4QjtJQU96QyxZQUFvQixxQkFBNEM7UUFBNUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUx2RCxvQkFBZSxHQUEyQyxJQUFJLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUcvRyxtQkFBYyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFFdUIsQ0FBQztJQUVwRSxRQUFRO1FBQ04sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixNQUFNLE9BQU8sR0FBRztZQUNkLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsa0RBQWtELEVBQUUsMkJBQTJCLENBQUMsRUFBRSxLQUFLLEVBQUUseUJBQXlCLENBQUMsU0FBUyxFQUFFO1lBQzVLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsb0NBQW9DLEVBQUUsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixDQUFDLEdBQUcsRUFBRTtTQUMxSSxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxvQ0FBb0MsRUFBRSxLQUFLLEVBQUUseUJBQXlCLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUMvSixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkksQ0FBQzsrR0FwQlUsOEJBQThCO21HQUE5Qiw4QkFBOEIsc0xDakIzQyx1VkFZQSxxR0RHWSxZQUFZLDhCQUF5QixlQUFlLDhCQUFFLGdCQUFnQiw4QkFBRSxXQUFXLDhCQUFFLG1CQUFtQiw4QkFBRSxlQUFlOzs0RkFFeEgsOEJBQThCO2tCQVIxQyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLENBQUM7MEZBRzNILHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1GaWVsZE1vZHVsZSwgSW5wdXRGaWVsZE1vZHVsZSwgU2VsZWN0T3B0aW9uIH0gZnJvbSAnQG5hbml0ZW5pbmphL2lvbmljLWxpYic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEZvcm1GaWVsZFR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9lbnVtcy9mb3JtLWZpZWxkLXR5cGUnO1xuaW1wb3J0IHsgRmFsbGJhY2tUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcGlwZXMvZmFsbGJhY2stdHJhbnNsYXRlL2ZhbGxiYWNrLXRyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IEVkaXRSZWN1cnJpbmdFdmVudE9wdGlvbnMgfSBmcm9tICcuLi8uLi9lbnVtcy9yZWN1cnJpbmcuZWRpdC5vcHRpb25zLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZWRpdC1yZWN1cnJpbmctZXZlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdC1yZWN1cnJpbmctZXZlbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lZGl0LXJlY3VycmluZy1ldmVudC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRmFsbGJhY2tUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGVNb2R1bGUsIElucHV0RmllbGRNb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtRmllbGRNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJFZGl0UmVjdXJyaW5nRXZlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBleGNsdWRlQ3VycmVudEluc3RhbmNlOiBib29sZWFuO1xuICBASW5wdXQoKSBlZGl0T3B0aW9uc0N0cmw6IEZvcm1Db250cm9sPEVkaXRSZWN1cnJpbmdFdmVudE9wdGlvbnM+ID0gbmV3IEZvcm1Db250cm9sKEVkaXRSZWN1cnJpbmdFdmVudE9wdGlvbnMuQ1VSUkVOVCk7XG5cbiAgcHVibGljIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxFZGl0UmVjdXJyaW5nRXZlbnRPcHRpb25zPltdO1xuICBwdWJsaWMgcmFkaW9GaWVsZFR5cGUgPSBGb3JtRmllbGRUeXBlLnJhZGlvO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmFsbGJhY2tUcmFuc2xhdGVQaXBlOiBGYWxsYmFja1RyYW5zbGF0ZVBpcGUpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0UmVjdXJyaW5nT3B0aW9ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0UmVjdXJyaW5nT3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAgeyBsYWJlbDogdGhpcy5mYWxsYmFja1RyYW5zbGF0ZVBpcGUudHJhbnNmb3JtKCdDQUxFTkRBUi5FRElUX1JFQ1VSUklOR19USElTX0FORF9GT0xMT1dJTkdfRVZFTlQnLCAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycpLCB2YWx1ZTogRWRpdFJlY3VycmluZ0V2ZW50T3B0aW9ucy5GT0xMT1dJTkcgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMuZmFsbGJhY2tUcmFuc2xhdGVQaXBlLnRyYW5zZm9ybSgnQ0FMRU5EQVIuRURJVF9SRUNVUlJJTkdfQUxMX0VWRU5UUycsICdBbGwgZXZlbnRzJyksIHZhbHVlOiBFZGl0UmVjdXJyaW5nRXZlbnRPcHRpb25zLkFMTCB9LFxuICAgIF07XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5leGNsdWRlQ3VycmVudEluc3RhbmNlID8gb3B0aW9ucyA6IFt7IGxhYmVsOiAnQ0FMRU5EQVIuRURJVF9SRUNVUlJJTkdfVEhJU19FVkVOVCcsIHZhbHVlOiBFZGl0UmVjdXJyaW5nRXZlbnRPcHRpb25zLkNVUlJFTlQgfSwgLi4ub3B0aW9uc107XG4gICAgdGhpcy5lZGl0T3B0aW9uc0N0cmwuc2V0VmFsdWUodGhpcy5leGNsdWRlQ3VycmVudEluc3RhbmNlID8gRWRpdFJlY3VycmluZ0V2ZW50T3B0aW9ucy5GT0xMT1dJTkcgOiBFZGl0UmVjdXJyaW5nRXZlbnRPcHRpb25zLkNVUlJFTlQpO1xuICB9XG59XG4iLCJAaWYgKG9wdGlvbnMpIHtcbiAgPGRpdiBjbGFzcz1cImVkaXQtcmVjdXJyaW5nLW9wdGlvbnNcIj5cbiAgICA8bGliLWZvcm0tZmllbGRcbiAgICAgIGNsYXNzPVwicmVjdXJyaW5nLWVkaXQtb3B0aW9uc1wiXG4gICAgICBbZm9ybUZpZWxkQ29udHJvbF09XCJlZGl0T3B0aW9uc0N0cmxcIlxuICAgICAgW3JhZGlvVHJhbnNsYXRlTGFiZWxzXT1cInRydWVcIlxuICAgICAgW3JhZGlvUmlwcGxlRWZmZWN0XT1cImZhbHNlXCJcbiAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnNcIlxuICAgICAgW3R5cGVdPVwicmFkaW9GaWVsZFR5cGVcIlxuICAgID48L2xpYi1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { FormControl, Validators } from '@angular/forms';
|
|
3
|
+
import { BaseComponent, DateRangeValidator, TimeRangeValidator } from '@naniteninja/ionic-lib';
|
|
4
|
+
import { addMinutes, differenceInMinutes, startOfDay } from 'date-fns';
|
|
5
|
+
import { takeUntil } from 'rxjs';
|
|
6
|
+
import { EventTypes } from '../../enums/event-type.enum';
|
|
7
|
+
import { recurringOptions } from '../../lookups/recurring.options.lookup';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/forms";
|
|
10
|
+
import * as i2 from "../../services/calendar-utils.service";
|
|
11
|
+
import * as i3 from "../../../../pipes/fallback-translate/fallback-translate.pipe";
|
|
12
|
+
import * as i4 from "@angular/common";
|
|
13
|
+
import * as i5 from "@ionic/angular";
|
|
14
|
+
import * as i6 from "@naniteninja/ionic-lib";
|
|
15
|
+
import * as i7 from "../event-info/event-info.component";
|
|
16
|
+
import * as i8 from "../edit-recurring-event/edit-recurring-event.component";
|
|
17
|
+
export class LibEventFormComponent extends BaseComponent {
|
|
18
|
+
get event() {
|
|
19
|
+
return this._event;
|
|
20
|
+
}
|
|
21
|
+
set event(e) {
|
|
22
|
+
this.onEventChange(e);
|
|
23
|
+
}
|
|
24
|
+
get draggedEvent() {
|
|
25
|
+
return this._draggedEvent;
|
|
26
|
+
}
|
|
27
|
+
set draggedEvent(e) {
|
|
28
|
+
this.onDragEvent(e);
|
|
29
|
+
}
|
|
30
|
+
constructor(cdr, fb, calendarUtilService, fallbackTranslatePipe) {
|
|
31
|
+
super();
|
|
32
|
+
this.cdr = cdr;
|
|
33
|
+
this.fb = fb;
|
|
34
|
+
this.calendarUtilService = calendarUtilService;
|
|
35
|
+
this.fallbackTranslatePipe = fallbackTranslatePipe;
|
|
36
|
+
this.updateRecurringEvent = new EventEmitter();
|
|
37
|
+
this.updateDraggedEvent = new EventEmitter();
|
|
38
|
+
this.delete = new EventEmitter();
|
|
39
|
+
this.closeForm = new EventEmitter();
|
|
40
|
+
this.submitForm = new EventEmitter();
|
|
41
|
+
this.editOptionsCtrl = new FormControl();
|
|
42
|
+
}
|
|
43
|
+
onDeleteConfirm() {
|
|
44
|
+
this.showConfirm = false;
|
|
45
|
+
this.delete.emit({ selectedRecurringOption: this.editOptionsCtrl.value });
|
|
46
|
+
}
|
|
47
|
+
onSubmitModal() {
|
|
48
|
+
if (this.deleteConfirmed) {
|
|
49
|
+
this.onDeleteConfirm();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (this.draggedEvent) {
|
|
53
|
+
this.updateDraggedEvent.emit({
|
|
54
|
+
selectedRecurringOption: this.editOptionsCtrl.value,
|
|
55
|
+
});
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.editMode ? this.updateEvent() : this.saveEvent();
|
|
59
|
+
}
|
|
60
|
+
onModalSecondaryButtonClick() {
|
|
61
|
+
this.openRecurringOptions = this.editOptionsCtrl?.value ? false : this.event.recurring || !!this.event.recurringEventId;
|
|
62
|
+
this.showConfirm = !this.openRecurringOptions;
|
|
63
|
+
if (this.openRecurringOptions) {
|
|
64
|
+
this.cancelButtonTitle = this.fallbackTranslatePipe.transform('BUTTONS.CANCEL', 'Cancel');
|
|
65
|
+
this.submitButtonTitle = this.fallbackTranslatePipe.transform('BUTTONS.DELETE', 'Delete');
|
|
66
|
+
this.deleteConfirmed = true;
|
|
67
|
+
this.secondaryButtonTitle = null;
|
|
68
|
+
}
|
|
69
|
+
this.cdr.detectChanges();
|
|
70
|
+
}
|
|
71
|
+
saveEvent() {
|
|
72
|
+
if (this.allowSubmission()) {
|
|
73
|
+
const updatedEvent = this.calendarUtilService.buildUpdatedEvent(this.event, this.form.getRawValue());
|
|
74
|
+
if ((updatedEvent.recurring && this.event.recurring) || this.event?.recurringEventId) {
|
|
75
|
+
updatedEvent.recurringStartDate = this.event.recurringStartDate;
|
|
76
|
+
updatedEvent.recurringEndDate = this.event.recurringEndDate;
|
|
77
|
+
this.updatedEvent = updatedEvent;
|
|
78
|
+
this.recurringTypeChanged =
|
|
79
|
+
this.updatedEvent.recurringPattern?.type !== this.event.recurringPattern?.type || (this.updatedEvent.recurringPattern && !this.event.recurringPattern);
|
|
80
|
+
this.openRecurringOptions = true;
|
|
81
|
+
this.modalTitle = this.fallbackTranslatePipe.transform('CALENDAR.EDIT_RECURRING_EVENT', 'Edit recurring event');
|
|
82
|
+
this.secondaryButtonTitle = null;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.submitFormEvent(updatedEvent, this.form.getRawValue());
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
onLocationChange(event) {
|
|
90
|
+
this.form.controls.location.setValue({ coordinates: event.coordinates, address: event.address });
|
|
91
|
+
this.form.controls.address.setValue(event.address);
|
|
92
|
+
this.form.controls.address.setErrors(event.address && event.coordinates ? null : { invalidField: true });
|
|
93
|
+
}
|
|
94
|
+
resetModal() {
|
|
95
|
+
this.recurringTypeChanged = false;
|
|
96
|
+
this.editOptionsCtrl.setValue(null);
|
|
97
|
+
this.openRecurringOptions = false;
|
|
98
|
+
this.openModal = false;
|
|
99
|
+
this.closeForm.emit();
|
|
100
|
+
}
|
|
101
|
+
initializeEventForm() {
|
|
102
|
+
this.modalTitle = this.editMode ? this.event.title : this.fallbackTranslatePipe.transform('CALENDAR.NEW_EVENT', 'New event');
|
|
103
|
+
this.secondaryButtonTitle = this.editMode ? this.fallbackTranslatePipe.transform('BUTTONS.DELETE', 'Delete') : null;
|
|
104
|
+
this.cancelButtonTitle = this.editMode ? null : this.fallbackTranslatePipe.transform('BUTTONS.CANCEL', 'Cancel');
|
|
105
|
+
this.submitButtonTitle = this.editMode ? this.fallbackTranslatePipe.transform('BUTTONS.EDIT', 'Edit') : this.fallbackTranslatePipe.transform('BUTTONS.SAVE', 'Save');
|
|
106
|
+
if (!this.editMode) {
|
|
107
|
+
this.buildForm();
|
|
108
|
+
}
|
|
109
|
+
this.openModal = true;
|
|
110
|
+
}
|
|
111
|
+
buildForm() {
|
|
112
|
+
this.recurringOptions = recurringOptions.map((option) => {
|
|
113
|
+
return { ...option, title: this.fallbackTranslatePipe.transform(option.title, option.name) };
|
|
114
|
+
});
|
|
115
|
+
this.recurringException =
|
|
116
|
+
this.calendarUtilService.getExceptionEvent(this.event, this.event.recurringPattern?.exceptions) || this.calendarUtilService.getUpdatedRecurringException(this.event);
|
|
117
|
+
const startDate = new Date(this.recurringException?.startDate || this.event.recurringStartDate || this.event.startDate);
|
|
118
|
+
this.eventStart = startOfDay(startDate);
|
|
119
|
+
this.calendarUtilService.setEventTime(this.event);
|
|
120
|
+
const eventTimes = this.calendarUtilService.getEventTimes(this.event, this.recurringException, true);
|
|
121
|
+
const eventNote = this.recurringException?.note || this.event.note ? this.calendarUtilService.removeHtmlTags(this.recurringException?.note || this.event.note) : '';
|
|
122
|
+
this.form = this.fb.nonNullable.group({
|
|
123
|
+
_id: [this.event._id, []],
|
|
124
|
+
accountId: [this.event.accountId, []],
|
|
125
|
+
type: [this.event.type || EventTypes.USER, []],
|
|
126
|
+
email: [this.event.email, []],
|
|
127
|
+
title: [this.recurringException?.title || this.event.title, this.calendarUtilService.isProviderEvent(this.event) ? [] : [Validators.required]],
|
|
128
|
+
allDay: new FormControl(this.recurringException?.allDay || this.event.allDay || false, []),
|
|
129
|
+
startDate: new FormControl(startDate, [Validators.required]),
|
|
130
|
+
startTime: new FormControl(eventTimes.startTime, [Validators.required]),
|
|
131
|
+
endDate: new FormControl(new Date(!this.event._id ? startDate : this.event.recurringEndDate || this.event.endDate), [Validators.required]),
|
|
132
|
+
endTime: new FormControl(eventTimes.endTime, [Validators.required]),
|
|
133
|
+
note: [eventNote, []],
|
|
134
|
+
location: [this.recurringException?.location || this.event.location, []],
|
|
135
|
+
address: [this.recurringException?.location?.address || this.event.location?.address, this.event?.type ? [] : [Validators.required]],
|
|
136
|
+
recurringPattern: this.fb.nonNullable.group({
|
|
137
|
+
type: [!this.event._id ? recurringOptions[0].type : this.event.recurringPattern?.type, []],
|
|
138
|
+
}),
|
|
139
|
+
}, {
|
|
140
|
+
validators: [DateRangeValidator('startDate', 'endDate'), TimeRangeValidator('startTime', 'endTime')],
|
|
141
|
+
});
|
|
142
|
+
this.eventTime = differenceInMinutes(eventTimes.endTime, eventTimes.startTime);
|
|
143
|
+
this.handleAllDayEvents(this.event.allDay);
|
|
144
|
+
this.watchFormFields();
|
|
145
|
+
this.initialFormValue = this.form.getRawValue();
|
|
146
|
+
}
|
|
147
|
+
watchFormFields() {
|
|
148
|
+
this.form.controls.allDay.valueChanges.pipe(takeUntil(this.componentDestroyed$)).subscribe((value) => this.handleAllDayEvents(value, true));
|
|
149
|
+
this.form.controls.address.valueChanges.pipe(takeUntil(this.componentDestroyed$)).subscribe((value) => {
|
|
150
|
+
if (value && !this.form.value.location) {
|
|
151
|
+
this.form.controls.address.setErrors({ invalidField: true });
|
|
152
|
+
}
|
|
153
|
+
if (!value) {
|
|
154
|
+
this.form.controls.location.setValue(null);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
// ------- watch start date recurring -------------
|
|
158
|
+
this.form.controls.startDate.valueChanges.pipe(takeUntil(this.componentDestroyed$)).subscribe((value) => {
|
|
159
|
+
if (value && !this.form.controls.allDay.value) {
|
|
160
|
+
this.form.controls.endDate.setValue(new Date(value));
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
this.form.controls.startTime.valueChanges.pipe(takeUntil(this.componentDestroyed$)).subscribe((value) => {
|
|
164
|
+
if (value) {
|
|
165
|
+
this.form.controls.endTime.setValue(addMinutes(value['slotValue'] || new Date(value), this.eventTime));
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
handleAllDayEvents(allDay, onChange) {
|
|
170
|
+
['endDate', 'endTime', 'startTime'].forEach((controlName) => {
|
|
171
|
+
this.form.controls[controlName].setValidators(allDay ? [] : [Validators.required]);
|
|
172
|
+
this.form.controls[controlName].updateValueAndValidity();
|
|
173
|
+
});
|
|
174
|
+
if (onChange) {
|
|
175
|
+
if (allDay) {
|
|
176
|
+
const startDate = this.form.controls.startDate.value;
|
|
177
|
+
this.form.controls.endDate.setValue(startDate ? startOfDay(new Date(startDate)) : null);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
const startTime = this.form.controls.startTime.value;
|
|
181
|
+
const time = startTime && startTime['slotValue'] ? startOfDay(new Date(startTime['slotValue'])) : null;
|
|
182
|
+
this.form.controls.startTime.setValue(time);
|
|
183
|
+
this.form.controls.endTime.setValue(time);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
updateEvent() {
|
|
188
|
+
if (this.editOptionsCtrl.value || this.form) {
|
|
189
|
+
this.saveEvent();
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
this.buildForm();
|
|
193
|
+
this.modalTitle = this.fallbackTranslatePipe.transform('CALENDAR.UPDATE_EVENT', 'Update Event');
|
|
194
|
+
this.submitButtonTitle = this.fallbackTranslatePipe.transform('BUTTONS.SAVE', 'Save');
|
|
195
|
+
this.cancelButtonTitle = this.fallbackTranslatePipe.transform('BUTTONS.CANCEL', 'Cancel');
|
|
196
|
+
this.secondaryButtonTitle = null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
allowSubmission() {
|
|
200
|
+
if (this.form.invalid) {
|
|
201
|
+
this.form.markAllAsTouched();
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
if (this.form.value.address && !this.form.value.location) {
|
|
205
|
+
this.form.controls['address'].setErrors({ invalidField: true });
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
if (this.openRecurringOptions) {
|
|
209
|
+
this.updateRecurringEvent.emit({
|
|
210
|
+
event: this.updatedEvent,
|
|
211
|
+
selectedRecurringOption: this.editOptionsCtrl.value,
|
|
212
|
+
recurringTypeChanged: this.recurringTypeChanged,
|
|
213
|
+
});
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
submitFormEvent(event, formValue) {
|
|
219
|
+
this.submitForm.emit({
|
|
220
|
+
event,
|
|
221
|
+
initialFormValue: this.initialFormValue,
|
|
222
|
+
formValue,
|
|
223
|
+
selectedRecurringOption: this.editOptionsCtrl.value,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
onEventChange(event) {
|
|
227
|
+
this.editMode = !!event?._id;
|
|
228
|
+
this._event = event;
|
|
229
|
+
this.editOptionsCtrl.setValue(null);
|
|
230
|
+
if (!event) {
|
|
231
|
+
this.openModal = false;
|
|
232
|
+
this.form = null;
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
this.initializeEventForm();
|
|
236
|
+
}
|
|
237
|
+
this.cdr.detectChanges;
|
|
238
|
+
}
|
|
239
|
+
onDragEvent(event) {
|
|
240
|
+
this.editMode = !!event?._id;
|
|
241
|
+
this.openModal = !this._draggedEvent && event?.recurring;
|
|
242
|
+
this.openRecurringOptions = this.openModal;
|
|
243
|
+
this.modalTitle = this.openModal ? this.fallbackTranslatePipe.transform('CALENDAR.EDIT_RECURRING_EVENT', 'Edit recurring event') : null;
|
|
244
|
+
this.cancelButtonTitle = this.openModal ? this.fallbackTranslatePipe.transform('BUTTONS.CANCEL', 'Cancel') : null;
|
|
245
|
+
this.submitButtonTitle = this.openModal ? this.fallbackTranslatePipe.transform('BUTTONS.EDIT', 'Edit') : null;
|
|
246
|
+
this.secondaryButtonTitle = null;
|
|
247
|
+
this._draggedEvent = event;
|
|
248
|
+
if (this._draggedEvent && !this.openModal) {
|
|
249
|
+
this.submitFormEvent(this._draggedEvent, this.draggedEvent);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibEventFormComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormBuilder }, { token: i2.CalendarUtilsService }, { token: i3.FallbackTranslatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
253
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: LibEventFormComponent, selector: "lib-event-form", inputs: { calendars: "calendars", event: "event", draggedEvent: "draggedEvent" }, outputs: { updateRecurringEvent: "updateRecurringEvent", updateDraggedEvent: "updateDraggedEvent", delete: "delete", closeForm: "closeForm", submitForm: "submitForm" }, usesInheritance: true, ngImport: i0, template: "<lib-bottom-modal\n [title]=\"modalTitle\"\n [(isOpen)]=\"openModal\"\n [(showConfirm)]=\"showConfirm\"\n [confirmButton]=\"'CONFIRM.YES' | fallbackTranslate: 'Yes'\"\n [confirmCancelButton]=\"'CONFIRM.No' | fallbackTranslate: 'No'\"\n [confirmationTitle]=\"'CONFIRM.ARE_YOU_SURE' | fallbackTranslate: 'Confirm Deletion'\"\n [confirmationMsg]=\"'CONFIRM.ARE_YOU_SURE_MESSAGE' | fallbackTranslate: 'Sure you want to delete?'\"\n [showCloseBtn]=\"!cancelButtonTitle && editMode\"\n [customClass]=\"'calendar-event-modal'\"\n [loading]=\"loading$ | async\"\n [validModal]=\"(!form || form.valid) && (loading$ | async) !== true\"\n [submitButtonTitle]=\"submitButtonTitle\"\n [secondaryButtonTitle]=\"secondaryButtonTitle\"\n [cancelButtonTitle]=\"cancelButtonTitle\"\n (secondaryButtonClick)=\"onModalSecondaryButtonClick()\"\n (closeModal)=\"resetModal()\"\n (submitModal)=\"onSubmitModal()\"\n (confirmEvent)=\"onDeleteConfirm()\"\n>\n <div class=\"event-modal\">\n <lib-event-info [event]=\"event\" [calendars]=\"calendars\" *ngIf=\"!form && editMode && !openRecurringOptions\"></lib-event-info>\n <lib-edit-recurring-event [editOptionsCtrl]=\"editOptionsCtrl\" [excludeCurrentInstance]=\"recurringTypeChanged\" *ngIf=\"openRecurringOptions\"></lib-edit-recurring-event>\n <ng-content></ng-content>\n <form [formGroup]=\"form\" *ngIf=\"form && !openRecurringOptions\" autocomplete=\"off\" appFocusInvalidInput (ngSubmit)=\"saveEvent()\" (keyup.enter)=\"saveEvent()\" id=\"event-form\">\n <div class=\"form-body\">\n <div class=\"form-row center-content\">\n <div class=\"event-title-field\">\n <lib-input-field\n maxLength=\"2000\"\n formControlName=\"title\"\n type=\"text\"\n [readonly]=\"loading$ | async\"\n [label]=\"'CALENDAR.TITLE_FIELD' | fallbackTranslate: 'Title'\"\n [trimWhiteSpace]=\"false\"\n ></lib-input-field>\n <lib-error-message class=\"input-error event-input-field-error\" [config]=\"{ control: form.controls['title'] }\"></lib-error-message>\n </div>\n </div>\n <div class=\"form-row event-dates\">\n <div class=\"input-field-container input-field-container-group\">\n <div class=\"event-date-container\" [ngClass]=\"{ 'input-field-container-full-row': !form.controls['allDay'].value }\">\n <lib-input-date-field\n class=\"event-date\"\n formControlName=\"startDate\"\n [readonly]=\"loading$ | async\"\n [hieActions]=\"true\"\n [showIcon]=\"true\"\n [label]=\"'CALENDAR.START_DATE' | fallbackTranslate: 'Start Date'\"\n ></lib-input-date-field>\n <lib-error-message class=\"input-error event-input-field-error\" [config]=\"{ control: form.controls['startDate'] }\"></lib-error-message>\n </div>\n @if (form.controls['allDay'].value) {\n <lib-input-date-field\n class=\"event-date event-end-date\"\n formControlName=\"endDate\"\n [disabled]=\"loading$ | async\"\n [hieActions]=\"true\"\n [showIcon]=\"true\"\n [label]=\"'CALENDAR.END_DATE' | fallbackTranslate: 'End Date'\"\n ></lib-input-date-field>\n <lib-error-message class=\"input-error event-input-field-error\" [config]=\"{ control: form.controls['endDate'] }\"></lib-error-message>\n }\n </div>\n </div>\n\n @if (!form.controls['allDay'].value) {\n <div class=\"form-row\">\n <div class=\"input-field-container input-field-container-group time-fields-group\">\n <div class=\"time-field\">\n <lib-input-time-field\n formControlName=\"startTime\"\n [showIcon]=\"true\"\n [startDate]=\"eventStart\"\n [interval]=\"15\"\n [disabled]=\"loading$ | async\"\n [label]=\"'CALENDAR.STARTS' | fallbackTranslate: 'Starts'\"\n ></lib-input-time-field>\n <lib-error-message class=\"input-error event-input-field-error\" [config]=\"{ control: form.controls['startTime'] }\"></lib-error-message>\n </div>\n <div class=\"time-field\">\n <lib-input-time-field\n class=\"end-time\"\n formControlName=\"endTime\"\n [interval]=\"15\"\n [showIcon]=\"true\"\n [displaySlotTime]=\"true\"\n [fromTime]=\"\n form.controls.startTime.value && form.controls.startTime.value['slotValue'] ? form.controls.startTime.value['slotValue'] : form.controls.startTime.value\n \"\n [startDate]=\"eventStart\"\n [disabled]=\"loading$ | async\"\n [label]=\"'CALENDAR.ENDS' | fallbackTranslate: 'Ends'\"\n ></lib-input-time-field>\n <lib-error-message class=\"input-error event-input-field-error\" [config]=\"{ control: form.controls['endTime'] }\"></lib-error-message>\n </div>\n </div>\n </div>\n }\n\n <div class=\"form-row recurring\">\n <div class=\"recurring-select\" formGroupName=\"recurringPattern\">\n <lib-input-field-select\n formControlName=\"type\"\n [optionLabel]=\"(recurringOptions[0].title | fallbackTranslate: 'noTrnslations') === 'noTrnslations' ? 'name' : 'title'\"\n [optionValue]=\"'type'\"\n [options]=\"recurringOptions\"\n [disabled]=\"loading$ | async\"\n >\n </lib-input-field-select>\n </div>\n <div class=\"allDay-container\">\n <ion-item class=\"no-shadow allDay\">\n <label>\n <lib-dashed-checkbox formControlName=\"allDay\" [disabled]=\"loading$ | async\"></lib-dashed-checkbox>\n <span>{{ 'CALENDAR.ALL_DAY' | fallbackTranslate: 'All day' }}</span>\n </label>\n </ion-item>\n </div>\n </div>\n\n <div class=\"form-row address\">\n <div class=\"input-field-container\">\n <lib-input-field\n maxLength=\"2000\"\n [trimWhiteSpace]=\"false\"\n formControlName=\"address\"\n [enableGoogleAddress]=\"true\"\n [address]=\"form.controls['address'].value\"\n (locationChange)=\"onLocationChange($event)\"\n [readonly]=\"loading$ | async\"\n [label]=\"'FIELDS.ADD_LOCATION' | fallbackTranslate: 'Location'\"\n >\n </lib-input-field>\n <lib-error-message class=\"input-error\" [config]=\"{ control: form.controls['address'] }\"></lib-error-message>\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"event-note-field\">\n <lib-input-field\n formControlName=\"note\"\n [textarea]=\"true\"\n [label]=\"'FIELDS.ADD_DESCRIPTION' | fallbackTranslate: 'Description'\"\n maxLength=\"2000\"\n [readonly]=\"loading$ | async\"\n ></lib-input-field>\n </div>\n </div>\n </div>\n </form>\n </div>\n</lib-bottom-modal>\n", styles: [".event-modal{--input-width: 100%;--input-height: 48px;--border-radius: 100px;--input-icon-color: #fe3c72;--input-font-color: #fff;--dropdown-background: linear-gradient(191.18deg, #27242c 61.33%, #0c0b0e 101.43%);--input-font-family: \"Gilroy-Regular\", serif;--label-color: grey;--input-field-box-shadow: inset 17px 22px 20px 2.5px rgba(17, 16, 20, .7), inset -2px -2px 8px rgba(203, 199, 209, .5);--input-number-filed-font: var(--font-family);--textarea-height: 100px !important;position:relative;display:block;width:100%;padding:0 20px 10px;max-height:72vh;overflow:auto}.event-modal .form-row{display:flex;flex-direction:row;margin-bottom:10px}.event-modal .form-row.form-footer{align-items:flex-end;justify-content:flex-end;margin-bottom:-15px}.event-modal .form-row.form-footer lib-primary-btn{width:100px}.event-modal .form-row.form-row-error{margin:-10px 0 0;padding:0;height:20px}.event-modal .form-row.recurring{margin:12px 0;display:flex}.event-modal .form-row.recurring .allDay-container,.event-modal .form-row.recurring .recurring-select{width:50%}.event-modal .form-row.recurring .recurring-select lib-input-field-select{width:100%}.event-modal .form-row.recurring .allDay-container{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-end;margin-top:-10px}.event-modal form{padding:5px 5px 0}.event-modal form .form-body{max-width:100%;position:relative;display:block}.event-modal ion-item ion-label{font-family:Gilroy-Regular,serif!important}.event-modal ion-item ion-label:not(.allDay){display:flex!important;flex-direction:row;align-items:center;justify-content:center}.event-modal ion-item.allDay{margin-top:-10px;width:fit-content;--min-height: 50px}.event-modal ion-item.allDay label{display:flex;gap:10px;align-items:center;font-family:Gilroy-Regular,serif;cursor:pointer}.event-modal ion-item.allDay lib-dashed-checkbox{--size: 24px;--color: var(--cyrano-pink-shade-1)}.event-modal .event-title-field,.event-modal .event-note-field{position:relative;display:block;width:100%;padding-top:10px}.event-modal .event-title-field lib-input-field,.event-modal .event-note-field lib-input-field{position:relative;width:100%;min-width:100%}.event-modal .input-field-container{padding-top:2px;width:100%}.event-modal .input-field-container.input-field-container-group{display:flex;gap:5px}.event-modal .input-field-container.input-field-container-group div{width:50%}.event-modal .input-field-container.input-field-container-group div.input-field-container-full-row{width:100%}.event-modal .input-field-container .time-fields{display:flex;gap:10px}.event-modal .input-field-container lib-input-field{width:100%}.event-modal .field-error{position:relative;display:block;width:100%}@media screen and (max-width: 500px){.event-modal .event-date-container{margin-bottom:15px}.event-modal .input-field-container-group{display:flex;flex-direction:column}.event-modal .input-field-container-group div{width:100%!important}.event-modal .input-field-container-group.time-fields-group{flex-direction:row}.event-modal .form-row.recurring{display:block}.event-modal .form-row.recurring .allDay-container,.event-modal .form-row.recurring .recurring-select{width:100%}.event-modal .form-row.recurring .allDay-container{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-end}.event-modal .form-row.recurring .allDay-container ion-item.allDay{padding-left:0;margin-top:10px}.event-modal .form-row.address{margin-top:-20px}.event-modal .form-row.event-dates{margin-bottom:0}}@media screen and (max-width: 350px){.event-modal .input-placeholder.input-placeholder-date .time-placeholder{margin-left:0}}.event-modal .event-input-field-error{margin-top:-20px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i6.DashedCheckboxComponent, selector: "lib-dashed-checkbox", inputs: ["checked", "disabled"], outputs: ["toggle"] }, { kind: "component", type: i6.InputDateFieldComponent, selector: "lib-input-date-field", inputs: ["label", "defaultDate", "maxDate", "minDate", "showTime", "hieActions", "readonly", "defaultDayHighlight", "showIcon", "timeOnly", "view", "disabled", "dateFormat", "placeholder", "appendTo", "stepMinute", "mask", "styleClass", "timeFormat"], outputs: ["focusEvent"] }, { kind: "component", type: i6.InputFieldComponent, selector: "lib-input-field,[lib-input-field]", inputs: ["name", "autocomplete", "label", "placeholder", "type", "readonly", "focus", "enableGoogleAddress", "locationAutocompleteConfig", "defaultLocation", "mask", "prefix", "suffix", "maxLength", "value", "address", "textarea", "resize", "counter", "patterns", "trimWhiteSpace", "disabled"], outputs: ["mapError", "locationChange", "keyDown", "onBlur"] }, { kind: "component", type: i6.InputFieldSelectComponent, selector: "lib-input-field-select", inputs: ["multiple", "label", "placeholder", "optionLabel", "optionValue", "options", "optionsTemplates", "filterBy", "enableFilter", "readonly", "disabled", "showClear", "editable", "withTemplate", "enableTranslation"], outputs: ["valueChange"] }, { kind: "component", type: i6.InputTimeFieldComponent, selector: "lib-input-time-field", inputs: ["startDate", "interval", "displaySlotTime", "fromTime", "format", "label", "readonly", "showIcon", "disabled"], outputs: ["focusEvent"] }, { kind: "component", type: i6.BottomModalComponent, selector: "lib-bottom-modal", inputs: ["breakpoints", "initialBreakpoint", "isOpen", "canDismiss", "showArrow", "showBackBtn", "showConfirm", "showCloseBtn", "loading", "showHeaderSeparator", "title", "confirmationTitle", "confirmationMsg", "confirmButton", "confirmCancelButton", "description", "secondaryButtonTitle", "submitButtonTitle", "cancelButtonTitle", "validModal", "adaptToContentHeight", "customClass"], outputs: ["isOpenChange", "breakpointChange", "closeModal", "submitModal", "secondaryButtonClick", "backClick", "showConfirmChange", "confirmEvent"] }, { kind: "component", type: i6.LibErrorMessageComponent, selector: "lib-error-message", inputs: ["config"] }, { kind: "component", type: i7.LibEventInfoComponent, selector: "lib-event-info", inputs: ["event", "calendars"] }, { kind: "component", type: i8.LibEditRecurringEventComponent, selector: "lib-edit-recurring-event", inputs: ["excludeCurrentInstance", "editOptionsCtrl"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.FallbackTranslatePipe, name: "fallbackTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
254
|
+
}
|
|
255
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibEventFormComponent, decorators: [{
|
|
256
|
+
type: Component,
|
|
257
|
+
args: [{ selector: 'lib-event-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<lib-bottom-modal\n [title]=\"modalTitle\"\n [(isOpen)]=\"openModal\"\n [(showConfirm)]=\"showConfirm\"\n [confirmButton]=\"'CONFIRM.YES' | fallbackTranslate: 'Yes'\"\n [confirmCancelButton]=\"'CONFIRM.No' | fallbackTranslate: 'No'\"\n [confirmationTitle]=\"'CONFIRM.ARE_YOU_SURE' | fallbackTranslate: 'Confirm Deletion'\"\n [confirmationMsg]=\"'CONFIRM.ARE_YOU_SURE_MESSAGE' | fallbackTranslate: 'Sure you want to delete?'\"\n [showCloseBtn]=\"!cancelButtonTitle && editMode\"\n [customClass]=\"'calendar-event-modal'\"\n [loading]=\"loading$ | async\"\n [validModal]=\"(!form || form.valid) && (loading$ | async) !== true\"\n [submitButtonTitle]=\"submitButtonTitle\"\n [secondaryButtonTitle]=\"secondaryButtonTitle\"\n [cancelButtonTitle]=\"cancelButtonTitle\"\n (secondaryButtonClick)=\"onModalSecondaryButtonClick()\"\n (closeModal)=\"resetModal()\"\n (submitModal)=\"onSubmitModal()\"\n (confirmEvent)=\"onDeleteConfirm()\"\n>\n <div class=\"event-modal\">\n <lib-event-info [event]=\"event\" [calendars]=\"calendars\" *ngIf=\"!form && editMode && !openRecurringOptions\"></lib-event-info>\n <lib-edit-recurring-event [editOptionsCtrl]=\"editOptionsCtrl\" [excludeCurrentInstance]=\"recurringTypeChanged\" *ngIf=\"openRecurringOptions\"></lib-edit-recurring-event>\n <ng-content></ng-content>\n <form [formGroup]=\"form\" *ngIf=\"form && !openRecurringOptions\" autocomplete=\"off\" appFocusInvalidInput (ngSubmit)=\"saveEvent()\" (keyup.enter)=\"saveEvent()\" id=\"event-form\">\n <div class=\"form-body\">\n <div class=\"form-row center-content\">\n <div class=\"event-title-field\">\n <lib-input-field\n maxLength=\"2000\"\n formControlName=\"title\"\n type=\"text\"\n [readonly]=\"loading$ | async\"\n [label]=\"'CALENDAR.TITLE_FIELD' | fallbackTranslate: 'Title'\"\n [trimWhiteSpace]=\"false\"\n ></lib-input-field>\n <lib-error-message class=\"input-error event-input-field-error\" [config]=\"{ control: form.controls['title'] }\"></lib-error-message>\n </div>\n </div>\n <div class=\"form-row event-dates\">\n <div class=\"input-field-container input-field-container-group\">\n <div class=\"event-date-container\" [ngClass]=\"{ 'input-field-container-full-row': !form.controls['allDay'].value }\">\n <lib-input-date-field\n class=\"event-date\"\n formControlName=\"startDate\"\n [readonly]=\"loading$ | async\"\n [hieActions]=\"true\"\n [showIcon]=\"true\"\n [label]=\"'CALENDAR.START_DATE' | fallbackTranslate: 'Start Date'\"\n ></lib-input-date-field>\n <lib-error-message class=\"input-error event-input-field-error\" [config]=\"{ control: form.controls['startDate'] }\"></lib-error-message>\n </div>\n @if (form.controls['allDay'].value) {\n <lib-input-date-field\n class=\"event-date event-end-date\"\n formControlName=\"endDate\"\n [disabled]=\"loading$ | async\"\n [hieActions]=\"true\"\n [showIcon]=\"true\"\n [label]=\"'CALENDAR.END_DATE' | fallbackTranslate: 'End Date'\"\n ></lib-input-date-field>\n <lib-error-message class=\"input-error event-input-field-error\" [config]=\"{ control: form.controls['endDate'] }\"></lib-error-message>\n }\n </div>\n </div>\n\n @if (!form.controls['allDay'].value) {\n <div class=\"form-row\">\n <div class=\"input-field-container input-field-container-group time-fields-group\">\n <div class=\"time-field\">\n <lib-input-time-field\n formControlName=\"startTime\"\n [showIcon]=\"true\"\n [startDate]=\"eventStart\"\n [interval]=\"15\"\n [disabled]=\"loading$ | async\"\n [label]=\"'CALENDAR.STARTS' | fallbackTranslate: 'Starts'\"\n ></lib-input-time-field>\n <lib-error-message class=\"input-error event-input-field-error\" [config]=\"{ control: form.controls['startTime'] }\"></lib-error-message>\n </div>\n <div class=\"time-field\">\n <lib-input-time-field\n class=\"end-time\"\n formControlName=\"endTime\"\n [interval]=\"15\"\n [showIcon]=\"true\"\n [displaySlotTime]=\"true\"\n [fromTime]=\"\n form.controls.startTime.value && form.controls.startTime.value['slotValue'] ? form.controls.startTime.value['slotValue'] : form.controls.startTime.value\n \"\n [startDate]=\"eventStart\"\n [disabled]=\"loading$ | async\"\n [label]=\"'CALENDAR.ENDS' | fallbackTranslate: 'Ends'\"\n ></lib-input-time-field>\n <lib-error-message class=\"input-error event-input-field-error\" [config]=\"{ control: form.controls['endTime'] }\"></lib-error-message>\n </div>\n </div>\n </div>\n }\n\n <div class=\"form-row recurring\">\n <div class=\"recurring-select\" formGroupName=\"recurringPattern\">\n <lib-input-field-select\n formControlName=\"type\"\n [optionLabel]=\"(recurringOptions[0].title | fallbackTranslate: 'noTrnslations') === 'noTrnslations' ? 'name' : 'title'\"\n [optionValue]=\"'type'\"\n [options]=\"recurringOptions\"\n [disabled]=\"loading$ | async\"\n >\n </lib-input-field-select>\n </div>\n <div class=\"allDay-container\">\n <ion-item class=\"no-shadow allDay\">\n <label>\n <lib-dashed-checkbox formControlName=\"allDay\" [disabled]=\"loading$ | async\"></lib-dashed-checkbox>\n <span>{{ 'CALENDAR.ALL_DAY' | fallbackTranslate: 'All day' }}</span>\n </label>\n </ion-item>\n </div>\n </div>\n\n <div class=\"form-row address\">\n <div class=\"input-field-container\">\n <lib-input-field\n maxLength=\"2000\"\n [trimWhiteSpace]=\"false\"\n formControlName=\"address\"\n [enableGoogleAddress]=\"true\"\n [address]=\"form.controls['address'].value\"\n (locationChange)=\"onLocationChange($event)\"\n [readonly]=\"loading$ | async\"\n [label]=\"'FIELDS.ADD_LOCATION' | fallbackTranslate: 'Location'\"\n >\n </lib-input-field>\n <lib-error-message class=\"input-error\" [config]=\"{ control: form.controls['address'] }\"></lib-error-message>\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"event-note-field\">\n <lib-input-field\n formControlName=\"note\"\n [textarea]=\"true\"\n [label]=\"'FIELDS.ADD_DESCRIPTION' | fallbackTranslate: 'Description'\"\n maxLength=\"2000\"\n [readonly]=\"loading$ | async\"\n ></lib-input-field>\n </div>\n </div>\n </div>\n </form>\n </div>\n</lib-bottom-modal>\n", styles: [".event-modal{--input-width: 100%;--input-height: 48px;--border-radius: 100px;--input-icon-color: #fe3c72;--input-font-color: #fff;--dropdown-background: linear-gradient(191.18deg, #27242c 61.33%, #0c0b0e 101.43%);--input-font-family: \"Gilroy-Regular\", serif;--label-color: grey;--input-field-box-shadow: inset 17px 22px 20px 2.5px rgba(17, 16, 20, .7), inset -2px -2px 8px rgba(203, 199, 209, .5);--input-number-filed-font: var(--font-family);--textarea-height: 100px !important;position:relative;display:block;width:100%;padding:0 20px 10px;max-height:72vh;overflow:auto}.event-modal .form-row{display:flex;flex-direction:row;margin-bottom:10px}.event-modal .form-row.form-footer{align-items:flex-end;justify-content:flex-end;margin-bottom:-15px}.event-modal .form-row.form-footer lib-primary-btn{width:100px}.event-modal .form-row.form-row-error{margin:-10px 0 0;padding:0;height:20px}.event-modal .form-row.recurring{margin:12px 0;display:flex}.event-modal .form-row.recurring .allDay-container,.event-modal .form-row.recurring .recurring-select{width:50%}.event-modal .form-row.recurring .recurring-select lib-input-field-select{width:100%}.event-modal .form-row.recurring .allDay-container{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-end;margin-top:-10px}.event-modal form{padding:5px 5px 0}.event-modal form .form-body{max-width:100%;position:relative;display:block}.event-modal ion-item ion-label{font-family:Gilroy-Regular,serif!important}.event-modal ion-item ion-label:not(.allDay){display:flex!important;flex-direction:row;align-items:center;justify-content:center}.event-modal ion-item.allDay{margin-top:-10px;width:fit-content;--min-height: 50px}.event-modal ion-item.allDay label{display:flex;gap:10px;align-items:center;font-family:Gilroy-Regular,serif;cursor:pointer}.event-modal ion-item.allDay lib-dashed-checkbox{--size: 24px;--color: var(--cyrano-pink-shade-1)}.event-modal .event-title-field,.event-modal .event-note-field{position:relative;display:block;width:100%;padding-top:10px}.event-modal .event-title-field lib-input-field,.event-modal .event-note-field lib-input-field{position:relative;width:100%;min-width:100%}.event-modal .input-field-container{padding-top:2px;width:100%}.event-modal .input-field-container.input-field-container-group{display:flex;gap:5px}.event-modal .input-field-container.input-field-container-group div{width:50%}.event-modal .input-field-container.input-field-container-group div.input-field-container-full-row{width:100%}.event-modal .input-field-container .time-fields{display:flex;gap:10px}.event-modal .input-field-container lib-input-field{width:100%}.event-modal .field-error{position:relative;display:block;width:100%}@media screen and (max-width: 500px){.event-modal .event-date-container{margin-bottom:15px}.event-modal .input-field-container-group{display:flex;flex-direction:column}.event-modal .input-field-container-group div{width:100%!important}.event-modal .input-field-container-group.time-fields-group{flex-direction:row}.event-modal .form-row.recurring{display:block}.event-modal .form-row.recurring .allDay-container,.event-modal .form-row.recurring .recurring-select{width:100%}.event-modal .form-row.recurring .allDay-container{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-end}.event-modal .form-row.recurring .allDay-container ion-item.allDay{padding-left:0;margin-top:10px}.event-modal .form-row.address{margin-top:-20px}.event-modal .form-row.event-dates{margin-bottom:0}}@media screen and (max-width: 350px){.event-modal .input-placeholder.input-placeholder-date .time-placeholder{margin-left:0}}.event-modal .event-input-field-error{margin-top:-20px}\n"] }]
|
|
258
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FormBuilder }, { type: i2.CalendarUtilsService }, { type: i3.FallbackTranslatePipe }], propDecorators: { calendars: [{
|
|
259
|
+
type: Input
|
|
260
|
+
}], event: [{
|
|
261
|
+
type: Input
|
|
262
|
+
}], draggedEvent: [{
|
|
263
|
+
type: Input
|
|
264
|
+
}], updateRecurringEvent: [{
|
|
265
|
+
type: Output
|
|
266
|
+
}], updateDraggedEvent: [{
|
|
267
|
+
type: Output
|
|
268
|
+
}], delete: [{
|
|
269
|
+
type: Output
|
|
270
|
+
}], closeForm: [{
|
|
271
|
+
type: Output
|
|
272
|
+
}], submitForm: [{
|
|
273
|
+
type: Output
|
|
274
|
+
}] } });
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoYm9hcmQtY29tcG9uZW50cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC1jb21wb25lbnRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY2FsZW5kYXIvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUFlLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFpQixrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBUXpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7Ozs7O0FBUzFFLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxhQUFhO0lBRXRELElBQWEsS0FBSztRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLENBQVM7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBYSxZQUFZO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsQ0FBUztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUE2QkQsWUFDVSxHQUFzQixFQUN2QixFQUFlLEVBQ2QsbUJBQXlDLEVBQ3pDLHFCQUE0QztRQUVwRCxLQUFLLEVBQUUsQ0FBQztRQUxBLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3ZCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXNCO1FBQ3pDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUEvQjVDLHlCQUFvQixHQUFtQyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUM1Rix1QkFBa0IsR0FBbUMsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFDMUYsV0FBTSxHQUFtQyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUM5RSxjQUFTLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDekQsZUFBVSxHQUFtQyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUdyRixvQkFBZSxHQUEyQyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBMkJuRixDQUFDO0lBRU0sZUFBZTtRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO2dCQUMzQix1QkFBdUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUs7YUFDcEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRU0sMkJBQTJCO1FBQ2hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUN4SCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQzlDLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7WUFDM0IsTUFBTSxZQUFZLEdBQVcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzdHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyRixZQUFZLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztnQkFDaEUsWUFBWSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsb0JBQW9CO29CQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3pKLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQywrQkFBK0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2dCQUNoSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQ25DLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBb0I7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNqRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNHLENBQUM7SUFFTSxVQUFVO1FBQ2YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDcEgsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN0RCxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0I7WUFDckIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZLLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hILElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwSyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FDbkM7WUFDRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDekIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzlDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM3QixLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlJLE1BQU0sRUFBRSxJQUFJLFdBQVcsQ0FBVSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbkcsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFPLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRSxTQUFTLEVBQUUsSUFBSSxXQUFXLENBQU8sVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RSxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEosT0FBTyxFQUFFLElBQUksV0FBVyxDQUFPLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekUsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNyQixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN4RSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEksZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUMxQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQzthQUMzRixDQUFDO1NBQ0gsRUFDRDtZQUNFLFVBQVUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDckcsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEcsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdEcsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN0RyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN6RyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBZSxFQUFFLFFBQWtCO1FBQzVELENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbkYsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUYsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3JELE1BQU0sSUFBSSxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLHVCQUF1QixFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ2hHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMxRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDO2dCQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ3hCLHVCQUF1QixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSztnQkFDbkQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjthQUNoRCxDQUFDLENBQUM7WUFDSCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBYSxFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ25CLEtBQUs7WUFDTCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLFNBQVM7WUFDVCx1QkFBdUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUs7U0FDcEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFhO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7SUFDekIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFhO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksS0FBSyxFQUFFLFNBQVMsQ0FBQztRQUN6RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsK0JBQStCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbEgsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQzsrR0FqUlUscUJBQXFCO21HQUFyQixxQkFBcUIsd1VDdkJsQyx5MU9BeUpBOzs0RkRsSWEscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNO3VMQUd0QyxTQUFTO3NCQUFqQixLQUFLO2dCQUNPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBTU8sWUFBWTtzQkFBeEIsS0FBSztnQkFPSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIERhdGVSYW5nZVZhbGlkYXRvciwgTG9jYXRpb25Nb2RlbCwgVGltZVJhbmdlVmFsaWRhdG9yIH0gZnJvbSAnQG5hbml0ZW5pbmphL2lvbmljLWxpYic7XG5pbXBvcnQgeyBhZGRNaW51dGVzLCBkaWZmZXJlbmNlSW5NaW51dGVzLCBzdGFydE9mRGF5IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGYWxsYmFja1RyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi8uLi9waXBlcy9mYWxsYmFjay10cmFuc2xhdGUvZmFsbGJhY2stdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgRXZlbnRUeXBlcyB9IGZyb20gJy4uLy4uL2VudW1zL2V2ZW50LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBFZGl0UmVjdXJyaW5nRXZlbnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vZW51bXMvcmVjdXJyaW5nLmVkaXQub3B0aW9ucy5lbnVtJztcbmltcG9ydCB7IElDYWxlbmRhckFjY291bnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NhbGVuZGFyLmFjY291bnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElFdmVudEZvcm0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2V2ZW50LmZvcm0uaW50ZXJmYWNlJztcbmltcG9ydCB7IElFdmVudEZvcm1PdXRwdXQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2V2ZW50LmZvcm0ub3V0cHV0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2V2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUmVjdXJyaW5nRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlY3VycmluZy5ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVJlY3VycmluZ0V2ZW50RXhjZXB0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZWN1cnJpbmcuZXhjZXB0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyByZWN1cnJpbmdPcHRpb25zIH0gZnJvbSAnLi4vLi4vbG9va3Vwcy9yZWN1cnJpbmcub3B0aW9ucy5sb29rdXAnO1xuaW1wb3J0IHsgQ2FsZW5kYXJVdGlsc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYWxlbmRhci11dGlscy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWV2ZW50LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZXZlbnQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ldmVudC1mb3JtLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIExpYkV2ZW50Rm9ybUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBASW5wdXQoKSBjYWxlbmRhcnM6IElDYWxlbmRhckFjY291bnRbXTtcbiAgQElucHV0KCkgZ2V0IGV2ZW50KCk6IElFdmVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50O1xuICB9XG4gIHNldCBldmVudChlOiBJRXZlbnQpIHtcbiAgICB0aGlzLm9uRXZlbnRDaGFuZ2UoZSk7XG4gIH1cbiAgQElucHV0KCkgZ2V0IGRyYWdnZWRFdmVudCgpOiBJRXZlbnQge1xuICAgIHJldHVybiB0aGlzLl9kcmFnZ2VkRXZlbnQ7XG4gIH1cbiAgc2V0IGRyYWdnZWRFdmVudChlOiBJRXZlbnQpIHtcbiAgICB0aGlzLm9uRHJhZ0V2ZW50KGUpO1xuICB9XG5cbiAgQE91dHB1dCgpIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBFdmVudEVtaXR0ZXI8SUV2ZW50Rm9ybU91dHB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyPElFdmVudEZvcm1PdXRwdXQ+KCk7XG4gIEBPdXRwdXQoKSB1cGRhdGVEcmFnZ2VkRXZlbnQ6IEV2ZW50RW1pdHRlcjxJRXZlbnRGb3JtT3V0cHV0PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUV2ZW50Rm9ybU91dHB1dD4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZTogRXZlbnRFbWl0dGVyPElFdmVudEZvcm1PdXRwdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJRXZlbnRGb3JtT3V0cHV0PigpO1xuICBAT3V0cHV0KCkgY2xvc2VGb3JtOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzdWJtaXRGb3JtOiBFdmVudEVtaXR0ZXI8SUV2ZW50Rm9ybU91dHB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyPElFdmVudEZvcm1PdXRwdXQ+KCk7XG5cbiAgcHVibGljIGVkaXRNb2RlOiBib29sZWFuO1xuICBwdWJsaWMgZWRpdE9wdGlvbnNDdHJsOiBGb3JtQ29udHJvbDxFZGl0UmVjdXJyaW5nRXZlbnRPcHRpb25zPiA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBwdWJsaWMgbW9kYWxUaXRsZTogc3RyaW5nO1xuICBwdWJsaWMgcmVjdXJyaW5nVHlwZUNoYW5nZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBjYW5jZWxCdXR0b25UaXRsZTogc3RyaW5nO1xuICBwdWJsaWMgc3VibWl0QnV0dG9uVGl0bGU6IHN0cmluZztcbiAgcHVibGljIHNlY29uZGFyeUJ1dHRvblRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBvcGVuTW9kYWw6IGJvb2xlYW47XG4gIHB1YmxpYyBzaG93Q29uZmlybTogYm9vbGVhbjtcbiAgcHVibGljIG9wZW5SZWN1cnJpbmdPcHRpb25zOiBib29sZWFuO1xuICBwdWJsaWMgcmVjdXJyaW5nT3B0aW9uczogSVJlY3VycmluZ0V2ZW50W107XG4gIHB1YmxpYyBldmVudFN0YXJ0OiBEYXRlO1xuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwPElFdmVudEZvcm0+O1xuICBwdWJsaWMgcmVjdXJyaW5nRXhjZXB0aW9uOiBJUmVjdXJyaW5nRXZlbnRFeGNlcHRpb247XG4gIHByaXZhdGUgaW5pdGlhbEZvcm1WYWx1ZTogSUV2ZW50O1xuICBwcml2YXRlIGV2ZW50VGltZTogbnVtYmVyO1xuICBwcml2YXRlIF9ldmVudDogSUV2ZW50O1xuICBwcml2YXRlIF9kcmFnZ2VkRXZlbnQ6IElFdmVudDtcbiAgcHJpdmF0ZSBkZWxldGVDb25maXJtZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgdXBkYXRlZEV2ZW50OiBJRXZlbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjYWxlbmRhclV0aWxTZXJ2aWNlOiBDYWxlbmRhclV0aWxzU2VydmljZSxcbiAgICBwcml2YXRlIGZhbGxiYWNrVHJhbnNsYXRlUGlwZTogRmFsbGJhY2tUcmFuc2xhdGVQaXBlLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIG9uRGVsZXRlQ29uZmlybSgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dDb25maXJtID0gZmFsc2U7XG4gICAgdGhpcy5kZWxldGUuZW1pdCh7IHNlbGVjdGVkUmVjdXJyaW5nT3B0aW9uOiB0aGlzLmVkaXRPcHRpb25zQ3RybC52YWx1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblN1Ym1pdE1vZGFsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlbGV0ZUNvbmZpcm1lZCkge1xuICAgICAgdGhpcy5vbkRlbGV0ZUNvbmZpcm0oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHJhZ2dlZEV2ZW50KSB7XG4gICAgICB0aGlzLnVwZGF0ZURyYWdnZWRFdmVudC5lbWl0KHtcbiAgICAgICAgc2VsZWN0ZWRSZWN1cnJpbmdPcHRpb246IHRoaXMuZWRpdE9wdGlvbnNDdHJsLnZhbHVlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZWRpdE1vZGUgPyB0aGlzLnVwZGF0ZUV2ZW50KCkgOiB0aGlzLnNhdmVFdmVudCgpO1xuICB9XG5cbiAgcHVibGljIG9uTW9kYWxTZWNvbmRhcnlCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5SZWN1cnJpbmdPcHRpb25zID0gdGhpcy5lZGl0T3B0aW9uc0N0cmw/LnZhbHVlID8gZmFsc2UgOiB0aGlzLmV2ZW50LnJlY3VycmluZyB8fCAhIXRoaXMuZXZlbnQucmVjdXJyaW5nRXZlbnRJZDtcbiAgICB0aGlzLnNob3dDb25maXJtID0gIXRoaXMub3BlblJlY3VycmluZ09wdGlvbnM7XG4gICAgaWYgKHRoaXMub3BlblJlY3VycmluZ09wdGlvbnMpIHtcbiAgICAgIHRoaXMuY2FuY2VsQnV0dG9uVGl0bGUgPSB0aGlzLmZhbGxiYWNrVHJhbnNsYXRlUGlwZS50cmFuc2Zvcm0oJ0JVVFRPTlMuQ0FOQ0VMJywgJ0NhbmNlbCcpO1xuICAgICAgdGhpcy5zdWJtaXRCdXR0b25UaXRsZSA9IHRoaXMuZmFsbGJhY2tUcmFuc2xhdGVQaXBlLnRyYW5zZm9ybSgnQlVUVE9OUy5ERUxFVEUnLCAnRGVsZXRlJyk7XG4gICAgICB0aGlzLmRlbGV0ZUNvbmZpcm1lZCA9IHRydWU7XG4gICAgICB0aGlzLnNlY29uZGFyeUJ1dHRvblRpdGxlID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIHNhdmVFdmVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGxvd1N1Ym1pc3Npb24oKSkge1xuICAgICAgY29uc3QgdXBkYXRlZEV2ZW50OiBJRXZlbnQgPSB0aGlzLmNhbGVuZGFyVXRpbFNlcnZpY2UuYnVpbGRVcGRhdGVkRXZlbnQodGhpcy5ldmVudCwgdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgaWYgKCh1cGRhdGVkRXZlbnQucmVjdXJyaW5nICYmIHRoaXMuZXZlbnQucmVjdXJyaW5nKSB8fCB0aGlzLmV2ZW50Py5yZWN1cnJpbmdFdmVudElkKSB7XG4gICAgICAgIHVwZGF0ZWRFdmVudC5yZWN1cnJpbmdTdGFydERhdGUgPSB0aGlzLmV2ZW50LnJlY3VycmluZ1N0YXJ0RGF0ZTtcbiAgICAgICAgdXBkYXRlZEV2ZW50LnJlY3VycmluZ0VuZERhdGUgPSB0aGlzLmV2ZW50LnJlY3VycmluZ0VuZERhdGU7XG4gICAgICAgIHRoaXMudXBkYXRlZEV2ZW50ID0gdXBkYXRlZEV2ZW50O1xuICAgICAgICB0aGlzLnJlY3VycmluZ1R5cGVDaGFuZ2VkID1cbiAgICAgICAgICB0aGlzLnVwZGF0ZWRFdmVudC5yZWN1cnJpbmdQYXR0ZXJuPy50eXBlICE9PSB0aGlzLmV2ZW50LnJlY3VycmluZ1BhdHRlcm4/LnR5cGUgfHwgKHRoaXMudXBkYXRlZEV2ZW50LnJlY3VycmluZ1BhdHRlcm4gJiYgIXRoaXMuZXZlbnQucmVjdXJyaW5nUGF0dGVybik7XG4gICAgICAgIHRoaXMub3BlblJlY3VycmluZ09wdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLm1vZGFsVGl0bGUgPSB0aGlzLmZhbGxiYWNrVHJhbnNsYXRlUGlwZS50cmFuc2Zvcm0oJ0NBTEVOREFSLkVESVRfUkVDVVJSSU5HX0VWRU5UJywgJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyk7XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5QnV0dG9uVGl0bGUgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdWJtaXRGb3JtRXZlbnQodXBkYXRlZEV2ZW50LCB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uTG9jYXRpb25DaGFuZ2UoZXZlbnQ6IExvY2F0aW9uTW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMubG9jYXRpb24uc2V0VmFsdWUoeyBjb29yZGluYXRlczogZXZlbnQuY29vcmRpbmF0ZXMsIGFkZHJlc3M6IGV2ZW50LmFkZHJlc3MgfSk7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFkZHJlc3Muc2V0VmFsdWUoZXZlbnQuYWRkcmVzcyk7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFkZHJlc3Muc2V0RXJyb3JzKGV2ZW50LmFkZHJlc3MgJiYgZXZlbnQuY29vcmRpbmF0ZXMgPyBudWxsIDogeyBpbnZhbGlkRmllbGQ6IHRydWUgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY3VycmluZ1R5cGVDaGFuZ2VkID0gZmFsc2U7XG4gICAgdGhpcy5lZGl0T3B0aW9uc0N0cmwuc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5vcGVuUmVjdXJyaW5nT3B0aW9ucyA9IGZhbHNlO1xuICAgIHRoaXMub3Blbk1vZGFsID0gZmFsc2U7XG4gICAgdGhpcy5jbG9zZUZvcm0uZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRXZlbnRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxUaXRsZSA9IHRoaXMuZWRpdE1vZGUgPyB0aGlzLmV2ZW50LnRpdGxlIDogdGhpcy5mYWxsYmFja1RyYW5zbGF0ZVBpcGUudHJhbnNmb3JtKCdDQUxFTkRBUi5ORVdfRVZFTlQnLCAnTmV3IGV2ZW50Jyk7XG4gICAgdGhpcy5zZWNvbmRhcnlCdXR0b25UaXRsZSA9IHRoaXMuZWRpdE1vZGUgPyB0aGlzLmZhbGxiYWNrVHJhbnNsYXRlUGlwZS50cmFuc2Zvcm0oJ0JVVFRPTlMuREVMRVRFJywgJ0RlbGV0ZScpIDogbnVsbDtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvblRpdGxlID0gdGhpcy5lZGl0TW9kZSA/IG51bGwgOiB0aGlzLmZhbGxiYWNrVHJhbnNsYXRlUGlwZS50cmFuc2Zvcm0oJ0JVVFRPTlMuQ0FOQ0VMJywgJ0NhbmNlbCcpO1xuICAgIHRoaXMuc3VibWl0QnV0dG9uVGl0bGUgPSB0aGlzLmVkaXRNb2RlID8gdGhpcy5mYWxsYmFja1RyYW5zbGF0ZVBpcGUudHJhbnNmb3JtKCdCVVRUT05TLkVESVQnLCAnRWRpdCcpIDogdGhpcy5mYWxsYmFja1RyYW5zbGF0ZVBpcGUudHJhbnNmb3JtKCdCVVRUT05TLlNBVkUnLCAnU2F2ZScpO1xuICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xuICAgICAgdGhpcy5idWlsZEZvcm0oKTtcbiAgICB9XG4gICAgdGhpcy5vcGVuTW9kYWwgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5yZWN1cnJpbmdPcHRpb25zID0gcmVjdXJyaW5nT3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHsgLi4ub3B0aW9uLCB0aXRsZTogdGhpcy5mYWxsYmFja1RyYW5zbGF0ZVBpcGUudHJhbnNmb3JtKG9wdGlvbi50aXRsZSwgb3B0aW9uLm5hbWUpIH07XG4gICAgfSk7XG4gICAgdGhpcy5yZWN1cnJpbmdFeGNlcHRpb24gPVxuICAgICAgdGhpcy5jYWxlbmRhclV0aWxTZXJ2aWNlLmdldEV4Y2VwdGlvbkV2ZW50KHRoaXMuZXZlbnQsIHRoaXMuZXZlbnQucmVjdXJyaW5nUGF0dGVybj8uZXhjZXB0aW9ucykgfHwgdGhpcy5jYWxlbmRhclV0aWxTZXJ2aWNlLmdldFVwZGF0ZWRSZWN1cnJpbmdFeGNlcHRpb24odGhpcy5ldmVudCk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUodGhpcy5yZWN1cnJpbmdFeGNlcHRpb24/LnN0YXJ0RGF0ZSB8fCB0aGlzLmV2ZW50LnJlY3VycmluZ1N0YXJ0RGF0ZSB8fCB0aGlzLmV2ZW50LnN0YXJ0RGF0ZSk7XG4gICAgdGhpcy5ldmVudFN0YXJ0ID0gc3RhcnRPZkRheShzdGFydERhdGUpO1xuICAgIHRoaXMuY2FsZW5kYXJVdGlsU2VydmljZS5zZXRFdmVudFRpbWUodGhpcy5ldmVudCk7XG4gICAgY29uc3QgZXZlbnRUaW1lcyA9IHRoaXMuY2FsZW5kYXJVdGlsU2VydmljZS5nZXRFdmVudFRpbWVzKHRoaXMuZXZlbnQsIHRoaXMucmVjdXJyaW5nRXhjZXB0aW9uLCB0cnVlKTtcbiAgICBjb25zdCBldmVudE5vdGUgPSB0aGlzLnJlY3VycmluZ0V4Y2VwdGlvbj8ubm90ZSB8fCB0aGlzLmV2ZW50Lm5vdGUgPyB0aGlzLmNhbGVuZGFyVXRpbFNlcnZpY2UucmVtb3ZlSHRtbFRhZ3ModGhpcy5yZWN1cnJpbmdFeGNlcHRpb24/Lm5vdGUgfHwgdGhpcy5ldmVudC5ub3RlKSA6ICcnO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIubm9uTnVsbGFibGUuZ3JvdXAoXG4gICAgICB7XG4gICAgICAgIF9pZDogW3RoaXMuZXZlbnQuX2lkLCBbXV0sXG4gICAgICAgIGFjY291bnRJZDogW3RoaXMuZXZlbnQuYWNjb3VudElkLCBbXV0sXG4gICAgICAgIHR5cGU6IFt0aGlzLmV2ZW50LnR5cGUgfHwgRXZlbnRUeXBlcy5VU0VSLCBbXV0sXG4gICAgICAgIGVtYWlsOiBbdGhpcy5ldmVudC5lbWFpbCwgW11dLFxuICAgICAgICB0aXRsZTogW3RoaXMucmVjdXJyaW5nRXhjZXB0aW9uPy50aXRsZSB8fCB0aGlzLmV2ZW50LnRpdGxlLCB0aGlzLmNhbGVuZGFyVXRpbFNlcnZpY2UuaXNQcm92aWRlckV2ZW50KHRoaXMuZXZlbnQpID8gW10gOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBhbGxEYXk6IG5ldyBGb3JtQ29udHJvbDxib29sZWFuPih0aGlzLnJlY3VycmluZ0V4Y2VwdGlvbj8uYWxsRGF5IHx8IHRoaXMuZXZlbnQuYWxsRGF5IHx8IGZhbHNlLCBbXSksXG4gICAgICAgIHN0YXJ0RGF0ZTogbmV3IEZvcm1Db250cm9sPERhdGU+KHN0YXJ0RGF0ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgICAgc3RhcnRUaW1lOiBuZXcgRm9ybUNvbnRyb2w8RGF0ZT4oZXZlbnRUaW1lcy5zdGFydFRpbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICAgIGVuZERhdGU6IG5ldyBGb3JtQ29udHJvbDxEYXRlPihuZXcgRGF0ZSghdGhpcy5ldmVudC5faWQgPyBzdGFydERhdGUgOiB0aGlzLmV2ZW50LnJlY3VycmluZ0VuZERhdGUgfHwgdGhpcy5ldmVudC5lbmREYXRlKSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgICAgZW5kVGltZTogbmV3IEZvcm1Db250cm9sPERhdGU+KGV2ZW50VGltZXMuZW5kVGltZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgICAgbm90ZTogW2V2ZW50Tm90ZSwgW11dLFxuICAgICAgICBsb2NhdGlvbjogW3RoaXMucmVjdXJyaW5nRXhjZXB0aW9uPy5sb2NhdGlvbiB8fCB0aGlzLmV2ZW50LmxvY2F0aW9uLCBbXV0sXG4gICAgICAgIGFkZHJlc3M6IFt0aGlzLnJlY3VycmluZ0V4Y2VwdGlvbj8ubG9jYXRpb24/LmFkZHJlc3MgfHwgdGhpcy5ldmVudC5sb2NhdGlvbj8uYWRkcmVzcywgdGhpcy5ldmVudD8udHlwZSA/IFtdIDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgICAgcmVjdXJyaW5nUGF0dGVybjogdGhpcy5mYi5ub25OdWxsYWJsZS5ncm91cCh7XG4gICAgICAgICAgdHlwZTogWyF0aGlzLmV2ZW50Ll9pZCA/IHJlY3VycmluZ09wdGlvbnNbMF0udHlwZSA6IHRoaXMuZXZlbnQucmVjdXJyaW5nUGF0dGVybj8udHlwZSwgW11dLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRvcnM6IFtEYXRlUmFuZ2VWYWxpZGF0b3IoJ3N0YXJ0RGF0ZScsICdlbmREYXRlJyksIFRpbWVSYW5nZVZhbGlkYXRvcignc3RhcnRUaW1lJywgJ2VuZFRpbWUnKV0sXG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5ldmVudFRpbWUgPSBkaWZmZXJlbmNlSW5NaW51dGVzKGV2ZW50VGltZXMuZW5kVGltZSwgZXZlbnRUaW1lcy5zdGFydFRpbWUpO1xuICAgIHRoaXMuaGFuZGxlQWxsRGF5RXZlbnRzKHRoaXMuZXZlbnQuYWxsRGF5KTtcbiAgICB0aGlzLndhdGNoRm9ybUZpZWxkcygpO1xuICAgIHRoaXMuaW5pdGlhbEZvcm1WYWx1ZSA9IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXRjaEZvcm1GaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFsbERheS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5oYW5kbGVBbGxEYXlFdmVudHModmFsdWUsIHRydWUpKTtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMuYWRkcmVzcy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlICYmICF0aGlzLmZvcm0udmFsdWUubG9jYXRpb24pIHtcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmFkZHJlc3Muc2V0RXJyb3JzKHsgaW52YWxpZEZpZWxkOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMubG9jYXRpb24uc2V0VmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyAtLS0tLS0tIHdhdGNoIHN0YXJ0IGRhdGUgcmVjdXJyaW5nIC0tLS0tLS0tLS0tLS1cbiAgICB0aGlzLmZvcm0uY29udHJvbHMuc3RhcnREYXRlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgJiYgIXRoaXMuZm9ybS5jb250cm9scy5hbGxEYXkudmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmVuZERhdGUuc2V0VmFsdWUobmV3IERhdGUodmFsdWUpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMuc3RhcnRUaW1lLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmVuZFRpbWUuc2V0VmFsdWUoYWRkTWludXRlcyh2YWx1ZVsnc2xvdFZhbHVlJ10gfHwgbmV3IERhdGUodmFsdWUpLCB0aGlzLmV2ZW50VGltZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBbGxEYXlFdmVudHMoYWxsRGF5OiBib29sZWFuLCBvbkNoYW5nZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBbJ2VuZERhdGUnLCAnZW5kVGltZScsICdzdGFydFRpbWUnXS5mb3JFYWNoKChjb250cm9sTmFtZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2NvbnRyb2xOYW1lXS5zZXRWYWxpZGF0b3JzKGFsbERheSA/IFtdIDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgIHRoaXMuZm9ybS5jb250cm9sc1tjb250cm9sTmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0pO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgaWYgKGFsbERheSkge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmZvcm0uY29udHJvbHMuc3RhcnREYXRlLnZhbHVlO1xuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuZW5kRGF0ZS5zZXRWYWx1ZShzdGFydERhdGUgPyBzdGFydE9mRGF5KG5ldyBEYXRlKHN0YXJ0RGF0ZSkpIDogbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSB0aGlzLmZvcm0uY29udHJvbHMuc3RhcnRUaW1lLnZhbHVlO1xuICAgICAgICBjb25zdCB0aW1lID0gc3RhcnRUaW1lICYmIHN0YXJ0VGltZVsnc2xvdFZhbHVlJ10gPyBzdGFydE9mRGF5KG5ldyBEYXRlKHN0YXJ0VGltZVsnc2xvdFZhbHVlJ10pKSA6IG51bGw7XG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5zdGFydFRpbWUuc2V0VmFsdWUodGltZSk7XG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5lbmRUaW1lLnNldFZhbHVlKHRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRXZlbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdE9wdGlvbnNDdHJsLnZhbHVlIHx8IHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5zYXZlRXZlbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWlsZEZvcm0oKTtcbiAgICAgIHRoaXMubW9kYWxUaXRsZSA9IHRoaXMuZmFsbGJhY2tUcmFuc2xhdGVQaXBlLnRyYW5zZm9ybSgnQ0FMRU5EQVIuVVBEQVRFX0VWRU5UJywgJ1VwZGF0ZSBFdmVudCcpO1xuICAgICAgdGhpcy5zdWJtaXRCdXR0b25UaXRsZSA9IHRoaXMuZmFsbGJhY2tUcmFuc2xhdGVQaXBlLnRyYW5zZm9ybSgnQlVUVE9OUy5TQVZFJywgJ1NhdmUnKTtcbiAgICAgIHRoaXMuY2FuY2VsQnV0dG9uVGl0bGUgPSB0aGlzLmZhbGxiYWNrVHJhbnNsYXRlUGlwZS50cmFuc2Zvcm0oJ0JVVFRPTlMuQ0FOQ0VMJywgJ0NhbmNlbCcpO1xuICAgICAgdGhpcy5zZWNvbmRhcnlCdXR0b25UaXRsZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhbGxvd1N1Ym1pc3Npb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtLnZhbHVlLmFkZHJlc3MgJiYgIXRoaXMuZm9ybS52YWx1ZS5sb2NhdGlvbikge1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydhZGRyZXNzJ10uc2V0RXJyb3JzKHsgaW52YWxpZEZpZWxkOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcGVuUmVjdXJyaW5nT3B0aW9ucykge1xuICAgICAgdGhpcy51cGRhdGVSZWN1cnJpbmdFdmVudC5lbWl0KHtcbiAgICAgICAgZXZlbnQ6IHRoaXMudXBkYXRlZEV2ZW50LFxuICAgICAgICBzZWxlY3RlZFJlY3VycmluZ09wdGlvbjogdGhpcy5lZGl0T3B0aW9uc0N0cmwudmFsdWUsXG4gICAgICAgIHJlY3VycmluZ1R5cGVDaGFuZ2VkOiB0aGlzLnJlY3VycmluZ1R5cGVDaGFuZ2VkLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJtaXRGb3JtRXZlbnQoZXZlbnQ6IElFdmVudCwgZm9ybVZhbHVlOiBJRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnN1Ym1pdEZvcm0uZW1pdCh7XG4gICAgICBldmVudCxcbiAgICAgIGluaXRpYWxGb3JtVmFsdWU6IHRoaXMuaW5pdGlhbEZvcm1WYWx1ZSxcbiAgICAgIGZvcm1WYWx1ZSxcbiAgICAgIHNlbGVjdGVkUmVjdXJyaW5nT3B0aW9uOiB0aGlzLmVkaXRPcHRpb25zQ3RybC52YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25FdmVudENoYW5nZShldmVudDogSUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lZGl0TW9kZSA9ICEhZXZlbnQ/Ll9pZDtcbiAgICB0aGlzLl9ldmVudCA9IGV2ZW50O1xuICAgIHRoaXMuZWRpdE9wdGlvbnNDdHJsLnNldFZhbHVlKG51bGwpO1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMub3Blbk1vZGFsID0gZmFsc2U7XG4gICAgICB0aGlzLmZvcm0gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVFdmVudEZvcm0oKTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcztcbiAgfVxuXG4gIHByaXZhdGUgb25EcmFnRXZlbnQoZXZlbnQ6IElFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdE1vZGUgPSAhIWV2ZW50Py5faWQ7XG4gICAgdGhpcy5vcGVuTW9kYWwgPSAhdGhpcy5fZHJhZ2dlZEV2ZW50ICYmIGV2ZW50Py5yZWN1cnJpbmc7XG4gICAgdGhpcy5vcGVuUmVjdXJyaW5nT3B0aW9ucyA9IHRoaXMub3Blbk1vZGFsO1xuICAgIHRoaXMubW9kYWxUaXRsZSA9IHRoaXMub3Blbk1vZGFsID8gdGhpcy5mYWxsYmFja1RyYW5zbGF0ZVBpcGUudHJhbnNmb3JtKCdDQUxFTkRBUi5FRElUX1JFQ1VSUklOR19FVkVOVCcsICdFZGl0IHJlY3VycmluZyBldmVudCcpIDogbnVsbDtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvblRpdGxlID0gdGhpcy5vcGVuTW9kYWwgPyB0aGlzLmZhbGxiYWNrVHJhbnNsYXRlUGlwZS50cmFuc2Zvcm0oJ0JVVFRPTlMuQ0FOQ0VMJywgJ0NhbmNlbCcpIDogbnVsbDtcbiAgICB0aGlzLnN1Ym1pdEJ1dHRvblRpdGxlID0gdGhpcy5vcGVuTW9kYWwgPyB0aGlzLmZhbGxiYWNrVHJhbnNsYXRlUGlwZS50cmFuc2Zvcm0oJ0JVVFRPTlMuRURJVCcsICdFZGl0JykgOiBudWxsO1xuICAgIHRoaXMuc2Vjb25kYXJ5QnV0dG9uVGl0bGUgPSBudWxsO1xuICAgIHRoaXMuX2RyYWdnZWRFdmVudCA9IGV2ZW50O1xuICAgIGlmICh0aGlzLl9kcmFnZ2VkRXZlbnQgJiYgIXRoaXMub3Blbk1vZGFsKSB7XG4gICAgICB0aGlzLnN1Ym1pdEZvcm1FdmVudCh0aGlzLl9kcmFnZ2VkRXZlbnQsIHRoaXMuZHJhZ2dlZEV2ZW50KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxsaWItYm90dG9tLW1vZGFsXG4gIFt0aXRsZV09XCJtb2RhbFRpdGxlXCJcbiAgWyhpc09wZW4pXT1cIm9wZW5Nb2RhbFwiXG4gIFsoc2hvd0NvbmZpcm0pXT1cInNob3dDb25maXJtXCJcbiAgW2NvbmZpcm1CdXR0b25dPVwiJ0NPTkZJUk0uWUVTJyB8IGZhbGxiYWNrVHJhbnNsYXRlOiAnWWVzJ1wiXG4gIFtjb25maXJtQ2FuY2VsQnV0dG9uXT1cIidDT05GSVJNLk5vJyB8IGZhbGxiYWNrVHJhbnNsYXRlOiAnTm8nXCJcbiAgW2NvbmZpcm1hdGlvblRpdGxlXT1cIidDT05GSVJNLkFSRV9ZT1VfU1VSRScgfCBmYWxsYmFja1RyYW5zbGF0ZTogJ0NvbmZpcm0gRGVsZXRpb24nXCJcbiAgW2NvbmZpcm1hdGlvbk1zZ109XCInQ09ORklSTS5BUkVfWU9VX1NVUkVfTUVTU0FHRScgfCBmYWxsYmFja1RyYW5zbGF0ZTogJ1N1cmUgeW91IHdhbnQgdG8gZGVsZXRlPydcIlxuICBbc2hvd0Nsb3NlQnRuXT1cIiFjYW5jZWxCdXR0b25UaXRsZSAmJiBlZGl0TW9kZVwiXG4gIFtjdXN0b21DbGFzc109XCInY2FsZW5kYXItZXZlbnQtbW9kYWwnXCJcbiAgW2xvYWRpbmddPVwibG9hZGluZyQgfCBhc3luY1wiXG4gIFt2YWxpZE1vZGFsXT1cIighZm9ybSB8fCBmb3JtLnZhbGlkKSAmJiAobG9hZGluZyQgfCBhc3luYykgIT09IHRydWVcIlxuICBbc3VibWl0QnV0dG9uVGl0bGVdPVwic3VibWl0QnV0dG9uVGl0bGVcIlxuICBbc2Vjb25kYXJ5QnV0dG9uVGl0bGVdPVwic2Vjb25kYXJ5QnV0dG9uVGl0bGVcIlxuICBbY2FuY2VsQnV0dG9uVGl0bGVdPVwiY2FuY2VsQnV0dG9uVGl0bGVcIlxuICAoc2Vjb25kYXJ5QnV0dG9uQ2xpY2spPVwib25Nb2RhbFNlY29uZGFyeUJ1dHRvbkNsaWNrKClcIlxuICAoY2xvc2VNb2RhbCk9XCJyZXNldE1vZGFsKClcIlxuICAoc3VibWl0TW9kYWwpPVwib25TdWJtaXRNb2RhbCgpXCJcbiAgKGNvbmZpcm1FdmVudCk9XCJvbkRlbGV0ZUNvbmZpcm0oKVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJldmVudC1tb2RhbFwiPlxuICAgIDxsaWItZXZlbnQtaW5mbyBbZXZlbnRdPVwiZXZlbnRcIiBbY2FsZW5kYXJzXT1cImNhbGVuZGFyc1wiICpuZ0lmPVwiIWZvcm0gJiYgZWRpdE1vZGUgJiYgIW9wZW5SZWN1cnJpbmdPcHRpb25zXCI+PC9saWItZXZlbnQtaW5mbz5cbiAgICA8bGliLWVkaXQtcmVjdXJyaW5nLWV2ZW50IFtlZGl0T3B0aW9uc0N0cmxdPVwiZWRpdE9wdGlvbnNDdHJsXCIgW2V4Y2x1ZGVDdXJyZW50SW5zdGFuY2VdPVwicmVjdXJyaW5nVHlwZUNoYW5nZWRcIiAqbmdJZj1cIm9wZW5SZWN1cnJpbmdPcHRpb25zXCI+PC9saWItZWRpdC1yZWN1cnJpbmctZXZlbnQ+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiICpuZ0lmPVwiZm9ybSAmJiAhb3BlblJlY3VycmluZ09wdGlvbnNcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhcHBGb2N1c0ludmFsaWRJbnB1dCAobmdTdWJtaXQpPVwic2F2ZUV2ZW50KClcIiAoa2V5dXAuZW50ZXIpPVwic2F2ZUV2ZW50KClcIiBpZD1cImV2ZW50LWZvcm1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93IGNlbnRlci1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXRpdGxlLWZpZWxkXCI+XG4gICAgICAgICAgICA8bGliLWlucHV0LWZpZWxkXG4gICAgICAgICAgICAgIG1heExlbmd0aD1cIjIwMDBcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImxvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NBTEVOREFSLlRJVExFX0ZJRUxEJyB8IGZhbGxiYWNrVHJhbnNsYXRlOiAnVGl0bGUnXCJcbiAgICAgICAgICAgICAgW3RyaW1XaGl0ZVNwYWNlXT1cImZhbHNlXCJcbiAgICAgICAgICAgID48L2xpYi1pbnB1dC1maWVsZD5cbiAgICAgICAgICAgIDxsaWItZXJyb3ItbWVzc2FnZSBjbGFzcz1cImlucHV0LWVycm9yIGV2ZW50LWlucHV0LWZpZWxkLWVycm9yXCIgW2NvbmZpZ109XCJ7IGNvbnRyb2w6IGZvcm0uY29udHJvbHNbJ3RpdGxlJ10gfVwiPjwvbGliLWVycm9yLW1lc3NhZ2U+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3cgZXZlbnQtZGF0ZXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZmllbGQtY29udGFpbmVyIGlucHV0LWZpZWxkLWNvbnRhaW5lci1ncm91cFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LWRhdGUtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieyAnaW5wdXQtZmllbGQtY29udGFpbmVyLWZ1bGwtcm93JzogIWZvcm0uY29udHJvbHNbJ2FsbERheSddLnZhbHVlIH1cIj5cbiAgICAgICAgICAgICAgPGxpYi1pbnB1dC1kYXRlLWZpZWxkXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldmVudC1kYXRlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdGFydERhdGVcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJsb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbaGllQWN0aW9uc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd0ljb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDQUxFTkRBUi5TVEFSVF9EQVRFJyB8IGZhbGxiYWNrVHJhbnNsYXRlOiAnU3RhcnQgRGF0ZSdcIlxuICAgICAgICAgICAgICA+PC9saWItaW5wdXQtZGF0ZS1maWVsZD5cbiAgICAgICAgICAgICAgPGxpYi1lcnJvci1tZXNzYWdlIGNsYXNzPVwiaW5wdXQtZXJyb3IgZXZlbnQtaW5wdXQtZmllbGQtZXJyb3JcIiBbY29uZmlnXT1cInsgY29udHJvbDogZm9ybS5jb250cm9sc1snc3RhcnREYXRlJ10gfVwiPjwvbGliLWVycm9yLW1lc3NhZ2U+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZm9ybS5jb250cm9sc1snYWxsRGF5J10udmFsdWUpIHtcbiAgICAgICAgICAgICAgPGxpYi1pbnB1dC1kYXRlLWZpZWxkXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldmVudC1kYXRlIGV2ZW50LWVuZC1kYXRlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmREYXRlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgW2hpZUFjdGlvbnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dJY29uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQ0FMRU5EQVIuRU5EX0RBVEUnIHwgZmFsbGJhY2tUcmFuc2xhdGU6ICdFbmQgRGF0ZSdcIlxuICAgICAgICAgICAgICA+PC9saWItaW5wdXQtZGF0ZS1maWVsZD5cbiAgICAgICAgICAgICAgPGxpYi1lcnJvci1tZXNzYWdlIGNsYXNzPVwiaW5wdXQtZXJyb3IgZXZlbnQtaW5wdXQtZmllbGQtZXJyb3JcIiBbY29uZmlnXT1cInsgY29udHJvbDogZm9ybS5jb250cm9sc1snZW5kRGF0ZSddIH1cIj48L2xpYi1lcnJvci1tZXNzYWdlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKCFmb3JtLmNvbnRyb2xzWydhbGxEYXknXS52YWx1ZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWZpZWxkLWNvbnRhaW5lciBpbnB1dC1maWVsZC1jb250YWluZXItZ3JvdXAgdGltZS1maWVsZHMtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGliLWlucHV0LXRpbWUtZmllbGRcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0VGltZVwiXG4gICAgICAgICAgICAgICAgICBbc2hvd0ljb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbc3RhcnREYXRlXT1cImV2ZW50U3RhcnRcIlxuICAgICAgICAgICAgICAgICAgW2ludGVydmFsXT1cIjE1XCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQ0FMRU5EQVIuU1RBUlRTJyB8IGZhbGxiYWNrVHJhbnNsYXRlOiAnU3RhcnRzJ1wiXG4gICAgICAgICAgICAgICAgPjwvbGliLWlucHV0LXRpbWUtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGxpYi1lcnJvci1tZXNzYWdlIGNsYXNzPVwiaW5wdXQtZXJyb3IgZXZlbnQtaW5wdXQtZmllbGQtZXJyb3JcIiBbY29uZmlnXT1cInsgY29udHJvbDogZm9ybS5jb250cm9sc1snc3RhcnRUaW1lJ10gfVwiPjwvbGliLWVycm9yLW1lc3NhZ2U+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsaWItaW5wdXQtdGltZS1maWVsZFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbmQtdGltZVwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmRUaW1lXCJcbiAgICAgICAgICAgICAgICAgIFtpbnRlcnZhbF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICBbc2hvd0ljb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZGlzcGxheVNsb3RUaW1lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2Zyb21UaW1lXT1cIlxuICAgICAgICAgICAgICAgICAgICBmb3JtLmNvbnRyb2xzLnN0YXJ0VGltZS52YWx1ZSAmJiBmb3JtLmNvbnRyb2xzLnN0YXJ0VGltZS52YWx1ZVsnc2xvdFZhbHVlJ10gPyBmb3JtLmNvbnRyb2xzLnN0YXJ0VGltZS52YWx1ZVsnc2xvdFZhbHVlJ10gOiBmb3JtLmNvbnRyb2xzLnN0YXJ0VGltZS52YWx1ZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtzdGFydERhdGVdPVwiZXZlbnRTdGFydFwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NBTEVOREFSLkVORFMnIHwgZmFsbGJhY2tUcmFuc2xhdGU6ICdFbmRzJ1wiXG4gICAgICAgICAgICAgICAgPjwvbGliLWlucHV0LXRpbWUtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGxpYi1lcnJvci1tZXNzYWdlIGNsYXNzPVwiaW5wdXQtZXJyb3IgZXZlbnQtaW5wdXQtZmllbGQtZXJyb3JcIiBbY29uZmlnXT1cInsgY29udHJvbDogZm9ybS5jb250cm9sc1snZW5kVGltZSddIH1cIj48L2xpYi1lcnJvci1tZXNzYWdlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93IHJlY3VycmluZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWN1cnJpbmctc2VsZWN0XCIgZm9ybUdyb3VwTmFtZT1cInJlY3VycmluZ1BhdHRlcm5cIj5cbiAgICAgICAgICAgIDxsaWItaW5wdXQtZmllbGQtc2VsZWN0XG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIlxuICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiKHJlY3VycmluZ09wdGlvbnNbMF0udGl0bGUgfCBmYWxsYmFja1RyYW5zbGF0ZTogJ25vVHJuc2xhdGlvbnMnKSA9PT0gJ25vVHJuc2xhdGlvbnMnID8gJ25hbWUnIDogJ3RpdGxlJ1wiXG4gICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCIndHlwZSdcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJyZWN1cnJpbmdPcHRpb25zXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saWItaW5wdXQtZmllbGQtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGxEYXktY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8aW9uLWl0ZW0gY2xhc3M9XCJuby1zaGFkb3cgYWxsRGF5XCI+XG4gICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICA8bGliLWRhc2hlZC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJhbGxEYXlcIiBbZGlzYWJsZWRdPVwibG9hZGluZyQgfCBhc3luY1wiPjwvbGliLWRhc2hlZC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyAnQ0FMRU5EQVIuQUxMX0RBWScgfCBmYWxsYmFja1RyYW5zbGF0ZTogJ0FsbCBkYXknIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93IGFkZHJlc3NcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZmllbGQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bGliLWlucHV0LWZpZWxkXG4gICAgICAgICAgICAgIG1heExlbmd0aD1cIjIwMDBcIlxuICAgICAgICAgICAgICBbdHJpbVdoaXRlU3BhY2VdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzXCJcbiAgICAgICAgICAgICAgW2VuYWJsZUdvb2dsZUFkZHJlc3NdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFthZGRyZXNzXT1cImZvcm0uY29udHJvbHNbJ2FkZHJlc3MnXS52YWx1ZVwiXG4gICAgICAgICAgICAgIChsb2NhdGlvbkNoYW5nZSk9XCJvbkxvY2F0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBbcmVhZG9ubHldPVwibG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCInRklFTERTLkFERF9MT0NBVElPTicgfCBmYWxsYmFja1RyYW5zbGF0ZTogJ0xvY2F0aW9uJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2xpYi1pbnB1dC1maWVsZD5cbiAgICAgICAgICAgIDxsaWItZXJyb3ItbWVzc2FnZSBjbGFzcz1cImlucHV0LWVycm9yXCIgW2NvbmZpZ109XCJ7IGNvbnRyb2w6IGZvcm0uY29udHJvbHNbJ2FkZHJlc3MnXSB9XCI+PC9saWItZXJyb3ItbWVzc2FnZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LW5vdGUtZmllbGRcIj5cbiAgICAgICAgICAgIDxsaWItaW5wdXQtZmllbGRcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibm90ZVwiXG4gICAgICAgICAgICAgIFt0ZXh0YXJlYV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidGSUVMRFMuQUREX0RFU0NSSVBUSU9OJyB8IGZhbGxiYWNrVHJhbnNsYXRlOiAnRGVzY3JpcHRpb24nXCJcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoPVwiMjAwMFwiXG4gICAgICAgICAgICAgIFtyZWFkb25seV09XCJsb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgICAgID48L2xpYi1pbnB1dC1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9saWItYm90dG9tLW1vZGFsPlxuIl19
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { IonicModule } from '@ionic/angular';
|
|
4
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
5
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
+
import { BaseComponent, DashedCheckboxModule, DirectiveModule, FormFieldModule, InputDateFieldModule, InputFieldModule, InputFieldSelectModule, InputTimeFieldModule, LibErrorMessageComponent, LibMapModule, LibModalModule, } from '@naniteninja/ionic-lib';
|
|
7
|
+
import { FallbackTranslatePipe } from '../../../../pipes/fallback-translate/fallback-translate.pipe';
|
|
8
|
+
import { CalendarUtilsService } from '../../services/calendar-utils.service';
|
|
9
|
+
import { LibEditRecurringEventComponent } from '../edit-recurring-event/edit-recurring-event.component';
|
|
10
|
+
import { LibEventInfoComponent } from '../event-info/event-info.component';
|
|
11
|
+
import { LibEventFormComponent } from './event-form.component';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
export class LibEventFormModule {
|
|
14
|
+
static forRoot(config) {
|
|
15
|
+
const libMapModule = LibMapModule.forRoot({
|
|
16
|
+
googleMapsKey: config.googleMapsKey,
|
|
17
|
+
googleMapsURL: config.googleMapsURL,
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
ngModule: LibEventFormModule,
|
|
21
|
+
providers: [...(libMapModule.providers || [])],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibEventFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: LibEventFormModule, declarations: [LibEventFormComponent], imports: [CommonModule,
|
|
26
|
+
IonicModule,
|
|
27
|
+
TranslateModule,
|
|
28
|
+
FormsModule,
|
|
29
|
+
ReactiveFormsModule,
|
|
30
|
+
DashedCheckboxModule,
|
|
31
|
+
DirectiveModule,
|
|
32
|
+
FormFieldModule,
|
|
33
|
+
InputDateFieldModule,
|
|
34
|
+
InputFieldModule,
|
|
35
|
+
InputFieldSelectModule,
|
|
36
|
+
InputTimeFieldModule,
|
|
37
|
+
LibModalModule,
|
|
38
|
+
LibErrorMessageComponent,
|
|
39
|
+
FallbackTranslatePipe,
|
|
40
|
+
LibEventInfoComponent,
|
|
41
|
+
LibEditRecurringEventComponent,
|
|
42
|
+
BaseComponent], exports: [LibEventFormComponent] }); }
|
|
43
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibEventFormModule, providers: [CalendarUtilsService], imports: [CommonModule,
|
|
44
|
+
IonicModule,
|
|
45
|
+
TranslateModule,
|
|
46
|
+
FormsModule,
|
|
47
|
+
ReactiveFormsModule,
|
|
48
|
+
DashedCheckboxModule,
|
|
49
|
+
DirectiveModule,
|
|
50
|
+
FormFieldModule,
|
|
51
|
+
InputDateFieldModule,
|
|
52
|
+
InputFieldModule,
|
|
53
|
+
InputFieldSelectModule,
|
|
54
|
+
InputTimeFieldModule,
|
|
55
|
+
LibModalModule,
|
|
56
|
+
LibErrorMessageComponent,
|
|
57
|
+
LibEventInfoComponent,
|
|
58
|
+
LibEditRecurringEventComponent,
|
|
59
|
+
BaseComponent] }); }
|
|
60
|
+
}
|
|
61
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibEventFormModule, decorators: [{
|
|
62
|
+
type: NgModule,
|
|
63
|
+
args: [{
|
|
64
|
+
declarations: [LibEventFormComponent],
|
|
65
|
+
exports: [LibEventFormComponent],
|
|
66
|
+
imports: [
|
|
67
|
+
CommonModule,
|
|
68
|
+
IonicModule,
|
|
69
|
+
TranslateModule,
|
|
70
|
+
FormsModule,
|
|
71
|
+
ReactiveFormsModule,
|
|
72
|
+
DashedCheckboxModule,
|
|
73
|
+
DirectiveModule,
|
|
74
|
+
FormFieldModule,
|
|
75
|
+
InputDateFieldModule,
|
|
76
|
+
InputFieldModule,
|
|
77
|
+
InputFieldSelectModule,
|
|
78
|
+
InputTimeFieldModule,
|
|
79
|
+
LibModalModule,
|
|
80
|
+
LibErrorMessageComponent,
|
|
81
|
+
FallbackTranslatePipe,
|
|
82
|
+
LibEventInfoComponent,
|
|
83
|
+
LibEditRecurringEventComponent,
|
|
84
|
+
BaseComponent,
|
|
85
|
+
],
|
|
86
|
+
providers: [CalendarUtilsService],
|
|
87
|
+
}]
|
|
88
|
+
}] });
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZm9ybS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoYm9hcmQtY29tcG9uZW50cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUNMLGFBQWEsRUFDYixvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLFlBQVksRUFDWixjQUFjLEdBQ2YsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUN4RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUEyQi9ELE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUF3RDtRQUNyRSxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQ3hDLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtZQUNuQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7U0FDcEMsQ0FBQyxDQUFDO1FBQ0gsT0FBTztZQUNMLFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7U0FDL0MsQ0FBQztJQUNKLENBQUM7K0dBVlUsa0JBQWtCO2dIQUFsQixrQkFBa0IsaUJBeEJkLHFCQUFxQixhQUdsQyxZQUFZO1lBQ1osV0FBVztZQUNYLGVBQWU7WUFDZixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQixlQUFlO1lBQ2YsZUFBZTtZQUNmLG9CQUFvQjtZQUNwQixnQkFBZ0I7WUFDaEIsc0JBQXNCO1lBQ3RCLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2Qsd0JBQXdCO1lBQ3hCLHFCQUFxQjtZQUNyQixxQkFBcUI7WUFDckIsOEJBQThCO1lBQzlCLGFBQWEsYUFuQkwscUJBQXFCO2dIQXVCcEIsa0JBQWtCLGFBRmxCLENBQUMsb0JBQW9CLENBQUMsWUFuQi9CLFlBQVk7WUFDWixXQUFXO1lBQ1gsZUFBZTtZQUNmLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsb0JBQW9CO1lBQ3BCLGVBQWU7WUFDZixlQUFlO1lBQ2Ysb0JBQW9CO1lBQ3BCLGdCQUFnQjtZQUNoQixzQkFBc0I7WUFDdEIsb0JBQW9CO1lBQ3BCLGNBQWM7WUFDZCx3QkFBd0I7WUFFeEIscUJBQXFCO1lBQ3JCLDhCQUE4QjtZQUM5QixhQUFhOzs0RkFJSixrQkFBa0I7a0JBekI5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDaEMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3dCQUN0QixvQkFBb0I7d0JBQ3BCLGNBQWM7d0JBQ2Qsd0JBQXdCO3dCQUN4QixxQkFBcUI7d0JBQ3JCLHFCQUFxQjt3QkFDckIsOEJBQThCO3dCQUM5QixhQUFhO3FCQUNkO29CQUNELFNBQVMsRUFBRSxDQUFDLG9CQUFvQixDQUFDO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEJhc2VDb21wb25lbnQsXG4gIERhc2hlZENoZWNrYm94TW9kdWxlLFxuICBEaXJlY3RpdmVNb2R1bGUsXG4gIEZvcm1GaWVsZE1vZHVsZSxcbiAgSW5wdXREYXRlRmllbGRNb2R1bGUsXG4gIElucHV0RmllbGRNb2R1bGUsXG4gIElucHV0RmllbGRTZWxlY3RNb2R1bGUsXG4gIElucHV0VGltZUZpZWxkTW9kdWxlLFxuICBMaWJFcnJvck1lc3NhZ2VDb21wb25lbnQsXG4gIExpYk1hcE1vZHVsZSxcbiAgTGliTW9kYWxNb2R1bGUsXG59IGZyb20gJ0BuYW5pdGVuaW5qYS9pb25pYy1saWInO1xuaW1wb3J0IHsgRmFsbGJhY2tUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcGlwZXMvZmFsbGJhY2stdHJhbnNsYXRlL2ZhbGxiYWNrLXRyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IENhbGVuZGFyVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FsZW5kYXItdXRpbHMuc2VydmljZSc7XG5pbXBvcnQgeyBMaWJFZGl0UmVjdXJyaW5nRXZlbnRDb21wb25lbnQgfSBmcm9tICcuLi9lZGl0LXJlY3VycmluZy1ldmVudC9lZGl0LXJlY3VycmluZy1ldmVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGliRXZlbnRJbmZvQ29tcG9uZW50IH0gZnJvbSAnLi4vZXZlbnQtaW5mby9ldmVudC1pbmZvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaWJFdmVudEZvcm1Db21wb25lbnQgfSBmcm9tICcuL2V2ZW50LWZvcm0uY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbTGliRXZlbnRGb3JtQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW0xpYkV2ZW50Rm9ybUNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uaWNNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRGFzaGVkQ2hlY2tib3hNb2R1bGUsXG4gICAgRGlyZWN0aXZlTW9kdWxlLFxuICAgIEZvcm1GaWVsZE1vZHVsZSxcbiAgICBJbnB1dERhdGVGaWVsZE1vZHVsZSxcbiAgICBJbnB1dEZpZWxkTW9kdWxlLFxuICAgIElucHV0RmllbGRTZWxlY3RNb2R1bGUsXG4gICAgSW5wdXRUaW1lRmllbGRNb2R1bGUsXG4gICAgTGliTW9kYWxNb2R1bGUsXG4gICAgTGliRXJyb3JNZXNzYWdlQ29tcG9uZW50LFxuICAgIEZhbGxiYWNrVHJhbnNsYXRlUGlwZSxcbiAgICBMaWJFdmVudEluZm9Db21wb25lbnQsXG4gICAgTGliRWRpdFJlY3VycmluZ0V2ZW50Q29tcG9uZW50LFxuICAgIEJhc2VDb21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW0NhbGVuZGFyVXRpbHNTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTGliRXZlbnRGb3JtTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiB7IGdvb2dsZU1hcHNLZXk6IHN0cmluZzsgZ29vZ2xlTWFwc1VSTDogc3RyaW5nIH0pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPExpYkV2ZW50Rm9ybU1vZHVsZT4ge1xuICAgIGNvbnN0IGxpYk1hcE1vZHVsZSA9IExpYk1hcE1vZHVsZS5mb3JSb290KHtcbiAgICAgIGdvb2dsZU1hcHNLZXk6IGNvbmZpZy5nb29nbGVNYXBzS2V5LFxuICAgICAgZ29vZ2xlTWFwc1VSTDogY29uZmlnLmdvb2dsZU1hcHNVUkwsXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBMaWJFdmVudEZvcm1Nb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFsuLi4obGliTWFwTW9kdWxlLnByb3ZpZGVycyB8fCBbXSldLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|